Chapter 4: Linux Advanced Commands
4.4 Pipes and redirection
In short: Pipes are like a relay race — the output of one runner (command) is handed to the next.
Pipes are like a relay race — the output of one runner (command) is handed to the next. Technically, the shell connects the standard output (stdout) of the left command to the standard input (stdin) of the right command. Samjla ka? Once you master this, you can combine small commands into powerful one-liners.
| Symbol | Meaning | Example |
|---|---|---|
| (pipe) |
Output of left command becomes input of right command | ps aux | grep nginx |
> |
Redirect output to file (overwrite) | echo "hi" > a.txt |
>> |
Append output to file | date >> log.txt |
< |
Take input from file | mysql -u root -p mydb < backup.sql |
2> |
Redirect errors | find / -name x 2> errors.txt |
2>&1 |
Send errors to same place as output | ./script.sh > out.log 2>&1 |
&> |
Output and errors together (bash) | cmd &> all.log |
/dev/null |
"Black hole" — discard | cmd > /dev/null 2>&1 |
tee |
Write to file and screen | echo "x" | sudo tee /etc/file |
&& / || |
Run next only if success / failure | sudo nginx -t && sudo service nginx reload |
Why sudo tee instead of sudo echo > file?
In sudo echo "text" > /etc/file, the redirection > is done by your shell (not root), so it fails with Permission denied. Pipe the text into sudo tee /etc/file instead (or sudo tee -a to append).
Here-documents (used a lot in this book)
A here-doc writes multiple lines into a file in one command — perfect for creating config files by copy-paste. Everything between <<'EOF' and the line containing only EOF is written to the file:
sudo tee /tmp/hello.txt > /dev/null <<'EOF'
Line one
Line two with $HOME not expanded because 'EOF' is quoted
EOF
cat /tmp/hello.txt
Copy-pasting here-docs
Paste the whole block at once, including the final EOF line. The closing EOF must be at the very start of the line with nothing after it.
Ravindra Bagale's Tip
When a website is down, my first three commands are always: sudo service <name> status, sudo tail -n 50 <error log> and sudo ss -tlnp. Nine times out of ten the answer is right there. Make this your reflex too.
Ravindra Bagale's Tip – मराठी
Website down असेल तर माझ्या पहिल्या तीन commands नेहमी याच असतात: sudo service <name> status, sudo tail -n 50 <error log> आणि sudo ss -tlnp. दहापैकी नऊ वेळा उत्तर तिथेच मिळतं. ही सवय तुमचीही reflex बनवा.
Ravindra Bagale's Tip – हिंदी
Website down हो तो मेरी पहली तीन commands हमेशा यही होती हैं: sudo service <name> status, sudo tail -n 50 <error log> और sudo ss -tlnp. दस में से नौ बार जवाब वहीं मिल जाता है. इसे तुम भी अपनी आदत बना लो.