Some newish CLI tools I use on a regular basis
A collection of command line tools I keep installed on most machines. Each tool has a short description, the easiest install commands, and links.
Install commands:
aptis for Debian/Ubuntu,brewworks on macOS and Linux,cargoneeds Rust installed, andgo installneeds Go installed.
Replacements for standard Linux commands
| Standard command | Modern replacement |
|---|---|
find | fd |
ls | eza |
grep | ripgrep (rg), ag |
dig | dog |
df | duf |
du | dust |
top | btop, bottom, gtop |
man | tldr |
Finding files & listing directories
fd -- find files
A simple, fast and user-friendly alternative to find. On Debian/Ubuntu the
command is installed as fdfind.
sudo apt install fd-findbrew install fd- GitHub
eza -- modern replacement for ls
The maintained fork of exa.
grep like search
silver searcher (ag) and RipGREP (rg) do about the same thing with different syntaxes. I prefer silver searcher personally but RipGrep is required by some NeoVIM plugins I like, so I have both installed.
the_silver_searcher (ag) -- code searching tool similar to ack, but faster
sudo apt install silversearcher-agbrew install the_silver_searcher- GitHub
ripgrep (rg) -- fast recursive grep that respects .gitignore
sudo apt install ripgrepbrew install ripgrep- GitHub
DNS
dog -- command-line DNS client
Disk usage
duf -- a better df alternative
sudo apt install dufbrew install duf- GitHub
dust -- a friendlier du utility
cargo install du-dustbrew install dust- GitHub
System monitors -- nice top like tools
btop -- monitor of resources
sudo apt install btopbrew install btop- GitHub
bottom -- cross-platform graphical process/system monitor
The command is btm.
cargo install bottom --lockedbrew install bottom- GitHub
gtop -- system monitoring dashboard for terminal
npm install -g gtop- GitHub
gotop -- terminal based graphical activity monitor
kmon -- Linux kernel manager and activity monitor
cargo install kmon- GitHub
Help pages
tldr -- sort of a man replacement
Simplified and community-driven man pages that give practical examples for common commands. Much faster to read than traditional man pages, and there are multiple clients available (Node.js, Python, Rust, etc.).
Tools that aren't really replacements for anything
File managers & navigation
ranger -- VIM-inspired file manager for the console
sudo apt install rangerbrew install ranger- GitHub
lf -- CLI file manager written in Go
Written with full concurrency so it is crazy fast.
go install github.com/gokcehan/lf@latestbrew install lf- GitHub
fzf -- command-line fuzzy finder
sudo apt install fzfbrew install fzf- GitHub
zoxide -- quick navigation to commonly used directories
sudo apt install zoxidebrew install zoxide- GitHub
Networking, file transfer & APIs
croc -- easily and securely send things from one computer to another
Easy to install and use. A great simple way to transfer files between two computers fairly securely. The sender and the receiver must both be online at the same time.
brew install croccurl https://getcroc.schollz.com | bash- GitHub
httpie -- test APIs (written in Python)
Simple to use, JSON keys are presented sorted, well tested and well documented. There is also a GUI version available now.
pipx install httpiebrew install httpie- main site
- HTTPie GUI
xh -- test APIs (written in Rust)
Written to be similar in use to httpie. Faster than httpie, but not all features are available and the documentation is not as full featured.
cargo install xh --lockedbrew install xh- GitHub
trippy -- network trip diagnostic tool (written in Rust)
Combines traceroute and ping. The command is trip.
cargo install trippy --lockedbrew install trippy- main site
wishlist -- SSH manager (written in Go)
TUIs for git
I personally prefer lazygit but gitui is also good.
lazygit -- simple terminal UI for git commands (written in Go)
brew install lazygitgo install github.com/jesseduffield/lazygit@latest- GitHub
gitui -- terminal UI for git (written in Rust)
cargo install gitui --lockedbrew install gitui- GitHub
Data & JSON
jq -- command-line JSON processor
sudo apt install jqbrew install jq- main site
fx -- interactive JSON viewer
brew install fxgo install github.com/antonmedv/fx@latest- GitHub
jless -- simple JSON viewer with vim friendly keybindings
cargo install jlessbrew install jless- main site
serpl -- TUI search and replace across a project
cargo install serpl- GitHub
Markdown & presentations
glow -- CLI markdown viewer (written in Go)
brew install glowgo install github.com/charmbracelet/glow@latest- GitHub
Marp -- markdown presentation ecosystem
Basic system info
fastfetch -- fast, highly customizable neofetch replacement
sudo apt install fastfetchbrew install fastfetch- GitHub
macchina -- fast system info (written in Rust)
cargo install macchinabrew install macchina- GitHub
NerdFetch -- tiny system info fetch script using Nerd Font icons
Music
kew -- TUI music player
sudo apt install kewbrew install kew- GitHub
Pomodoro & time tracking
Focus -- pomodoro timer written in Go
pomo -- simple CLI pomodoro timer
timer -- simple CLI countdown timer
go install github.com/caarlos0/timer@latest- GitHub
pydoro -- minimal pomodoro timer
pipx install pydoro- GitHub
uair -- minimalist pomodoro timer
cargo install uair- GitHub
furtherance -- time tracking app
This one is a GUI app rather than a CLI.
flatpak install flathub io.unobserved.furtherancebrew install --cask furtherance- GitHub
Goodtime -- Android pomodoro app
Other
starship -- cross-shell prompt
curl -sS https://starship.rs/install.sh | shbrew install starship- main site
muffet -- website link checker
brew install muffet- GitHub
Bulk rename
Several of these tools open a list of filenames in $EDITOR (nvim, emacs, and
so on). You edit the names, save and quit, and the files get renamed.
Quick picks:
vidiris the zero-friction choice from apt.mmvfits if you'd rather have a Go tool with safe swap handling. Since I use Doom Emacs, wdired is probably the most powerful of all, because you get the full editor (regex replace, macros, rectangles) while renaming.
Edit filenames in your editor
vidir -- the classic edit-filenames-in-your-editor tool
Part of moreutils. Running vidir or vidir *.jpg opens a numbered list.
Edit a line to rename that file, or delete the line to delete the file. It can
also be piped: fd -e md | vidir -.
sudo apt install moreutilsbrew install moreutils
qmv / qcp -- quick move and copy from renameutils
qmv -f do *.txt gives a single-column "destination only" view. It handles
swaps and cycles safely, and qcp does the same for copies.
sudo apt install renameutilsbrew install renameutils- main site
vimv -- bulk rename files using vim
Tiny tool that does the same job as vidir, with optional git mv support.
cargo install vimv- GitHub
mmv -- rename multiple files using your editor (written in Go)
Minimal and fast, and it correctly handles swaps (a→b, b→a) and renames that create directories.
go install github.com/itchyny/mmv/cmd/mmv@latest- GitHub
massren -- editor based renaming with undo (written in Go)
Keeps an undo history (massren --undo), which is handy if you make a
mistake.
edir -- vidir with extras (written in Python)
It can move files to trash instead of deleting them, it is git-aware
(git mv), and it can recurse.
pipx install edir- GitHub
pipe-rename -- rename with a diff preview (written in Rust)
The command is renamer. It shows a diff and asks you to confirm before
applying, and you can pass it a substitution command instead of an editor.
cargo install pipe-rename- GitHub
Rename with patterns and rules
rnr -- command-line tool to batch rename files and directories
cargo install rnrbrew install rnr- GitHub
nomino -- batch rename utility (written in Rust)
cargo install nomino- GitHub
brename -- cross-platform tool for safely batch renaming files/directories
F2 -- cross-platform tool for batch renaming files and directories quickly and safely
brew install f2- GitHub
Inside the editors themselves
Often nicer than any of the tools above.
Emacs: wdired
In Dired, press C-x C-q (in Doom: i or C-c C-e in evil mode) to make the
buffer editable. You can then use multiple cursors, query-replace-regexp, or
macros, and commit with C-c C-c. Pair it with find-name-dired to rename
recursively.
Neovim: oil.nvim
It edits a directory like a buffer, renames and moves files across
directories, and commits on :w. Other options are mini.files or
vim-renamer.
File managers that call $EDITOR
yazi, lf, ranger, and nnn all have a bulk-rename command that hands your
selection to your editor. In ranger it's :bulkrename; in yazi, select files
and press r.

