Your Garage Best Books of the Month Amazon Fashion Learn more Discover it PME Fire TV Stick Sun Care Patriotic Picks Shop-by-Room Amazon Cash Back Offer AllOrNothingS1 AllOrNothingS1 AllOrNothingS1  Amazon Echo  Echo Dot  Amazon Tap  Echo Dot  Amazon Tap  Amazon Echo Introducing new colors All-New Kindle Oasis AutoRip in CDs & Vinyl Segway miniPro

Your rating(Clear)Rate this item

There was a problem filtering reviews right now. Please try again later.

on March 29, 2013
DISCLAIMER/DISCLOSURE: The publisher furnished me with a complimentary paperback copy of the third edition, as well as access to ebook versions. I have received no compensation for this review.

My review largely pertains to both the hardcopy/paperback version and the EPUB ebook version. I will point out where the ebook and hardcopy versions differ in this review. I do not own a Kindle or use any other MOBI format ebook reader, so your mileage may vary when reading the Kindle version of this book.


I have now read three editions of this book, and this third edition upholds the standard as the best distribution-agnostic Linux reference I have ever seen, out of dozens of Linux-related books I have read. It is in fact more than a reference, as most chapters serve as in-depth tutorials as well, such that starting at the beginning of a chapter that covers the subject matter you need to learn at the level of understanding you need, and reading to the end of the chapter, provides a solid foundation in that subject.

This is a book about practical skills with practical tools. It largely eschews the approach of many Linux books that describe the most immediate and obvious interfaces to accomplishing trivial tasks in a default install of a specific Linux distribution. Instead, it favors covering the core userland tools that are likely to be present in any Linux install, default or highly customized, addressing things like using shell builtins and pipelines to best advantage, applying the most universal (and sometimes least well-known) command line utilities to the problems for which they were designed, the basics of administration scripting, the most powerful text-processing editors available on Unix-like systems (specifically Vim, Emacs, and sed), and so on. These are not tools that will go away or be wildly modified beyond recognition in a later release. They are stable, highly functional tools, and you can rely on the skills you learn for using them not only across versions of your favorite distribution or multiple Linux distributions; you can also rely on them, generally speaking, when using other Unix-like operating systems such as FreeBSD or Solaris.

While the particular focus on GNU tools is regrettable, it is understandable given the prevalence of the GNU coreutils across Linux distributions, and when running up against minor differences between GNU utilities and alternatives (such as BSD utilities) a quick visit to the relevant manpage should clear up any problems quickly. Where manpages can be cryptic as a source of knowledge for someone newly learning to use a given utility, this book provides a gentler, but faster, introduction to common use cases, so that the user is ready to make use of the reference value of manpages more fully.

I've hinted at the usefulness of the book for more than just Linux here, already, and have made more explicit mention of it in reviews of earlier editions. I am in fact a FreeBSD user more than a Linux user (and favor OpenBSD for router/firewall systems), but I still find A Practical Guide to Linux Commands, Editors, and Shell Programming a valuable reference even when working in a FreeBSD environment. The second and third editions add to this specific coverage of the ways Apple MacOS X differs from popular Linux distributions, enhancing its cross-platform value (though I personally would appreciate coverage of BSD Unix systems more).


Some specific observations deserve attention:

The third edition marks the first time I have tried reading the book straight through from beginning to end, skimming some areas a bit but carefully reading most of it. This reveals the limitations of the book's organization as well as its strengths. It is clearly not meant to be read directly, linearly from cover to cover. There is a lot of repetition in this approach to using the book. That repetition lends to the strength of the book as a series of stand-alone tutorials, however, and helps ensure that use as a reference does not force the reader to flip through pages to different sections of the book to get the full picture when looking up a particular item. Use the book as it is designed to be used, and it will serve you admirably; read it as a linear text with a beginning, middle, and end, and you may find it dry and repetitive.

In areas outside its core competence, the book falls a bit short of ideal. Take care to recognize such topic areas, and take the advice and lessons offered in those areas with a grain of salt. The core competence areas of the book, of course, are those mentioned in the title (commands, editors, and shells) or in chapter and appendix headings (basic Perl, filesystem, and regular expressions). Areas outside of the book's core competency where I have noticed problems include its attempts to describe licensing, explain the history of Linux and other open source software systems, and refer to conventions of less Unix-like systems such as calling a desktop environment "Desktop manager". It also manages to give bad security advice in a password sidebar, explicitly telling users that there are times where it is better to use a single password for a number of different authentication contexts (e.g. multiple websites) as opposed to offering actually good advice like using a password manager.

Some information has been allowed to get out of date in newer editions. One example is that of debuggers, where the book refers to "debuggers, including ups and gdb". The ups debugger saw a beta release in 2003 and seems to have been abandoned since then. The book meanwhile fails to mention LLDB, the debugger built for LLVM/Clang (the major competition for GCC in the open source C and C++ development world, and widely regarded as the superior C compiler). LLDB was announced two years before the third edition's publication date. Of course, in a book with the size and information density of A Practical Guide to Linux Commands, Editors, and Shell Programming, it is not surprising that some details like this might be overlooked, but it is still worth noting that such oversights exist.

Just about every book in the world has grammatical problems -- many of them the kinds of problems that very few people realize are problems at all. This one is no exception, though they rarely descend to the level of confusing the reader. One example that does potentially confuse a reader is the sentence in the explanation of the w command that reads "The third column shows the system that a remote user is logged in from," where the construction of that sentence could lead a reader to think it was saying something equivalent to "The fact that a remote user is logged in is shown to the system by the third column." (The intended meaning was "The third column indicates the system from which a remote user is logged in.") Thankfully, such misconstructions are rare and easily sorted out on a second reading.

Vim is an incredibly powerful text processing tool, and a single effect can often be achieved any number of ways. As such, any attempt to present Vim functionality to new users will almost certainly end up doing some things in ways that can be criticized. This book is no exception to this, despite the fact it does a very good job of helping the user learn how to make use of Vim functionality. One example is the fact it completely overlooks "c" commands in Vim, describing how to achieve the same effects in a less efficient manner, as well as overlooking the use of the "e" movement command with "d" commands for word deletion.

Some minor inaccuracies suggest the author's preferences. For instance: "With emacs, however, you can have many work buffers and switch among them without having to write the buffer out and read it back in." The same applies to Vim, so the use of the word "however" here is misleading.


The book appears to be straying from its singular purpose, which I find disappointing, as particularly demonstrated by the addition of a chapter about MySQL:

There is an entire chapter about MySQL. In a book titled "A Practical Guide to Linux Commands, Editors, and Shell Programming" I have to wonder what this chapter is doing in the book. It is a handy reference, I suppose, but it is in the wrong book. If any databases were to be addressed here, better choices for the subject matter of this book would have been bdb, dbm, and SQLite, as any of the three (least of all SQLite, but that would still be better than MySQL) is much closer to being relevant to the core subject matter of this book. As with the Unix philosophy -- much ignored and violated in the Linux developer community lately, but still important -- the book should have stuck to its pattern in earlier editions of adhering a bit more to the "do one thing well" aesthetic. What this book has always done well is focus on the fundamentals of managing and using a Unix-like system, covering it with a fair level of comprehensiveness and depth but still sticking to the important core value of command line Linux system use and administration. With this expansion into the realm of database administration, it departs from that worthy purpose. Nothing appears to have been cut from the book to make room for the MySQL chapter, and in fact the page count continues to increase from edition to edition (despite the fact that thinner paper results in a thinner book), but diffusing the focus of the book with coverage of topics notably outside its obvious intent and core competency does one of the best books I have encountered for use as a Unix-like operating system user's reference a distinct disservice. The space could have been better spent adding coverage for BSD Unix systems, introducing the reader to console-based alternatives to GUI applications, and incorporating information about newer and better designed alternatives to old tools such as LLVM/Clang (as a GCC alternative) and tmux (as a GNU Screen alternative).

It even gets the description of MySQL, as "the world's most popular open-source relational database management system", wrong. That distinction easily goes to SQLite, which has managed to work its way into so many systems without many people realizing it is there that it beggars the imagination. Even the highly popular Firefox browser makes use of SQLite.


Some EPUB format observations should be noted:

In the font used for sidebars in the EPUB, backticks and single-quotes (i.e. apostrophes) look essentially identical, which can contribute to reader confusion. Knowing this in advance should, I hope, help readers ensure they do not suffer much frustration in making use of the ebook text.

Page number references within the EPUB seem to be entirely inaccurate, at least most of the time. For instance, a reference to "File Locks" on page 171 is a link to a "File Locks" section in the book that appears on page 213 of the EPUB, according to the ebook pagination.

The way tables are rendered in the EPUB, the text is small enough that screen resolution is likely to fail to produce readable text on many ereaders. It certainly did on mine.

The sidebars are so narrow in the EPUB as to appear absurd, a thin column of text between wide swaths of blank space rendering it odd -- and somewhat difficult -- to read at normal speed. Code samples are even worse, not because they are more narrow, but because the haphazard linewrap consequences make it even more exceedingly difficult to read them than it is to read the normal textual sidebars.

In some cases within the EPUB, the caption for a table is on one EPUB page, and the table itself does not start until the following EPUB page.

Thanks to sidebar placement issues in the translation from print layout to EPUB, sometimes the relationships between different pieces of text end up "wrong". For instance, in a discussion of shell PATH variables, a parenthetical remark reads "(but see the preceding security tip)". Unfortunately, the security tip in question is on the following page -- not a preceding page.

The EPUB is missing a lot of information that is available in the hardcopy book. For instance, two references to "nullglob" on page 353 lead to page 392 of the EPUB, which contains the note about the "shopt" option setting builtin from page 351 of the hardcopy book. The "nullglob" entry one is intended to find from those references is missing from the EPUB, along with about three pages of other bash options in a short reference section in the hardcopy book.

The font used for inline code samples in the EPUB is pretty bad. It is not fixed width, and causes problems like two minus tokens in quick succession in a postdecrement operator to appear as one long dash character, like an em dash.


Some advice in the book runs afoul of personal peeves, such as the programming language tip about tcsh:

A tip sidebar in the book says "Tip: Do not use tcsh as a programming language". It goes on to give the advice that tcsh is not as good a "programming language" as bash, and that if you are only going to learn one shell "programming language", you should learn bash. While I agree that one should not use tcsh as a programming language, I also believe one should not use bash as a programming language, and that anyone who is really and truly only going to learn how to use one shell for admin scripting, that person should actually learn sh (POSIX or Bourne shell) instead. Note that this is not because sh is a good shell. For interactive command shell use, it is in fact a fairly miserable excuse for a shell these days, having been superseded by superior interactive command shells such as tcsh and mksh. Some find shells such as zsh even better than those, though zsh is too heavyweight for my taste. As an interactive shell, however, bash gives you all the heavy, ponderous, unwieldy resource-consuming operation of zsh while falling well short of zsh capabilities. The reason sh is the best choice if you are only going to learn one shell, however, is that it should be used for simple shell scripting because of portability concerns (every Unixy system has some kind of sh implementation on it, but many lack csh, tcsh, zsh, bash, or ksh implementations, for instance). Furthermore, no shell should be used for less trivial scripting such as would be suitable to languages like Perl, Python, and Ruby (two of which are covered in their own chapters of the book), due to the fact that stretching the capabilities of even the most sophisticated interactive command shell implementations with the extended feature set of something like zsh will only result in largely unmaintainable disaster areas in the source of your misbegotten "applications". Stick to a programming language actually designed first and foremost for programming when you want to do anything nontrivial (and even a lot of things that are trivial), and stick to sh for glorified batch execution scripts. The rule of thumb should be "If you need something more than sh, you need something more than any command shell syntax." It should absolutely not be "Use bash instead of tcsh because bash has more badly designed features than tcsh."


Final Analysis:

Despite some minor warts, this is still overall one of the best books for users of Unix-like systems in general that I have ever encountered. In fact, in many ways it is consistently getting better. A massive tome at a thousand or so pages in any edition, each edition has actually gotten longer with the addition of yet more information, and even as the page count has increased the paper quality and narrowness of binding have improved as well. I recommend it without hesitation for use as both a reference and a collection of valuable tutorials for fundamental Unix-like system usage skills.

Given the problems I have noted in the EPUB version, I strongly recommend getting the hardcopy version when choosing a version to buy. By the time you read this review, however, some of the ebook issues may have been corrected.
22 comments|30 people found this helpful. Was this review helpful to you?YesNoReport abuse
on November 7, 2012
Despite the fact that I am actually quoted in this book in the "Praise foe other books by Mark G. Sobell" section, it really is a good book! Scratch that, it is a book that I am going to make *sure* makes the rounds through my office.

Here's the trick. There are a million books and websites and such that have some general instruction on generalized shell scripting or particular commands or even topical stuffs. By and large, they are incomplete and usually feature a bunch of theoretical examples like "suppose you want to draw a box with three nested boxes inside..." Those kinds of things really aren't much help to the average guy and that is where this book differs.

This book is chocked full of great command explanations, practical topics and real life examples. Sobell has gone out of his way to present this information not only in an interesting fashion, but a usable one as well, not to mention being very Linux distribution agnostic in the process. For example, he covers both the apt-get and yum utilities. There are even some OS X notes as well.

This is a vast and enormous subject to cover and Sobell does his usual excellent job with it. He starts you out with a little background, moves you into using editors and commands and different shells and even into some interpreted languages, all while guiding you through enough pertinent information to not only perk you interest a little on the subject, but give you a functional, working understanding as well. Great job and this is certainly another book I will be holding on to - at least until the next edition comes out
0Comment|26 people found this helpful. Was this review helpful to you?YesNoReport abuse
on November 4, 2012
With the 3rd edition of this book, "A Practical Guide to Linux Commands, Editors and Shell Programming" only got better.
I say this with a reasonable bias and favoritism towards Linux, its command line interface which I consider some of the most versatile
and best engineering accomplishments and towards this book, which has been my favorite since the first edition.

The first edition of the book, was the manual, reference and tutorial all in one that I have been looking for a long time. I have been looking for a book that takes me into the command line world of Linux but in a methodical way describing all the little options, tips, tricks but also the principles that make Linux shell so powerful.

Book begins with a brief history of Linux and very informative, relevant overview of the system architecture.
It proceeds with the in depth, hands on walkthrogugh the environment, shells, and command line utilities.
There is a very useful and every-day practical exercise at the end of the each chapter.

Book continues with in depth chapters on Linux filesystem, the shell, editors (emacs and vi) and the programming environment including (g)awk and sed. This third version of the book now covers the OSX's command line interface which is very nice.
The best, and for me,the ultimate buy-in factor for the third edition, is the brand new chapter covering to reasonable depth Python.
There is also a full, new chapter on MySQL. (That Sobell added a chapter on Postgres, I would give him six stars :-) )

Book concludes with excellend command reference section (300 pages) and Appendix on regular expressions (superb),
getting help with Linux and keeping the system up to date (using rpm, yum apt-get and bit torrent).

This is one of those rare books that in one domain offers a complete package to those who want to became specialists ( Linux CLI, system administration).
Although Linux is popular, Linux CLI and system administration skills are still relatively rare (and well paid).
I recommend this books to all who want to get not better, but great at this aspect of Linux. If nothing else, it will boost your geek bragging rights.
Five stars!
0Comment|21 people found this helpful. Was this review helpful to you?YesNoReport abuse
on December 10, 2012
This book is like the course you wish you could take at college but they don't offer because they are making you learn theoretical things like what a turing machine is, and other things you will likely never use.

This is a great practicel, no-nonsense introduction to Linux for those who are at the command line and want to know what to do next. How do you navigate the file system? What do those weird files like 'bin' and 'dev' and 'boot' mean? How can you change your command line to look cool? How do you write scripts to carry out commands in the command line? What is a pipeline? How the heck does this vi editor work? What is it to 'grep' a file? And on and on. All with practical examples to help you get started fast.

The only reason I give it four, rather than five, stars is because the coverage is a bit shotgun, rather than systematic. On page 45 he will mention something that you won't learn about until page 223. I would rather have a more linear, methodical introduction. However, I think that might well be impossible in a book of this scope. You have to have some nonlinearities in the structure, I just think this has a few too many.
0Comment|9 people found this helpful. Was this review helpful to you?YesNoReport abuse
on January 23, 2013
I got this as a textbook for an Intro to Unix class. I've found reading straight through (1-2 chapters per week) very informative and somewhat enjoyable. There is lots of information presented in a coherent manner. Things really start to make sense. The examples are simple to follow. I recommend this book for people who want to learn Linux (any distro) or who want to do more with their Mac OS (there are whole sections of the book explaining how it is different and how to do things) as well as for a reference for beginning and intermediate users.
0Comment|3 people found this helpful. Was this review helpful to you?YesNoReport abuse
on March 6, 2013
This new, third edition of Sobell's book brings some enhancements that add to the text's value as both a learning tool and a reference. This has always been a foundation book for those wanting a professional level of familiarity with Linux. The addition of chapters to introduce the Python language and MySQL database serves to offer the reader practical insights into additional Linux-related technologies.

As I implied in my review of the first edition, this is not a volume to be taken lightly. It is a dense read, but is clearly written with concise and direct examples. In other words, it takes some concentration and effort to work through this book, but that effort is rewarded with a clear payoff of knowledge.

Know out front that this is a book about the Linux command line; GUI desktops are barely mentioned. This makes the text's primary audience computer professionals. As *nix professionals know, the command line not only offers quicker, more precise control of the system and its software, but is also far more portable across platforms. This is what allowed Sobell to extend his purview to encompass Mac OS X, in the second edition.

Python is a cross-platform programming language that enjoys growing popularity as a front-end programming language for Linux, leveraging the GUI toolkits, such as Qt or GTK+. The language is also commonly used in web server scripting. The Python coverage adds to Sobell's insightful treatment of the shell, shell scripts and editors already set forth in the volume.

MySQL has long enjoyed popularity as the "go to" database manager on Linux. Perhaps best known for being the "M" in "LAMP" web server setups, it is also commonly used as the back end for GUI programs, such as MythTV.

Of course, 1150 pages, roughly a third of which is reference, doesn't leave time to repeat things or dwell in depth on any one topic. Sobell is often constrained to pages for subjects upon which numerous whole books have been written. With remarkable facility, however, he manages to clearly and directly convey the crux elements of each topic he addresses. This provides the reader with a broad foundation in the basic elements of Linux/OS X system administration.

Finally, while the reference portion of the volume provides much the same information as the venerable on-line manual pages, it does so in a consistent voice with better illustrations and clear examples, something man pages are notoriously spotty on. Indeed, having Sobell's interpretations can help in developing an understanding of the often terse and sometimes arcane documentation the man pages provide.

To sum it up, if you only get one book on the Linux command line and its tools, this should be it.

Disclaimer: Pearson North America provided a copy of the book for this review.
0Comment|4 people found this helpful. Was this review helpful to you?YesNoReport abuse
on December 6, 2012
Upon first getting this book I wasn't sure what to expect. I've read a number of books and online how-to guides dealing with BASH scripting. This book is well organized and presents the material in a way that is easily understood. It was surprising as well to see that it covered OSX which I also use extensively in my day-to-day work. Most scripting guides that I have read just cover a specific Linux distribution.

I think this book would be great for those just beginning to work with Linux as well. I would definitely recommend this book as a supplement to my students as they are learning how to tackle the sometimes daunting task of learning how to write effective scripts for the Linux classes that I teach. The fact that a number of languages were briefly covered makes this book an excellent tool. BASH and python are the most common languages that I see used and that are taught in my class. It's an added bonus to have a section covering perl scripts as well.

The portion of the book I found especially helpful is the command reference section and the appendix on regular expressions. Not being particularly strong in regexes myself this has become a very valuable quick reference guide when i need to brush up on my syntax.

The only criticism that I would have for the book is the section on MySQL. It just seems out of place to me in a system scripting/programming book to me and should rather be included in a book geared more specifically towards systems administration.

Overall, I give this book 4/5 stars.

Adam Yates
11 comment|7 people found this helpful. Was this review helpful to you?YesNoReport abuse
on February 28, 2015
Great info. Very high re-read ability. Lessons are in a good format. May I suggest the print verse the kindle only for the fact that kindle does not support page numbers but only "kindle locations". This makes any technical reference harder to navigate. Very very happy with this book and I intend to get the red hat specific edition soon. His book was used for two of my college classes.

Even covers the newer command "IP" as distros are moving to that from "ifconfig" command.
0Comment|One person found this helpful. Was this review helpful to you?YesNoReport abuse
on March 30, 2016
I've purchased many Linux books on Amazon and this one is, for the most part, the best yet! It's VERY well organized. Topics and material are thoroughly covered, with summaries and exercises at the end of each chapter. Book includes many examples, four appendixes, three indexes, and a thorough glossary. The only negative so far is that, unless you are an instructor, only the answers to the even numbered exercises--and advanced exercises--are available (on line at the author's website). This book is over 1,000 pages long and was copyrighted in 2013.
11 comment|Was this review helpful to you?YesNoReport abuse
on March 26, 2015
This book is very good at explaining its concepts, but the writing style is only ok. Particularly, the chapters are not very well broken up; each chapter is very long. I don't feel it's overloaded with fluff, but it does add in more than it should and doesn't really create sections too well. It's like each command has 1 or more sections to itself, but you don't really know how much you've actually completed just by going through one of them; partially, might be because I have the Kindle version, though, so the chapters are split into "xx hours xx minutes left in chapter" and "positions" in the book rather than pages. The examples, however, are pretty good, and the explanations are well done.

I got this book for a class, but it's overall, though, pretty good, and I wouldn't not recommend it. Just wish they paced it better.

However, extra points because the Kindle version has full audio reader.
0Comment|Was this review helpful to you?YesNoReport abuse