March 13

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...

Posted by æc♥ | Permanent Link