Linux Basics – head, tail, cat and more (or less)
The following are all BASH commands that are in daily use for most admin tasks.
Need to extract a list of email addresses from a log file or a list of domains from a zone file list? These tools can do all of this and more.
Let us dig in and have a look at what we can accomplish. Linux basics are the foundation of good Linux Administration and Engineering.
Some basics first
Let us look at some redirectors and pipes. First of all, the PIPE symbol:
| This vertical bar is used to take the output from a command and apply another action to it. Let us look at an example:
# DO A DIRECTORY LISTING AND PIPE INTO THE tee COMMAND WHICH WILL ADD IT TO A FILE AND SIMULTANEOUSLY DISPLAY THE OUTPUT ls /home |tee -a /tmp/dirlist.txt
Now we can look at the
< symbols. We will use the word TARGET to represent our file. The
> TARGET symbol is used to redirect output into our file or device (not a command) and the
< TARGET is used to extract content from the file into the preceding command.
Each has its own use case. Let us see some examples:
# PRINT CONTENT OF A FILE TO SCREEN BUT REDIRECT TO ANOTHER FILE cat /tmp/dirlist.txt >/tmp/homefolders.txt # FOR EACH ITEM IN A FILE DO SOMETHING (REDIRECT FROM FILE TO LOOP) while read HOME do echo $HOME done </tmp/homefolders.txt
Head, Tail and Cat
Our next Linux commands all display the contents of a file in different ways. The
head command is used to show a file from the beginning (top or head of file). Here are a few examples:
# DISPLAY THE FIRST 5 LINES (default number) OF /var/log/messages head /var/log/messages # DISPLAY THE FIRST 100 LINES OF /var/log/messages head -n 100 /var/log/messages # ALTERNATIVE -> # head -100 /var/log/messages
tail command is used to show a file from the end (tail). You can use the follow (
-f) switch which will allow you to watch any file, usually log files, as lines get added to it in real time! A few examples of
# DISPLAY THE LAST 5 LINES (default number) OF /var/log/messages tail /var/log/messages # DISPLAY THE LAST 100 LINES OF /var/log/messages tail -n 100 /var/log/messages # ALTERNATIVE -> # tail -100 /var/log/messages # FOLLOW THE END OF /var/log/messages AS IT GETS WRITTEN IN REAL TIME tail -f /var/log/messages
If you add the head and tail together, you get a cat (Linux humour). So, to display a whole file’s content, we use the
cat command. This is actually also an abbreviation of the word ‘concatenate’. You can also use the
cat command to print out many files and possibly stream that into a single file.
# DISPLAY THE CONTENT OF THE HOMEFOLDER LIST GENERATED IN THE FIRST EXAMPLE cat /tmp/homefolders.txt # DISPLAY THE CONTENT OF THE HOMEFOLDER LIST GENERATED IN THE FIRST EXAMPLE, SORT IT NAD REMOVE ANY DUPLICATES, GIVING A COUNT OF OCCURENCES cat /tmp/homefolders.txt |sort |uniq -c
Less and More
less command can be confusing, but only because it has many options and it captures the shell while it is running. It is used to display the content of a file, much like the
cat command. The main difference is that you can move through the content and even search for a specific word within this content.
With this command, we cannot give a good example as you just type ‘
less /tmp/homefolders.txt‘, but once you have done that, you see one page of data, not all the data as you do with the
cat command. Also, you are now almost ‘locked’ into the data content.
less is active, you can move through the data with arrow keys, PgUp and PgDn, Home and End keys. To search for something, press the forward slash
/. Then type in your search term and press ENTER. To exit from
q for quit.
less command has a twin command called
more does is to limit the flood of output from a
cat command or a long output from a directory listing, to one page at a time. To see more, you press the spacebar. The
more command is used in conjunction with the pipe
| symbol as follows:
cat /var/log/messages |more