You can absolutely keep doing everything the slow way.
You can open Postman every time you want to inspect JSON. You can scroll endlessly through logs.
You can cd your way through six nested folders like it's 2009. You can SSH into a flaky network connection and pray it doesn't drop.
Or you can learn a few tools that remove friction.
This isn't about being a terminal purist. It's not about "real developers use the CLI."
That argument is tired.
This is about speed.
Here are 33 CLI tools that are actually worth trying.

1. ripgrep (rg)
If you're still using grep for large codebases, fine. It works.
But rg is faster and cleaner.
Want to find the word off across a parent directory but not match offer or authors?
rg -w offIt searches the entire tree. Fast.
If I only want it inside a specific project? Same command. Different directory.
It tells you exactly where it appears. Twice in a changelog. Twice in off.go. Done.
No IDE indexing. No waiting.
And yes, it's written in Rust. That's not the reason it's good. It's just fast.
2. tree
Sometimes you just want to see the structure.
tree -L 3Three levels deep. Clean. Visual.
It's basic. But when you're navigating unfamiliar repos, it saves mental energy.
3. fd
find is powerful.
It's also annoying.
fd is simpler and usually enough.
You're not searching file contents like rg. You're searching filenames.
Looking for all go.mod, pom.xml, or Cargo.toml files? fd does that without you memorizing a novel of flags.
Is it as powerful as find? No.
Does it matter for 90% of use cases? Also no.
4. fzf
This turns any list into an interactive filter.
Pipe output into fzf, start typing, and narrow it instantly.
Search for go.mod from a giant list? Type a few characters. It's there.
You can combine it with rg, docker logs, whatever.
Scrolling is slow. Filtering is not.
5. bat
cat prints files.
bat prints files with syntax highlighting and line numbers.
That's it.
It's not revolutionary. It's just nicer to read.
6. curl
You need this.
Silent mode
curl -s https://api.github.comDebugging headers?
curl -i https://api.github.comIt's your quick HTTP client inside the terminal.
7. jq
JSON is everywhere. APIs. Logs. Configs.
Instead of copying JSON into a formatter, pipe it
curl -s https://api.github.com/repos/user/repo | jqWant the stargazer count?
jq '.stargazers_count'Clean. Scriptable. Done.
8. docker compose
If your app depends on Redis and Postgres, you need reproducibility.
docker compose up -dCheck status
docker compose psFollow logs
docker compose logs -fThen combine it with rg or fzf to filter warnings or errors.
Logs are useless if you can't search them fast.
9. lazydocker
Yes, it's a TUI.
Yes, it's "lazy."
It shows containers, images, volumes, logs, navigable with a menu.
If you don't want to remember every Docker command, this is fine.
10. systemctl
Start. Stop. Restart. Status.
Without guessing.
You shouldn't be randomly rebooting services hoping things fix themselves.
11. lsof
Something already using port 8099?
lsof -i :8099Now you know the PID.
Kill it if needed.
Ports don't get "mysteriously blocked." Something is listening.
12. ss
Socket statistics.
System-wide view of what's exposed.
ss -ltnIf you don't know what ports are open, you probably should.
13. ps / procs
ps aux works.
procs makes it readable. With color. Sorting by CPU.
You don't need it. But once you use it, you won't go back.
14. watch
Run something every interval.
watch ss -ltnSee changes as services restart.
Good for observing behavior without manually rerunning commands.
15. ip
Check interfaces
ip aCheck routes
ip rIf networking feels broken, confirm assumptions.
16. dig
DNS debugging.
dig github.comOr short output
dig +short github.comGiven how often DNS issues happen, this is practical.
17. mtr
Combines ping and traceroute.
Real time packet loss and latency.
Better visibility into network instability.
18. ncdu
Interactive disk usage explorer.
Navigate directories and see what's eating space.
When a drive fills up, guessing is pointless.
19. tldr
Man pages are comprehensive.
tldr gives practical examples.
Sometimes you don't need theory. You need syntax.
20. shellcheck
Lint your shell scripts.
Unused variable? It tells you.
Broken deploy scripts are avoidable.
21. perf
Performance statistics.
perf stat ./appCPUs utilized. Instructions per cycle.
Numbers you might not fully interpret, but useful when profiling seriously.
22. git grep
Search only tracked files.
git grep healthIt ignores untracked noise.
Useful inside real repos.
23. git worktree
Multiple branches checked out simultaneously.
Hotfix in one directory. Feature work in another.
Less context switching.
24. git bisect
Binary search through commits to find where a bug was introduced.
If you've never used it, you're manually guessing.
25. git diff + delta
git diff works.
delta makes it readable.
Better formatting. Easier on the eyes.
Not essential. Just better.
26. lazygit
Visual Git interface in terminal.
See staged vs unstaged. Reword commits. Squash. Bisect.
Unpopular opinion: every developer should use it at least once to understand Git's model better.
27. GitHub CLI (gh)
List issues
gh issue listList PRs
gh pr listReview and merge from terminal.
Many people don't even know this exists.
28. OpenVPN
Encrypted tunnels.
Access private infrastructure or labs securely.
It's not flashy. It's foundational.
29. mosh
Like SSH.
But survives bad networks.
If your Wi‑Fi drops constantly, this matters.
30. tmux
Terminal multiplexing.
Multiple panes. Persistent sessions.
Feels like workspaces, but inside the terminal.
31. zoxide
Jump to directories based on frequency.
Instead of
cd repos/rust/projectYou type
z projectSpeed compounds.
32. eza
Modern ls.
Icons. Tree view. Better defaults.
eza --tree -L 3Cleaner output.
33. fastfetch
Shows system internals.
Not essential.
Just useful and sometimes fun.
Finally
You don't need all 33.
You don't need to memorize every flag.
But if even three of these remove friction from your workflow, that compounds over months and years.
Or you can keep doing everything the slow way and hope AI types it for you.
Your call.