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, and cd.
  • Never memorize a flag again — lookups that hand you the example you need instead of a 40-page manual.

NOTE: The originals still matter. When you SSH into a fresh box, ls, cat, grep, and man are there; eza and bat are 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, navi) may need a recent distro or Rust’s cargo install, and navi was not in Debian’s repositories as of this writing (2026). 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: bat runs as batcat, and fd runs as fdfind. If bat “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:

# bash: add to ~/.bashrc, then open a new terminal:
eval "$(zoxide init bash)"
# zsh: add this to ~/.zshrc instead:
# eval "$(zoxide init zsh)"

# 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: fzf keybindings need enabling. The Ctrl+R/Ctrl+T widgets come from fzf’s shell integration. On recent versions add eval "$(fzf --bash)" to ~/.bashrc; on Debian you can instead source /usr/share/doc/fzf/examples/key-bindings.bash. Until then, fzf still 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, from a community-maintained set of example pages.

tldr --update     # download the page cache (needed once with tealdeer; re-run later to refresh)
tldr tar          # the common tar invocations, with examples

cheat.sh — cheat sheets over curl

Nothing to install — if you have curl, you have it. cheat.sh is a volunteer-run service and has had recurring outages; if it errors, tldr or man are the fallbacks.

curl https://cht.sh/tar           # a concise tar cheat sheet
curl https://cht.sh/find/delete   # answers to a specific question

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 (after tldr --update)
cd .. && rm -rf cli3-reps     # clean up

SUCCESS: These tools 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 still the real skill.


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