I/O Streams
Linux allows you to manipulate input and output streams (I/O streams). Input streams send data to a program. Output streams return data from a program. By default, your keyboard is the input stream on Linux, and your console is the output stream. There is also an error output stream which is dedicated to outputting errors from a program.
| Name | Purpose | File Descriptor | Default |
|---|---|---|---|
stdin |
Input | 0 | Keyboard |
stdout |
Normal output | 1 | Terminal |
stderr |
Error output | 2 | Terminal |

Redirects
stdout: “>” or “>>”
The greater-than token (>) redirects the standard output of a program to a new location. grep usually prints its results to the console. If you wanted to redirect it to a text file, you’d do the following:
# Create or replace output.txt
grep -i 'claws al ghul' catman_begins.txt > output.txt
# Create or append to output.txt
grep -i 'claws al ghul' catman_begins.txt >> output.txt

stderr: “2>” or “2>>”
Prepending the output redirection tokens with a 2 redirects the standard error. Below is an example with the vlc media player.
# Create or replace error.log
vlc mr_smith_goes_to_pawshington.mpg 2> error.log
# Create or append to error.log
vlc mr_smith_goes_to_pawshington.mpg 2>> error.log

Both stdout and stderr
You can combine the redirects to redirect both stdout and stderr at the same time:
bionano_software > output.log 2> error.log # create
bionano_software >> output.log 2>> error.log # append

stdin: “<”
The less-than token is used to redirect standard input (stdin). It tells the program to take its input from the file following the token:
# Create a file or replace an existing file:
sort > sorted_cats.txt < cats.txt
# Another format example, albeit contrived:
sort < cats.txt > sorted_cats.txt
# Sort can take a filename as a direct argument without any input redirection, so the better syntax is:
sort cats.txt > sorted_cats.txt

Combine streams
One I/O stream can be redirected to another I/O stream. This is the syntax for redirecting stderr to stdout. It would ensure that all output, standard or error, would end up at the destination:
ping -c 10 procatinator.com > output.txt 2>&1
ping -c 10 procatinator.com &> output.txt # shorthand
Discard output
/dev/null can be thought of as a black hole. It’s a special device that discards anything that is passed to it. The ampersand-greater-than (&>) will redirect both streams to the same place:
./automated_task.sh &> /dev/null # run the program, throwing away all output
