essential *nix computer skills
When I first started using Linux it was out of curiosity more so than
necessity. Windows 2000 worked well enough for me but didn't really expose me
to much of its under structure. My younger brother was into Linux at the time
and when my Windows installation inevitably did get hosed, he offered to fix
it, that is to say, he formatted the hard drive and installed SuSE 7.3.
I was quite impressed and proceeded like most newbies to investigate all these
programs I found in my menus. This is how I
discovered
BZflag for example.
It didn't take long to realize that there was some pretty serious stuff going
on too. I remember seeing `ping' in action for the first time and marveling
that one could send `packets' all over the globe. Of course that is just the
tip of the iceberg as far as *nix diagnostic tools go.
Much of the following year or so was spent re learning the things I was able to
do in Windows on Linux and eventually being able to what I term bootstrap
myself, by that I mean install and configure a distribution from scratch, and
have it actually function. As I look back this time could have been spent a
little better or at least could have benefited from some structure. I think
choosing a tutorial or book and sticking to it would have greatly reduced the
number of months I could be labelled as a n00b.
In light of that, for the next few years I have some goals that I feel are not
too grandiose but will help me greatly down the road as the problems Linux
present to me become more and more complex and challenging. (IE: getting X to work
used to be one of those problems.)
Here are what I consider (rightly or wrongly) essential *nix computer skills:
Shell Scripting
This is an area in which I am pathetically weak. Several weeks ago I had a an
rsync job that kept dying because of
some
obscure
Realtek/rsync bug. I wanted to run a script that checked for rsync's exit
status and retry if it was non zero. Simple enough no? Well not if I didn't
realize my script spawned a subshell that didn't know about the return status
of my rsync command. Finally after some prodding from irc gremlins I came up
with `keeptrying.sh'
#!/bin/sh
STATUS=1
while [ $STATUS -gt 0 ]; do
sleep 3;
echo "rsync failed!!" ;
echo "retrying........";
/home/aec/bin/videosync
STATUS=$?
done
The whole exercise took far longer than it should really and at this point in
the game I should darn well know this stuff.
C Programming
This is one area that I am actually not so hard on my self. Given that I have
no formal education in computers and learn from the internet and irc only and
yada yada yada..., I think so far I have done pretty good. Lots more to learn
of course but I find solving problems with C less daunting than this time last
year and hope that trend continues.
Scripting Language
You could I suppose make an argument that
sh, bash or zsh are scripting languages, in their own right. After all they
use an interpreter and are fully programmable but the major difference (as I see
it) seems to be the inclusion of libraries. Languages like Perl, Ruby and
Python have huge and very interesting libraries that fledglings like myself
can use to cobble up a little app to scratch a very specific itch. I have been
told that I should have tackled Python before C even, but its too late for that
now. Perl, from what I have seen still remains rather complex at first glance
but then I haven't really given it a fair shake yet and I am not sure what to
make of Ruby. And where does Lisp fit into all of this, is it essential even?
So these are some thoughts on my learning as it stands today. The best boost I
could get right now more than anything would be the time to sit down and do all
of this. Even though my life this year has suddenly become more hectic and
chaotic than I have ever experienced, I still feel a need to learn, if only to
serve myself, but being able to competently contribute to Debian or BZflag
would certainly put the icing on the proverbial cake.
You can still pick up SuSE 7.3 for
$18.39...