The cat command is a very popular and versatile command in the 'nix ecosystem.  There are 4 common usages of the cat command. It can display a file, concatenate (combine) multiple files, echo text, and it can be used to create a new file.

Displaying a file

The most common use of the cat command is to output the contents of a file. The following is an example that you can try.

echo "Dance, Dance" > cat_create #create a file
cat cat_create

In this simple example, we're using a combination of echo and a redirect to create a file containing "Dance, Dance". We then use the cat command to display the contents.

The output is as follows:

image-11
The output of the example commands

(Con)cat

The previous example is actually a specific case of the cat command's main function, which is to concatenate files for display.  If we use the command the same way, but give it two or more files, then it outputs the concatenation for the files.

If we run the following commands:

echo "This is how we do it" > test1 #create 1st file
echo "*This is how we do it*" > test2 #create 2nd file
cat test1 test2

The output is the contents of the 1st file, followed by the contents of the 2nd file. You can give cat many files and it will concatenate (combine) all of them. Notice however, that the cat command automatically inserts a line break between outputs.

image-12
The output of two files concatenated

cat also provides some switches to to do things such as show non-print characters (-v), or number your lines (-n). A complete breakdown can be found in the man pages.

Echoing

This is a less common usage of cat , but is the basis for the next section. If you run the cat command with no commands, cat will run in interactive mode and echo anything you type until you exit the command.

image-13
Running cat in interactive mode

In the example here, I've typed a single word per line. Each time I hit enter, the line was echoed.

You can also pipe text to cat, in which case that text is echoed. For example:

echo "Piping fun" | cat

This will result in the following output:

image-14
Piping text into cat

Creating a File

In the previous examples, we've been using the echo command redirected to a file to create new files. Cat can be used in a similar way. In fact, we can use cat's concat and echo functionality to create files.

We can create a file containing the concatenation of multiple files like this:

echo "File 1 Contents" > file1
echo "File 2 Contents" > file2
echo "File 3 Contents" > file3
cat file1 file2 file3 > combined_file
cat combined_file

In the above example, we're creating 3 files using echo, combining the 3 files into one using cat, and then displaying the new combined file using cat.

image-15
The result of the above commands. We've created 3 files, then combined them into a single file using cat

We can also use cat's interactive mode to create a file with the text that we type into the terminal.

image-16

Each time you hit enter, it commits the text to the file. If you have uncommitted text and exit, it won't be captured in the file.

This is a fantastic way to create a file quickly with the ability to enter the content of the file.

Using Touch to create a file instead

Sometimes you just need a file to exist. As an alternative to using cat to create a file, you can use the touch command.

The touch command was designed to update the modified timestamp of a file, but is commonly used as a quick way to create an empty file. Here is an example of that usage:

touch new_file_name

The touch command can create multiple files, update the modification and/or creation timestamps, and a bunch of other useful things. The full man pages can be found here.

Touch is commonly used to ensure that a file exists, and is a great command if you need an empty file quickly.

Summary

Cat is a very useful command.  You can use it to create, display, and combine text files very quickly and easily.  

If you only need a file to exist, but don't mind (or require) it being empty, using touch is a great alternative.

Hughie Coles is a lead developer at Index Exchange. He writes about software architecture, scaling, leadership, and culture.  For more of his writing, check out his blog on medium.