back
Copyright © 2026 Mahidul Haque. This post is licensed under a
CC BY-NC-ND 4.0
license. You may read, learn, and share links to this post for non‑commercial, educational purposes, as long as you give appropriate attribution. You may not copy, reproduce, adapt, distribute, or use this work commercially without explicit permission.
Bash cheatsheet
Fork, clone, or contribute via the Github repo to keep it evolving with your needs.
Let’s dive in-
Introduction to Bash
Bash (Bourne Again SHell) is a command interpreter for Linux/Unix. You use Bash to:
- Execute commands
- Automate tasks
- Write scripts
- Manage processes
- Work with the system and network
Check version:
bash --version
Run Bash explicitly:
/bin/bash
Basic Commands
whoami # current user
pwd # print working directory
clear # clear terminal
history # command history
date # current date/time
uptime # system load & uptime
uname -a # system info
Filesystem Navigation
ls # list
ls -l # long view
ls -a # show hidden files
cd /path # change directory
cd ~ # home
cd .. # go up one level
cd - # previous directory
File & Directory Operations
Create
touch file.txt
mkdir folder
mkdir -p nested/folder/structure
Copy / Move / Delete
cp src dst
cp -r dir1 dir2
mv old new
rm file
rm -r folder
rm -rf folder # beware: force delete
File Info
stat file.txt
du -sh folder
df -h
Viewing & Editing Content
cat file
tac file
head -n 20 file
tail -f logfile
nano file
vim file
Search inside files:
grep "text" file
grep -ri "keyword" .
Permissions & Ownership
View
ls -l
Change Permissions
chmod 755 script.sh
chmod u+x file
chmod g-w file
Change Ownership
sudo chown user:group file
Legend:
- r = read
- w = write
- x = execute
Environment Variables
View:
printenv
echo $PATH
Set:
export VAR=value
Permanent (in ~/.bashrc):
export PATH="$PATH:/custom/bin"
Unset:
unset VAR
Command Line Operators
Redirection
> # overwrite
>> # append
< # input file
Examples:
ls > out.txt
echo "test" >> log.txt
Logical Operators
cmd1 && cmd2 # run cmd2 only if cmd1 succeeds
cmd1 || cmd2 # run cmd2 only if cmd1 fails
cmd1 ; cmd2 # run sequentially
Pipelines
cmd1 | cmd2 | cmd3
Example:
ps aux | grep bash | wc -l
Process Management
ps aux
top
htop
kill PID
kill -9 PID # force kill
jobs
fg %1
bg %1
Run in background:
command &
Run immune to hangup:
nohup script.sh &
Networking Essentials
ip a
ip r
ping host
curl http://site.com
wget file
traceroute host
netstat -tulnp
ss -tulnp
DNS lookup:
dig domain.com
host domain.com
Package Management
Debian/Ubuntu
sudo apt update
sudo apt install pkg
sudo apt remove pkg
RedHat/CentOS
sudo yum install pkg
sudo dnf install pkg
Bash Scripting Essentials
Every script starts with a shebang:
#!/bin/bash
Make script executable:
chmod +x script.sh
Run it:
./script.sh
Variables
name="Sir"
echo "$name"
Constants:
readonly PI=3.14
Arithmetic:
echo $((5 + 3))
let x=5+2
User Input
read -p "Enter name: " name
echo "Hello, $name"
Silent input:
read -sp "Password: " pass
Conditions & Comparisons
If / Else
if [ $a -gt 10 ]; then
echo "big"
elif [ $a -eq 10 ]; then
echo "equal"
else
echo "small"
fi
File tests
[ -f file ] # regular file
[ -d dir ] # directory
[ -r file ] # readable
[ -w file ] # writable
[ -x file ] # executable
String tests
[ "$a" = "$b" ]
[ -z "$a" ] # empty
Loops
For
for i in {1..5}; do echo $i; done
While
while true; do
echo "looping"
sleep 1
done
Until
until [ "$x" -eq 5 ]; do
echo "$x"
done
Functions
function greet() {
echo "Hello $1"
}
greet "Sir"
Return values:
return 5
Arrays
arr=(a b c)
echo ${arr[0]}
echo ${arr[@]}
echo ${#arr[@]}
String Operations
str="abcdef"
echo ${str:2:3} # substring
echo ${str#abc} # remove prefix
echo ${str%def} # remove suffix
echo ${str/abc/xyz} # replace once
File Operations in Scripts
Read file line-by-line
while IFS= read -r line; do
echo "$line"
done < file.txt
Check if file exists
if [ -e file.txt ]; then
echo "exists"
fi
Error Handling
Exit code:
echo $?
Strict mode (recommended):
set -euo pipefail
Try/catch-like:
command || { echo "failed"; exit 1; }
Advanced Bash Concepts
Command substitution
files=$(ls)
Here-doc
cat <<EOF
This is
a multi-line
string
EOF
Cron jobs
crontab -e
Aliases
alias ll="ls -al"
Traps
trap "echo Ctrl-C pressed" SIGINT
Security-Focused Bash Tips
Safe file deletion (shredding)
shred -u file.txt
Check open ports
ss -tulnp
Find world-writable files
find / -type f -perm -002 2>/dev/null
Hash a file (integrity)
sha256sum file.iso
Compare directories
diff -qr dirA dirB
Appendix: Common Bash One-Liners
Find big files
find / -type f -size +100M 2>/dev/null
Count files
ls -1 | wc -l
Kill process by name
pkill firefox
Monitor log updates
tail -f /var/log/syslog
Quick web request
curl -I https://example.com
Extract only IP addresses
grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"