Ravindra BagaleCourses & study guides

6. Linux Advanced Commands

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

If you confuse > and >>, an important file becomes empty – many students have wiped a config this way. > means overwrite; >> means append to the end. If in doubt, use >> or take a backup first.

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.