Dev In The Mountain Header
A Developer In The mountains having fun

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: apt is for Debian/Ubuntu, brew works on macOS and Linux, cargo needs Rust installed, and go install needs Go installed.


Replacements for standard Linux commands

Standard commandModern replacement
findfd
lseza
grepripgrep (rg), ag
digdog
dfduf
dudust
topbtop, bottom, gtop
mantldr

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-find
  • brew 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-ag
  • brew install the_silver_searcher
  • GitHub

ripgrep (rg) -- fast recursive grep that respects .gitignore

  • sudo apt install ripgrep
  • brew install ripgrep
  • GitHub

DNS

dog -- command-line DNS client

Disk usage

duf -- a better df alternative

  • sudo apt install duf
  • brew install duf
  • GitHub

dust -- a friendlier du utility

  • cargo install du-dust
  • brew install dust
  • GitHub

System monitors -- nice top like tools

btop -- monitor of resources

  • sudo apt install btop
  • brew install btop
  • GitHub

bottom -- cross-platform graphical process/system monitor

The command is btm.

  • cargo install bottom --locked
  • brew install bottom
  • GitHub

gtop -- system monitoring dashboard for terminal

gotop -- terminal based graphical activity monitor

kmon -- Linux kernel manager and activity monitor

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 ranger
  • brew 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@latest
  • brew install lf
  • GitHub

fzf -- command-line fuzzy finder

  • sudo apt install fzf
  • brew install fzf
  • GitHub

zoxide -- quick navigation to commonly used directories

  • sudo apt install zoxide
  • brew 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 croc
  • curl 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.

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 --locked
  • brew install xh
  • GitHub

trippy -- network trip diagnostic tool (written in Rust)

Combines traceroute and ping. The command is trip.

  • cargo install trippy --locked
  • brew 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 lazygit
  • go install github.com/jesseduffield/lazygit@latest
  • GitHub

gitui -- terminal UI for git (written in Rust)

  • cargo install gitui --locked
  • brew install gitui
  • GitHub

Data & JSON

jq -- command-line JSON processor

fx -- interactive JSON viewer

  • brew install fx
  • go install github.com/antonmedv/fx@latest
  • GitHub

jless -- simple JSON viewer with vim friendly keybindings

  • cargo install jless
  • brew install jless
  • main site

serpl -- TUI search and replace across a project

Markdown & presentations

glow -- CLI markdown viewer (written in Go)

  • brew install glow
  • go install github.com/charmbracelet/glow@latest
  • GitHub

Marp -- markdown presentation ecosystem

Basic system info

fastfetch -- fast, highly customizable neofetch replacement

  • sudo apt install fastfetch
  • brew install fastfetch
  • GitHub

macchina -- fast system info (written in Rust)

  • cargo install macchina
  • brew install macchina
  • GitHub

NerdFetch -- tiny system info fetch script using Nerd Font icons

Music

kew -- TUI music player

  • sudo apt install kew
  • brew 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

uair -- minimalist pomodoro timer

furtherance -- time tracking app

This one is a GUI app rather than a CLI.

  • flatpak install flathub io.unobserved.furtherance
  • brew install --cask furtherance
  • GitHub

Goodtime -- Android pomodoro app

Other

starship -- cross-shell prompt

  • curl -sS https://starship.rs/install.sh | sh
  • brew install starship
  • main site

muffet -- website link checker


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: vidir is the zero-friction choice from apt. mmv fits 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 moreutils
  • brew 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 renameutils
  • brew install renameutils
  • main site

vimv -- bulk rename files using vim

Tiny tool that does the same job as vidir, with optional git mv support.

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.

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 rnr
  • brew install rnr
  • GitHub

nomino -- batch rename utility (written in Rust)

brename -- cross-platform tool for safely batch renaming files/directories

F2 -- cross-platform tool for batch renaming files and directories quickly and safely

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.

More places to find me
Mental Health
follow me on Mastodon