Let’s be honest: the classic Unix philosophy of “do one thing and do it well” is timeless, but the actual tools we inherited from the 70s and 80s often feel clunky. I spent the first three years of my career relying solely on ls, cat, and grep, but as my projects grew in complexity, I realized that modern hardware can handle much more than plain text output.
If you’re looking for a modern unix commands list to revitalize your terminal, you’re in the right place. Most of the tools I recommend today are written in Rust, meaning they are blazing fast, memory-safe, and—most importantly—designed with human readability in mind. Here are my top 10 tips for replacing legacy CLI tools with modern alternatives.
1. Replace ‘ls’ with ‘eza’ (formerly exa)
The standard ls is functional, but it lacks visual hierarchy. I switched to eza because it adds colors to file types, integrates Git status directly into the file list, and provides a tree view without needing a separate tree command.
# The old way
ls -la
# The modern way
eza -la --git --icons
For those who want a deeper dive into implementation, check out my eza command examples to see how to alias this for your shell.
2. Replace ‘cat’ with ‘bat’
Using cat to read a file is fine for a quick glance, but when I’m debugging a 200-line config file, I need syntax highlighting and line numbers. bat is a clone of cat with wings; it integrates with Git to show you exactly which lines changed since your last commit.
# Instead of: cat config.json
bat config.json
I’ve written a comprehensive bat command line tool guide if you want to learn how to use its paging and integration features.
3. Replace ‘grep’ with ‘ripgrep’ (rg)
When searching through a massive monorepo, grep can be painfully slow. ripgrep is widely considered the fastest search tool in the ecosystem. It respects your .gitignore by default, so you don’t waste time searching through node_modules or .git folders.
# Search for a string in all files, ignoring git-ignored paths
rg "TODO: fix this bug"
4. Replace ‘find’ with ‘fd’
The syntax for the find command is notoriously unintuitive. fd provides a much simpler interface and is significantly faster. In my experience, the intuitive default of ignoring hidden folders makes fd a daily driver for navigating deep directory structures.
# Find all files containing 'api' in their name
fd api
5. Replace ‘top’ or ‘htop’ with ‘btop’
While htop was a huge upgrade over top, btop takes system monitoring to a visual level. It provides a gaming-grade dashboard of your CPU, memory, disks, and network with actual graphs and a mouse-interactive interface.
As shown in the image below, the visual density of btop allows you to spot a memory leak or a CPU spike in milliseconds without digging through text tables.
6. Replace ‘du’ with ‘dust’
Trying to figure out which folder is eating your disk space with du -sh * is a chore. dust gives you a visual representation of your directory sizes, making it immediately obvious where the bloat is located.
# Analyze current directory disk usage
dust
7. Replace ‘curl’ with ‘HTTPie’
I still use curl for scripts because it’s ubiquitous, but for manual API testing, HTTPie is superior. It formats JSON output beautifully and uses a much more human-friendly syntax for headers and data.
# Instead of: curl -X POST -d '{"name": "ajmani"}' https://api.example.com/user
http POST https://api.example.com/user name=ajmani
8. Replace ‘vim’ with ‘Helix’ or ‘Neovim’
If you’re still using vanilla Vim, you’re missing out on Language Server Protocol (LSP) support. I’ve recently moved to Helix because it’s built in Rust and comes with “batteries included,” meaning you don’t have to spend 10 hours configuring a init.lua file just to get autocomplete.
9. Replace ‘diff’ with ‘delta’
Standard git diffs are hard to read. delta provides side-by-side views and syntax highlighting for diffs, making code reviews in the terminal feel like they’re happening in a high-end IDE. It works as a pager for Git, significantly reducing cognitive load during merges.
10. Replace ‘man’ with ‘tldr’
Man pages are exhaustive, but often too dense when you just need to remember one flag. tldr provides simplified, community-driven examples of how a command is actually used in the real world.
# Instead of: man tar
tldr tar
Common Mistakes When Updating Your CLI
One mistake I see often is replacing curl or grep in production bash scripts. While these modern tools are great for interactive use, they may not be installed on a slim Debian server or a CI/CD runner. Always use the legacy GNU tools in scripts for maximum portability, and use the modern versions for your local development environment.
Measuring Success: Is Your Workflow Actually Faster?
To see if these tools are actually helping, I recommend tracking your “time to result.” For example, try searching for a specific string in a large project using grep -r vs rg. You’ll likely notice that ripgrep returns results almost instantaneously, reducing the context-switching gap that happens when you’re waiting for a command to finish.
Ready to optimize your setup further? Check out my guides on automation scripts and terminal productivity to turn your CLI into a powerhouse.