Linux
Linux commands. From the book of A Practical Guild to Linux Commands, Editors and Shells.
stdio
File descriptor 0 (stdin), 1 (stdout), 2 (stderr).
>is short for1>, meaning redirecting standard output.<is short for0<redirects standard input.2>redirects stardard error.
Example
$ cat y
This is y
$ cat x
cat: x: No such file or directory
$ cat x y
This is y
cat: x: No such file or directory
pipe only sends stdout not stderr
$ cat x y | tr "[a-z]" "[A-Z]"
cat: x: No such file or directory
THIS IS Y
In the next example, 1> redirects stdout to hold, then 2>&1 declares file descriptor 2 to be a duplicate of file descriptor 1, so both stdout and stderr are redirected to hold. Notice that 1> should happen first.
$ cat x y 1> hold 2>&1
$ cat hold
cat: x: No such file or directory
This is y
In the next example, 2>&1 means also send stderr to stdout. Then pipes stdout to tr
$ cat x y 2>&1 | tr "[a-z]" "[A-Z]"
CAT: X: NO SUCH FILE OR DIRECTORY
THIS IS Y
2>&1 | can be shortened as |&
pipe | - tunnels the output (stdout only) of left to right.
Example:
$ cat abstract
cab
$ cat abstract | tr abc ABC
CAB
$ tr abc ABC < abstract
CAB
&& and ||, cmd1 && cmd2 means run cmd2 if cmd1 succeeds. cmd1 || cmd2 means run cmd2 if cmd1 fails.
adding & means running the command in the background.
kill can kill a job with PID or job number.
$ ps
11829 pts/10
$ kill 11829
$ jobs
[1]
$ kill %1
Bash
./whoson the ./ tells the shell to look for an executable file in the working dir.
#!/bin/bash tells the system which shell to use. #! is called hashbang or shebang
-e will cause bash to exit when command fails. -u will cause bash to display a message and exit when it tries to expand an unset variable.
d & e & f will run d and e in the background and run f in the foreground.
[1]- Done d
[2]+ Done e
The + means it's the last job. - means it's the job before the last one.