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.
Friends, a pipe is a relay race. 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. In other words, the output of one command becomes the input of the next. Once you master this, you can combine small commands into powerful one-liners.
मित्रांनो, पाइप म्हणजे रिले रेस – एका धावपटूचा (कमांडचा) आउटपुट पुढच्याच्या हातात दिला जातो. टेक्निकली, शेल डाव्या कमांडचा standard output (stdout) उजव्या कमांडच्या standard input (stdin) ला जोडतो. म्हणजे एका कमांडचा आउटपुट दुसऱ्या कमांडचा इनपुट. हे जमलं की छोट्या कमांड्स जोडून तुम्ही पॉवरफुल one-liners बनवू शकाल.
दोस्तों, पाइप मतलब रिले रेस – एक धावक (कमांड) का आउटपुट अगले के हाथ में दिया जाता है. टेक्निकली, शेल बाईं कमांड का standard output (stdout) दाईं कमांड के standard input (stdin) से जोड़ता है. मतलब एक कमांड का आउटपुट दूसरी कमांड का इनपुट. ये आ गया तो छोटी कमांड्स जोड़कर आप पावरफ़ुल 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 goes down, my first three commands are always these: 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 habit too.
Ravindra Bagale's Tip – मराठी
Website बंद पडली की माझ्या पहिल्या तीन commands नेहमी अशाच असतात: sudo service <name> status, sudo tail -n 50 <error log> आणि sudo ss -tlnp. दहापैकी नऊ वेळा उत्तर तिथेच मिळतं. ही तुमची पण सवय बनवा.
Ravindra Bagale's Tip – हिंदी
Website बंद हुई तो मेरी पहली तीन commands हमेशा यही होती हैं: sudo service <name> status, sudo tail -n 50 <error log> और sudo ss -tlnp. दस में से नौ बार जवाब वहीं मिलता है. इसे आप भी अपनी आदत बनाओ.
Ravindra Bagale's Tip
Many students write sudo echo "text" > /etc/file and get Permission denied – because the > is done by your shell, not by root. Use echo "text" | sudo tee /etc/file instead (sudo tee -a for appending).
Ravindra Bagale's Tip – मराठी
बरेच students sudo echo "text" > /etc/file लिहितात आणि Permission denied येतं – कारण > तुमचा shell करतो, root नाही. त्याऐवजी echo "text" | sudo tee /etc/file वापरा (append साठी sudo tee -a).
Ravindra Bagale's Tip – हिंदी
बहुत से students sudo echo "text" > /etc/file लिखते हैं और Permission denied आता है – क्योंकि > आपका shell करता है, root नहीं. उसकी जगह echo "text" | sudo tee /etc/file इस्तेमाल करो (append के लिए sudo tee -a).
Lab
Chala, ps aux | grep sshd chalva, mag date >> ~/labs/log.txt teen vela chalvun cat ~/labs/log.txt bagha. Nantar ls /nahi-asa-folder > out.txt 2>&1 chalva aani error screen var na yeta file madhe gela ka te cat out.txt ne check kara.
Got it? | passes the output on, > overwrites the file, >> appends at the end, and 2>&1 sends the errors to the same place too. Now let's move on to backups – tar and zip.
समजलं का? | आउटपुट पुढे देतो, > फाइल overwrite करतो, >> शेवटी जोडतो, आणि 2>&1 errors पण तिथेच पाठवतो. आता पुढे जाऊया बॅकअप्सकडे – tar आणि zip.
समझ आया? | आउटपुट आगे देता है, > फ़ाइल overwrite करता है, >> आख़िर में जोड़ता है, और 2>&1 errors भी वहीं भेजता है. अब आगे चलते हैं बैकअप्स की तरफ़ – tar और zip.