In Linux, redirection and pipes are powerful tools for controlling the flow of data between commands, files, and devices. Redirection allows you to send a command’s output to a file or use a file as input, while pipes let you chain commands by passing the output of one command as input to another. This chapter covers the essentials with practical examples to help you master these concepts.
Redirection Basics
Redirection uses special operators (>, >>, <, 2>, etc.) to control where input comes from or where output goes.
1. > (Output Redirection)
Redirects a command’s standard output (stdout) to a file, overwriting the file if it exists.
What it does: Sends the output of a command to a specified file, replacing its contents.
Examples:
Save the list of files in the current directory to files.txt
ls > files.txtThis creates or overwrites files.txt with the output of ls.
Save the system’s memory usage to memory.txt
free -h > memory.txtThe free -h command’s output is written to memory.txt.
2. >> (Append Output)
Appends a command’s output to a file without overwriting it.
What it does: Adds the output to the end of a file, preserving existing content.
Examples:
Append the current date to log.txt
date >> log.txtThis adds the output of date to log.txt without erasing its contents.
Append a list of running processes to process_log.txt
ps aux >> process_log.txtEach time you run this, new process information is added to the file.
3. < (Input Redirection)
Uses a file as the standard input (stdin) for a command.
What it does: Feeds the contents of a file to a command as its input.
Examples:
Sort the contents of names.txt
sort < names.txtThe sort command reads names.txt and outputs the sorted lines.
Send the contents of email_list.txt to the mail command
mail -s "Test Email" [email protected] < email_list.txtThe mail command uses email_list.txt as the email body.
4. 2> (Error Redirection)
Redirects standard error (stderr) to a file.
What it does: Captures error messages (not regular output) and sends them to a file.
Examples:
Redirect errors from a find command to errors.txt
find / -name "missingfile" 2> errors.txtPermission-denied errors or other issues are saved to errors.txt.
Redirect both output and errors to separate files
ls /etc /nosuchdir > output.txt 2> errors.txtThe ls output goes to output.txt, and errors go toerrors.txt.
5. 2>&1 (Combine Output and Error)
Redirects standard error to the same destination as standard output.
What it does: Combines stderr with stdout, often used with > or >>.
Examples:
Save both output and errors from ls to combined.txt
ls /etc /nosuchdir > combined.txt 2>&1Both the successful output and any errors are written to combined.txt.
Append both output and errors to log.txt
grep -r "error" /var/log >> log.txt 2>&1All output and errors from the grep command are appended to log.txt.
Pipes
Pipes (|) allow you to send the output of one command directly as input to another, enabling powerful command chaining.
What it does: Connects the stdout of one command to the stdin of another.
1. Basic Piping with |
Examples:
Search for a string in a file and count the matches
cat file.txt | grep "error" | wc -lcat file.txt outputs the file, grep "error" filters for lines containing “error,” and wc -l counts those lines.
List all .txt files and sort them
ls | grep ".txt$" | sortls lists files, grep ".txt$" filters for .txt files, and sort orders them alphabetically.
2. Combining Pipes with Multiple Commands
Examples:
Display the top 5 largest files in a directory
ls -l | sort -k 5 -nr | head -n 5ls -l lists files in long format, sort -k 5 -nr sorts by the fifth field (size) in reverse numerical order, and head -n 5 shows the top 5.
Find processes containing “python” and format the output
ps aux | grep "python" | awk '{print $2, $11}'ps aux lists processes, grep "python" filters for “python,” and awk prints the process ID and command name.
3. Using tee with Pipes
The tee command reads from stdin and writes to both a file and stdout.
What it does: Saves piped output to a file while passing it to the next command.
Examples:
Save a sorted list to a file and display it
ls | sort | tee sorted_files.txtThe sorted list is written to sorted_files.txt and displayed on the screen.
Save and display filtered log entries
cat /var/log/syslog | grep "error" | tee error_log.txtLines containing “error” are saved to error_log.txt and shown in the terminal.
More Practical Examples
The redirection and pipe operators work identically in RHEL and Debian, as they are part of the Bash shell. Here are some practical scenarios combining multiple concepts:
Log Analysis: Monitor a log file for errors and save critical ones
cat /var/log/syslog | grep "CRITICAL" > critical_errors.txtThis saves only “CRITICAL” log entries to critical_errors.txt.
System Monitoring: Check disk usage and save the top 3 directories:
du -sh /var/* | sort -hr | head -n 3 > disk_usage.txtdu -sh shows directory sizes, sort -hr sorts in descending order, and head -n 3 saves the top 3 to disk_usage.txt.
Error Debugging: Run a script and log both output and errors:
./myscript.sh > script_output.txt 2>&1All output and errors from myscript.sh are saved to script_output.txt.
Filtering and Formatting: List all running services and save those matching “http”:
systemctl list-units | grep "http" | tee http_services.txtThis filters for HTTP-related services, displays them, and saves them to http_services.txt.
Tips for Redirection and Pipes
- Overwriting vs. Appending: Use
>with caution, as it overwrites files. Use>>to safely append. - Error Handling: Always consider redirecting stderr (
2>) when debugging scripts or commands. - Combining Tools: Pipes shine when combining commands like
grep,awk,sort, andsedfor data processing. - Performance: For large datasets,
grep -rorfindmight be faster than piping multiple commands.
This chapter equips you with the tools to manipulate command input and output efficiently. Practice these examples in your terminal to see how they work in real-time. In the next chapter, we’ll explore archives and compression to manage files effectively.
Summary Cheat Sheet
| Command/Operator | Syntax | Description |
|---|---|---|
> | command > file | Redirects command output to a file, overwriting it if it exists. |
>> | command >> file | Appends command output to a file without overwriting existing content. |
< | command < file | Uses a file as input for a command. |
2> | command 2> file | Redirects standard error (stderr) to a file. |
2>&1 | command > file 2>&1 | Combines standard error with standard output, redirecting both to the same destination. |
| | command1 | command2 | Pipes the output of command1 as input to command2. |
tee | command | tee file | Sends output to both stdout and a specified file. |













Leave a Reply