Why is it called that? A CLI etymology reference for shell commands and tools.
Every name has a story. Some are acronyms, some are jokes, some are named after people or dogs. This is the encyclopedia.
| Command | Stands For / Meaning | Origin / Lore | Source |
|---|---|---|---|
ar |
Archiver | The original Unix file archiver, predating tar — still quietly used today to build static libraries (.a files). | Wikipedia |
awk |
Aho, Weinberger, and Kernighan | Named after its three Bell Labs creators — pronounced like the seabird 'auk,' which graces the cover of The AWK Programming Language. | Wikipedia |
biff |
Named after a dog | Named after Heidi Stettner's dog at UC Berkeley who barked at the mailman — a mail notification command named after a literal mail alert system. | Wikipedia |
cat |
Catenate | Named after 'catenate,' not 'concatenate' — Kernighan and Pike called it 'a slightly obscure synonym.' | Wikipedia |
cc |
C Compiler | The simplest possible abbreviation for the language that rewrote Unix itself — appeared in Version 3 Unix alongside C. | Wikipedia |
cd |
Change Directory | So fundamental it's a shell builtin, not an external program — a child process can't change the parent's directory. | Wikipedia |
chmod |
Change Mode | The 'mode' is the permission bitmask — rwxrwxrwx or its octal shorthand, inherited from Multics access control. | Wikipedia |
chown |
Change Owner | On most modern systems, only root can chown — letting users give away files would break disk quotas and audit trails. | Wikipedia |
cp |
Copy | Part of Version 1 Unix (1971) — because 'copy' was four letters too many for Thompson and Ritchie. | Wikipedia |
cron |
From Greek 'chronos' (time) (?) | Named for the Greek personification of time — 'Command Run On Notice' is a backronym. The true etymology is genuinely disputed. | Wikipedia |
curl |
Client for URLs | Daniel Stenberg built it in 1996 to fetch currency exchange rates for an IRC bot — was first 'httpget', then 'urlget', then 'curl.' | curl.se |
cut |
Cut (to extract a section) | Gottfried Luderer wrote it at Bell Labs for System III — BSD didn't pick it up until 4.3BSD-Reno around 1990, nearly a decade late. | Wikipedia |
dd |
Data Definition (?) | Dennis Ritchie confirmed it alludes to IBM JCL's DD cards — Eric Raymond called the JCL-style syntax 'clearly a prank.' | Wikipedia |
df |
Disk Free | Version 1 Unix (1971) — one of the oldest surviving commands, born when monitoring a few megabytes was life or death. | Wikipedia |
diff |
Differences | Douglas McIlroy and James Hunt wrote it for V5 Unix (1974) — McIlroy's 1976 algorithm paper became the foundation of all file comparison. | Wikipedia |
du |
Disk Usage | The complement to df — df tells you what's free, du tells you who's hogging it. | Wikipedia |
ed |
Editor | Ken Thompson wrote it in August 1969 as one of the first three Unix programs — assembler, editor, shell — still the POSIX standard editor. | Wikipedia |
emacs |
Editing MACroS | Born in 1976 as TECO macros at MIT — so many macros ending in MAC/MACS accumulated that Stallman and Steele unified them. | Wikipedia |
ex |
Extended (editor) | Bill Joy and Chuck Haley extended 'em' (editor for mortals) — George Coulouris had deemed ed's interface fit only for 'immortals.' | Wikipedia |
find |
Find (to locate files) | Dick Haight wrote it for V5 Unix as part of the Programmer's Workbench, designed to pair with cpio for backup-and-restore. | Wikipedia |
grep |
Global Regular Expression Print | From the ed command g/re/p — Ken Thompson extracted it into a standalone tool overnight. | Wikipedia |
gzip |
GNU zip | Gailly and Adler wrote it in 1992 as a free replacement for 'compress' after Unisys started enforcing LZW patents. | Wikipedia |
head |
Head (the beginning of something) | Many early Unix versions lacked it entirely, using 'sed 10q' instead — head was a convenience that arrived fashionably late. | Wikipedia |
kill |
Kill (terminate a process) | A misnomer — it actually sends any signal, not just SIGKILL, but the name stuck because stopping runaway processes was the common case. | Wikipedia |
ld |
Link Editor (or Loader) (?) | The dual meaning reflects the tool's dual role: linking object files together and loading external symbols for resolution. | Wikipedia |
lex |
Lexical Analyzer Generator | Written by Mike Lesk and Eric Schmidt (yes, that Eric Schmidt) in 1975 — turns regexes into C code for tokenizing. | Wikipedia |
ln |
Link | Creates additional names for the same inode — the reason Unix files can have multiple identities since the PDP-7 days. | Wikipedia |
ls |
List | Inherited from Multics where 'listf' became 'list' became 'ls' — each generation dropped letters. | Wikipedia |
make |
Make (to build/construct) | Stuart Feldman wrote it over a weekend in 1976 after Steve Johnson wasted a morning debugging a correct program that hadn't been recompiled. | Wikipedia |
man |
Manual | The first Unix Programmer's Manual was published in 1971 — 'man' made it available on-line (meaning interactive, not internet). | Wikipedia |
mv |
Move | Moves or renames — in Unix, renaming IS moving, because a filename is just a directory entry pointing at an inode. | Wikipedia |
nano |
Nano's ANOther editor (recursive acronym) | Originally called TIP (TIP Isn't Pico), renamed to avoid conflict — 'nano' is one SI prefix larger than 'pico', the editor it clones. | Wikipedia |
nc |
Network Cat (netcat) | Written by a hacker known only as 'Hobbit' in 1995 — applies Unix's cat philosophy (read/write streams) to network sockets. | Wikipedia |
nm |
Name List | V7 man pages called the symbol table a 'name list' — the abbreviation stuck long after the terminology didn't. | Wikipedia |
nroff |
Newer ROFF | The name traces back through roff to RUNOFF (1964), named for the phrase 'to run off a document' — as in, run off some copies. | Wikipedia |
od |
Octal Dump | One of the oldest Unix commands (Version 1), named for its default output format before hex became standard. | Wikipedia |
paste |
Paste (to join things together) | Also by Gottfried Luderer — the counterpart to cut, it merges files side-by-side like pasting columns of a spreadsheet. | Wikipedia |
patch |
Patch (to repair or update) | Larry Wall (yes, the Perl guy) wrote it in 1985 — enabled swapping small change-sets instead of whole files, before version control existed. | Wikipedia |
ping |
Named after the sound of sonar | Mike Muuss named it after the sonar pulse in 1983 — 'Packet InterNet Groper' is a backronym from Dave Mills that Muuss never endorsed. | Wikipedia |
ps |
Process Status | Version 3 Unix (1973) — its BSD and System V flag conventions never reconciled, which is why ps aux and ps -ef both exist. | Wikipedia |
pwd |
Print Working Directory | Descended from Multics 'print_wdir' — POSIX diplomatically avoids 'print' and says 'return working directory name.' | Wikipedia |
rc |
Run Commands | Named after RUNCOM, a 1963 CTSS facility by Louis Pouzin — the same ancestry behind every .bashrc, .vimrc, and .zshrc. | Wikipedia |
rm |
Remove | No trash can, no undo, no confirmation by default — Unix's most unforgiving two letters. | Wikipedia |
scp |
Secure Copy | The encrypted successor to BSD's rcp (remote copy) — SSH encryption grafted onto the old remote copy protocol. | Wikipedia |
sed |
Stream Editor | Lee McMahon wanted g/re/s and built it as a non-interactive editor that reads stdin line by line. | Wikipedia |
shuf |
Shuffle | A GNU coreutils addition by Paul Eggert — straightforward name, no folklore, just shuffles lines like a deck of cards. | Wikipedia |
sort |
Sort (to arrange in order) | Ken Thompson wrote it for Version 1 Unix — by V5 he'd invented the '-' convention for stdin because sort needed both files and pipes. | Wikipedia |
ssh |
Secure Shell | Tatu Ylonen created it in 1995 after a password-sniffing attack at Helsinki University — port 22 sits right between FTP (21) and Telnet (23). | Wikipedia |
stty |
Set TTY (Set Teletype) | Version 2 Unix — 'tty' itself comes from 'teletype', the physical machines that were the first Unix terminals. | Wikipedia |
su |
Substitute User | Universally misremembered as 'super user' because that's how everyone uses it — but the man pages say 'substitute user.' | Wikipedia |
sudo |
Superuser Do | Conceived around 1980 at SUNY Buffalo — officially evolved from 'superuser do' to 'substitute user do' as it gained the ability to run as any user. | Wikipedia |
tac |
'cat' spelled backwards | Does what cat does, but in reverse line order — and the name is literally 'cat' backwards. Peak Unix humor. | Wikipedia |
tail |
Tail (the end of something) | Counterpart to head — its '-f' (follow) flag for watching live log output became one of Unix's most beloved features. | Wikipedia |
tar |
Tape Archive | Born in V7 Unix (1979) to wrangle magnetic tape drives — replaced 'tp', which replaced 'tap', each name getting lazier. | Wikipedia |
tee |
Named after the T-shaped pipe fitting | Splits a data stream like a plumber's T-joint — one copy to stdout, one to a file. The metaphor is physical. | Wikipedia |
top |
Shows the 'top' CPU consumers (?) | Written by William LeFebvre in 1984 — 'Table Of Processes' is a backronym; it just shows whatever's on top. | Wikipedia |
tput |
Terminal Put (?) | Bill Joy wrote the first version for 4BSD in 1980 — it 'puts' terminal capabilities (bold, color, cursor movement) into your scripts. | Wikipedia |
tr |
Translate (or Transliterate) | Douglas McIlroy wrote it for V4 Unix, inherited from Multics — the oldest surviving single-purpose text transformer. | Wikipedia |
traceroute |
Trace Route | Van Jacobson wrote it in 1987 using a clever TTL-expiry trick suggested by Steve Deering — the name simply describes what it does. | Wikipedia |
troff |
Typesetter ROFF | When Bell Labs got a phototypesetter, Ossanna forked nroff for proportional fonts — 't' distinguished typeset from terminal output. | Wikipedia |
uniq |
Unique | Only detects adjacent duplicates by design — built as a filter for already-sorted data where identical lines sit together. | Wikipedia |
vi |
Visual (mode of ex) | Bill Joy's visual mode for ex became so popular that the two-character shortcut to enter it became the command's entire identity. | Wikipedia |
wc |
Word Count | Version 1 Unix (1971) — originally counted words, text lines, and roff control lines, doubling as a typesetting assistant. | Wikipedia |
wget |
World Wide Web get | Portmanteau of 'Web' and 'get' — originally called 'Geturl' before adopting wget in version 1.4.0, November 1996. | Wikipedia |
xargs |
eXtended ARGuments | Bridges the gap for commands that take arguments but not stdin — converts piped input into command-line arguments. | Wikipedia |
yacc |
Yet Another Compiler-Compiler | Stephen Johnson's self-deprecating name belied a tool so influential he later said its contribution to Unix and C was what he was proudest of. | Wikipedia |
| Command | Stands For / Meaning | Origin / Lore | Source |
|---|---|---|---|
bat |
A cat with wings | Give the Unix cat command wings (syntax highlighting, git integration) and you get a bat. The animal pun is the whole pitch. | GitHub |
btm |
bottom — the opposite of top | Named as a cheeky antonym to the top command it replaces; btm mirrors how top is already three letters. | GitHub |
delta |
Delta (Δ) — the symbol for difference (?) | A diff viewer named after the universal symbol for difference; every diff is literally a delta between two states. | GitHub |
dust |
du + Rust | The package is literally named du-dust in crate registries, making the portmanteau explicit. | GitHub |
eza |
Minimal rename of exa | Community fork of exa after its author went unreachable — renamed because they lacked permission to keep the original name. | GitHub |
fd |
Shortened form of find (?) | Half the letters of find, roughly half the keystrokes — naming mirrors the tool's philosophy of doing less to get more. | GitHub |
fish |
Friendly Interactive SHell | Axel Liljencrantz created it in 2005 — the acronym is the design philosophy: be friendly first, POSIX second (or never). | Wikipedia |
fzf |
FuZzy Finder (?) | Three consonants that capture the entire product: fuzzy finding, nothing more, nothing less. | GitHub |
hyperfine |
Named after the hyperfine transition of caesium-133 | A benchmarking tool named after the atomic phenomenon that literally defines the SI second. | GitHub |
jq |
JSON query (?) | Two letters that launched a thousand pipelines; jq did for JSON what awk did for columnar text. | GitHub |
procs |
Processes | Where ps cryptically abbreviates 'process status', procs just says what it shows: processes. | GitHub |
rg |
ripgrep — 'rip' as in tear through text fast | Author intended 'rip' as speed; the 'RIP grep' double meaning didn't dawn on him until after release. | GitHub |
sd |
Search & Displace | s[earch] & d[isplace] — a cheekier, more intuitive framing than sed's 'stream editor.' | GitHub |
starship |
Space-themed successor to Spaceship prompt (?) | Spaceship was a Zsh prompt 'for astronauts'; Starship is the faster, cross-shell Rust evolution of that concept. | GitHub |
tldr |
Too Long; Didn't Read | Man pages are thorough but intimidating — tldr pages are the 'skip to the examples' version of documentation. | GitHub |
tmux |
Terminal Multiplexer | Nicholas Marriott created it in 2007 as a BSD-licensed alternative to GNU Screen — the name is a straight abbreviation. | Wikipedia |
tokei |
Japanese 時計 (tokei) meaning clock | The predecessor tool is cloc (sounds like clock); tokei is the Japanese word for clock — a bilingual pun. | GitHub |
yq |
YAML query | The name is the entire pitch: it's jq, but for YAML (and now XML, TOML, CSV, and properties too). | GitHub |
zoxide |
z + oxide (Rust = iron oxide) (?) | Combines its spiritual ancestor (the z shell plugin) with a nod to its Rust implementation via chemistry. | GitHub |
zsh |
Z Shell | Paul Falstad saw his Princeton TA Zhong Shao's login name 'zsh' and thought it sounded like a good shell name. | Wikipedia |
whyis grep # look up a single command
whyis grep awk sed # look up multiple
whyis --list # list all commands
whyis --random # random entrynpm install -g @centricle/whyisPRs welcome. Every entry needs:
- An entry in
data/commands.json - A citation URL (official docs, author statement, or Wikipedia)
- If the origin is disputed, set
"uncertain": true
Run npm run readme to regenerate this table after editing the JSON.
MIT