My notes on Linux command output redirection
1 is standard output or stdout 2 is standard error or stderr & is all output This convention can be used to filter relevant outputs, for example: COMMAND 2> FILENAME #this will save any error messages generated by the command to file COMMAND &> FILENAME #directs all output to file COMMAND > FILENAME 2>&1 #directs stderr to same place as stdout
> – Output to File
> redirects the output of a command to a file, OVERWRITING any existing file of the same name, or otherwise creating a new file. COMMAND > FILENAME COMMAND 1> FILENAME #directs standard output to file COMMAND 1> FILENAME 2> /dev/null #directs standard output to file and standard error to trash
>> – Append to File
>> redirects the output of a command to a file, APPENDING it to any existing file of the same name or otherwise creating the file. COMMAND >> FILENAME COMMAND 1>> FILENAME
< – Process as input
Most input is via keyboard but there are circumstances where one might want input from a file COMMAND < FILENAME #this will direct the command to take its input from the file
| – Pipe – Chain Commands
The pipe directs a command to take its input from the preceding command COMMAND1 | COMMAND2 | COMMAND3 see also 'tee'
; – Semi-Colon – Run Command independently of preceding command
COMMAND1; COMMAND2 #runs both commands see also 'tee'
tee splits output into two streams; one for display and a copy for file COMMAND | tee FILENAME #displays the results of command and SAVES to file COMMAND | tee -a FILENAME #displays the results of command and APPENDS to file date | tee time.txt; sleep 15; date | tee -a time.txt #displays the date and saves it to time.txt. Pauses, then displays the date again, appending the same to time.txt
Gather multiple arguments to pass to a command echo 'noob1 noob2 noob3 noob4' | xargs touch #passes each of nob1, noob2 etc to touch as an argument, thereby creating four files (if they didn;t exist already) Act as a delimiter on output ls | grep noob | xargs -d '-' #searches all filenames in current directory for noob, then displays the output split using delimiter - Send output of a command to next command as an argument COMMAND1 | xargs COMMAND2 #uses the output of COMMAND 1 as the argument for COMMAND2