I used to think I knew Linux. I'd been using it daily for years — SSH, basic file ops, grep, maybe some awk when I was feeling fancy.
Then I started tracking every command I actually used over a month. The list was embarrassingly short: cd, ls, grep, cat, vim, ssh, git. Maybe 20 commands total.
Meanwhile, colleagues were piping through jq, xargs, parallel, fzf, ripgrep — solving in seconds what took me minutes of manual clicking and copy-pasting.
Here are the 25 commands that changed my daily workflow. Not obscure flags you'll never remember, but commands that genuinely save time every single day.
1. fzf — Fuzzy Finder (not a builtin, but essential)
# Find and open any file in project
vim $(fzf)
# Search command history interactively
# Ctrl+R in shell with fzf installed
Replaces: find . -name "*.py" | grep -v __pycache__ | head -20 + manual selection.
2. rg (ripgrep) — Faster Than grep
# Search code, respects .gitignore automatically
rg "TODO" --type py
# Search with context, show line numbers
rg -n -A 3 -B 3 "error"
5-10x faster than grep on large codebases. Respects .gitignore by default.
3. jq — JSON Processing That Doesn't Make You Cry
# Pretty-print JSON
cat response.json | jq .
# Extract specific fields
curl -s api.example.com/users | jq '.[] | {name: .name, email: .email}'
# Filter arrays
jq '.[] | select(.status == "active")'
If you work with APIs and don't know jq, you're manually parsing JSON in Python scripts like it's 2015.
4. xargs — Turn Output Into Commands
# Delete all .pyc files
find . -name "*.pyc" | xargs rm -f
# Process files in parallel (4 at a time)
ls *.log | xargs -P 4 -I {} gzip {}
# With placeholders
docker ps -q | xargs -I {} docker logs {} --tail 50
The -I {} pattern lets you insert the input anywhere in the command, not just at the end.
5. parallel — xargs on Steroids
# Run a command on multiple hosts
parallel ssh {} "uptime" ::: server1 server2 server3
# Process files with multiple CPU cores
parallel gzip ::: *.log
# With progress bar
parallel --bar convert {} {.}.webp ::: *.png
GNU parallel is what xargs wants to be. The --bar progress indicator alone is worth installing it.
6. fd — find That's Actually Usable
# Find files by name (case-insensitive by default)
fd "config"
# Only .py files, exclude venv
fd -e py "test" --exclude venv
# Execute command on each match
fd -e py -x black {}
Modern replacement for find with sensible defaults and color output.
7. bat — cat With Syntax Highlighting
# View file with syntax highlighting
bat config.yaml
# Works as pager too
docker logs container 2>&1 | bat -l log
cat with git integration, line numbers, and syntax highlighting. Once you use it, cat feels broken.
8. eza — ls Replacement
# Tree view with git status
eza --tree --git-ignore
# Long format with git, human sizes
eza -la --git
# Only directories
eza -D
Modern ls with colors, git status icons, tree view, and human-readable sizes by default.
9. zoxide — Smarter cd
# Learn your most used directories
z project # jumps to ~/code/my-project
z doc # jumps to ~/Documents
zi # interactive selection with fzf
Learns your habits. Type partial names, it figures out where you want to go.
10. delta — Better git diff
# Install, then add to gitconfig:
# [core]
# pager = delta
git diff
Side-by-side diffs, syntax highlighting, line numbers. Makes reviewing changes actually pleasant.
11. btop — htop's Better Looking Cousin
btop
Visual CPU/memory/network/disk with process list. Pretty enough to keep on a second monitor.
12. dust — du That Shows You What's Big
dust -d 2
Instant visual tree of disk usage. Finds the 5GB node_modules folder you forgot about.
13. procs — ps With Colors and Search
procs --watch "node"
procs --tree
Modern ps with colored output, human-readable units, and keyword search.
14. hyperfine — Benchmark Anything
# Compare two commands
hyperfine "sleep 1" "sleep 2"
# Warmup runs, statistical analysis
hyperfine --warmup 3 "python script.py" "python3.11 script.py"
Rigorous benchmarking with statistical analysis. Stops you from optimizing the wrong thing.
15. tokei — Code Stats Instantly
tokei
tokei -e json
Line counts by language in seconds. Replaces cloc with better defaults and JSON output.
16. entr — Run Commands on File Changes
# Re-run tests when any .py file changes
ls *.py | entr -c pytest
# Rebuild on save
ls *.go | entr go build
Simplest file watcher. No config files, no daemon, just works.
17. tldr — Man Pages for Humans
tldr tar
tldr --platform=linux docker
Community-maintained examples for every command. What man should have been.
18. cheat — Interactive Cheatsheets
cheat docker
cheat --edit docker # create your own
Like tldr but editable. Build your personal command reference over time.
19. glances — Full System Monitor
glances
glances -w # web UI on port 61208
Single-pane view of CPU, memory, disk, network, processes, sensors, Docker containers. Web UI is great for remote monitoring.
20. lazygit — Git TUI That's Actually Good
lazygit
Stage hunks, resolve conflicts, rewrite history, all in a keyboard-driven interface. Once you learn the keys, it's faster than CLI for complex operations.
21. lazydocker — Docker TUI
lazydocker
Same philosophy as lazygit. View logs, exec into containers, prune images — all keyboard-driven.
22. teip — Pipe Editing
# Edit piped input before passing to next command
cat data.csv | teip "sed 's/old/new/'" | process
Interactively edit streams. Solves the "I need to fix one line in 10,000" problem.
23. gron — Make JSON Greppable
# Flatten JSON to line-oriented format
curl -s api.example.com | gron | grep "email"
# Round-trip: gron -> edit -> ungron
gron file.json > flat.txt
# edit flat.txt
ungron flat.txt > file.json
Transforms nested JSON into path=value lines. grep it, edit it, convert back.
24. dasel — Universal Data Selector
# Works on JSON, YAML, TOML, XML, CSV
dasel -f config.yaml '.servers.[0].port'
dasel -f data.json '.users[].name' -w output.csv
One tool for all structured data formats. jq for JSON, yq for YAML, etc. — dasel does all of them.
25. atuin — Shell History Sync + Search
atuin sync # sync across machines
atuin search "docker" # fuzzy search all history
Replaces your shell history with a SQLite database that syncs across machines and supports full-text search.
My Daily Driver Aliases
Add these to your .bashrc/.zshrc:
alias f='fzf'
alias rg='rg --hidden --glob "!.git"'
alias jq='jq -C'
alias cat='bat'
alias ls='eza --icons'
alias ll='eza -la --git'
alias cd='z'
alias top='btop'
alias du='dust'
alias ps='procs'
alias diff='delta'
alias find='fd'
The Compound Effect
None of these commands alone will 10x your productivity. But using 5-10 of them daily creates a compound effect: each saves 30 seconds here, 2 minutes there. Over a year, that's hundreds of hours.
The real unlock isn't memorizing flags — it's changing your mental model from "I'll write a script for this" to "there's probably a tool that does this in one line."
Start with fzf, rg, jq, and eza. They cover 80% of the daily friction. Add one new tool per week. In six months, your terminal workflow will be unrecognizable.
This article covers 25 tools, but I've curated 68 free online tools across development, AI, productivity, and design at **ToolNest* — all client-side, no signup, no tracking. Check it out: https://nguyenminhduc9988.github.io/free-tools-hub/*
For structured prompt packs that automate daily developer workflows (morning routine, code reviews, weekly planning), see my Gumroad store: https://ducminh5.gumroad.com/
Cross-posted to Telegraph for SEO: https://telegra.ph/How-ChatGPT-Prompts-Save-Developers-10-Hours-Every-Week--My-Exact-System-07-01
Top comments (0)