Linux tee Command: Syntax, Options, Examples

December 3, 2024

Introduction

When a user executes a command in a Linux interactive shell, the command prints the output to the terminal's standard output (stdout) stream. However, shell redirection and piping operators can redirect or pipe this output according to the user's needs.

In this tutorial, you will learn how to use the tee command in Linux to manage the output of a command.

Linux tee Command: Syntax, Options, Examples.

Prerequisites

Linux tee Command Syntax

The basic syntax for the tee command is:

[command] | tee [options] [filename]

The example below uses tee to create an example.txt file that stores information about an enp0s3 network interface.

ifconfig enp0s3 | tee example.txt

The same information is also shown in the terminal output.

Writing the output from ifconfig to a file using the tee command.

The following cat command confirms that tee successfully wrote the output of ifconfig to example.txt:

cat example.txt
Confirming the success of the tee command using the cat command.

Warning: If the file used in the command already exists, tee overwrites the previous contents of the file.

tee Command Options

Below is the list of the options available to use with the tee command:

OptionDescription
-a, --appendDo not overwrite a file if it exists already. Append the new content instead.
-i, --ignore-interruptsIgnore interrupt signals.
-p, <b>--output-error</b>[=MODE]Set write error behaviors. The following are the available modes:
warn - diagnose errors.
warn-nopipe - diagnose errors when writing to non-pipe outputs. The default mode when another mode is not specified.
exit - exit on errors.
exit-nopipe - exit on errors when writing to non-pipe outputs.
--helpPrint the help manual.
--versionShow the command version.

tee Command and Piping

The tee command reads standard input (stdin) and writes it to both standard output (stdout) and one or more files.

A diagram of the tee command operation.

Since its purpose is to forward a command output, tee is always used as a part of a pipe. The common usage scenarios for the tee command include capturing logs, debugging, and analyzing data streams.

Note: To process standard inputs in Linux, use the xargs command, which can be combined with other commands.

Linux tee Command Examples

The following sections provide examples of the most common uses of the tee command.

Append to File

Overwriting the file's content is the default behavior of the tee command. Use argument -a (or --append) to add the command output to the end of the file.

[command] | tee -a [filename]

For example, use the echo command to append a line of text to a file:

echo "This text will be added" | tee -a example.txt
Appending the output of the echo command using the tee -a command.

Confirm the successful addition with the cat command:

Using the cat command to confirm the successful addition of the output of the echo command to the file.

Note: Learn more about various techniques for appending content to files using Bash.

Write to Multiple Files

Use tee followed by any number of files to write the same output to each of them:

[command] | tee [options] [filename1] [filename2]...

The example below shows writing the output of the echo command to two files:

echo "Adding to multiple files" | tee example1.txt example2.txt
Adding the output of the echo command to two files using tee.

The ls command shows that tee successfully created files example1.txt and example2.txt.

Note: Learn how to use tee command to write to file in Bash.

Hide Output

Use the following syntax to instruct tee to store the command output in a file and skip the terminal output:

[command] | tee [options] [filename] >/dev/null

In the example below, tee creates a file containing network interface data, skipping the standard output:

ifconfig enp0s3 | tee example.txt >/dev/null
Skipping the standard output and writing only to a file using tee.

Redirect Output of One Command to Another

tee does not have to be the last command in the pipeline. Use it to forward the output to another command:

[command] | tee [options] [filename] | [command]

In the following example, tee stores the output of the ls command to example.txt and passes the content of that file to the grep command, which finds and displays all instances of the word "example":

ls | tee example.txt | grep "example"
Passing the output of the ls command to the grep command using tee.

Ignore Interrupts

To allow tee to exit correctly even after the previous command has been interrupted, add the argument -i (or --ignore-interrupts):

[command] | tee -i [filename]

The following example shows tee writing output from the ping command and completing the action successfully even after ping is interrupted with ctrl+ c:

ping google.com | tee -i example.txt
Successful completion of the tee command after the ping command is interrupted.

Using tee with sudo

To enable tee to write to a root-owned file or file belonging to another user, place the sudo command right before tee.

[command] | sudo tee [options] [filename]

The example below shows an unsuccessful attempt to write to the root-owned sudoex.txt. When the sudo command is added, the operation completes:

echo "Added text" | tee -a sudoex.txt
Using the sudo command to obtain write access for the tee command.

Using tee in Vim Editor

If you open and edit a root-owned file in Vim without using the sudo command, trying to save changes produces an error:

Attempting to save changes to a root-owned file in Vim.

To override this error, type the following into Vim:

:w !sudo tee %

After you enter the sudo password, Vim displays a warning but writes the changes to the file.

Granting sudo permissions to tee in Vim.

Note: To properly manage files in Vim, especially when executing changes, you need to know How to Save a File in Vim and Exit and How to Undo and Redo Changes in Vim.

Use tee Command with Bash Script

The tee command is often found in bash scripts. Consider the following example of a script named testbash.sh:

#!bin/bash
LOGFILE=/tmp/log-files-$(date +%d%m%Y)
echo "Hello World" | tee -a $LOGFILE
Editing a bash script containing the tee command.

The script above prints the "Hello World" message and stores the output in a log file. Executing the script creates a log file in the tmp directory. The log contains the output of the script:

Confirming the successful creation of the log file and checking its contents.

Watch Log Files

Writing script output to a log file is usually performed with the (>) operator:

./testbash.sh > testbash.log

The command above creates a log file but does not write anything to standard output.

Use tee to create a log file and see the output in the terminal:

./testbash.sh | tee testbash.log

See Help and Version Information

See the current version of the tee command by typing:

tee --version

For the instructions regarding the tee command syntax and the available arguments, use the command's help argument:

tee --help

Conclusion

By reading this tutorial, you learned how to use the tee command in a pipeline to manage the command output. The article also talked about the use of tee in bash scripts.

Read more about shell commands in this Linux commands cheat sheet.

Was this article helpful?
YesNo
Marko Aleksic
Marko Aleksić is a Technical Writer at phoenixNAP. His innate curiosity regarding all things IT, combined with over a decade long background in writing, teaching and working in IT-related fields, led him to technical writing, where he has an opportunity to employ his skills and make technology less daunting to everyone.
Next you should read
Vim Commands Cheat Sheet
July 22, 2020

Vim is an open-source text editor found in most Linux distributions. This article lists all the commonly used...
Read more
Linux Commands Cheat Sheet: With Examples
November 2, 2023

A list of all the important Linux commands in one place. Find the command you need, whenever you need it or...
Read more
How to Create a File in Linux
July 11, 2024

Creating a file in Linux might seem straightforward, but there are some surprising...
Read more
grep Command in Linux With Examples
February 29, 2024

This guide details the most useful grep commands for Linux systems. After going through...
Read more