How To Use Linux Tail Command With Head Command

by Montel Anthony
Published: Updated:

Navigating through a sea of data in UNIX or Linux systems may seem overwhelming at first, yet mastery of useful commands such as tail and head becomes invaluable in troubleshooting and monitoring in real-time. With these commands available to them users can extract specific portions from text files to allow more focused monitoring – whether as developers, system administrators or just enthusiasts of this operating system! Utilization of such tools effectively will significantly boost productivity and efficiency levels – no matter if they belong to developers, system administrators or simply enthusiasts!

This article will walk you through the intricacies of both linux tail command and head command in Linux, equipping you with knowledge to use these utilities individually or together. From its basics, this read demonstrates each command’s functions and applications before delving deeper into how synchronizing tail and head can enhance text processing for advanced text manipulation or troubleshooting purposes. At its conclusion, you’ll have gained a solid knowledge base on leveraging these UNIX utilities for smooth data management workflows and seamless operations.

Introduction to Linux Tail Command

Definition and Purpose

The Linux tail command is a powerful command-line utility primarily used to display the end of text files or data streams. By default, it outputs the last 10 lines of the specified file, making it an essential tool for quickly viewing the most recent additions to files. This functionality is particularly useful for monitoring log files in real-time, such as those generated by web servers like Apache or Nginx. The command serves as a complementary tool to the head command, which displays the beginning of files, thereby providing users with comprehensive file viewing capabilities.

Basic Command Structure

The basic syntax for the Linux tail command is straightforward:

tail [OPTION]... [FILE]...

This command structure allows you to execute the tail command by specifying options that modify its behavior and designating the file(s) to be operated upon. If no file is specified, or if the file specified is ‘-‘, tail will read from standard input.

Common Options and Flags

The tail command offers several options that enhance its functionality:

  1. -n num: This option allows you to specify the number of lines to display instead of the default 10 lines. It is crucial to provide the num value; otherwise, an error is displayed. The command can also be executed as -num, where the minus sign is mandatory.
  2. -c num: With this option, you can specify the number of bytes to display from the end of the file. This is particularly useful when you need to view specific parts of a file’s content.
  3. -f: This option is invaluable for system administrators who need to monitor the growth of log files in real-time. It keeps the tail command open and updates the display as new lines are added to the file.
  4. -q: When multiple files are specified, this option prevents the output from being preceded by file names, providing a cleaner display of file contents.
  5. -v: This option ensures that the output is always preceded by the file name, which is useful when monitoring multiple files simultaneously.
  6. –version: Displays the version of the tail command currently running on your system.

Each of these options can be combined to tailor the output according to specific needs, making tail a flexible tool for file content management.

Learn more about the Linux tail command and its options

By understanding and utilizing these options, you can effectively harness the power of the tail command to suit your file viewing and monitoring requirements.

Introduction to Linux Head Command

Definition and Purpose

The Linux head command is an essential command-line tool used to display the beginning portion of text files or data streams. By default, it outputs the first 10 lines, making it incredibly useful for previewing files or examining the initial data without needing to open the entire file. This command is particularly valuable for system administrators and developers who require quick access to the start of files for troubleshooting or analysis.

Basic Command Structure

The basic syntax for using the head command is:

head [OPTION]... [FILE]...

This allows you to execute the head command by specifying options that modify its behavior and selecting the file(s) to be displayed. If no file is specified, or if the file specified is ‘-‘, the head command will read from standard input, making it versatile for piped commands or when working directly with data streams.

Common Options and Flags

The head command offers a variety of options that enhance its functionality, allowing you to tailor the output to your specific needs. Here’s a breakdown of some commonly used options:

-n–linesDisplay the specified number of lines
-c–bytesShow the specified number of bytes
-q–quietDo not output headers giving file names
-v–verboseAlways output headers with file names
  1. -n num: This option lets you specify the number of lines to display instead of the default 10 lines. It is essential to provide the num value; otherwise, the command will not execute correctly.
  2. -c num: With this option, you can specify the number of bytes from the start of the file to display. This feature is useful when you need to view certain parts of a file’s content in byte format.
  3. -q: Useful when processing multiple files, this option prevents the output from being preceded by file names, providing a cleaner and more focused display of data.
  4. -v: This option ensures that the output is always preceded by the file name, which is helpful when monitoring multiple files at once to avoid confusion.

By understanding and using these options effectively, you can maximize the utility of the head command to suit various file viewing and data analysis tasks.

Learn more about the Linux head command and its options

Synchronizing Tail and Head Commands

Combining the Linux tail and head commands can be an effective way to extract specific segments from a file, particularly when you need sections from the middle without having to process the entire file. This synchronization can save time and system resources, making it a preferred method for handling large files or streams in Unix and Linux environments.

Benefits of Combining the Commands

When you synchronize the tail and head commands, you enhance your ability to quickly access different sets of lines from a single file. This can be especially useful in scenarios where real-time data monitoring is required, such as viewing logs or data streams that are continuously updated. By using these commands together, you can efficiently pinpoint the relevant data without the need to load entire files into memory, which is beneficial for system performance and responsiveness.

Standard Usage Scenarios

One common scenario involves extracting specific line ranges from files. For example, if you need to view lines 51 to 55 from a file, you can use the command:

$ tail -n +51 numbers_en.txt | head -n 5

This command sequence uses tail to discard the first 50 lines and then head to output the next 5 lines, effectively displaying lines 51 to 55. Alternatively, you can achieve the same result with:

$ head -n 55 numbers_en.txt | tail -n 5

In this case, head outputs the first 55 lines, and tail takes the last 5 lines of that output, which corresponds to lines 51 through 55. These methods are valuable for efficiently accessing specific segments of data without processing the entire content.

Detailed Step-by-Step Guide

To extract multiple specific segments from a file and save them into another file, you can use a combination of head and tail commands with command grouping. Here’s how you can extract lines 6-11 and 19-24 from a file and save them to another file:

  1. Command Grouping with Head and Tail:
    Use the following command to extract the desired lines:{ head -n 11 file | tail -n 6; head -n 24 file | tail -n 6; } > output_file
    This command first uses head to take the first 11 lines, then tail to get the last 6 of those (lines 6-11). It repeats a similar process for lines 19-24.
  2. Using Sed for Line Extraction:
    Alternatively, you can use sed to directly extract lines without the need for complex command chaining:sed -n -e '6,11p' -e '19,24p' file > output_file
  3. Using Awk for Flexible Data Processing:
    Awk can also be used to specify more complex conditions for line extraction:awk '6<=NR && NR<=11 || 19<=NR && NR<=24' file > output_file

By mastering these techniques, you can effectively manage file content extraction, making your data processing tasks more efficient and tailored to specific needs. These command combinations provide powerful ways to navigate and manipulate large datasets or logs with precision.

Learn more about combining Linux commands for efficient data processing

Advanced Examples of Combined Usage

Example 1: Extracting Custom Log Sections

When dealing with multiple .csv files, especially in scenarios like election data analysis, you may need to extract specific sections effectively. Suppose you want to extract data ignoring the first two header lines from each file in a directory. Here’s how you can use the head and tail commands to achieve this:

head -n 53 /usr/local/tmp/election2008/*/*.csv | tail -n 51

This command first uses head to grab the first 53 lines (including headers) from each CSV file in the specified directory, and then tail trims off the first two lines, giving you the data starting from line 3 onwards.

Learn more about using wildcards with Linux commands

Example 2: Continuous Monitoring with Filters

For continuous monitoring of log files, such as a web server’s access log, the tail -f command is invaluable. It allows you to view updates in real-time, which is crucial for immediate troubleshooting and monitoring visitor activities on your website. Here’s how to use it:

tail -f /var/log/access.log

This command will keep the terminal open and display new log entries as they are appended to the access.log file. To stop the command and return to the command prompt, simply press Ctrl + C.

Additionally, you can filter the output to show only relevant entries. For example, to monitor entries from a specific IP address, you can use:

tail -f /var/log/auth.log | grep

This filters the real-time output to include only those lines that contain the specified IP address, making it easier to track specific activities or issues.

Learn more about real-time log monitoring

Example 3: Creating Summarized Reports

Suppose you need to create a summarized report from a log file, showing only specific lines that are crucial for your analysis. Here’s a method to extract only the lines you need using a combination of head, tail, and shell scripting:

get_lines () {
    local input=$1
    for line; do
        head -n "$line" "$input" | tail -n 1

You can use this function by specifying the file name and the line numbers you are interested in:

$ get_lines /path/to/file 3 7

This command will output only the 3rd and 7th lines of the file, which can be particularly useful for generating reports that require data from specific entries without processing the entire file.

Learn more about scripting with head and tail

By mastering these advanced techniques, you can enhance your ability to work with large datasets and logs, making your data processing tasks more efficient and tailored to specific needs.


Throughout this article, we have journeyed through the essential landscapes of the Linux tail and head commands, unraveling their functionalities, applications, and synergies. It’s evident that these commands are not merely tools but the very fabric that aids in efficient data analysis, troubleshooting, and real-time monitoring in the Unix and Linux systems. The examples and detailed guides provided underscore the versatility and power of combining these commands, offering insights into advanced usage scenarios that cater to specific data handling needs.

Reflecting on the exploration of head and tail commands, their combined utility undeniably enhances one’s capability to navigate through extensive datasets and logs with accuracy and ease. This comprehension not only amplifies productivity but also empowers users to perform precise data extraction and real-time monitoring, which are critical in today’s data-centric world. As we conclude, it’s encouraged to delve deeper into these commands, experiment with the examples provided, and leverage their full potential to streamline your workflows. The journey through Linux’s command-line utilities is ongoing, and mastering these commands is a step forward in harnessing the immense power at your fingertips.


1. How can the head and tail commands be used together in Linux?
To use the head and tail commands together, you can use the command sequence head -M file_name | tail +N. Here, the head command retrieves the first M lines from the file, and the tail command then displays lines starting from N through the end of the output from the head command. Alternatively, you can use the command head -M file_name | tail +(M-N+1) to display the last (M-N+1) lines of the first M lines of the file.

2. What is the procedure to execute the head command in Linux?
The head command in Linux is utilized to display the initial sections of files. To run it, you can use the syntax head [options] [file_name]. For example, executing head file.txt returns the first 10 lines of the file named file.txt.

3. What are the various ways to use the tail command in Linux?
The tail command in Linux has several options:

  • -c num or --bytes=num: Displays the last num bytes of data.
  • -n num or --lines=num: Shows the last num lines of the file.
  • -f or --follow=name: Continuously monitors the file for new additions.
  • -v or --verbose: Prints the filename before the output.
  • -q or --quiet, --silent: Omits the filename before printing the data.

4. How do you show the last 10 lines of a file in Linux?
To display the last 10 lines of a file, use the tail command with the file specified. For instance, tail -n 10 accounts.txt will show the last 10 lines of the ‘accounts.txt’ file. This command also allows for real-time monitoring, continuing to display new lines as they are added to the file.

Related Posts

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More

Adblock Detected

Please support us by disabling your AdBlocker extension from your browsers for our website.