Skip to content

Linux Commands

PDF Markdown HTML

A working reference for the commands you actually type at a shell. Distro-agnostic where it matters, with notes on the apt vs dnf split for package management.

Command Action
pwd print the current working directory
ls -lah long listing, all files, human-readable sizes
cd - jump back to the previous directory
cp -r src dst copy recursively (directories)
mv old new move or rename
rm -r dir remove a directory and its contents
mkdir -p a/b/c create nested directories in one shot
touch file create an empty file / update its timestamp
ln -s target link create a symbolic link
tree -L 2 show the directory tree, 2 levels deep

rm -rf is unforgiving. There is no trash can. Double-check the path before running rm -rf, and never run it with a variable that could be empty (rm -rf "$DIR/" deletes / if $DIR is unset).

Viewing & Searching

Command Action
cat file dump a whole file to stdout
less file page through a file (q to quit, / to search)
head -n 20 file first 20 lines
tail -f log follow a file as it grows — great for logs
grep -rin 'text' . recursive, case-insensitive, with line numbers
find . -name '*.log' find files by name pattern
find . -mtime -1 files modified in the last day
wc -l file count lines
sort file | uniq -c count unique lines

Permissions & Ownership

Command Action
chmod +x script.sh make a file executable
chmod 644 file owner read/write, group + others read
chmod 755 dir owner all, group + others read/execute
chown user:group file change owner and group
chmod -R 750 dir apply recursively
sudo !! re-run the previous command with sudo

Octal in three digits: read = 4, write = 2, execute = 1. Add them per role (owner, group, other). 7 = rwx, 6 = rw-, 5 = r-x.

Processes & System

Command Action
ps aux | grep node find running processes by name
top live process/CPU view (htop if installed)
kill -9 PID force-kill a process by PID
pkill -f pattern kill by matching the full command line
df -h disk space by filesystem, human-readable
du -sh * size of each item in the current directory
free -h memory usage
systemctl status nginx check a service's state (systemd)
journalctl -u nginx -f follow a service's logs

Networking

Command Action
curl -I https://site fetch just the response headers
curl -fsSL url | sh download and run (inspect first!)
wget url download a file
ssh user@host open a remote shell
scp file user@host:/path copy a file over SSH
ss -tulpn listening ports and their processes
ping -c 4 host send 4 ICMP probes
dig +short example.com resolve a domain, terse output
ip a show network interfaces and addresses

Archives & Packages

Command Action
tar czf out.tgz dir/ create a gzipped tarball
tar xzf out.tgz extract a gzipped tarball
tar tzf out.tgz list contents without extracting
zip -r out.zip dir/ create a zip archive
unzip out.zip extract a zip archive

Package managers — Debian/Ubuntu vs Fedora/RHEL

# Debian / Ubuntu (apt)
sudo apt update && sudo apt upgrade
sudo apt install <pkg>
sudo apt remove <pkg>

# Fedora / RHEL / Rocky (dnf)
sudo dnf check-update
sudo dnf install <pkg>
sudo dnf remove <pkg>