Gyepi Sam
2013-06-19
(some) of my favorite UNIX Tools

This is a short listing of programs I use frequently and like a lot. In some cases, I have used them long enough that were they physical tools, they should show signs of hard use and wear. In most cases, I selected these tools after evaluating or using many alternatives. However, some are quite new and have already proved their worth and displaced their predecessors from my toolbox. By necessity, this list must remain short. The absence of a tool does not indicate its lack of value.

xmlstarlet

In most of my work with XML, it is used as a data format as input to a program. As such, I need to visually review the XML and ensure that it is, at least, well formed. I prefer to look at well formatted XML, which xmlstarlet does, using the ‘fo’ command. For years, I used xmllint for this purpose and it works well. However, it uses oddly named options (single dash followed by a long word, no single character alternatives), requires the input file to be named, does not default to reading stdin, and does not always work when input is provided through ‘/dev/stdin’. None of these faults are deal breakers, per se, but it is annoying to pause during the flow to remember how xmllint wants things to be set up. Needless to say, it was not a well loved tool, merely a necessary and usable one.

xmlstarlet, on the other hand, is a perfectly well behaved tool with the only known quirk of using command names instead of options. Once I started using it, I wondered why I hadn’t found it sooner. In addition, xmlstarlet also has commands to edit xml. I normally use various combinations of xml2, sed, awk, perl, to edit XML on the fly, which works fine even if it leads to rather longish command lines. However, xmlstarlet uses XPath notation for editing, so switching to it gives me an incentive to practice my XPath chops. The tool actually supports many more types of operations that I don’t normally need but would certainly be handy if needed.

mutt

I started using mutt around 1998 or so and have never looked back. As a text based client in the age of the GUI, mutt looked decidedly retro. But I use it for email not for its looks and it is really great at that. After over a decade of use, there are still parts of I am not familiar with. However, every time my needs change or new needs arise, I am always happy to discover that mutt rises to the occasion. Some of the features I depend on include:

Obviously, none of these features are unique to mutt, but they are indispensable to me.

gsl

GSL is a code generation tool. It is not a popular tool, as evidenced by a google search. Fortunately, popularity is not indication of merit. I have used this tool on numerous projects. In software, a problem can be frequently be abstracted enough to solve it not by writing more code but by writing less code, which in turn, writes more code. This tools allows me to turn problems inside out and solve them quickly, easily and robustly.

perl

Some years back I had this to say about perl

I have several years of experience programming Perl and am intimately familiar with the language’s idiom’s and nuances. In times past, I would have claimed to eat and breath Perl. Now it is so much a part of my programming toolbox that I reach for it with without a moment’s thought.

Though I don’t use perl as much as I used to, all if this is still true.

ruby

I have used ruby a fair amount and like it quite a bit. The syntax is unobtrusive and has some useful extensions. I highly recommend the Thomas and Hunt book.

awk and sed

Yes. Both are alive and well and make frequent appearances on the command line.

nullmailer

A very useful program for shipping emails from machines on which you don’t want to a full featured MTA. I use this on various machines and also on my laptop as part of my dynamic mail transport (Worth a blog post that).

haproxy

Over the years, I have setup and used all sorts of software load balancers and this is the best one out there. The next step up is a hardware load balancer and even then haproxy still competes favorably. It is also quite flexible, has an excellent programmatic interface and produces good logs.

runit package

This is the successor to daemontools. It has the same interface and works just as well. Process supervision programs seem easy to write and as a result, there are many choices. However, few are as simple and flexible as this one. This piece of software focuses only on process supervision and leaves everything else to other programs. Its ultimate flexibility comes from requiring the user to write a (very small) shell script to control the final program.

kedpm

A password management program. It has both a GUI and command line version. I use the latter.