You install a new command-line tool — ffmpeg, jq, rsync,
whatever — and someone says "just read the man page." You run man ffmpeg, scroll past
three screens of syntax, hit a wall of flags you've never needed in your life, and close the
terminal feeling behind before you've run a single useful command.
Manuals aren't written to be read front to back. They're reference material — complete, precise, and organized for lookup, not learning. Treating them like a tutorial is why CLI tools feel harder than they are. Most of the time you need five flags and one mental model, not the full specification.
This is the workflow I use when picking up a new CLI tool under time pressure — enough to get real work done today, with a path to depth when a specific problem demands it.
Start With a Task, Not the Documentation
Before opening any help text, write down one sentence: what do I need this tool to do right now? Not "learn ffmpeg" — that's a hobby, not a task. Something like:
- "Extract the audio track from this .mp4 as .mp3."
- "Find every .log file modified in the last 24 hours under
/var." - "Pull the
namefield from each object in this JSON array." - "Sync this folder to a remote server, skipping files that haven't changed."
A concrete task gives you a finish line and a filter. Every flag you look up either serves that task or gets ignored until later. Without the task, every option looks equally important — and they aren't.
If you can't describe the job in one sentence, you're not ready to read help output — you're ready to clarify what you're actually trying to accomplish.
The Help Stack (In Order)
Most CLI tools expose help at several depths. Use them in this order before reaching for a browser or the full manual:
1. Built-in quick help
Try these first — one of them almost always works:
tool --helptool -htool help(subcommand-style tools likegitanddocker)
This output is the author's compressed "what most people need." Scan for a subcommand or flag that matches your task. Copy the example line if one exists — examples beat prose.
2. Subcommand help
Multi-command tools (git, docker, kubectl, aws)
hide detail one level down:
tool subcommand --helptool help subcommand
The top-level help is an index. The subcommand help is where the useful flags live. Don't read the root help and assume you've seen everything.
3. The man page — but surgically
man tool is long. That's fine. You're not reading it — you're searching it:
- Inside
man, press/and search for a keyword (dry-run,recursive,output). - Pipe to a pager with search:
man tool | less(same/search). - Jump to sections: man pages have named sections —
OPTIONS,EXAMPLES,SEE ALSO. Many people never scroll toEXAMPLES. Start there.
On macOS, man -K keyword tool searches the entire page for a string. On Linux,
man tool | grep -i keyword works in a pinch.
4. tldr and cheat sheets
tldr pages are community-maintained
examples for common tasks — install via npm, brew, or your package manager,
then run tldr ffmpeg. They're opinionated, incomplete, and often exactly what you
need in the first ten minutes.
If tldr doesn't cover your tool, search for "tool cheat sheet" — but prefer official examples when doing anything destructive (disk formatting, cloud deletions, permission changes).
Learn Flags On Demand, Not Up Front
The biggest time sink is trying to memorize every option before running anything. Instead:
- Run the simplest version of the command that might work.
- Read the error message — good CLI tools tell you which flag is missing.
- Add exactly one flag to fix that error.
- Repeat until the task completes.
Example with a hypothetical sync tool:
$ sync ./local/ user@host:/backup/
error: remote path requires --recursive for directories
$ sync --recursive ./local/ user@host:/backup/
error: authentication required, use --identity-file or --password-file
$ sync --recursive --identity-file ~/.ssh/id_ed25519 ./local/ user@host:/backup/
done.
Three runs, three flags learned, all tied to real failures. That's more durable than highlighting a man page for twenty minutes.
Use Dry Runs and Verbose Mode Before You Break Something
Many tools that move, delete, or transform data support a preview mode. Look for:
--dry-run-n(often "no act" in rsync, cp, and similar)--checkor--validate-v/--verbose(shows what would happen step by step)
Run with dry-run first. Read the output. Confirm it matches your intent. Then remove the flag
and run for real. This is especially important for rm, rsync --delete,
database migrations, and anything touching production.
Verbose mode is also a learning tool: it shows which files are touched, which config is loaded, which remote endpoint is contacted. When a command "does nothing," verbose output often explains why.
One Walkthrough: Learning jq for a Single Job
Say you have data.json — an array of objects — and you need every email where
status is "active". You've never used jq.
Step 1 — confirm the shape:
jq '.' data.json | head
You're not filtering yet. You just want to see that it's an array of objects and what keys exist.
Step 2 — quick help for the filter language:
jq --help
Scan for "filter" or look at the bottom examples. Or skip straight to tldr:
tldr jq
Step 3 — build the smallest filter:
jq '.[] | select(.status == "active") | .email' data.json
If that fails, read the error. Common fixes: wrong key name (check step 1), wrong quotes
(JSON strings need double quotes inside the filter), file isn't an array (adjust .[]).
Step 4 — only now, if stuck, open the manual:
man jq
Search for select or EXAMPLES. Read one section. Close the manual.
You still don't need to understand every builtin.
Total time: often under ten minutes. Total manual read: maybe thirty lines.
When the Manual Actually Earns Your Time
Skipping the full manual is a default, not a rule. Read deeper when:
- Defaults are dangerous. Tools that overwrite files, truncate logs, or
send data over the network deserve a careful read of
OPTIONSbefore first use. - You're scripting it. A one-off command can be sloppy; a cron job or CI
step needs stable flags, explicit error behavior, and knowledge of exit codes. Search the
man page for
EXIT STATUSorRETURN VALUE. - Output format matters. Parsing command output in a script? Read which
flags guarantee machine-readable format (
--json,-o,--porcelain). Don't scrape human-formatted tables if the tool offers structured output. - Config files enter the picture. Many tools load
~/.config/tool/configor.toolrc. The man page documents precedence: CLI flag vs. env var vs. config file. Surprises here cause "it worked on my machine" bugs. - You're stuck after thirty minutes. If help flags and tldr haven't moved
you, the answer is probably in an obscure section — often
ENVIRONMENT,FILES, orBUGS.
Build a Personal Cheat Sheet as You Go
The commands you look up twice should live somewhere you'll find them again. I keep a plain
text file — ~/notes/cli-recipes.txt or a snippet manager — with one line per
task:
# ffmpeg: extract audio from video
ffmpeg -i input.mp4 -vn -acodec mp3 output.mp3
# jq: active users' emails
jq '.[] | select(.status == "active") | .email' data.json
# rsync: mirror local to remote, delete extras on destination
rsync -avz --delete ./local/ user@host:/backup/
This file is your manual — filtered to jobs you actually do. Adding one line after each successful task takes thirty seconds and saves the next lookup entirely.
What to Ignore (For Now)
When learning a CLI tool under time pressure, permission to skip:
- Every flag in the alphabetical list that doesn't relate to your current task.
- Compatibility notes for operating systems you don't use.
- Subcommands you'll "probably need someday" — someday is a different session.
- Flame wars in forum threads about why Tool A is morally superior to Tool B.
- Installing five wrapper tools before you've run the original once.
Depth comes from repeated tasks, not from a single heroic reading session.
The Loop That Sticks
Boiled down, the cycle looks like this:
- Define one concrete task.
- Run
--help(and subcommand help if needed). - Try the simplest command; let errors guide the next flag.
- Use dry-run / verbose before destructive operations.
- Search the man page for a specific keyword only when stuck.
- Save the working command to your personal notes.
You won't understand the tool completely after one task. You won't need to. The manual will still be there when a harder problem shows up — and by then you'll know exactly which section to search instead of starting at line one.
CLI tools reward people who ship one working command, not people who finish the documentation first. Start with the job. Let the help text meet you halfway.