0% found this document useful (0 votes)
11 views

GitHub - RehanSaeed - Bash-Cheat-Sheet - A Cheat Sheet For Bash Commands.

Bash Cheat Sheet

Uploaded by

ate29a
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

GitHub - RehanSaeed - Bash-Cheat-Sheet - A Cheat Sheet For Bash Commands.

Bash Cheat Sheet

Uploaded by

ate29a
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 11

GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.

com/RehanSaeed/Bash-Cheat-Sheet

RehanSaeed / Bash-Cheat-Sheet Public

A cheat sheet for bash commands.

MIT license

953 stars 323 forks Branches Tags Activity

Star Notifications

Code Issues 2 Pull requests 1 Actions Projects Security Insights

1 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

main 2 Branches 0 Tags Go to file Go to file Code

RehanSaeed Merge pull request #6 from khairahscorner/airah/minor-fix 832229a · last year

LICENSE Initial commit 5 years ago

README.md fix: minor syntax error in one command last year

README MIT license

Bash Cheat Sheet


A cheat sheet for bash commands.

Command History

!! # Run the last command

touch foo.sh
chmod +x !$ # !$ is the last argument of the last command i.e. foo.sh

Navigating Directories

pwd # Print current directory path


ls # List directories
ls -a|--all # List directories including hidden
ls -l # List directories in long form
ls -l -h|--human-readable # List directories in long form with human readable sizes
ls -t # List directories by modification time, newest first
stat foo.txt # List size, created and modified timestamps for a file
stat foo # List size, created and modified timestamps for a directory
tree # List directory and file tree
tree -a # List directory and file tree including hidden
tree -d # List directory tree
cd foo # Go to foo sub-directory
cd # Go to home directory
cd ~ # Go to home directory
cd - # Go to last directory
pushd foo # Go to foo sub-directory and add previous directory to stack
popd # Go back to directory in stack saved by `pushd`

Creating Directories

mkdir foo # Create a directory


mkdir foo bar # Create multiple directories
mkdir -p|--parents foo/bar # Create nested directory
mkdir -p|--parents {foo,bar}/baz # Create multiple nested directories

mktemp -d|--directory # Create a temporary directory

Moving Directories

cp -R|--recursive foo bar # Copy directory


mv foo bar # Move directory

rsync -z|--compress -v|--verbose /foo /bar # Copy directory, overwrites destination


rsync -a|--archive -z|--compress -v|--verbose /foo /bar # Copy directory, without overwriting destination
rsync -avz /foo username@hostname:/bar # Copy local directory to remote directory
rsync -avz username@hostname:/foo /bar # Copy remote directory to local directory

Deleting Directories

rmdir foo # Delete empty directory

2 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

rm -r|--recursive foo # Delete directory including contents


rm -r|--recursive -f|--force foo # Delete directory including contents, ignore nonexistent files and never prompt

Creating Files

touch foo.txt # Create file or update existing files modified timestamp


touch foo.txt bar.txt # Create multiple files
touch {foo,bar}.txt # Create multiple files
touch test{1..3} # Create test1, test2 and test3 files
touch test{a..c} # Create testa, testb and testc files

mktemp # Create a temporary file

Standard Output, Standard Error and Standard Input

echo "foo" > bar.txt # Overwrite file with content


echo "foo" >> bar.txt # Append to file with content

ls exists 1> stdout.txt # Redirect the standard output to a file


ls noexist 2> stderror.txt # Redirect the standard error output to a file
ls 2>&1 > out.txt # Redirect standard output and error to a file
ls > /dev/null # Discard standard output and error

read foo # Read from standard input and write to the variable foo

Moving Files

cp foo.txt bar.txt # Copy file


mv foo.txt bar.txt # Move file

rsync -z|--compress -v|--verbose /foo.txt /bar # Copy file quickly if not changed
rsync z|--compress -v|--verbose /foo.txt /bar.txt # Copy and rename file quickly if not changed

Deleting Files

rm foo.txt # Delete file


rm -f|--force foo.txt # Delete file, ignore nonexistent files and never prompt

Reading Files

cat foo.txt # Print all contents


less foo.txt # Print some contents at a time (g - go to top of file, SHIFT+g, go to bottom of file, /foo to search for 'foo'
head foo.txt # Print top 10 lines of file
tail foo.txt # Print bottom 10 lines of file
open foo.txt # Open file in the default editor
wc foo.txt # List number of lines words and characters in the file

File Permissions

# Permission rwx Binary

7 read, write and execute rwx 111

6 read and write rw- 110

5 read and execute r-x 101

4 read only r-- 100

3 write and execute -wx 011

2 write only -w- 010

1 execute only --x 001

0 none --- 000

For a directory, execute means you can enter a directory.

3 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

For a directory, execute means you can enter a directory.

User Group Others Description

6 4 4 User can read and write, everyone else can read (Default file permissions)

7 5 5 User can read, write and execute, everyone else can read and execute (Default directory permissions)

• u - User
• g - Group
• o - Others
• a - All of the above

ls -l /foo.sh # List file permissions


chmod +100 foo.sh # Add 1 to the user permission
chmod -100 foo.sh # Subtract 1 from the user permission
chmod u+x foo.sh # Give the user execute permission
chmod g+x foo.sh # Give the group execute permission
chmod u-x,g-x foo.sh # Take away the user and group execute permission
chmod u+x,g+x,o+x foo.sh # Give everybody execute permission
chmod a+x foo.sh # Give everybody execute permission
chmod +x foo.sh # Give everybody execute permission

Finding Files
Find binary files for a command.

type wget # Find the binary


which wget # Find the binary
whereis wget # Find the binary, source, and manual page files

locate uses an index and is fast.

updatedb # Update the index

locate foo.txt # Find a file


locate --ignore-case # Find a file and ignore case
locate f*.txt # Find a text file starting with 'f'

find doesn't use an index and is slow.

find /path -name foo.txt # Find a file


find /path -iname foo.txt # Find a file with case insensitive search
find /path -name "*.txt" # Find all text files
find /path -name foo.txt -delete # Find a file and delete it
find /path -name "*.png" -exec pngquant {} # Find all .png files and execute pngquant on it
find /path -type f -name foo.txt # Find a file
find /path -type d -name foo # Find a directory
find /path -type l -name foo.txt # Find a symbolic link
find /path -type f -mtime +30 # Find files that haven't been modified in 30 days
find /path -type f -mtime +30 -delete # Delete files that haven't been modified in 30 days

Find in Files

grep 'foo' /bar.txt # Search for 'foo' in file 'bar.txt'


grep 'foo' /bar -r|--recursive # Search for 'foo' in directory 'bar'
grep 'foo' /bar -R|--dereference-recursive # Search for 'foo' in directory 'bar' and follow symbolic links
grep 'foo' /bar -l|--files-with-matches # Show only files that match
grep 'foo' /bar -L|--files-without-match # Show only files that don't match
grep 'Foo' /bar -i|--ignore-case # Case insensitive search
grep 'foo' /bar -x|--line-regexp # Match the entire line
grep 'foo' /bar -C|--context 1 # Add N line of context above and below each search result
grep 'foo' /bar -v|--invert-match # Show only lines that don't match
grep 'foo' /bar -c|--count # Count the number lines that match
grep 'foo' /bar -n|--line-number # Add line numbers
grep 'foo' /bar --colour # Add colour to output
grep 'foo\|bar' /baz -R # Search for 'foo' or 'bar' in directory 'baz'
grep --extended-regexp|-E 'foo|bar' /baz -R # Use regular expressions
egrep 'foo|bar' /baz -R # Use regular expressions

Replace in Files

4 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

sed 's/fox/bear/g' foo.txt # Replace fox with bear in foo.txt and output to console
sed 's/fox/bear/gi' foo.txt # Replace fox (case insensitive) with bear in foo.txt and output to console
sed 's/red fox/blue bear/g' foo.txt # Replace red with blue and fox with bear in foo.txt and output to console
sed 's/fox/bear/g' foo.txt > bar.txt # Replace fox with bear in foo.txt and save in bar.txt
sed 's/fox/bear/g' foo.txt -i|--in-place # Replace fox with bear and overwrite foo.txt

Symbolic Links

ln -s|--symbolic foo bar # Create a link 'bar' to the 'foo' folder


ln -s|--symbolic -f|--force foo bar # Overwrite an existing symbolic link 'bar'
ls -l # Show where symbolic links are pointing

Compressing Files

zip
Compresses one or more files into *.zip files.

zip foo.zip /bar.txt # Compress bar.txt into foo.zip


zip foo.zip /bar.txt /baz.txt # Compress bar.txt and baz.txt into foo.zip
zip foo.zip /{bar,baz}.txt # Compress bar.txt and baz.txt into foo.zip
zip -r|--recurse-paths foo.zip /bar # Compress directory bar into foo.zip

gzip
Compresses a single file into *.gz files.

gzip /bar.txt foo.gz # Compress bar.txt into foo.gz and then delete bar.txt
gzip -k|--keep /bar.txt foo.gz # Compress bar.txt into foo.gz

tar -c
Compresses (optionally) and combines one or more files into a single *.tar, *.tar.gz, *.tpz or *.tgz file.

tar -c|--create -z|--gzip -f|--file=foo.tgz /bar.txt /baz.txt # Compress bar.txt and baz.txt into foo.tgz
tar -c|--create -z|--gzip -f|--file=foo.tgz /{bar,baz}.txt # Compress bar.txt and baz.txt into foo.tgz
tar -c|--create -z|--gzip -f|--file=foo.tgz /bar # Compress directory bar into foo.tgz

Decompressing Files

unzip

unzip foo.zip # Unzip foo.zip into current directory

gunzip

gunzip foo.gz # Unzip foo.gz into current directory and delete foo.gz
gunzip -k|--keep foo.gz # Unzip foo.gz into current directory

tar -x

tar -x|--extract -z|--gzip -f|--file=foo.tar.gz # Un-compress foo.tar.gz into current directory


tar -x|--extract -f|--file=foo.tar # Un-combine foo.tar into current directory

Disk Usage

df # List disks, size, used and available space


df -h|--human-readable # List disks, size, used and available space in a human readable format

du # List current directory, subdirectories and file sizes


du /foo/bar # List specified directory, subdirectories and file sizes
du -h|--human-readable # List current directory, subdirectories and file sizes in a human readable format

5 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

du -h|--human-readable # List current directory, subdirectories and file sizes in a human readable format
du -d|--max-depth # List current directory, subdirectories and file sizes within the max depth
du -d 0 # List current directory size

Memory Usage

free # Show memory usage


free -h|--human # Show human readable memory usage
free -h|--human --si # Show human readable memory usage in power of 1000 instead of 1024
free -s|--seconds 5 # Show memory usage and update continuously every five seconds

Packages

apt update # Refreshes repository index


apt search wget # Search for a package
apt show wget # List information about the wget package
apt list --all-versions wget # List all versions of the package
apt install wget # Install the latest version of the wget package
apt install wget=1.2.3 # Install a specific version of the wget package
apt remove wget # Removes the wget package
apt upgrade # Upgrades all upgradable packages

Shutdown and Reboot

shutdown # Shutdown in 1 minute


shutdown now "Cya later" # Immediately shut down
shutdown +5 "Cya later" # Shutdown in 5 minutes

shutdown --reboot # Reboot in 1 minute


shutdown -r now "Cya later" # Immediately reboot
shutdown -r +5 "Cya later" # Reboot in 5 minutes

shutdown -c # Cancel a shutdown or reboot

reboot # Reboot now


reboot -f # Force a reboot

Identifying Processes

top # List all processes interactively


htop # List all processes interactively
ps all # List all processes
pidof foo # Return the PID of all foo processes

CTRL+Z # Suspend a process running in the foreground


bg # Resume a suspended process and run in the background
fg # Bring the last background process to the foreground
fg 1 # Bring the background process with the PID to the foreground

sleep 30 & # Sleep for 30 seconds and move the process into the background
jobs # List all background jobs
jobs -p # List all background jobs with their PID

lsof # List all open files and the process using them
lsof -itcp:4000 # Return the process listening on port 4000

Process Priority
Process priorities go from -20 (highest) to 19 (lowest).

nice -n -20 foo # Change process priority by name


renice 20 PID # Change process priority by PID
ps -o ni PID # Return the process priority of PID

Killing Processes

CTRL+C # Kill a process running in the foreground

6 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

kill PID # Shut down process by PID gracefully. Sends TERM signal.
kill -9 PID # Force shut down of process by PID. Sends SIGKILL signal.
pkill foo # Shut down process by name gracefully. Sends TERM signal.
pkill -9 foo # force shut down process by name. Sends SIGKILL signal.
killall foo # Kill all process with the specified name gracefully.

Date & Time

date # Print the date and time


date --iso-8601 # Print the ISO8601 date
date --iso-8601=ns # Print the ISO8601 date and time

time tree # Time how long the tree command takes to execute

Scheduled Tasks

* * * * *
Minute, Hour, Day of month, Month, Day of the week

crontab -l # List cron tab


crontab -e # Edit cron tab in Vim
crontab /path/crontab # Load cron tab from a file
crontab -l > /path/crontab # Save cron tab to a file

* * * * * foo # Run foo every minute


*/15 * * * * foo # Run foo every 15 minutes
0 * * * * foo # Run foo every hour
15 6 * * * foo # Run foo daily at 6:15 AM
44 4 * * 5 foo # Run foo every Friday at 4:44 AM
0 0 1 * * foo # Run foo at midnight on the first of the month
0 0 1 1 * foo # Run foo at midnight on the first of the year

at -l # List scheduled tasks


at -c 1 # Show task with ID 1
at -r 1 # Remove task with ID 1
at now + 2 minutes # Create a task in Vim to execute in 2 minutes
at 12:34 PM next month # Create a task in Vim to execute at 12:34 PM next month
at tomorrow # Create a task in Vim to execute tomorrow

HTTP Requests

curl https://example.com # Return response body


curl -i|--include https://example.com # Include status code and HTTP headers
curl -L|--location https://example.com # Follow redirects
curl -o|--remote-name foo.txt https://example.com # Output to a text file
curl -H|--header "User-Agent: Foo" https://example.com # Add a HTTP header
curl -X|--request POST -H "Content-Type: application/json" -d|--data '{"foo":"bar"}' https://example.com # POST JSON
curl -X POST -H --data-urlencode foo="bar" http://example.com # POST URL Form Encoded

wget https://example.com/file.txt . # Download a file to the current directory


wget -O|--output-document foo.txt https://example.com/file.txt # Output to a file with the specified name

Network Troubleshooting

ping example.com # Send multiple ping requests using the ICMP protocol
ping -c 10 -i 5 example.com # Make 10 attempts, 5 seconds apart

ip addr # List IP addresses on the system


ip route show # Show IP addresses to router

netstat -i|--interfaces # List all network interfaces and in/out usage


netstat -l|--listening # List all open ports

traceroute example.com # List all servers the network traffic goes through

mtr -w|--report-wide example.com # Continually list all servers the network traffic goes through
mtr -r|--report -w|--report-wide -c|--report-cycles 100 example.com # Output a report that lists network traffic 100 times

nmap 0.0.0.0 # Scan for the 1000 most common open ports on localhost
nmap 0.0.0.0 -p1-65535 # Scan for open ports on localhost between 1 and 65535
nmap 192.168.4.3 # Scan for the 1000 most common open ports on a remote IP address

7 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

nmap 192.168.4.3 # Scan for the 1000 most common open ports on a remote IP address
nmap -sP 192.168.1.1/24 # Discover all machines on the network by ping'ing them

DNS

host example.com # Show the IPv4 and IPv6 addresses

dig example.com # Show complete DNS information

cat /etc/resolv.conf # resolv.conf lists nameservers

Hardware

lsusb # List USB devices


lspci # List PCI hardware
lshw # List all hardware

Terminal Multiplexers
Start multiple terminal sessions. Active sessions persist reboots. tmux is more modern than screen .

tmux # Start a new session (CTRL-b + d to detach)


tmux ls # List all sessions
tmux attach -t 0 # Reattach to a session

screen # Start a new session (CTRL-a + d to detach)


screen -ls # List all sessions
screen -R 31166 # Reattach to a session

exit # Exit a session

Secure Shell Protocol (SSH)

ssh hostname # Connect to hostname using your current user name over the default SSH port 22
ssh -i foo.pem hostname # Connect to hostname using the identity file
ssh user@hostname # Connect to hostname using the user over the default SSH port 22
ssh user@hostname -p 8765 # Connect to hostname using the user over a custom port
ssh ssh://user@hostname:8765 # Connect to hostname using the user over a custom port

Set default user and port in ~/.ssh/config , so you can just enter the name next time:

$ cat ~/.ssh/config
Host name
User foo
Hostname 127.0.0.1
Port 8765
$ ssh name

Secure Copy

scp foo.txt ubuntu@hostname:/home/ubuntu # Copy foo.txt into the specified remote directory

Bash Profile
• bash - .bashrc
• zsh - .zshrc

# Always run ls after cd


function cd {
builtin cd "$@" && ls
}

# Prompt user before overwriting any files


alias cp='cp --interactive'
alias mv='mv --interactive'

8 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

alias rm='rm --interactive'

# Always show disk usage in a human readable format


alias df='df -h'
alias du='du -h'

Bash Script

Variables

#!/bin/bash

foo=123 # Initialize variable foo with 123


declare -i foo=123 # Initialize an integer foo with 123
declare -r foo=123 # Initialize readonly variable foo with 123
echo $foo # Print variable foo
echo ${foo}_'bar' # Print variable foo followed by _bar
echo ${foo:-'default'} # Print variable foo if it exists otherwise print default

export foo # Make foo available to child processes


unset foo # Make foo unavailable to child processes

Environment Variables

#!/bin/bash

env # List all environment variables


echo $PATH # Print PATH environment variable
export FOO=Bar # Set an environment variable

Functions

#!/bin/bash

greet() {
local world = "World"
echo "$1 $world"
return "$1 $world"
}
greet "Hello"
greeting=$(greet "Hello")

Exit Codes

#!/bin/bash

exit 0 # Exit the script successfully


exit 1 # Exit the script unsuccessfully
echo $? # Print the last exit code

Conditional Statements

Boolean Operators

• $foo - Is true
• !$foo - Is false

Numeric Operators

• -eq - Equals
• -ne - Not equals
• -gt - Greater than
• -ge - Greater than or equal to
• -lt - Less than
• -le - Less than or equal to
• -e foo.txt - Check file exists
• -z foo - Check if variable exists

9 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

String Operators

• = - Equals
• == - Equals
• -z - Is null
• -n - Is not null
• < - Is less than in ASCII alphabetical order
• > - Is greater than in ASCII alphabetical order

If Statements

#!/bin/bash

if [[$foo = 'bar']]; then


echo 'one'
elif [[$foo = 'bar']] || [[$foo = 'baz']]; then
echo 'two'
elif [[$foo = 'ban']] && [[$USER = 'bat']]; then
echo 'three'
else
echo 'four'
fi

Inline If Statements

#!/bin/bash

[[ $USER = 'rehan' ]] && echo 'yes' || echo 'no'

While Loops

#!/bin/bash

declare -i counter
counter=10
while [$counter -gt 2]; do
echo The counter is $counter
counter=counter-1
done

For Loops

#!/bin/bash

for i in {0..10..2}
do
echo "Index: $i"
done

for filename in file1 file2 file3


do
echo "Content: " >> $filename
done

for filename in *;
do
echo "Content: " >> $filename
done

Case Statements

#!/bin/bash

echo "What's the weather like tomorrow?"


read weather

case $weather in
sunny | warm ) echo "Nice weather: " $weather
;;
cloudy | cool ) echo "Not bad weather: " $weather
;;
rainy | cold ) echo "Terrible weather: " $weather

10 of 11 2/12/24, 2:36
GitHub - RehanSaeed/Bash-Cheat-Sheet: A cheat sheet... https://github.com/RehanSaeed/Bash-Cheat-Sheet

rainy | cold ) echo Terrible weather: $weather


;;
* ) echo "Don't understand"
;;
esac

Releases

No releases published

Packages

No packages published

Contributors 2

RehanSaeed Muhammad Rehan Saeed

khairahscorner Airah

11 of 11 2/12/24, 2:36

You might also like