Interview with the author of “Mastering cat”

Mastering cat Cover

Published on: 1-April-2009

Shlomi Fish, acclaimed author of Mastering mv and Mastering rm has taken the time to sit down with us for an interview on his latest book, Mastering cat. In this 344 pages-long book, Fish details everything you wanted to know about the UNIX cat command. We decided to have an interview with him to find out more about the book’s motivation, content, and philosophy.

O’Reilly Net: Hi Shlomi!

Shlomi Fish: Hi!

O’Reilly Net: So, what has motivated you to write the book?

Shlomi Fish: Well, I realised people use cat so often that they don’t take the time to fully investigate it and learn it. For example, many people I worked with believed that cat can only be used to output one file at a time. So to output several files they used something like:

(cat file1.txt ; cat file2.txt ; cat file3.txt) | command

The horror! cat accepts several files as arguments. So you can write it as:

cat file1.txt file2.txt file3.txt | command

This has motivated me to write the book, to make people fully understand the command.

O’Reilly Net: Isn’t mastering cat supposed to be quite easy? Does it really necessitate its own book?

Shlomi Fish: Hell no! Mastering cat is not easy at all. In fact, mastering cat is almost as difficult as herding cats.

For example, one case where I found that people truly underestimate the power of cat is in the prefixing a line example. You can do that with:

echo "This would be the first line" | cat - myfile.txt >
mv -f myfile.txt

But people do not realize that and instead opted to use sed, awk, or even perl (!). It can be taken further, of course. If the prefix is already in its own file, you can simply use cat prefix.txt myfile.txt

Of course, if you want to append the same text to both the start and the end of a file, you can’t do that with cat - myfile.txt -. It simply doesn’t work that way. So, I end up explaining a lot about UNIX pipeline concepts in the book.

O’Reilly Net: So what else does your book cover?

Well, I cover many things there. Among them are:

  1. History of the cat command.
  2. Differences between the various cat implementations. (GNU, the BSDs, System V, etc.)
  3. cat equivalents in other operating systems (DOS, Win32, VMS, OS/390, etc.)
  4. Overview of the GNU cat codebase (for programmers).

I’m also focusing on the various cat flags, which aid in its interactive use. For example, the -E/--show-ends flag, that places dollar signs at the end of the lines.

Aside from all that, I’m also covering dog which is a program that provides a superset of the cat program. I should also mention mouse which aimed to provide an even greater superset, and was never released. Rumours say some parts of it are based on code of the leaked Windows 2000 sources.

O’Reilly Net: Your book seems bound to be popular (for some values of popularity). What can we expect from you next?

Shlomi Fish: Well, I hope many people will buy the book, or read it online so they’ll be educated about cat. If you like Mastering cat, look forward to my next book - Mastering echo. I expect it to be published next fall.


Thanks to Drew Dexter, Diego Iastrubni, Omer Zak, chromatic and others for reviewing this item and giving some useful advice - some of which was incorporated into the final version.


Copyright and Licence

This document is Copyright by Shlomi Fish, 2009, and is available under the terms of the Creative Commons Attribution-ShareAlike License 3.0 Unported (or at your option any later version).

For securing additional rights, please contact Shlomi Fish and see the explicit requirements that are being spelt from abiding by that licence.