Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Command Line Cheatsheet

Command Line Crash Course

Related tutorials



Note: Hold option (alt) and click a position in the current line to move your cursor to that position.

Clear history: ctrl + l

Clear everything left from current cursor position: ctrl + u

Clear everything right from current cursor position: ctrl + k

Re-call last input with sudo: sudo !!

Stop current process: ctrl + c

Jump to left: ctrl + a

Jump to right: ctrl + e

Help: help cd / help dir (...)

Finding Help: apropos directory / apropos search (...)

Define custom startup screen: sudo nano /etc/motd

Run a script as background process: python &

List all running process's: ps aux

Kill a running process: sudo kill 12345


Get the current path: pwd

Copy to clipboard: pwd | pbcopy

Paste: pbpaste

Get the current hostname: hostname

Get the current users: users

Get all info about the environment: env

Show calendar: cal

Show today's date: date

Exit terminal: exit


Use -R option to change permissions recursively.

List: ps -ef | grep apache | grep -v grep

Change permissions: chmod 755 index.php

Change owner: chown root index.php (root is the username)

Change group: chgrp www-data index.php (www-data is the groupname)

WordPress Files/Folder Permissions

Let apache be owner: chown www-data:www-data -R *

Change directory permissions rwxr-xr-x: find . -type d -exec chmod 755 {} \;

Change file permissions rw-r--r--: find . -type f -exec chmod 644 {} \;



List directory contents: ls

List all directory contents: ll

List all directory contents sorted by time edited: ls -alt

List directory (wildcard matching): ls *.txt

List all files of type: find . -name "*.txt" -print

Go back to previous directory: cd -

Make (empty) directory: mkdir sample-dirname

Remove (empty) directory: rmdir sample-dirname

Remove directory with all contents: rm -rf sample-dirname/

Remove directory contents and keep directory: rm -rf *

Checkout directory: cd sample-dirname

Browsing directories: pushd sample-dirname / popd / dirs (see


Create symlink: ln -s source-dirname destination-dirname

Update symlink: ln -sfn source-dirname destination-dirname

Remove symlink: unlink sample-dirname

  • -s: Create a symbolic link.
  • -f: If the target file already exists, then unlink it.
  • -F: If the target file already exists and is a directory, then remove/overwrite it.
  • -h: If the target file or directory is a symbolic link, do not follow it.
  • -n: Same as -h, for compatibility with other ln implementations.


Make (empty) file: touch sample-filename.txt

Change creation date: touch –t 201401011337 sample-filename.txt

Change modified date: touch –mt 201401011337 sample-filename.txt

Duplicate file: cp sample-filename.txt sample-filename-copy.txt

Copy/Page folder with content: cp -a folder/ new_folder

Move/Rename file: mv current-filename.txt new-filename.txt

Move/Rename file and prompt before overwriting an existing file: mv -i current-filename.txt new-filename.txt

Remove file: rm sample-filename.txt

View file: less sample-filename.txt / more sample-filename.txt

Write to file (will overwrite existing content): cat > sample-filename.txt (quit with ctrl+d)

Search for a filename (not content!) in the current directory: find sample-filename.txt

Search for a string (not filename!) inside all files in the current directory: ack "string" --php (documentation)

Search for a string inside all files in the current directory and subdrectories: grep -r "string" *

Search and replace within file: sed -i '' 's/original-text/new-text/g' sample-filename.txt

MD5 hash for files: md5 sample-filename.txt

MD5 hash for folders: tar c folder | md5sum

Encrypt file: openssl enc -aes-256-cbc -e -in sample-filename.txt -out sample-encrypted.txt

Decrypt file: openssl enc -aes-256-cbc -d -in sample-encrypted.txt -out sample-filename.txt


Access via ssh: ssh pi@

Copy file from server to local: scp pi@ ~/Desktop/ (use -r to recursively get complete folder)

Copy file from local to server: scp ~/Desktop/file.png pi@ (use -r to recursively get complete folder)

Copy file from local to server: rsync --exclude=".DS_Store" -vzcrSLh ~/Desktop/file.png pi@

Escape files with spaces in name like this: /path/to/file\\\ name.png


Show disc space: df -h

Show disc space (inodes): df -i

Show disc space for current directory: du -hs

Current processes (also CPS usage): top or htop

Show running php processes: ps aux | grep php

Monitor error log (stream as file grows): tail error.log -f -n 0


Start appliction: open -a [name-of-programm] e.g. open -a firefox

Open finder with current folder: open .


Register variable: export TESTING="Sample Text"

Echo variable: echo $TESTING

Unset variable: unset TESTING

Output & Redirects

Write to file: echo "Hello" > hello.txt

Append content from a file to another file: cat file1.txt >> file2.txt

Add the amount of lines, words, and characters to file2.txt: cat file1.txt | wc | cat > file2.txt

Sort the content of a file (like cat): sort hello.txt

Save to sorted content to a new file: cat file1.txt | sort > sorted-file1.txt

Sort and remove duplicates and save to a new file: sort file1.txt | uniq > uniq-file1.txt


Calculate (returns only int): echo $((123/2))


Check site feedback: ping

Show site IP: dig +short

Show A Record: dig a (Returns: 43 IN A aka public-name ttl internet record-type server-address)


Curl headers: curl -I



Installation: brew install tree


Installation: brew install httpie


http GET https://hofmannsven.test --verify=no


Fix OpenSSH Client Bug:

Nano CLI Basics

Jump to end of file: ctrl + w + v

Vim CLI Basics

Related tutorial



Custom config: ~/.vimrc




Insert mode: i

Command mode: ESC

Navigation: h, j, k, l

Move to next word: w (combine with number to skip words)

Move to beginning of word: b (combine with number to skip words)

Move to end of word: e (combine with number to skip words)

Insert three dashes: 3i-

Jump to next dash: f-

Jump to third dash: 3f-

Jump to next bracket: %

Jump to beginning of line: 0

Jump to end of line: $

Jump to next occurence of a word: *

Jump to previous occurence of a word: #

Jump to beginning of the file: gg

Jump to end of the file: G

Browser current working directory: :e . (allows browsing and searching with /)

Search word: / (Use n and N to navigate)

Insert as new line: o and O

Cut chars: x and X

Replace char: r

Delete: d

Cut whole line: dd

Cut text e.g. next word: dw

Undo: u

Redo: ctrl + r

Repeat last command: .

Switch to visual mode: v and V (select entire line)

Copy selected: y

Copy entire line: yy

Paste: p

Save changes: :w

Quit Vim: :q

Quit without saving: :q!

Save and exit: ESC + :x

Force quit (without saving): ESC + :q!

Source current file: :so %

Compare two files: vim -d index1.php index2.php

Split view

Horizontal split: :sp

Vertical split: :vsp

Jump up: ctrl + k

Jump down: ctrl + j

Jump left: ctrl + h

Jump right: ctrl + l



Open app: mvim




Command: :PluginInstall


Browser current working directory: -

Go up one folder: -

Create directory: d

Delete directory: D (asks for confirmation)

Delete selected file: D (asks for confirmation)

Create file: %


Toggle sidebar: :NERDTreeToggle


Switch from file to file: ctrl + p

Copy link

XIAOLONGLII commented Oct 3, 2019


Copy link

BhaveshSalunke commented Oct 14, 2019

good job

Copy link

earik87 commented Apr 14, 2020

This is nice!

Copy link

rchytas commented May 15, 2020

This is excellent!

Copy link

STEP0HEN commented Jun 15, 2020

This is awesome! Good job!

Copy link

aaronmclean1 commented Jan 26, 2021

Very cool! Great job!

Copy link

Abanoub69 commented Feb 6, 2021

many thanks

Copy link

jayakar-prog commented Jan 11, 2022


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment