A cost cheatsheet for running a product cheaply: free-tier frontend hosting, serverless databases, …
Bash CLI One-Liners Cheatsheet Bash CLI One-Liners Cheatsheet

Summary
These are the one-liners I actually type on production boxes. Muscle-memory commands for finding files, chasing disk usage, poking APIs, and triaging misbehaving processes. When a one-liner turns into a script, the Bash Basics Cheatsheet covers making it robust.
find + xargs
Docs: find(1) man page
Expand your knowledge with Bash Basics Cheatsheet
find /var/log -name '*.gz' -mtime +30 -delete # old compressed logs
find . -type f -size +100M # large files
find . -name '*.sh' -exec chmod +x {} + # batch chmod
find . -type f -name '*.yaml' | xargs grep -l 'image:'
find . -name '*.log' -print0 | xargs -0 rm -- # -print0/-0: safe with spaces
find . -type d -empty -delete # remove empty dirs
find /etc -newer /etc/hostname -type f # changed since that file
ls *.png | xargs -P4 -I{} convert {} {}.webp # -P4: 4 parallel jobs
grep
Docs: grep(1) man page
Deepen your understanding in Bash Basics Cheatsheet
grep -r 'TODO' src/ # recursive
grep -rn --include='*.tf' 'aws_s3' . # line numbers, filter by glob
grep -E 'error|fatal|panic' app.log # extended regex, alternation
grep -o 'req_id=[a-f0-9]*' app.log # print only the match
grep -c '500' access.log # count matching lines
grep -v '^#' config | grep -v '^$' # strip comments and blanks
grep -B2 -A5 'Traceback' app.log # context: 2 before, 5 after
grep -i -l 'password' -r . 2>/dev/null # files containing, case-insensitive
sort / uniq / wc Pipelines
Docs: sort(1) man page
sort file | uniq -c | sort -rn | head # frequency count, descending
sort -t: -k3 -n /etc/passwd # numeric sort on field 3
sort -u hosts.txt # sort + dedupe in one
sort -h # human sizes: 1K < 2M < 3G
uniq -d sorted.txt # only duplicated lines
wc -l < file # line count, no filename
comm -23 <(sort a.txt) <(sort b.txt) # lines in a but not b
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head # top IPs
For heavier field surgery in these pipelines, see the Bash sed & awk Cheatsheet.
Explore this further in Python Basics & CLI Cheatsheet
tar / gzip / zstd
Docs: tar(1) man page
Discover related concepts in Jenkins Cheatsheet
tar czf app.tar.gz app/ # create gzip archive
tar xzf app.tar.gz -C /opt/ # extract to a directory
tar tzf app.tar.gz # list contents without extracting
tar czf - /data | ssh host 'cat > /backup/data.tar.gz' # archive over ssh
tar --exclude='.git' --exclude='node_modules' -czf src.tar.gz .
tar caf app.tar.zst app/ # -a: pick compressor by extension
zstd -T0 bigfile # zstd on all cores; much faster than gzip
gzip -dk file.gz # decompress, keep original
zcat access.log.gz | grep ' 500 ' # search inside without extracting
curl
Docs: curl manpage on curl.se
Uncover more details in Bash Basics Cheatsheet
curl -I https://example.com # headers only
curl -sfSL https://example.com/health # silent, fail on HTTP errors
curl -o out.bin -L https://example.com/dl # follow redirects, save
curl -w '%{http_code} %{time_total}s\n' -o /dev/null -s https://api.example.com
curl -X POST https://api.example.com/v1/deploys \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{"service": "web", "version": "1.4.2"}'
curl --retry 5 --retry-delay 2 --retry-all-errors -sf https://flaky.example.com
curl -u user:pass ftp://host/file # basic auth
curl -x http://proxy:3128 https://example.com # via proxy
jq Basics
Docs: jq Manual on jqlang.org
Journey deeper into this topic with Python Basics & CLI Cheatsheet
curl -s https://api.example.com/pods | jq . # pretty-print
jq '.items[].metadata.name' pods.json # extract a field
jq -r '.token' resp.json # -r: raw, no quotes
jq '.items | length' pods.json # count
jq '.[] | select(.status == "failed") | .id' jobs.json # filter
jq '.[] | {name: .metadata.name, ip: .status.podIP}' # reshape
jq -r '.[] | [.name, .cpu] | @tsv' nodes.json # TSV for awk/column
jq -n --arg env "$ENV" '{environment: $env}' # build JSON from shell
jq 'keys' obj.json # what fields exist?
Disk & Process Triage
Docs: ps(1) man page
Enrich your learning with Python Threading & Concurrency Cheatsheet
df -h # filesystem usage
du -sh /var/* | sort -rh | head # what's eating this disk
du -xh --max-depth=2 / | sort -rh | head -20 # -x: don't cross filesystems
ncdu /var # interactive, if installed
ps aux --sort=-%mem | head # top memory hogs
ps aux --sort=-%cpu | head # top CPU hogs
ps -ef --forest # process tree
top -o %MEM # top sorted by memory (htop if you can)
lsof -p 1234 # files open by PID
lsof +D /var/log # who has files open under a dir
lsof -i :8080 # what's listening on 8080
kill -TERM 1234 && sleep 5 && kill -0 1234 && kill -KILL 1234
du doesn’t add up? A deleted file is still held open by a process. lsof +L1 lists them. Restart the offender (usually a log-hoarding daemon) and the space comes back.Network
Docs: ss(8) man page
Gain comprehensive insights from Docker Cheatsheet
ss -tlnp # listening TCP sockets + owning process
ss -s # socket summary (state counts)
dig +short example.com # just the A record
dig example.com MX # specific record type
dig @1.1.1.1 example.com # query a specific resolver
dig -x 93.184.216.34 # reverse lookup
nc -zv host 5432 # is that port open?
nc -l 9000 # quick listener for testing
timeout 3 bash -c '</dev/tcp/host/443' && echo open # no nc? pure bash
curl -sv telnet://host:6379 </dev/null # handshake check via curl
ip -br addr; ip route # interfaces and routing at a glance
ssh / scp / rsync
Docs: rsync(1) man page
ssh -J bastion.example.com user@10.0.2.15 # jump host
ssh -L 5432:db.internal:5432 bastion # local port forward
ssh host 'sudo journalctl -u nginx -n 50' # run remote command
ssh-copy-id user@host # install your key
scp file.tar.gz user@host:/tmp/ # simple copy
scp -r user@host:/var/log/app ./logs/ # recursive pull
rsync -avz --progress ./site/ user@host:/var/www/site/ # sync (mind the slashes)
rsync -avz --delete src/ dst/ # exact mirror; deletes extras
rsync -avzn --delete src/ dst/ # -n: ALWAYS dry-run first
rsync -avz -e 'ssh -J bastion' data/ user@internal:/data/
Trailing slash on the source means “contents of”; no slash copies the directory itself.
Master this concept through Bash Basics Cheatsheet
History Tricks
Docs: History Expansion, GNU Bash manual
Delve into specifics at Bash Basics Cheatsheet
| Trick | Effect |
|---|---|
!! | Re-run the last command (sudo !! is the classic) |
!$ | Last argument of the previous command |
!* | All arguments of the previous command |
!grep | Re-run the most recent command starting with grep |
^old^new | Re-run last command with first old replaced by new |
Ctrl-r | Reverse-search history incrementally (press again to cycle) |
Alt-. | Insert last argument, keep pressing to go further back |
$_ | Last argument, as a variable in scripts |
mkdir -p /opt/app/releases/v2 && cd !$ # !$ expands to the new path
history | awk '{print $2}' | sort | uniq -c | sort -rn | head # your top commands
Job Control
long_build.sh & # run in background
jobs -l # list jobs with PIDs
fg %1 # bring job 1 to foreground
bg %1 # resume a Ctrl-Z'd job in background
kill %2 # kill by job number
Ctrl-Z # suspend current foreground job
nohup ./migrate.sh > migrate.log 2>&1 & # survive hangup on logout
./worker.sh & disown # background + detach from the shell
wait # block until all background jobs finish
wait -n # until any one finishes (bash 4.3+)
For anything long-running over ssh, prefer tmux over nohup; you get your session back, output included.
Deepen your understanding in Bash Basics Cheatsheet
Related Cheatsheets
- Bash Basics:
set -euo pipefail, parameter expansion, traps, and arrays, everything needed to turn these one-liners into scripts that survive production - Bash sed & awk: heavier text processing, meaning in-place edits, column sums, extracting text between markers, and the GNU vs BSD gotchas
- tmux: session, window, and pane keybindings plus scripted layouts, so long-running pipelines outlive a dropped SSH connection
There’s more in the Bash group, and the whole cheatsheet library is one level up.
Similar Articles
Related Content
More from development
Go cheatsheet covering the go toolchain, syntax essentials, goroutines and channels, table-driven …
Quick-reference tmux cheatsheet: sessions, windows, panes, copy mode, synchronize-panes, .tmux.conf …
You Might Also Like
Python basics and CLI cheatsheet: core syntax, f-strings, comprehensions, pathlib, venv, pip, …
Quick-reference Bash basics cheatsheet: variables, parameter expansion, conditionals, loops, arrays, …

