Unix and Linux Systems

2008/03/24



Ok, you are a switcher. You used to be a Windows user, but you've
seen the light and moved to Linux or Mac OS X or BSD or.. well,
whatever it is, you are in *x land, baby and we're glad you are here.
But just like moving into a new town, you need to learn your way around,
find out where things are and how they work.. you need to get yourself
oriented, right?


OK, first things first. There is a book. As I don't know what
you might have switched to or from, I can't be specific here, but
I guarantee you there is a book. I've reviewed a lot (I mean a LOT)
if *xish books at "/Books" here, so you might
want to poke through some of those, but if you don't find it, that
doesn't mean it doesn't exist - I just haven't read it. It is out there,
and you probably should read it.


But having done that, what next? You are competent now, you know
how the Window system works, you know where to find the admin tools,
but how does this puppy really work? Here are a few things I do:


Hunt for shell scripts


A surprising amount of *xish stuff is written as simple shell
scripts. I found one hundred in /usr/bin on my Mac OS X box, and
more than that in /usr/bin on my Linux server. Here's the thing
about those scripts: they can teach you stuff. Stuff about programming
shell scripts, definitely, but also stuff about how the system works
in general. Here's a little script that will find those scripts for you:



#!/bin/bash
IFS=":";
set $PATH
for i in $*
do
file $i/* | grep "Bourne shell"
done

Note: your "file" may not return "Bourne shell script text executable"
as both my Linux and Mac systems do. That's OK, just figure out how it
does identify scripts and grep for that instead.


I am curiously tabbing


And so should you. If you have bash and are using it as your
default shell, try this: type "t" (or any other letter) and hit TAB
twice. Ooops, what was that? Well, just a look at every command in
your PATH that begins with "t", that's all. Do you know what each of
them does? No? Then let's try to find out - for example, on Linux
or Mac, you'll find "tack". What is it? Well, "man tack" will
tell you that it's a "Terminfo Action Checker" and if at this point you
know nothing about "terminfo", that might prompt you to try
"man terminfo" or "pinfo terminfo" (and you might read Termcap and Terminfo here also). There's
no telling where poking around with TAB might lead you.


Strings and stuff


Sometimes "man" and "pinfo" will let you down. "We regret to inform
you that we have no information available for your inquiry" - well,
no, they aren't quite that polite, but they aren't going to help you.
Maybe oversight, maybe it's just not something you need to know about..
but hey, maybe it's a shell script! Often undocumented little thingamabobbies
are shell scripts, and if so, looking at it in an editor might help
give you a clue. If not, don't panic. Sometimes it's a link to
some other command. Use "ls -li" to find out how many links it has -
if it's more than one, go find its clones with "find". Let's say we find
something with two links and then "ls -li" tells us that its inum is 56789.
If its twin is right here in this directory, you'll find it almost
instantly with "find . -inum 56789". If not, you'll need to
expand farther, searching the current filesystem for that same number.


But maybe it isn't a link and isn't a shell script. Well, sometimes
Google can help figure out what it might be, but so can some tools
right on your machine : doing "strings mysteryfile" can sometimes give
you a clue (hint: "strings `which mysteryfile`" is quick if you aren't
already sitting where this lives). Often just a simple "mysteryfile -?"
will spit out a help or usage message. But maybe it's very stubborn?


Well, if this is a Linux system that uses RPM, there is a secret weapon you can use:



rpm -q --whatprovides `which mysteryfile`"

Note that this little line is also very useful when you know something needs updating - it tells you which RPM you need to go find.


There's something similar for apt based systems:



dpkg -S `which mysteryfile`

Source it


Not always possible, of course, but you MIGHT have the source for
this little bugger. Try a "find / -name mysteryfile.c" if Google
hasn't been helpful. This has lttle to do with learning *x, but
I've gotten lucky with mystery applications more than once - the
long absent original programmer had been kind enough to leave source that
I could find.


Step it


If all else fails, try running it in a debugger. You'll need
to know a bit about system calls and all, and when I earlier suggested
running "mysterfile -?" you surely wouldn't want to do that as root?
Well, you wouldn't want to do this as root either - just in case.


Give up?



No, not quite yet. There's two more possibilities. The first
is trying "ldd" to see if the library dependencies might give us
a hint. If not, my final clutch is to see if this file is referenced
in any other binary or script.. that may involve a bit of work with
"strings" and "grep", but once in a great while I have found
good clues from this.


And finally: break it


If all other wells have turned up dry, I have one more trick up
my sleeve: rename the darn thing and see what breaks. That's pretty
drastic, but if you've been through everything else, it's
unlikely that this is system critical. Renaming it will obviously
break something, somewhere, although it may take you quite a while
to find out what. If it really is important, you'll find out
pretty quickly - maybe from a phone call if other folks
use this system too, maybe from a message in a log file.. but you'll find it.


And then you'll know what it does, right? Isn't learning fun?


























- Coming Soon - Skills Tests - Surveys - Kerio Mail Server - Fortinet Routers - Consulting - Advertise Here