initial commit
This commit is contained in:
commit
ca6a4d45d1
113 changed files with 10501 additions and 0 deletions
78
content/blog/in-praise-of-old-school-unix/index.md
Normal file
78
content/blog/in-praise-of-old-school-unix/index.md
Normal file
|
@ -0,0 +1,78 @@
|
|||
---
|
||||
date: 2013-02-05
|
||||
title: In praise of old school UNIX
|
||||
category: linux
|
||||
---
|
||||
|
||||
What am I doing today? Documentation that is what. I am writing a
|
||||
document on how to do
|
||||
[this](https://www.chriscowley.me.uk/blog/2012/11/19/sftp-chroot-on-centos/).
|
||||
To any Linux user it is a very simple process and I could just give them
|
||||
a link to my own website.
|
||||
|
||||
I am not writing this for a technical audience though. The people who
|
||||
are going to perform this work will be the 'Level 1 operatives'. This
|
||||
translates roughly to "anyone we can find on the street corners of some
|
||||
Far East city". If I tell them to press the red button labelled "press
|
||||
me" and it turns out to be orange, they will stop. I cannot assume the
|
||||
ability to edit a file in Vi. How can you work around this, well you
|
||||
need to make everything a copy and paste operation. This is easily done
|
||||
in Bash thanks to IO redirection and of course Sed.
|
||||
|
||||
Now, a brief recap may be in order, as there are some perfectly
|
||||
knowledgable Linux users who do not know what Sed is. Really, one of
|
||||
them sits behind me. Sed stands for Stream EDitor, and it parses text
|
||||
and applies transformations to it. It was one of the first UNIX
|
||||
utilities. It kind of sits between
|
||||
[Grep](https://en.wikipedia.org/wiki/Grep) and
|
||||
[Awk](https://en.wikipedia.org/wiki/AWK_programming_language) and is
|
||||
[surprisingly powerful](https://uuner.doslash.org/forfun/).
|
||||
|
||||
Anyway, I need to edit a line in a file then add a block of code at the
|
||||
end.
|
||||
|
||||
cp -v /etc/ssh/sshd_config{,.dist}
|
||||
sed -i ''/^Subsystem/s#/usr/libexec/openssh/sftp-server#internal-sftp#g' \
|
||||
/etc/ssh/sshd_config
|
||||
|
||||
First line obviously is a contracted cp line which puts the suffix
|
||||
*.dist* on the copy.
|
||||
|
||||
The basic idea is that it runs through the file (/etc/ssh/sshd\_config)
|
||||
and looks for any line that starts with "Subsystem" (`/^Subsystem/`).
|
||||
If it finds a line that matches it then will perform a "substituion"
|
||||
(`/s#`). The next 2 blocks tell it what the substitution will be in the
|
||||
order "\#From\#To\#". The reason for the change from `/` to `#` is
|
||||
because of the / in the path name (thanks to
|
||||
[Z0nk](https://www.reddit.com/user/z0nk) for reminding me that you can
|
||||
use arbitary seperators). The "\#g" tells Sed to perform the
|
||||
substituion on every instance it finds on the line, rather than just the
|
||||
first one. It is completely superfluous in this example, but I tend to
|
||||
put it in from force of habit. Finally the "-i" tells Sed to perform
|
||||
the edit in place, rather than outputing to Stdout.
|
||||
|
||||
The next bit is a bit cleverer. With a single command I want to add a
|
||||
block of text to the file.
|
||||
|
||||
cat <<EOF | while read inrec; do echo $inrec >> /etc/ssh/sshd_config; done
|
||||
Match Group transfer
|
||||
ChrootDirectory /var/local/
|
||||
ForceCommmand internal-sftp
|
||||
X11Forwarding no
|
||||
AllowTcpForwarding no
|
||||
|
||||
EOF
|
||||
|
||||
Here `cat <<EOF` tells it send everything you type to Stdout until it
|
||||
sees the string EOF. This then gets piped to a `while` loop that appends
|
||||
each line of that Stdout to the file we want to extend
|
||||
(*/etc/ssh/sshd*config\_ in this case).
|
||||
|
||||
Using these old tools and a bit of knowledge of how redirection works
|
||||
has enabled me to make a document that anyone who can copy/paste can
|
||||
follow. It is very easy for technical people to forget that not everyone
|
||||
has the knowledge we have. To us opening Vi is perfectly obvious, but to
|
||||
others maybe it isn't and they are not being paid enough to know. They
|
||||
are just being paid to follow a script. I may not like it, but it is the
|
||||
case - it also helped turn a boring documentation session into something
|
||||
a little more interesting. Which is nice!
|
Loading…
Add table
Add a link
Reference in a new issue