Linux Terminal Cheat Sheet

This is a derivative work under a CC BY-NC-SA 4.0 license. See license information section for more details.

This document should be viewed with a monospace font and without line wrapping.
This document aims to improve the original by adding content, removing outdated information, improving readability and formatting, improving examples, and various other changes.

Legend

 | Placeholders are contained in '<' and '>', they should be replaced with the relevant string, e.g. '<file>' could be 'options.json'
 | A number will be appended to indicate separate placeholders of the same type, e.g. <file1>, <file2>
 | Multiple options are each separated by a '/' in the placeholder, some placeholders with multiple options include literal strings of text which should not be replaced, e.g. '<y/n>' could be 'y' or 'n'
 |
 | <file> is the path or name of a file
 | <directory> is the path to a directory, it should be inside '' or "" if the path includes whitespaces or other special characters
 | <command> is any valid terminal command
 | <number> can be any valid whole number, and can have decimals or other restrictions if specified
 | <package> can be the name of any valid package in a package repository
 | <address> can be any valid URL or IP address
 | <archive> is the path or name of an archive file
 | <text> can be almost any string of characters
 | <disk> can be any valid disk path, e.g. '/dev/sda'
 | <device> can be any valid disk or partition path, e.g. '/dev/nvme0n1p1' or '/dev/sdb'
 | <source> can be a file or directory acting as a source
 | <dest> can be a file or directory acting as a destination
 | <time> can be any valid date or time
 | <user> can be any valid user on a system
 | <group> can be any valid group on a system
 | 
 | <YYYY> is the year
 | <MM> is the month, from 01-12
 | <DD> is the day of the month, from 01-31
 | <D> is the day of the week, from 0-6, 0 being Sunday
 | <h> is the hour in 24-hour time, from 00-23
 | <m> is the minute, from 00-59
 | <s> is the second, from 00-59

Table of Contents

 | Section                                          Line number 
 |--------------------------------------------------------------
 | Basic Information .............................. 80
 |   Terminal Shortcuts                               81
 |   File Path Syntax                                 106
 |   Console Terminology                              117
 |   Shells                                           126
 |   Text Editors                                     134
 | Basic Commands ................................. 144
 |   Terminal Navigation                              145
 |   System Information                               176
 |   Time and Date                                    194
 | Installing Software ............................ 207
 |   Arch Linux (Using pacman)                        208
 |   Debian and Derivatives (Using apt)               223
 |   From Source (Do Your Own Research)               236
 | File Data ...................................... 248
 |   File Manipulation                                249
 |   File Searching                                   297
 |   Reading, Sorting, and Filtering Data             312
 |   Compressing and Extracting Data                  358
 |   Mounting and Filesystems                         371
 | Permissions .................................... 397
 |   Users and Groups                                 398
 |   File Permissions                                 409
 | Network ........................................ 429
 |   Local Area Network                               430
 |   Internet                                         447
 |   Data Over Internet                               461
 | Programs ....................................... 493
 |   Scheduling Programs                              494
 |   Background Processes                             517
 |   Process Management                               526
 | Managing Commands .............................. 556
 |   Flow Redirection                                 557
 |   Chaining Commands                                576
 |   Executing and Scripting                          585
 | License Information ............................ 616
 |--------------------------------------------------------------

Basic Information


Terminal Shortcuts

    Ctrl+L                                                | Clear the terminal screen
    Ctrl+D                                                | Exit (sends a signal indicating the end of a text stream)
    Ctrl+C                                                | Kills the current program (soft kill, lets the program intercept the command to clean up before exiting)
    Ctrl+Z                                                | Pause current program

    Shift+PgUp                                            | Scrolls up the terminal
    Shift+PgDn                                            | Scrolls down the terminal

    Ctrl+A                                                | Cursor to the start of the line
    Ctrl+E                                                | Cursor to the end of the line
    Ctrl+U                                                | Delete everything left of the cursor
    Ctrl+K                                                | Delete everything right of the cursor
    Ctrl+W                                                | Delete first word on the left

    'Up Arrow'                                            | Navigates previous commands
    'Down Arrow'                                          | Navigates previous commands
    Ctrl+R                                                | Searches previous commands
    Tab                                                   | Auto complete a file path or command
    Alt+.                                                 | Inserts the last argument from previous commands
    !!                                                    | Repeat last command

    Ctrl+Alt+F<number>                                    | Selects <number> console, F1-F6 switches between different virtual consoles, and F7 is used for the X session (with GUI windows and apps)

File Path Syntax

    /                                                     | Root directory, parent path to all the files on a system (always used to specify absolute paths)
                                                            | e.g. '/home/user/Documents/data/data-tuesday.csv' is the absolute path for './data/data-tuesday.csv' when working in '~/Documents'
    .                                                     | Working directory
                                                            | e.g. 'cd ./downloaded_files/' functions the same as 'cd /home/user/Downloads/downloaded_files/' when working in '/home/user/Downloads'
    ~                                                     | Home directory
                                                            | e.g. 'cd ~/Documents/'
    ..                                                    | Parent of working directory
                                                            |e.g. 'cd ..' functions the same as 'cd /home/user/' when working in '/home/user/Downloads'

Console Terminology

    Console                                               | Sometimes refers to a physical terminal (like the connected keyboard and monitor), and is a low-level part of the system
                                                            | can also be called a tty (teletypewriter)
    Terminal                                              | Sometimes refers to a terminal emulator, or the hardware (like a connected keyboard and monitor), running a shell
    Terminal Emulator                                     | A software wrapper for a shell
    Shell                                                 | A program which interprets and processes input and returns output
    Command Line                                          | An interface used to enter commands (Command-Line Interface, CLI)

Shells

    sh                                                    | A programming language described by the POSIX standard (sh is a specification, not implementation, and usually links to another implementation like bash)
    bash                                                  | A common implementation of the POSIX standard, although not fully POSIX-compliant (it may change the behaviour of valid POSIX shell scripts), it has more functionality than sh
                                                            | you can search for lists of differences between shells
    dash                                                  | The default shell for Debian, fully POSIX-compliant but not fully compatible with bash
    zsh                                                   | The default shell for Mac OS, very feature-rich but is incompatible with other shells in multiple ways

Text Editors

    nano <file>                                           | Opens the nano editor to create or edit <file>
                                                            | shortcuts and options are displayed at the bottom of the terminal
    vim <file>                                            | Opens the vim editor to create or edit <file>
                                                            | exit by typing ':q' in normal mode, ':wq' to save and exit, or ':q!' to exit without saving
                                                            | enter insert mode (start typing) by pressing 'i', exit to normal mode with the 'Esc' key, and enter visual mode (selecting text) with 'v'
                                                            | in normal mode, type 'dd' to delete the selected line, 'yy' to copy the line, 'P' to paste before cursor, and 'p' to paste clipboard after cursor
                                                            | select text by starting visual mode in the first position, then moving the cursor to the second position, press 'y' to copy, or 'd' to delete, then 'p' to paste

Basic Commands


Terminal Navigation

    ls -a                                                 | Lists all files and directories in working directory
    ls -l                                                 | Lists details of all files and directories in working directory
    ls -h                                                 | Lists all files and directories with with units (k, M, G, etc.) appended to the sizes for readability
    ls <directory>                                        | Lists files and directories in <directory>
    ls *.<text>                                           | Lists all .<text> files
                                                            | e.g. "ls *.sh" lists all .sh files, such as 'startup.sh' or 'cleanfiles.sh'
    ls !(<text>)                                          | Lists all files except <text>
    ls <text1> <text2>                                    | Lists results for both <text1> and <text2>

    cd <directory>                                        | Changes working directory to <directory>
    cd /                                                  | Changes working directory to root directory
    cd ..                                                 | Changes to parent of working directory
    cd -                                                  | Changes to previous working directory

    pwd                                                   | Prints the working directory

    history                                               | Lists history of commands

    alias <text>=<command>                                | Sets an alias for <text> to function as <command>
    <text1>=<text2>                                       | Sets variable '<text1>' to be '<text2>'
                                                            | you can use '<text2>' in other commands by typing '$<text1>'

    man <command>                                         | Shows the manual page for <command>

    less <file>                                           | Shows the contents of <file> in an interactive, dynamic interface
    <command> | less                                      | Shows the output of <command> in an interactive, dynamic interface

    echo <text>                                           | Prints <text>

System Information

    free                                                  | Lists information about system memory
    free -h                                               | Lists information about system memory in a human readable format
    dmidecode -t memory                                   | Lists information about physical memory

    lspci                                                 | Lists PCI and PCIe devices
    lspci -nnk                                            | Lists PCI and PCIe devices with some detail and drivers
    lspci -vvv                                            | Lists detailed information about PCI and PCIe devices
    lsusb                                                 | Lists USB devices
    lsusb -v                                              | Lists detailed USB device information
    lsusb -vvt                                            | Lists detailed USB device information as a tree
    lscpu                                                 | Lists CPU information

    uname -a                                              | Lists system software information including: hostname, kernel, and architecture
    hostnamectl                                           | Lists various system information
    neofetch                                              | Lists various system information

Time and Date

    timedatectl                                           | Prints information about current system time, time zone, and synchronization
    hwclock --show                                        | Prints the current date and time from the hardware clock
    date                                                  | Prints the current system time and date
    date +%H                                              | Prints the current hour with preceding zero
    date +%H:%M:%S                                        | Prints the current hour, minute, and seconds

    timedatectl set-ntp true                              | Enables the synchronization of system time with an NTP server
    hwclock --systohc                                     | Sets the hardware clock from the system clock
    timedatectl set-time 'YYYY-MM-DD hh:mm:ss'            | Sets the system time and date
    date 'MMDDhhmmYYYY'                                   | Sets the system time and date

Installing Software


Arch Linux (Using pacman)

    pacman -S <package>                                   | Installs <package> and any dependencies
    pacman -R <package>                                   | Uninstalls <package>
    pacman -Rs <package>                                  | Uninstalls <package> and any dependencies which are no longer required

    pacman -Qs <text>                                     | Searches repositories and lists packages with <text>
    pacman -Syu                                           | Updates all packages
                                                            | 'S' synchronizes packages including all dependencies
                                                            | 'y' refreshes package database
                                                            | 'u' upgrades outdated packages

    yay -S <package>                                      | Installs <package> from the AUR if available
                                                            | you can install yay with "pacman -S --needed git base-devel && git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si"

Debian and Derivatives (Using apt)

    apt install <package>                                 | Installs <package> and any dependencies
    apt remove <package>                                  | Uninstalls <package>
    apt autoremove                                        | Uninstalls orphaned dependencies (packages no longer required)
                                                            | best practice to run after "apt remove <package>" to clean any unused dependencies

    apt search <text>                                     | Searches repositories and lists packages with <text>
    apt update                                            | Updates repositories and checks for newer package versions
    apt upgrade                                           | Upgrades current packages
                                                            | best practice to first run "apt update" to get the latest packages
    apt full-upgrade                                      | Upgrades the entire system (will remove currently installed packages if needed to update the system)

From Source (Do Your Own Research)

    1. | wget <address>                                   | Downloads the source file (is usually .tar.gz, .tar.xz, .zip, or another compressed format)
    2. | ls                                               | Verify file name and existence
    3. | tar -xf <archive>                                | Decompress the file
       |                                                    | if .zip: "unzip <text>.zip"
    4. | ls                                               | Check for a new directory (most likely has the same, or similar name to <archive>)
    5. | cd <directory>                                   | Change working directory to the new <directory>
    6. | ./configure                                      | Create a makefile
    7. | make                                             | Build the software package
    8. | sudo make install                                | Install the package to the correct locations on the machine

File Data


File Manipulation

    cat <file>                                            | Prints the content of <file>
                                                            | append " | less" for better readability
    cat > <file>                                          | Creates or overwrites <file>, each line you enter will be written to each line of <file>
    head -n <number> <file>                               | Prints the content of <file> at <number> lines from the top
    tail -n <number> <file>                               | Prints the content of <file> at <number> lines from the bottom
    tail -f <file>                                        | Prints new data as <file> grows

    mkdir <directory>                                     | Creates <directory>
                                                            | e.g. "mkdir ../Downloads/plaintexts /mnt/tempstorage1/photos/"
                                                            |      "mkdir rich_texts"
                                                            |      "mkdir '~/My Photos/Tuesday/' "
    mkdir -p <directory>                                  | Creates <directory> as well as any specified parent directories if required

    cp <file1> <file2>                                    | Copies and renames <file1> to <file2>
                                                            | e.g. "cp ~/Downloads/example.png /mnt/my_images/renamedexample.png"
    cp <file> <directory>                                 | Copies <file> into <directory>
    cp -R <directory1> <directory2>                       | Copies and renames <directory1> to <directory2>
    cp <text>* <directory>                                | Copies all files starting with '<text>' to <directory>
                                                            | e.g. "cp data-* ../data" copies all files starting with 'data-' (such as 'data-tuesday.csv') to the 'data' directory

    mv <file1> <file2>                                    | Moves and renames <file1> to <file2>
                                                            | e.g. "mv photo.jpg photo-wednesday.jpg" renames photo.jpg
                                                            |      "mv photo.jpg .." moves photo.jpg into parent directory
                                                            |      "mv /mnt/newusb/data.txt ~/Downloads/sortme.txt" moves and renames data.txt
    mv <file> <directory>                                 | Moves <file> into <directory>
    mv <directory1> <directory2>                          | Moves <directory1> into <directory2>

    rm <file>                                             | Deletes <file> (or multiple)
                                                            | e.g. "rm data-tue* data-wed* *.svg" removes all files starting with 'data-tue' and all .svg files
                                                            |      "rm !(data-monday.txt)" removes all files except data-monday.txt
    rm -r <directory>                                     | Deletes <directory> (or multiple)
    rm -i <file>                                          | Asks for confirmation before deleting each file
    rm -f <file>                                          | Forces the deletion of <file>
    shred <file>                                          | Overwrites the data of <file> with random data
    shred -f <file>                                       | Forces overwriting the data of <file> with random data
    shred -u <file>                                       | Overwrites the data of <file> with random data and removes the file

    touch <file>                                          | Updates the accessed and modified dates of <file> to the current time
                                                            | <file> will be created if it does not exist

    ln <file1> <file2>                                    | Creates <file2> as a hard link to <file1>
                                                            | A hard link is a file which points to the same inode (the same data on the disk)
    ln -s <file1> <file2>                                 | Creates <file2> as a symbolic link to <file1>
                                                            | A symbolic link (or soft link) is a file which points to another file/directory
    ln -s <directory1> <directory2>                       | Creates <directory2> as a symbolic link to <directory1>

File Searching

    locate <text>                                         | Searches all file names in a database for <text>
                                                            | append " | less" for better readability
    locate -r /<text>$                                    | Searches all file names in a database for exact matches of <text>
    updatedb                                              | Updates the database

    find <directory> -name "<text>"                       | Searches all file names in <directory> for "<text>"
                                                            | e.g. "find ~ -name 'linux_ch*'" lists all files beginning with 'linux_ch'
                                                            |      "find ~ -name '*.png'" lists all .png files
                                                            | append " | less" for better readability
    find <directory> -size +<number><k/M/G/T>             | Searches <directory> for files larger than <number>, k/M/G/T are decimal prefixes
    find -name "<text>" -mtime -<number>                  | Searches <directory> for files named "<text>" modified less than <number> days ago
    find -type d                                          | Searches working directory for directories

Reading, Sorting, and Filtering Data

    grep <text> <file>                                    | Prints lines with <text> in <file>
    grep -i <text> <file>                                 | Prints lines with <text> in <file> while ignoring capitalization
    grep -v <text> <file>                                 | Prints lines without <text> in <file>
    grep -r <text> <directory>                            | Prints file names with <text> in <directory>
    grep -E "^<text>" <file>                              | Prints lines starting with <text> in <file>
    grep -E "<text>$" <file>                              | Prints lines ending with <text> in <file>
    grep -E "...<text>" <file>                            | Prints lines containing any 3 characters followed by <text> in <file>
    grep -E "[0-9]" <file>                                | Prints lines containing numbers in <file>
    grep -E "[a-zA-Z]" <file>                             | Prints lines containing alphabetical letters in <file>
    grep -E "^[A-Z].*\.$" <file>                          | Prints lines that start with a capital letter which is followed by any character, and the line ends with a period in <file>

    sort <file>                                           | Prints the sorted content of <file> alphabetically
    sort -u <file>                                        | Prints the sorted content of <file> alphabetically and removes duplicates
    sort -o <file1> <file2>                               | Prints the sorted content of <file2> alphabetically and outputs it to <file1>
    sort -r <file>                                        | Prints the sorted content of <file> reverse alphabetically
    sort -R <file>                                        | Prints the sorted content of <file> randomly

    uniq <file>                                           | Prints the content of <file> without any duplicated adjacent lines

    diff <file1> <file2>                                  | Displays the differences between <file1> and <file2>
    diff -c <file1> <file2>                               | Displays the differences between <file1> and <file2> with context for each difference
    diff -u <file1> <file2>                               | Displays the differences between <file1> and <file2> as one file

    wc <file>                                             | Prints the number of lines, number of words, byte size, and file path
                                                            | e.g. "wc Documents/plaintexts/*" lists all files in the plaintexts/ directory
                                                            |      "wc ~/Documents/data/data-friday.txt"

    cut -c <number1>-<number2> <file>                     | Prints everything between and including the <number1> character to <number2> character of each line

    sed 's/<text1>/<text2>/g' <file>                      | Prints the content of <file>, replacing every occurrence of <text1> with <text2>
                                                            | 's' specifies the substitution operation
                                                            | 'g' searches for all matches in each line
    sed '<number> s/<text1>/<text2>/g' <file>             | Prints the content of <file>, replacing every occurrence of <text1> with <text2> on line <number>
    sed '<number1>,<number2> s/<text1>/<text2>/g' <file>  | Prints the content of <file>, replacing every occurrence of <text1> with <text2> on lines <number1>-<number2>
    sed 's/<text1>/<text2>/<number>g' <file1>             | Prints the content of <file>, replacing every occurrence of <text1> which is after and including the <number> occurrence in each line, with <text2>
    sed -n '<number1>,<number2>p' <file>                  | Prints lines <number1> to <number2> in <file>
                                                            | 'p' prints the matched lines
                                                            | '-n' makes it not print the full contents of <file> as well
    sed -n '/^<text>/p' <file>                            | Prints every line that starts with "<text>" in <file>
    sed -n -e '1~2p' -e '1~7p' <file>                     | Prints every 2nd line starting at 1, and every 7th line starting at 1 in <file>
    sed '<number1>,<number2>d' <file>                     | Deletes lines <number1>-<number2> in <file>
    sed '<number>,$d' <file>                              | Deletes lines from line <number> to the last line in <file>
    sed '/<text>/d' <file>                                | Deletes all lines with "<text>" in <file>

Compressing and Extracting Data

    tar -zcf <text>.tar.gz <file>                         | Compresses <file> with gzip into the archive <text>.tar.gz
                                                            | 'z' uses gzip, 'j' uses bzip2, 'J' uses xz
                                                            | e.g. "tar -Jcf all_data.tar.xz data-monday.txt data-tuesday.txt data-wednesday.txt"

    tar -xf <archive>                                     | Decompresses <archive> and outputs contents to working directory
    tar -tf <archive>                                     | Lists contents of <archive> without decompressing it

    zcat <file>                                           | View compressed file in the console (same as cat)
    zmore <file>                                          | View compressed file in the console (same as more)
    zless <file>                                          | View compressed file in the console (same as less)

Mounting and Filesystems

    du -h                                                 | Lists storage usage of directories, human readable sizes
    du -ah                                                | Lists storage usage of files & directories, human readable sizes
    du -sh                                                | Lists storage summary of usage of directories, human readable sizes

    lsblk                                                 | Lists block storage devices
    df                                                    | Lists file systems, their available space, and mount points
    df -h                                                 | Lists file systems, their available space with human readable sizes, and mount points
    fdisk -l                                              | Lists all file systems in /proc/partitions
    fdisk <disk>                                          | Creates and modifies partition tables on <disk>
                                                            | in fdisk, enter 'm' for help, and 'q' to quit without saving

    mkfs.<text> <device>                                  | When <text> is a valid filesystem, formats <device> with that filesystem
                                                            | e.g. "mkfs.ext4 /dev/sda2"

    mount <device> <directory>                            | Mounts <device> to <directory>
    umount <device>                                       | Unmounts <device>

    dd if=<text1>.txt of=<text2>.txt conv=ucase           | Creates a copy of <text1>.txt with all uppercase letters named <text2>.txt
    dd if=<disk1> of=<disk2>                              | Clones <disk1> to <disk2>, <disk2> should be at least equal size to <disk1>
    dd if=/dev/zero of=<disk>                             | Overwrites all data on <disk>
    dd if=<text>.<iso/img> of=<disk>                      | Flashes <text>.<iso,img> to <disk>
                                                            | use mkfs with appropriate filesystem on <disk> beforehand
    dd if=<disk> of=<text>.<iso/img>                      | Makes an image of <disk>

Permissions


Users and Groups

    useradd <text>                                        | Creates a new user named <text>, an alternative command 'adduser' is made to be more user-friendly
    passwd <user>                                         | Changes the password for <user>
    userdel <user>                                        | Deletes <user>, an alternative command 'deluser' is made to be more user-friendly
    usermod -l <text> <user>                              | Changes the name of <user> to <text>

    groupadd <text>                                       | Create a new user group named <text>, an alternative command 'addgroup' is made to be more user-friendly
    groupdel <group>                                      | Deletes <group>, an alternative command 'delgroup' is made to be more user-friendly
    usermod -aG <group> <user>                            | Adds <user> to <group>

File Permissions

    chown <user> <file>                                   | Sets ownership of <file> to <user>
    chown <user>:<group> <file>                           | Sets user ownership of <file> to <user> and group ownership to <group>
    chown -R <user>:<group> <directory>                   | Sets user ownership of <directory> and all subdirectories to <user> and group ownership to <group>
    chmod <u/g/o/a><+/-/=><r/w/x> <file>                  | Modifies permissions of <file>
                                                            | 'u' is user, 'g' is group, 'o' is other, 'a' is all
                                                            | '+' adds a right, '-' removes a right, '=' sets a right
                                                            | 'r' is read permission, 'w' is write permission, 'x' allows execution
                                                            | e.g. "chmod a+x startup.sh" makes startup.sh executable by anyone
                                                            |      "chmod ug+rwx data.txt" gives full permissions of data.txt to user and group
    chmod <number1><number2><number3> <file>              | Modifies permissions of <file>
                                                            | <number> can be any whole number from 0-7
                                                            | 'r'=4, 'w'=2, 'x'=1
                                                            | <number1> is user, <number2> is group, <number3> is other
                                                            | e.g. 'rwx'='4+2+1'=7
                                                            |      'rx'='4+1'=5
                                                            |      "chmod 777 startup.sh" gives everyone read, write, and execute permissions
                                                            |      "chmod 664 photo.jpg" gives user and group read and write permissions, and read permission to others

Network


Local Area Network

    ip <a/addr>                                           | Displays information about network interfaces

    nmcli                                                 | Displays status and configurations of network interfaces
    nmcli device wifi list                                | Lists available Wi-Fi access points
    nmcli device wifi connect <text1> password <text2>    | Connect to SSID <text1> with the password <text2>
    nmcli --ask device wifi connect <text>                | Connect to open security SSID <text>
    nmcli connection edit type ethernet                   | Opens an interactive menu to manage ethernet connections

    nmtui                                                 | Displays an interactive TUI menu to configure network interfaces

    ufw status                                            | Displays open ports on the local system
    ufw <enable/disable>                                  | Enables and disables the ufw firewall
    ufw allow <number>                                    | Opens port <number>
    ufw deny <number>                                     | Closes port <number>

Internet

    ping <address>                                        | Pings <address>
    ping -c <number> <address>                            | Pings <address> <number> times
    ping -i <number> <address>                            | Pings <address> every <number> seconds

    traceroute <address>                                  | Traces the route of packets sent to <address>
    tracepath <address>                                   | Traces the path of packets sent to <address> (very similar to traceroute)

    dig <address>                                         | When <address> is a URL, it queries DNS and prints the response as well as other information
    nslookup <address>                                    | When <address> is a domain, it prints the IP address, when <address> is an IP address, it prints the domain name
    netstat -a                                            | Lists all connected and listening sockets
                                                            | append " | less" for better readability

Data Over Internet

    wget <address>                                        | Downloads the content content <address>
                                                            | e.g. "wget google.com" downloads 'index.html' from 'google.com'
                                                            |      "wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.17.2.tar.xz" downloads the compressed Linux 4.17.2 kernel
    curl <address>                                        | Prints the content at <address>
    curl -O <address>                                     | Downloads the content at <address> with the remote filename
    curl -o <text> <address>                              | Downloads the content at <address> with the filename of <text>

    ssh <address>                                         | Connects to SSH server at <address>, allows you to interact with the host remotely
    ssh <user>@<address>                                  | Connects to SSH server at <address> as <user>
    ssh <address> -p <number>                             | Connects to SSH server at <address> over port <number>
    ssh-keygen -t rsa                                     | Creates an SSH key pair in '~/.ssh', run this command on the client system
    ssh-copy-id <address>                                 | Copies the public key to <address> (the server), run this command on the client system

    sftp <user>@<address>                                 | Connects to SFTP server at <address> as <user>, allows you to securely transfer files between machines
                                                            | in sftp, enter 'help' or '?' for help
                                                            |          enter "get <file>" to download a file on the server
                                                            |          enter "put <file> <directory>" to upload local <file> to remote <directory>
                                                            |          enter "rm <file>" to delete <file> on the server
                                                            |          enter "rmdir <directory>" to delete <directory> on the server
                                                            |          enter "mkdir <directory>" to create <directory> on the server

    scp <source> <user>@<address>:<dest>                  | Copies <source> on local machine to <dest> at <address>
    scp <user>@<address>:<source> <dest>                  | Copies <source> from <address> to <dest> on local machine

    rsync <source> <user>@<address>:<dest>                | Copies <source> on local machine to <dest> at <address>
    rsync <user>@<address>:<source> <dest>                | Copies <source> from <address> to <dest> on local machine
    rsync -P <user>@<address>:<source> <dest>             | Copies <source> from <address> to <dest> on local machine and allows resuming the command after interruption

    w3m <address>                                         | Opens a TUI internet browser and loads <address>, not included on most distributions

Programs


Scheduling Programs

    watch <command>                                       | Executes <command> every 2 seconds and displays the output
    watch -n <number> <command>                           | Executes <command> every <number> seconds (up to 1 decimal place) and displays the output

    at <time>                                             | Allows you to enter commands which will execute on <time>
    atq                                                   | Lists pending commands
    atrm <number>                                         | Removes pending command <number>

    sleep <number>                                        | Pauses for <number> seconds
                                                            | <number> can be appended with s, m, h, or d to specify units

    crontab -e                                            | Creates or edits the current user's crontab entry
                                                            | in crontab, valid format is "<m> <h> <DD> <MM< <D> <command>"
                                                            | replace units with '*' for any
                                                            | e.g. "* * * * * <command>" executes every minute
                                                            |      "00 15 1,10,15,18 * * <command>" executes on days 1, 10, 15, and 18 each month at 3:00pm
                                                            |      "45 17 1-21 * * <command>" executes every day at 5:45pm on days 1-21 each month
                                                            |      "0 */2 * * * <command>" executes every 2 hours
                                                            |      "/30 9-17 * * 1-5 <command>" executes every 30 minutes, from 9am-5pm on Monday to Friday
    crontab -l                                            | Lists the current user's crontab entry
    crontab -r                                            | Deletes the current user's crontab entry

Background Processes

    <command> &                                           | Runs <command> in the background
    nohup <command>                                       | Runs <command> and continues running when terminal is closed

    jobs                                                  | Lists programs running in the background
    fg <number>                                           | Makes program <number> run in the foreground
    bg <number>                                           | Makes program <number> run in the background

Process Management

    w                                                     | Lists current users and what they are doing
    top                                                   | Shows a dynamic list of running processes and system resources
                                                            | 'q' to quit, 'h' for help, 'k' to kill a process
    htop                                                  | Shows an interactive dynamic list of running processes and system resources with color
    ps                                                    | Lists currently running processes
    ps -ef                                                | Lists all currently running processes
                                                            | append " | less" for better readability
    ps -ejH                                               | Lists process tree
    kill <number>                                         | Gracefully kill process with <number> process ID (sends signal to process to exit)
                                                            | identical to "kill -15 <number>"
                                                            | can replace <number> with process name
    kill -9 <number>                                      | Kills process with <number> process ID (requests the OS to immediately cease process)
    killall <text>                                        | Kills multiple processes by name, matching "<text>"

    systemctl enable <text>.service                       | Enables the <text>.service systemd unit
    systemctl start <text>.service                        | Starts the <text>.service systemd unit
    systemctl stop <text>.service                         | Stops the <text>.service systemd unit
    systemctl status <text>.service                       | Displays information and the most recent logs of the <text>.service systemd unit
    journalctl -u <text>.service                          | Prints log entries of the <text>.service systemd unit
    journalctl -f <text>.service                          | Prints the most recent log entries of the <text>.service systemd unit and continuously prints new entries

    halt                                                  | Halts the machine
    shutdown -H                                           | Halts the machine
    poweroff                                              | Shuts down the machine
    shutdown -P                                           | Shuts down the machine
    reboot                                                | Restarts the machine
    shutdown -r                                           | Restarts the machine

Managing Commands


Flow Redirection

    <command> > <file>                                    | Standard output of <command> is redirected to <file>
                                                            | e.g. "ps -ejH > output.txt"
                                                            |      "cat > data.txt"
    <command> 2> <file>                                   | Error output of <command> is redirected to <file>
    <command> &> <file>                                   | Standard and error output of <command> is redirected to <file>
                                                            | e.g. "&> /dev/null" can be used to silence the output of a command

    <command> >> <file>                                   | Standard output of <command> is redirected and appended to <file>
                                                            | e.g. "ls -a notadir/ >> data.txt 2>> errors.log"
    <command> 2>> <file>                                  | Error output of <command> is redirected and appended to <file>
    <command> &>> <file>                                  | Standard and error output of <command> is redirected and appended to <file>

    <command> < <file>                                    | Inputs <file> to <command>
    <command> << "<text>"                                 | <command> stops at <text>
                                                            | e.g. "cat > <file> << endhere" will not write the entered lines until you enter 'endhere' on a new line
    <command> <<< "<text>"                                | Inputs <text> to <command>

Chaining Commands

    <command1> ; <command2>                               | Executes <command1> then executes <command2>
    <command1> | <command2>                               | Executes <command1> and redirects the output to <command2>
    <command1> && <command2>                              | Executes <command1> and executes <command2> if <command1> was successful
    <command1> || <command2>                              | Executes <command1> and executes <command2> if <command1> failed
    <command1> && { <command2> ; <command3> ; }           | Executes <command1> and executes both <command2> then <command3> if <command1> was successful
    <command1> && <command2> || <command3>                | Executes <command1> and executes <command2> if <command1> was successful, or <command3> if <command1> failed

Executing and Scripting

    <file>                                                | Executes <file> (assuming <file> has correct executable permission)
                                                            | e.g. "~/Downloads/install.sh" runs 'install.sh'
                                                            |      "./uninstall.sh" runs the 'uninstall.sh' file in the working directory
                                                            |      "/usr/bin/pwd" functions the same as 'pwd'
                                                            |      "/usr/bin/man ls" functions the same as 'man ls'

     script.sh                                            | This is a file named 'script.sh', with the contents of each line after each '>' character
    >echo "Here is the time:"                               | each newline character is interpreted the same as ';', it will execute each command one after the other
    >date +%H:%M:%S                                         | e.g. 'date' followed by "echo End" on a new line functions the same as "date; echo End"
    >echo "That is the time."                               | the script exits after the last command
    >echo "Goodbye."

     easystart.sh                                         | This script is named 'easystart.sh', it should include '&&' between every command to stop on failure, but works as an example
    >mkdir ./my-program                                     | first, it creates a 'my-program/' directory in the working directory
    >cd ./my-program                                        | second, it changes the working directory to 'my-program/'
    >wget example.com/someprogram && ./bashinstall.sh       | third, it downloads something from 'example.com/program', and if successful, executes 'bashinstall.sh'
    >./myprogram                                            | fourth, it executes 'myprogram'

     bashinstall.sh                                       | This script is specifically a bash script, which uses a shebang (on the first line) to be run with bash
    >#!/bin/bash                                            | indicates that the script will be executed with bash
    >InstallDir='/usr/local/bin/myapp'                      | sets the 'InstallDir' variable to a specific directory
    >mkdir $InstallDir && echo "Created app directory"      | creates the specified installation directory and tells the user that it made a directory
    >pacman -S somedependency --noconfirm                   | installs a dependency without any confirmations
    >cd $InstallDir && wget mydomain.com/app                | changes working directory to $InstallDir and downloads an app
    >./install && echo "Installed app"                      | runs an install script and tells the user the app was installed
    >systemctl enable app && systemctl restart app          | enables and starts the app as a service
    >echo "Success!"                                        | tells the user "Success!"
    >sleep 2                                                | pauses for 2 seconds before exiting

License Information

  This document is a derivative work of the "Linux Bash Shell Cheat Sheet" PDF by Raph D. from 2011:
    https://web.archive.org/web/20111018212827/http://dl.dropbox.com/u/397277/bash_shell_cheat_sheetV2.pdf
  The original document was published on their blog (archived) here:
    https://web.archive.org/web/20120106085933/http://freeworld.posterous.com/
  An available copy of the original can be found here:
    https://oit.ua.edu/wp-content/uploads/2020/12/Linux_bash_cheat_sheet-1.pdf

Linux Cheat Sheet © 2024 is licensed under CC BY-NC-SA 4.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/