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

✅ Tested on Ubuntu 26.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.
Practicing this on a live server, or need one to follow along? See our comparison of the best Linux VPS hosting providers for 2026 if you need a Linux box to work on.
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.
- File and Directory Navigation
- File Management Commands
- Permissions and Ownership
- Text Processing Commands
- Process Management
- Networking Commands
- Disk and Storage Commands
- Package Management
- System Information Commands
- Search and Find Commands
- Archives and Compression
- Pro Tips, Shortcuts, and Tricks
- Troubleshooting Common Issues
- Frequently Asked Questions
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.
Further Reading

JM Carreira
I’ve used Linux since 2008 and it has been my main system since 2021. When an article has a “Tested on” box, I ran the steps on my Lenovo Tiny. More about me and the test machine.
