Sugar on Top of the Fundamentals
You’ve got the basics (Part 1) and the stream-and-pipe model (Part 2). Everything from here is optional — quality-of-life tools that make the terminal faster and friendlier. None of it replaces what you’ve learned; it sits on top of it. The plain commands are always there on any machine, and that matters when you’re on a stripped-down server. Treat this chapter as a buffet: install what appeals, skip what doesn’t.
The tools come in two families:
- Better versions of what you know — drop-in upgrades to
ls,cat,find,grep, andcd. - Never memorize a flag again — lookups that hand you the example you need instead of a 40-page manual.
NOTE: The originals still matter. Learn these as conveniences, not crutches. When you SSH into a fresh box,
ls,cat,grep, andmanare there;ezaandbatare not. Knowing the plain tools is the skill — these just make your daily machine nicer.
Installing Them
Most live in the standard repositories. On Debian/Ubuntu:
sudo apt update
sudo apt install ripgrep bat fd-find fzf
Newer tools (eza, zoxide, tealdeer) may need a recent distro or Rust’s cargo install; each
project’s README has the current method. On macOS, brew install covers all of them.
WARNING: The Debian renaming trap. To avoid name clashes, Debian/Ubuntu ship two of these under different command names:
batruns asbatcat, andfdruns asfdfind. Ifbat“isn’t found” right after installing, that’s why. Make a friendly alias once:
mkdir -p ~/.local/bin
ln -s $(which batcat) ~/.local/bin/bat
ln -s $(which fdfind) ~/.local/bin/fd
# ensure ~/.local/bin is on your PATH (most distros already do this)
Better Versions of What You Know
eza — a better ls
Colored, git-aware listings, and a real tree view without the separate tree tool.
eza -la # like ls -la, but readable and colored
eza --tree # show the directory as a tree
eza -la --git # add a column showing git status per file
bat — a better cat
cat with syntax highlighting and line numbers. When you pipe it somewhere, it quietly behaves like
plain cat, so it won’t break your pipelines.
bat config.yml # view a file with highlighting + line numbers
bat -pp config.yml # plain (no decorations) - good for copy/paste
fd — a better find
The same job as find, with sane defaults and a syntax you can actually remember.
fd report # find files/dirs matching "report"
fd -e md # only .md files
fd -H secret # include hidden files in the search
ripgrep (rg) — a better grep
Searches file contents recursively, fast, and skips junk in .gitignore by default.
rg "TODO" # find "TODO" in every file under here
rg -n "api_key" # -n shows line numbers
rg -i "error" # -i = case-insensitive
zoxide — a smarter cd
It remembers the directories you visit and lets you jump by a fragment of the name — no more long
chains of cd ... It needs one line in your shell config to hook in:
# add to ~/.bashrc (or ~/.zshrc), then open a new terminal:
eval "$(zoxide init bash)"
# afterwards, anywhere:
z school # jump to the dir you visit most that matches "school"
zi school # pick interactively if there are several
fzf — the fuzzy finder
A general-purpose “type a few letters, pick from a live-filtered list” tool. Its best trick is
upgrading your shell’s history search: press Ctrl+R and fuzzy-find any command you’ve ever run.
# pipe anything into fzf to pick interactively:
fd -e md | fzf # fuzzy-pick a markdown file
nano "$(fd -e conf | fzf)" # find a config, pick it, open it
# after enabling fzf's shell keybindings:
# Ctrl+R - fuzzy search command history
# Ctrl+T - fuzzy-pick a file into the current command
NOTE:
fzfkeybindings need enabling. TheCtrl+R/Ctrl+Twidgets come from fzf’s shell integration. On recent versions addeval "$(fzf --bash)"to~/.bashrc; on Debian you can insteadsource /usr/share/doc/fzf/examples/key-bindings.bash. Until then,fzfstill works as a pipe target — you just don’t get the hotkeys.
Never Memorize a Flag Again
You learned the right way to get help in Part 1: man and --help. These three are the fast way —
reach for them once you understand what a command does and just need the incantation.
tldr — example-first help
Where man tar is a wall of text, tldr tar is the five commands you actually use.
Community-maintained, example-driven.
tldr tar # the common tar invocations, with examples
tldr --update # refresh the local page cache (tealdeer)
cheat.sh — cheat sheets over curl
Nothing to install — if you have curl, you have it. Great on a bare server.
curl cht.sh/tar # a concise tar cheat sheet
curl cht.sh/find/delete # answers to a specific question
navi — interactive cheat sheets
A browsable, runnable cheat-sheet launcher: pick a command from a fuzzy list and navi fills in the blanks before running it.
navi # browse and run from interactive cheat sheets
Practice (Pick Two, Try Them)
No capstone here — just install a couple and feel the difference on a throwaway folder.
mkdir cli3-reps && cd cli3-reps
printf 'TODO: ship it\nall good\nTODO: write tests\n' > notes.txt
rg -n TODO notes.txt # find both TODO lines, with line numbers
bat notes.txt # view it highlighted (or: batcat notes.txt)
eza -la # a nicer listing of this folder
tldr rg # see ripgrep's own common examples
cd .. && rm -rf cli3-reps # clean up
SUCCESS: That’s the whole idea. These tools don’t change what you do — they make the doing quicker and the looking-up painless. Add them one at a time as you feel the need; there’s no prize for installing all nine at once. The fundamentals from Parts 1 and 2 are the real skill — this is just a sharper set of knives.
You’ve finished the Command Line track. New here? Begin at Part 1 — The Command Line, From Zero. For more guides on self-hosting, privacy, local AI, and digital sovereignty: cypherpunkschool.com