====== Command ====== Three kinds of commands: * shell built-ins * binary executables (compiled programs) * shell scripts ===== Builtins ===== The shell includes a number of builtin commands. Some of these commands are also referred to as keywords or reserved words. $ help # list all builtin shell commands and keywords, roughly 80 bg cd exec for wait ===== External Commands ===== Some commands are binary executables or compiled programs. Each command is a binary file residing in either /sbin or /bin. $ ls /sbin # list the system binary executables, roughly 300 addgroup cron deluser shutdown $ ls /bin # list the user binary executables, roughly 1400 kill ls top tmux Use type to learn the usage of a word in the shell. $ type exec # show the type of a word as used in the shell exec is a shell builtin $ type for for is a shell keyword $ type ps ps is /usr/bin/ps ===== Arguments ===== Commands take arguments, aka parameters. There are two types of arguments, options and operands. If the command is the verb, the operand is the object, and the options are the adverbs. Options are identified with three different syntax variations: BSD, UNIX, GNU. $ ps f # BSD style: no dash, one letter, no dash $ ps -f # UNIX style: one dash, one letter $ ps --forest # GNU long style: complete word, two dashes Single letter options can be strung together without whitespace and without repeating the dash, like this: $ ls -al # is same as ls -a -l ===== Exit Code ===== Most commands return an integer exit code, with 0 indicating normal completion. ===== Input and Output ===== Some commands take input from the keyboard and write output to the display. Internally this is done with three file handles: 0) stdin, standard in, input from keyboard 1) stdout, standard out, output to display 2) stderr. standard error, output to display ===== Redirection ===== Each of these file handles can be redirected to a file. filename redirects stdout, overwriting filename >>filename redirects stdout, appending to filename &filename redirects stderr Example $ echo ‘this is my data’ >data.txt # redirect stdout to file data.txt $ echo ‘here is more data’ >>data.txt # redirect stdout, append to file data.txt $ echo ‘this is my data’ &errors.txt # redirect stderr to file errors.txt $ echo ‘this is my data’ &>out.txt # redirect both stdout and stderr to out.txt $ cat log.txt # redirect stdin and stdout, copy errors.txt to log.txt ===== Pipe ===== Two programs can be chained together, redirecting the output from the first program to the input of the second program. $ ps -e | grep chrom That is equivalent to redirection with a temporary file $ ps -e >temp.txt $ grep chrom