Linux tee command explained (with examples)

When you run basic commands on the terminal the output is usually printed to the terminal i.e standard out. But what if you could also save the output in a file as well as print it out to standard out? This is what the tee command does. The Linux tee command reads from stdin ( standard input ) and then writes to stdout ( standard output ) as well as to a file or multiple files.

Basic Syntax of the tee command

The tee command takes the following syntax.

$ command | tee [ options ] file(s)

Let’s now sample a few example usages of the tee command.

Basic use of tee command

Suppose we want to print the memory and swap usage using the free command and save the output in a file called memory_usage.txt. The tee command would be invoked as follows.

$ free -h | tee memory_usage.txt

The tee command reads from the command, saves the output to the memory_usage.txt file, and then prints it to standard out.

To confirm the output was saved to the memory_usage.txt file run the cat command as shown.

$ cat memory_usage.txt

tee command usage

Write the output to multiple files

Additionally, you can save the output to multiple files, as shown

$ command | tee [ options ] file1 file2 …

In the command below, the string “Hey, Welcome to Linux” is returned by echo command and then saved in the two text files: file1.txt and file2.txt

$ echo Hey, Welcome to Linux | tee file1.txt file2.txt

Use tee command to write the output to multiple files

Append content to a file

Usually, the tee command overwrites a file, and this is not always desirable as it can erase existing data that is crucial. Thankfully, you can use the -a option to append text to a file. Let’s test this out.

First, we will write the output of the uptime command to the stats.txt file as shown.

$ uptime | tee stats.txt

Use the cat command to verify this.

$ cat stats.txt

Next, we will append the output of the free -h command which prints our memory and swap usage to the file.

$ free -h | tee -a stats.txt

Yet again, verify the contents of the stats.txt file. This time around, the file will bear the output of the two commands as indicated in the screenshot below. This is because we appended the output of the free -h command to the stats.txt file and therefore the existing text was not affected.

Append content to file

Suppress the output of the tee command

If you don’t wish to have the output of the tee command printed to standard out, you can redirect it to /dev/null which is a special device that discards information is fed to it.

Take the example below where we are printing the output of the df -Th command to the text file but suppressing the output on the terminal.

$ df -Th | tee disk_usage.txt >/dev/null

Suppress the output of the tee command

Let tee command ignore interrupts

Sometimes, you might want to stop a command that is continuously running. When that happens, you might consider having the tee command exit gracefully even after the interruption of the program. To accomplish this, use the -i or –ignore-interrupts option provided in the syntax shown.

$ command | tee -i filename

The ping command below continuously sends ping requests to Google’s DNS ( 8.8.8.8 ). We have interrupted the command after 4 successive ping requests. For the tee command to exit gracefully, invoke the -i option.

$ ping 8.8.8.8 | tee -i ping_stats.txt

Ignore interrupts

Without the -i option, the output and summary of the statistics would not be printed.

Result

Use tee command with sudo

When modifying files owned by the root user or a different login user, simply using the tee command without invoking the sudo command will yield an error.

In the example below, we are creating a new repository called anydesk-stable.list for AnyDesk application in the /etc/apt/sources.list.d path which is a reserve for the root user.

$ echo "deb http://deb.anydesk.com/ all main" | tee /etc/apt/sources.list.d/anydesk-stable.list

As expected, we have run into a ‘permissions denied’ error because we don’t have the permissions to create or modify a file in that path.

Use tee command with sudo

The solution is to precede tee with the sudo command as shown.

$ echo "deb http://deb.anydesk.com/ all main" | sudo tee /etc/apt/sources.list.d/anydesk-stable.list

On this occasion, the command is a success after placing sudo before tee.

sudo tee command

Get help with tee command

For more command options and assistance in using the tee command, run the command below.

$ tee --help

tee command help options

Additionally, explore the man pages as shown

$ man tee

tee command man page

To check the version, run:

$ tee --version

Check tee command version

Summary

This is all about the Linux tee command. Notably, the command reads from standard in ( stdin ) and thereafter writes to standard out ( stdout ) and file(s).