Common Shell Commands
There are many shell commands. Here some commonly used one are presented with many practical examples.
echo, cat, and Output Redirection
As seen in the previous section, echo display the text.
echo can also print bash variables, which is preceded by the dollar sign, $.
$ echo $XDG_CURRENT_DESKTOP # may not work on certain distros
sway # I am using sway windows manager. TODO: check other distros
$ MY_VAR="YES!" # Variable definition. Strictly no space besides `=`!
$ echo $MY_VAR
YES!
$ echo $EDITOR
nvim # default editor
cat can be used to show contents of a file.
The system informations on most Linux systems are stored in the file /etc/os-release.
$ cat /etc/os-release # May not work on same distributions
NAME="Manjaro Linux"
PRETTY_NAME="Manjaro Linux"
ID=manjaro
ID_LIKE=arch
BUILD_ID=rolling
ANSI_COLOR="32;1;24;144;200"
HOME_URL="https://manjaro.org/"
DOCUMENTATION_URL="https://wiki.manjaro.org/"
SUPPORT_URL="https://forum.manjaro.org/"
BUG_REPORT_URL="https://docs.manjaro.org/reporting-bugs/"
PRIVACY_POLICY_URL="https://manjaro.org/privacy-policy/"
LOGO=manjarolinux
If cat /etc/os-release does not work, try cat /etc/*release. * is a glob wild card explained later. If none of them works, try hostnamectl. ctl stands for control.
A file can be created with echo and output redirection >, or redirection with append >>.
$ echo "Hello" > hello.txt
$ cat hello.txt
Hello
$ echo "World" >> hello.txt
$ cat hello.txt
Hello
World
The behavior of the commands can be modified with flags.
$ cat -n hello.txt # number lines in output
$ cat --help # show cat help docs
Most commands will offer --help and --version flags to show short help documents and version.
This is not a requirement, but a custom most programmers follow when creating the command.
Getting Help with man
--help flags will only show a short help message.
For detailed manual, one should use man <command>.
Try man echo, man cat, and man man.
Man pages can be navigated by arrow keys or by scrolling.
To exit it, press q.
To search for a pattern, enter /<pattern>.
Press h for helps on navigating the man pages.
Arch user may need to manually install the manual pages by pacman -S man-db.
man also offers manuals for system calls and library calls in different sections.
Check man 3 open and man 2 open, which will show the manual for open in section 2 and three.
apropos, less, and pipe
If you have forgotten the name of a command, use apropos <keywords> to search relevent commands related to <keywords>.
apropos will usually output a long list.
You can display its content interactly by piping it to less:
apropos <keywords> | less
Navigating the contents presented by less is the same as navigating the man page. (Indeed, man pages likely use less).
| is the pipe keywords, which redirect the output of the previous command to be the input of the next command.
It is explained in advanced concepts.
copy, and Glob Pattern
cp copies the files and directories.
Here are the examples:
$ cp file.txt newfile.txt # create a new file named newfile.txt with the contents of file.txt
$ cp file.txt -t new/dir # create a copy of file.txt and place it uder new/dir
$ cp -r /path/to/dir /new/dir # the directory /path/to/dir recursively to /new/dir
A small detail many may miss is that cp -r /path/to/dir /new/dir will create /new/dir and make it a copy of /path/to/dir.
To copy the contents of /path/to/dir and place them under /new/dir, use the following:
$ cp -r path/to/dir/* -t /new/dir # copies every files and directories in dir/files/recursively and place them under /new/dir
Miscellanea
clear: clear terminal screensleep: sleep for some secondsrmdir: remove empty directorywhatis: display one-line manual page descriptoinwhereis: find where does the command locateps: get pid of processkill: kill a process with pid
More commands
There are many more shell commands, and we can not list everyone here.
To learn more, man pages and chatgpt are your friends.