6.4 Pipes, Redirection and Here-Documents
Pipe mhanje relay race – ek command cha output pudhchya command cha input. Chhote commands jodun motha kaam – hech Linux che saundarya aahe.
| 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
> aani >> madhe gondhal zala tar mahatvachi file rikami hote – khup students ne asa config udavla aahe. > mhanje overwrite, >> mhanje shevti jodne. Shanka asel tar >> vapra kiwa aadhi backup ghya.
Practice task
Save the output of ls -la /etc to a file, append today's date to it, and write a two-line config file into /tmp using sudo tee and a here-doc.