Linux Commands Cheat Sheet: 50+ Essential Commands (2026)

✅ Tested on Ubuntu 24.04 LTS, Debian 12, Arch Linux — Last updated: June 2026
Linux commands are the foundation of every sysadmin's toolkit, and mastering them will transform the way you interact with your system. Whether you're a complete beginner who just installed their first Linux distro or an experienced user who wants a quick reference, this Linux command cheat sheet covers the 50+ most essential commands you'll use every day.
This is not a list of obscure one-liners. Every command here is practical, commonly used, and explained with real examples you can copy and run immediately.
Table of Contents
- File and Directory Navigation
- File Management Commands
- Permissions and Ownership
- Text Processing Commands
- Process Management
- Networking Commands
- Disk and Storage
- Package Management
- System Information
- Search and Find
- Archives and Compression
- Pro Tips and Shortcuts
File and Directory Navigation
These are the commands you'll type hundreds of times a day. Get them into muscle memory.
pwd — Print Working Directory
Shows your current location in the filesystem.
$ pwd
/home/jm/projectsls — List Directory Contents
The most used command in Linux. It has many useful flags:
ls # basic list
ls -l # long format (permissions, size, date)
ls -la # include hidden files (starting with .)
ls -lh # human-readable file sizes (KB, MB, GB)
ls -lt # sorted by modification time (newest first)
ls -lS # sorted by file size (largest first)
ls -R # recursive listing of all subdirectories
ls --color=auto # colorized output (usually the default)Pro tip: Add alias ll='ls -lah' to your ~/.bashrc or ~/.zshrc to get a detailed, human-readable listing with a two-letter command.
cd — Change Directory
cd /etc # go to /etc
cd ~ # go to home directory
cd .. # go up one directory
cd ../.. # go up two directories
cd - # go back to previous directory
cd /var/log/nginx # absolute pathFile Management Commands
cp — Copy Files and Directories
cp file.txt backup.txt # copy a file
cp -r /source/dir /dest/dir # copy directory recursively
cp -p file.txt dest/ # preserve timestamps and permissions
cp -u src dest # only copy if source is newer
cp -v file.txt dest/ # verbose (show what's being copied)mv — Move or Rename Files
mv old_name.txt new_name.txt # rename a file
mv file.txt /tmp/ # move to different directory
mv -i file.txt dest/ # prompt before overwriting
mv -n file.txt dest/ # never overwrite existing filesrm — Remove Files and Directories
Use with extreme caution. There is no recycle bin in the terminal.
rm file.txt # delete a file
rm -r directory/ # delete directory and all contents
rm -rf /path/to/dir # force delete without prompts (DANGEROUS)
rm -i file.txt # prompt before each deletion
rm *.log # delete all .log files in current directory⚠️ Warning: rm -rf with the wrong path can destroy your system. Always double-check. Consider using trash-cli as a safer alternative.
mkdir — Create Directories
mkdir new_dir # create a directory
mkdir -p a/b/c # create nested directories (no error if exists)
mkdir -m 755 public_html # create directory with specific permissionstouch — Create Empty Files / Update Timestamps
touch newfile.txt # create empty file or update timestamp
touch file1 file2 file3 # create multiple files at oncecat, less, more — View File Contents
cat /etc/os-release # print entire file to stdout
cat -n file.txt # show with line numbers
less /var/log/syslog # paged view (use q to quit, /search to find)
more file.txt # older pager (less is better)
head -20 file.txt # show first 20 lines
tail -50 /var/log/auth.log # show last 50 lines
tail -f /var/log/nginx/access.log # follow file in real timePermissions and Ownership
Understanding Linux permissions is essential for security and system administration. Every file has three sets of permissions: owner (u), group (g), and others (o).
chmod — Change File Permissions
# Symbolic mode
chmod +x script.sh # add execute permission for everyone
chmod u+x script.sh # add execute for owner only
chmod 644 file.txt # rw-r--r-- (owner read/write, others read)
chmod 755 directory/ # rwxr-xr-x (standard for directories)
chmod 600 private_key # rw------- (owner read/write only)
chmod -R 755 /var/www/html # recursive change
# Common permission sets:
# 777 = rwxrwxrwx (everyone can do everything — avoid!)
# 755 = rwxr-xr-x (standard executables)
# 644 = rw-r--r-- (standard files)
# 600 = rw------- (private files like SSH keys)chown — Change File Owner
chown user file.txt # change owner
chown user:group file.txt # change owner and group
chown -R www-data:www-data /var/www/html # recursive (common for web servers)
chown -R $USER:$USER ~/projects # give current user ownershipsudo — Execute as Superuser
sudo apt update # run command as root
sudo -u www-data php script.php # run as a specific user
sudo -i # open root shell (use with caution)
sudo !! # re-run last command with sudoText Processing Commands
The real power of Linux lies in chaining text processing tools together via pipes (|). These commands are the building blocks.
grep — Search Text Patterns
grep "error" /var/log/syslog # find lines containing "error"
grep -i "error" file.log # case-insensitive search
grep -r "TODO" /home/user/projects/ # recursive search
grep -n "function" script.py # show line numbers
grep -v "debug" app.log # exclude lines with "debug"
grep -c "error" app.log # count matching lines
grep -l "pattern" /etc/*.conf # show filenames that match
grep -E "error|warning" app.log # extended regex (OR)
grep -A3 "Exception" app.log # show 3 lines after match
grep -B2 "FAILED" deploy.log # show 2 lines before matchsed — Stream Editor (Find and Replace)
sed 's/old/new/' file.txt # replace first occurrence per line
sed 's/old/new/g' file.txt # replace all occurrences
sed -i 's/old/new/g' file.txt # edit file in-place
sed '/pattern/d' file.txt # delete lines matching pattern
sed -n '10,20p' file.txt # print lines 10 to 20awk — Text Processing and Reporting
awk '{print $1}' file.txt # print first column
awk '{print $NF}' file.txt # print last column
awk -F: '{print $1}' /etc/passwd # use : as delimiter, print first field
awk '{sum += $1} END {print sum}' numbers.txt # sum a column
df -h | awk '{print $5, $6}' # extract disk usage columnssort, uniq, wc
sort file.txt # sort lines alphabetically
sort -n numbers.txt # sort numerically
sort -rn file.txt # reverse numeric sort
sort -u file.txt # sort and remove duplicates
uniq file.txt # remove consecutive duplicates
uniq -c file.txt # count duplicates
wc -l file.txt # count lines
wc -w file.txt # count words
wc -c file.txt # count bytesProcess Management
ps — List Running Processes
ps aux # all processes with details
ps aux | grep nginx # find specific process
ps -ef --forest # tree view of process hierarchy
pgrep nginx # get PID of process by nametop and htop — Interactive Process Monitor
top # built-in process monitor (press q to quit)
htop # improved version (install: sudo apt install htop)
# htop shortcuts:
# F9 or k = kill process
# F6 = sort by column
# / = search
# F2 = settingskill — Terminate Processes
kill 1234 # send SIGTERM to PID 1234 (graceful)
kill -9 1234 # send SIGKILL (force kill)
kill -15 1234 # SIGTERM (same as default kill)
killall nginx # kill all processes named nginx
pkill -f "python app" # kill process matching patternBackground and Foreground Jobs
command & # run in background
jobs # list background jobs
fg %1 # bring job 1 to foreground
bg %1 # resume job 1 in background
Ctrl+Z # suspend current foreground job
nohup command & # run immune to hangups (survives logout)
disown %1 # detach job from shellNetworking Commands
ip — Show and Configure Network Interfaces
ip addr # show all IP addresses
ip addr show eth0 # show specific interface
ip route # show routing table
ip link set eth0 up # bring interface up
sudo ip addr add 192.168.1.100/24 dev eth0 # add IP addressss and netstat — Socket Statistics
ss -tulnp # show listening ports with process names
ss -tuln # TCP/UDP listening sockets
netstat -tulnp # older alternative (may need: sudo apt install net-tools)
ss -s # socket summary statisticscurl — Transfer Data from URLs
curl https://example.com # fetch URL
curl -I https://example.com # headers only
curl -o file.tar.gz https://example.com/file.tar.gz # save to file
curl -L URL # follow redirects
curl -u user:pass https://api.example.com # basic auth
curl -X POST -H "Content-Type: application/json"
-d '{"key":"value"}' https://api.example.com/endpointwget — Download Files
wget https://example.com/file.tar.gz # download file
wget -c https://example.com/large-file.iso # resume interrupted download
wget -P /tmp/ URL # save to specific directory
wget -r -l2 https://example.com/ # recursive download (depth 2)ping, traceroute, dig
ping google.com # test connectivity
ping -c 4 8.8.8.8 # ping 4 times then stop
traceroute google.com # trace network path (install: sudo apt install traceroute)
dig google.com # DNS lookup
dig google.com MX # query MX records
nslookup google.com # simpler DNS lookup
host google.com # another DNS toolDisk and Storage Commands
df -h # disk space usage (human readable)
df -h /home # disk space for specific mountpoint
du -sh /var/log # size of directory
du -sh * | sort -rh | head -10 # top 10 largest items in current dir
lsblk # list block devices
fdisk -l # list partitions (requires root)
mount # show mounted filesystems
free -h # RAM and swap usage
vmstat 1 5 # memory/swap/IO statistics every 1s for 5 iterationsPackage Management
Package management differs by distribution. Here are the commands for the most popular ones:
apt — Debian, Ubuntu, Linux Mint
sudo apt update # refresh package lists
sudo apt upgrade # upgrade all installed packages
sudo apt full-upgrade # upgrade with dependency changes
sudo apt install nginx # install package
sudo apt install -y nginx vim curl # install multiple, skip prompts
sudo apt remove nginx # remove package (keep config)
sudo apt purge nginx # remove package and config
sudo apt autoremove # remove unused dependencies
apt search nginx # search available packages
apt show nginx # show package details
dpkg -l | grep nginx # check if package is installeddnf/yum — Fedora, RHEL, CentOS
sudo dnf update # update all packages
sudo dnf install nginx # install package
sudo dnf remove nginx # remove package
sudo dnf search nginx # search packages
sudo dnf info nginx # package informationpacman — Arch Linux
sudo pacman -Syu # full system upgrade
sudo pacman -S nginx # install package
sudo pacman -R nginx # remove package
sudo pacman -Rs nginx # remove with dependencies
sudo pacman -Ss nginx # search packages
sudo pacman -Qi nginx # installed package info
sudo pacman -Sc # clean package cacheSystem Information Commands
uname -a # kernel version and system info
uname -r # just the kernel version
cat /etc/os-release # Linux distribution info
hostnamectl # hostname and system info (systemd)
lscpu # CPU information
lsmem # memory information
lspci # PCI devices (graphics cards, network cards)
lsusb # USB devices
dmidecode -t memory # detailed RAM info (requires root)
uptime # how long system has been running
who # who is logged in
w # who is logged in + what they're doing
last # login history
history # command history
history | grep apt # search command historysystemctl — Service Management (systemd)
sudo systemctl start nginx # start service
sudo systemctl stop nginx # stop service
sudo systemctl restart nginx # restart service
sudo systemctl reload nginx # reload config without full restart
sudo systemctl enable nginx # start at boot
sudo systemctl disable nginx # disable from boot
sudo systemctl status nginx # check status
systemctl list-units --type=service # list all services
journalctl -u nginx # logs for specific service
journalctl -u nginx -f # follow logs in real time
journalctl --since "1 hour ago" # logs from last hourSearch and Find Commands
find — Find Files and Directories
find /etc -name "*.conf" # find .conf files in /etc
find . -name "*.py" -type f # Python files in current dir
find /var/log -name "*.log" -mtime -7 # log files modified last 7 days
find . -size +100M # files larger than 100MB
find . -empty # empty files and directories
find . -perm 777 # files with 777 permissions
find . -user www-data # files owned by www-data
find . -name "*.tmp" -delete # find and delete .tmp files
find . -name "*.py" -exec grep -l "TODO" {} ; # find Python files with TODOlocate — Fast File Search
locate nginx.conf # find files by name (uses database)
sudo updatedb # update the locate database
locate -i "*.conf" # case-insensitive searchArchives and Compression
tar — Archive Tool
# Create archives
tar -czf archive.tar.gz directory/ # create gzip compressed tar
tar -cjf archive.tar.bz2 directory/ # create bzip2 compressed tar
tar -cJf archive.tar.xz directory/ # create xz compressed tar
# Extract archives
tar -xzf archive.tar.gz # extract gzip tar
tar -xzf archive.tar.gz -C /opt/ # extract to specific directory
tar -xjf archive.tar.bz2 # extract bzip2 tar
# List contents without extracting
tar -tzf archive.tar.gz
# Remember: c=create, x=extract, z=gzip, j=bzip2, J=xz, f=file, v=verbosezip and unzip
zip -r archive.zip directory/ # create zip archive
zip -e archive.zip file.txt # create encrypted zip
unzip archive.zip # extract zip
unzip archive.zip -d /opt/ # extract to specific directory
unzip -l archive.zip # list contentsPro Tips, Shortcuts, and Tricks
Keyboard Shortcuts
Ctrl+C # cancel current command
Ctrl+Z # suspend current command (use fg/bg to resume)
Ctrl+D # exit shell (EOF)
Ctrl+L # clear screen (same as 'clear')
Ctrl+A # move cursor to beginning of line
Ctrl+E # move cursor to end of line
Ctrl+U # delete from cursor to beginning
Ctrl+K # delete from cursor to end
Ctrl+W # delete word before cursor
Ctrl+R # reverse search command history
Tab # auto-complete commands and filenames
Tab Tab # show all completions
!! # repeat last command
!$ # last argument of previous command
!apt # run most recent apt command from historyPiping and Redirection
command1 | command2 # pipe output of cmd1 to cmd2
ls -la | grep ".sh" # list only shell scripts
cat file.txt | wc -l # count lines in file
# Redirection
command > file.txt # redirect stdout to file (overwrite)
command >> file.txt # append stdout to file
command 2> errors.txt # redirect stderr to file
command &> all.txt # redirect both stdout and stderr
command < input.txt # read stdin from file
# Practical examples
ps aux | grep python | grep -v grep # find Python processes
df -h | grep -v tmpfs # disk usage without tmpfs
cat /etc/passwd | cut -d: -f1 | sort # list users sorted alphabeticallyUseful Aliases to Add to ~/.bashrc
# Add these to ~/.bashrc or ~/.zshrc
alias ll='ls -lah'
alias la='ls -lA'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
alias free='free -h'
alias update='sudo apt update && sudo apt upgrade -y'
alias ports='ss -tulnp'
alias myip='curl -s ifconfig.me'
# After editing, apply changes:
source ~/.bashrcCommand Substitution and Variables
echo $(date) # command substitution
echo "Today is $(date +%Y-%m-%d)"
FILENAME="backup_$(date +%Y%m%d).tar.gz"
echo $FILENAME
# backup_20260608.tar.gz
# Arithmetic
echo $((5 + 3)) # prints 8
echo $((2 ** 10)) # prints 1024Multiple Commands
cmd1 && cmd2 # run cmd2 only if cmd1 succeeds
cmd1 || cmd2 # run cmd2 only if cmd1 fails
cmd1; cmd2 # run cmd2 regardless of cmd1's exit code
# Practical examples:
sudo apt update && sudo apt upgrade -y # update, then upgrade if update succeeded
mkdir -p /opt/app || echo "Directory exists"
cd /tmp && ls -la && du -sh *Troubleshooting Common Issues
"Permission denied" errors
# Check permissions
ls -la file
# If you need root access:
sudo command
# If it's a script that won't run:
chmod +x script.sh
./script.sh
# Check if the filesystem is mounted read-only:
mount | grep ro"Command not found" errors
# Find which package provides the command:
apt-file search binary_name # Debian/Ubuntu
dnf provides binary_name # Fedora
# Check if it's installed:
which nginx
type nginx
command -v nginx
# Check your PATH:
echo $PATHRunning out of disk space
# Find what's using space:
df -h
du -sh /var/log
du -sh /var/cache/apt
ls -lSh /var/log/
# Clean up on Debian/Ubuntu:
sudo apt autoremove
sudo apt autoclean
sudo journalctl --vacuum-size=200M # trim systemd logs to 200MB
# Find large files:
find / -size +500M -type f 2>/dev/null | sort -rh | head -20Frequently Asked Questions
What is the difference between rm and rm -rf?
rm deletes files. rm -r deletes directories recursively. Adding -f forces deletion without confirmation prompts. Never run rm -rf / or rm -rf /* — that's a system-destroying command.
How do I run a command as root without sudo prompting for a password?
Edit /etc/sudoers with sudo visudo and add: username ALL=(ALL) NOPASSWD: /path/to/command. Only do this for specific trusted commands.
How do I see the full output of a command that scrolls past the screen?
Pipe to less: command | less. Use arrow keys to scroll, q to quit, / to search.
How do I cancel a running command?
Press Ctrl+C to send SIGINT, which terminates most commands. If that doesn't work, press Ctrl+Z to suspend it, then run kill %1 to kill the suspended job.
What's the fastest way to search through command history?
Press Ctrl+R and start typing. Bash will search backwards through your history. Press Ctrl+R again to cycle to older matches. Press Enter to execute or the right arrow key to edit before running.
Now you have 50+ essential Linux commands with real examples you can use immediately. Bookmark this page — you'll be back. And if you're looking to level up your terminal workflow, check out our guide on how to use tmux to run multiple sessions without losing your work.
