Add 'posix_shell.md'

master
Jan Danielzick 2022-09-22 17:33:15 +00:00
parent 61e27e8c56
commit 489c8fbeee
1 changed files with 107 additions and 0 deletions

107
posix_shell.md Normal file
View File

@ -0,0 +1,107 @@
#Shell Cheatsheet
I am only going over POSIX shell things here as there are a bunch
of extensions found in some shells / on some systems but not others.
The sections below should apply to any UNIX-like system.
This cheatsheet will by no means be a comprehensive guide to UNIX
(its a cheatsheet, not a handbook) but you can always find out
more information about any given command right there on the shell.
Many systems come with manuals, try `man COMMAND` or
`info COMMAND` to find out more about most utilities
(try `man man`, for example).
Alternatively, if no manual is available,
passing the flag `-h` or `--help` will usually print some information.
I find myself consulting these constantly because nobody is expected
to remember everything beyond the basics and its usually faster than googling it.
If you are trying to learn how to use the shell, I encourage you to start
with the examples section at the end and work your way backwards from there
to figure out what they do.
I also highly recommend you check the manuals or help information for
any command you want to use - especially if it was given to you
by a stranger on the internet.
##Shell features:
The shells main tasks are providing a text based user interface to an
operating system as well as running scripts.
To facilitate this, the shell runs the programs the user/script specifies
and deals with the output.
**Streams**
Normally, there are two output streams and one input stream for a running program:
Standard output (stdout), standard error (stderr), standard input (stdin).
By default, they are passed to the stdout, stderr, and stdin of the shell,
which will end up in your terminal when you run a shell interactively.
There are two notable exceptions to this which you can specify:
1. Reditects: You can send the output of a command to a file instead of
the standard output/error streams.
`COMMAND > FILE` redirects stdout of COMMAND into FILE.
`COMMAND 2>FILE` redirects stderr into FILE.
`COMMAND 2>&1` redirects stderr into stdout.
You can have multiple redirects per command though more than two
usually dont make sense.
The most common example of this is redirecting stderr to stdout and
the combined stdout into a file like so: `COMMAND > FILE 2>&1`.
2. Pipes: The output of one command can be used as the input of another:
`COMMAND | OTHER_COMMAND`
**Variables**
There are two kinds of
exit code
if, esle
while, for
pipes, redirects
ctrl-c
*Builtin commands:*
- `cd` [change directoy] A shell (or any process for that matter) is always working from a specific working directory. Pretty much self-explanatory what this does.
- `exit` exit (optionally with an exit code though that feature is more useful for scripts)
- `export` make the given shell variable an environment variable
- `unset` unset a variable
- `jobs` show programs that are currently running in the background
- `fg` get a program from the background in the foreground
__Basic commands:__
- `pwd` [print working directory] self-explanatory
- `ls` [list] Get a listing of the specified directory. If none given, the current directory is used.
- `cat` [concatenate] Originally created to concatenate files, it is most commonly used to print the contents of a file to the standard output. It takes file paths as arguments.
- `mv` [move] Move or rename a file or directory. It takes two arguments: Origin and destination.
- `cp` [copy] Copy a file or directoy. It takes two arguments: Origin and destination.
- `touch`
- `echo` output text to standard output
- `test` [more commonly known as `[ ... ]`] used to check whether a condition is true or false, result is passed back using exit code
- `df` [disk free] show available disk space
- `du` [disk usage] show how much space a given file or directoy is using
- `su` [switch user] self-explanatory
- `rm` [remove] remove a file or directoy
- `mkdir` [make directory] self-explanatory
- `find` find a file or directoy by specified criteria
- `grep` search for regular expressions in text
- `ps`
- `id`
- `uname` [UNIX name] get information about the operating system - usually name, architecture, and build information
- `chmod` [change mode] change file permissions
- `chown` [change owner] change file ownership
- `sed` [stream editor] edit text on the fly
- `vi` unholy abommination of a text editor :)
- `kill` kill a given process
- `less` or `more` print only a screen worth of text at a time and wait so you have the time to read it
__Commonly used special files__
. ..
dev null
dev urandom
__Honorable mentions:__
The following things wont be available on all systems, but are really handy when they are:
- `free` shows information about used/free RAM on Linux systems
- `nano` nice user-friendly terminal text editor available on many systems
- `htop` nice user-friendly terminal task manager
- `which` easy way to find out where the binary for a given command is located
- `sl` a great way to infuriate anyone who happens to type too quickly
- `sudo` become root (or any other user) by authenticating the current user instead of the target user given the current user is permitted to do so - useful when root login is disabled