8.10 Redirection and Pipes

Sometimes it would be useful if you could write the output of a command to a file for further editing or if you could combine several commands, using the output of one command as input for the next one. The shell offers this function by means of redirection or pipes.

Normally, the standard output in the shell is your screen (or an open shell window) and the standard input is the keyboard. With the help of certain symbols you can redirect the input or the output to another object, such as a file or another command.

Redirection

With > you can forward the output of a command to a file (output redirection), with < you can use a file as input for a command (input redirection).

Pipe

By means of a pipe symbol | you can also redirect the output: with a pipe, you can combine several commands, using the output of one command as input for the next command. In contrast to the other redirection symbols > and <, the use of the pipe is not constrained to files.

8.10.1 Examples for Redirection and Pipe

  1. To write the output of a command like ls to a file, enter

    ls -l > filelist.txt

    This creates a file named filelist.txt that contains the list of contents of your current directory as generated by the ls command.

    However, if a file named filelist.txt already exists, this command overwrites the existing file. To prevent this, use >> instead of >. Entering

    ls -l >> filelist.txt 

    simply appends the output of the ls command to an already existing file named filelist.txt. If the file does not exist, it is created.

  2. If a command generates a lengthy output, like ls -l may do, it often may be useful to pipe the output to a viewer like less to be able to scroll through the pages. To do so, enter

    ls -l | less

    The list of contents of the current directory is shown in less.

    The pipe is also often used in combination with the grep command in order to search for a certain string in the output of another command. For example, if you want to view a list of files in a directory which are owned by a certain user, tux, enter

    ls -l | grep tux