back

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]+"
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.