LWM-Linux/06 - Linux File Operations/IO Redirection and Piping.md
2024-09-07 09:29:54 -06:00

2.1 KiB

Linux I/O redirection and piping.

  1. Basic Concepts
  2. Input Redirection
  3. Output Redirection
  4. Error Redirection
  5. Piping
  6. Advanced Techniques

1. Basic Concepts:

In Unix/Linux, there are three standard streams:

  • Standard Input (stdin): 0
  • Standard Output (stdout): 1
  • Standard Error (stderr): 2

By default, stdin is the keyboard, while stdout and stderr are both the terminal.

2. Input Redirection:

The < symbol is used for input redirection.

Example:

  • sort < file.txt # This command sorts the contents of file.txt.

3. Output Redirection:

The > symbol is used for output redirection. It creates a new file or overwrites an existing one. The >> symbol appends to an existing file or creates a new one if it doesn't exist.

Examples:

  • echo "Hello, World!" > greeting.txt # Create or overwrite file called "greeting.txt" with "Hello World!"
  • echo "How are you?" >> greeting.txt # Append or addon to the end of "greeting.txt" with "How are you?"

4. Error Redirection:

You can redirect stderr using 2> or 2>>.

Example:

  • ls /nonexistent 2> error.log # pipe the error log from the ls command into "./error.log"

To redirect both stdout and stderr to the same file:

  • command > output.log 2>&1

5. Piping:

The | symbol is used for piping. It sends the output of one command as input to another.

Example:

  • ls -l | grep "\.txt" # This lists all files and then filters for those ending in .txt.

6. Advanced Techniques:

a) Here Documents:

cat << EOF > file.txt
Line 1
Line 2
EOF

#This will write "Line 1 Line2" into "file.txt" and only stop writing new data when it reaches the line "EOF" (End Of File)

  • b) Process Substitution:

  • diff <(ls dir1) <(ls dir2)

  • c) Redirecting stdout and stderr to different files:

  • command 1> output.log 2> error.log

  • d) Discarding output:

  • command > /dev/null 2>&1

  • e) tee command (writing to both file and stdout):

  • echo "Hello" | tee file.txt # This command will wrte "Hello" to stdout (screen) and to the file "file.txt" simultaneously

  • f) Named Pipes (FIFOs):

  • mkfifo mypipe

  • command1 > mypipe & command2 < mypipe