System Toolbox

Table of Contents

Help

Description Command
<cmd>’s usage <cmd> --help
Get info on <cmd> info <cmd>
Show <cmd>’s manual man <cmd>
<cmd> summary whatis <cmd>
Search command by <keywords> apropos <keywords>
Query the type of <cmd> type <cmd>
Binary used on <cmd> which <cmd>

Display

Description Command
Clear screen clear
Reset terminal display reset

Directory management

Description Command
Current directory pwd
Go to directory cd [directory]
Go back a directory cd ..
Go back 2 directories cd ../../
Go HOME cd or cd ~
Go to root cd /
Last directory opened cd -
New directory mkdir [directory]
New path mkdir -p [nested/directories]
Remove empty directory rmdir [directory]
Remove directory & contents rm -r [directory]

Directory stack

pushd and popd work according to the LIFO principle

Description Command
Show stack dirs
Show indexed stack dirs -v
Clear stack dirs -c
Add <dir> to top and go pushd <dir>
Only add <dir> to top pushd -n
Toggle top two dirs pushd
Remove top dir; go to new top popd
Only remove top dir popd -n
Go dir index <I> from top pushd +<I>
Go dir index <I> from bottom pushd -<I>

File management

Description Command
List files ls
List files incl. hidden ls -a
List files (human friendly) ls -lh
New file touch [file]
View file less [file]
Remove a file rm [file]
Force removal w/o confirmation rm -f [file]
Copy file to new file cp [file] [newfile]
Copy file to directory cp [file] [dir]
Move/Rename mv [file] [new path/name]
New file from command output [command] > [file]
Append output to file [command] >> [file]
Read file contents w/command [command] < [file]
Description Command
Search for filename in /some/dir find /some/dir -name "file"
Lines in file with pattern grep "<pattern>" file
Lines in dir files with pattern grep -r "<pattern>" /some/dir
Lines missing the pattern grep -v "<pattern>" file
Lines with case-insensitive pattern grep -i "<pattern>" file

Command chains

Description Command
Run command A, then B [cmd-A]; [cmd-B]
Run command B if A succeeded [cmd-A] && [cmd-B]
Run command B if A failed [cmd-A] || [cmd-B]
Run command A, pass result to B [cmd-A] | [cmd-B]

Command history

Description Command
Show last n commands history n
Show last command that starts w/value ![value]:p
Run last command that starts w/value ![value]
Run the last command !!
Show the last command !!:p

Prepend any command with a space to exclude it from history.

$  sensitive_cmd

Jobs

Description Command/Keybinding
Show running jobs jobs
Run <cmd> in background <cmd> &
Suspend job/process C-z
Bring last job to foreground fg
Bring job <id> to foreground %<id>
Resume job <id> in background bg %<id>
End process C-c
EOF running process; exit shell. C-d

SSH key creation

We can create SSH keys using ssh-keygen.

$ ssh-keygen -f ~/.ssh/id_ed25519 -t ed25519 -C "public_email@example.com"

For legacy systems where ed25519 isn’t available: (avoid whenever possible!)

$ ssh-keygen -f ~/.ssh/id_rsa -t rsa -b 4096 -o -a 100 -C "public_email@example.com"

If more than one set of keys are needed consider ~/.ssh/id_ed25519_<profile> as a naming format. Also, add -C "descriptive comment".

To copy the new public key to the clipboard:

$ pbcopy < ~/.ssh/id_ed25519.pub

On systems with xclip rather than pbcopy we can:

alias pbcopy='xclip -selection clipboard -in'

Use a config file to ease key management. Also, consider adding custom git details from .gitconfig file.

Permissions

Permission is usually handle by the ch* family of commands.

On the terminal, ls -l outputs something like:

drwxr-xr-x 2 pete penguins 4096 Dec 1 11:45 .

where

type owner group other
d rwx r-x r-x
  • d. Directory. If -, then is a file.
  • r. Readable. Value 4.
  • w. Writable. Value 2.
  • x. Executable. Value 1.
  • -. Empty ie. permission off.
who r w x mode
owner (u) t t f 6
group (g) t f f 4
other (o) t f f 4

Owner is also known as ‘user’ to avoid being confused with ‘other’.

Change Permissions

allow user to exec <file>

$ chmod u+x <file>

disallow group from writing on <file>

$ chmod g-w <file>

allow user, and group to write on <file>

$ chmod ug+w <file>

modify <file> permission to match code

$ chmod 755 <file>

transfer <file> ownership to <user2>

$ sudo chown <user2> <file>

set <file>’s owner group

$ sudo chgrp <group2> <file>

set <file> owners to <user2> and <group2>

$ sudo chown <user2>:<group2> <file>

Sticky bit

This permission sticks files or directories, that is, prevents others from deleting and/or modifying them.

$ sudo chmod +t <dir>
# or
$ sudo chmod 1755 <file>

There are other special bits concerning SUID, and SGID which are mostly use to securely grant special permissions to non-root users in shared environments.