I’ve been a regular Linux user for something like 15 years now, from when I first started messing around with Red Hat in college (we’ll save the distro discussion for another time). In all of those years of Linux use, I’ve frequently tried to proselytize, to encourage other people to experiment with Linux, to appreciate its strengths and joys. (I even switched my wife’s computer over to Ubuntu for a time. Don’t ask.)
When I was starting out with Linux myself and in my early efforts at conversion, there was a great book I could turn to: Dalheimer and Welsh’s Running Linux in its various editions, which was great for its coverage of a large number of things you might want to do in Linux as well as some discussion of the Linux/Unix/POSIX way of doing things. But Running Linux hasn’t been updated in almost a decade, and I’ve been looking for a replacement for the past couple of years.
More than this, I’ve had less success than I’d like to admit in encouraging people to use Linux, few real “road to Damascus” moments. More recently, I have been coming to think that part of the difficulty in bringing people around to the Linux way of doing things is the command line. In important ways, Linux really is the command line. If you install a lot of programs– even under Ubuntu– chances are that the way that you’re going to get it to do what you want through the command line. It’s one of the hardest things for people coming from other OSes to get acclimated to, I think, and also a challenging thing to pick up by experimentation.
William E. Shotts, Jr.’s The Linux Command Line is a book that attempts to give new users a thorough grounding in the peculiar bestiary of the Linux command line itself. Other books I’ve looked at attempt to speak to two audiences, novices looking for an introduction as well as the power user looking to pick up a few new tricks. Shotts’ book is focused squarely on beginners, and attempts to give them a solid overview of the way to do things on the command line, as well as how to learn more. More than this, Shotts’ book attests, I think, to a kind of conviction that the command line is in many ways the right way to do things. As he says, “a good command line interface is a marvelously expressive way of communicating with a computer in much the same way the written word is for human beings.” (xxvi)
Shotts’ book is a kind of instruction manual for the command line, meant to be worked through sequentially. That is to say, the book is written for people, perhaps, who actually do sit down and read the instruction manual before trying to make use of a piece of technology. There’s something peculiar about a book that sincerely believes the user will read through 432 pages of information before jumping in, but there’s something endearing about its earnestness as well.
The chapters are short, most confined to the discussion of a few commands. The chapters are a bit brief, frankly, and only give the reader a taste of Linux command line wizardry to be found in other books. On the one hand, what’s there is good. I liked his discussion of locate and find, for example, and he’s good at giving the reader enough depth to understand what’s going on under the hood without oversimplification. (It’s nice, for example, that he gives an early discussion of quoting, expansion, and keyboard shortcuts in chapter 7 and 8.) I can also imagine that the brevity of the chapters might provide a gentle introduction for someone who’s just getting acclimated to the world of Linux. That said, I think that the greatest flaw of the book is that its organization is not, in fact, ideal for users fresh from a different OS: Shotts saves too many the great Linux commands until late in the book– grep is essentially buried back in Chapter 19– while also delaying the discussion of features new users are going to expect from their OS. The discussion of locate and find doesn’t come until Chapter 17, for example.
Finally, and though this is a nit, I think the book could have used a bit more reference to Perl. This is especially true because the book’s stated purpose is to give “a broad overview of ‘living’ on the Linux command line,” and not merely an introduction to a particular shell. Perl is one of the most powerful ways to extend Linux beyond what you can do with existing command line programs, and it would have been nice for the book to give a sense of that– even if all it did were to direct readers to the llama.
In sum, then, this book may not be the Linux gospel to press upon novices, but it is still a very solid and useful book for someone starting out. This may be perfect, however, for those who scrupulously read instruction manuals and are interested in learning Linux.