/bin: Explanation & Insights
On modern Linux systems, /bin is a symbolic link to /usr/bin, the directory that holds the essential command programs every session depends on.
What It Is
/bin is where the binaries live — or rather, where they used to live. The name is short for "binaries," and for most of Unix history this was the home of the small, essential command programs you can't run a system without: ls to look around, cp and mv to move things, cat to read a file, and bash itself, the shell that reads everything you type.
On any current Linux box, though, /bin is no longer a directory at all. It's a symlink — a signpost pointing somewhere else. Ask the system what /bin really is and it tells you plainly:
$ ls -ld /bin
lrwxrwxrwx 1 root root 7 May 8 21:15 /bin -> usr/bin
That l at the very start, and the little -> arrow, mean /bin is a pointer, not a place. Follow it and you land in /usr/bin, where the actual programs sit. Every command you thought lived in /bin has simply moved house, and /bin is the forwarding address nailed to the old door.
Where the Files Really Live
The real binaries are in /usr/bin — that's the page you want if you're hunting for where a command physically resides, or wondering why /usr holds so much of the system. Its administrative sibling, /sbin, works the same way: on a modern system it's a symlink to /usr/sbin, holding the commands meant for the root user rather than everyone.
So /bin/ls and /usr/bin/ls are not two copies of anything. They are the same file, reached by two paths — the way a house with a front door on one street and a back door on another is still one house. Programs and scripts written decades ago still say /bin/sh or #!/bin/bash at the top; the symlink is what quietly keeps every one of them working.
A Little History
Here's the part worth knowing, because the reason /bin and /usr/bin were ever two things is one of the great accidents of computing.
In the early 1970s, Ken Thompson and Dennis Ritchie were building Unix on a PDP-11, with the whole system living on a single removable disk pack — an RK05, which held about two and a half megabytes. That was the entire world: the operating system, the tools, and the users' home directories, all on one small platter. And it filled up.
So they did the obvious thing: they hung a second disk on the machine and let the overflow spill onto it. That second disk got mounted at a directory called /usr — because, at first, it's where the user home directories went. As the system kept growing, the commands spilled over there too, into /usr/bin.
But that created a subtle trap. The second disk only becomes available after the system has booted far enough to mount it. And the program that does the mounting is itself a command. If you put the essential boot-time tools on the disk you can't reach until you've booted... you have a chicken with no egg and an egg with no chicken. So the rule was born: anything needed early, to bring the system up, stays on the root disk in /bin; everything else can live in /usr/bin. The split was never a design. It was a disk that ran out of room, and a boot sequence that had to start somewhere.
That constraint vanished a long time ago. Modern Linux boots through an initramfs — a tiny temporary root filesystem loaded into memory — that has /usr mounted and ready before the real system ever starts, so there's no longer any moment when /bin and /usr/bin need to be on different disks. The reason for the split outlived the split's usefulness by roughly forty years.
Around 2012 the distributions finally settled it. Fedora went first with a change it called "UsrMove," collapsing /bin, /sbin, and their friends into /usr and leaving symlinks behind so nothing broke. The rest of the Linux world followed, and Debian completed the same "usr-merge" a few releases ago. The symlink you get today is the tidy headstone on a rule that outlived its reason by roughly forty years — a door that still opens, into a room that moved.
See Also
/usr/bin— where the essential command binaries actually live now/usr— the larger tree that swallowed/binin the usr-merge/sbin— the same story, for the root-only administrative commands- symlink — the pointer that makes
/binwork without holding a single file - mounting — how a second disk (like the original
/usr) becomes part of the tree ls— the command that shows you a symlink for what it is, with-l
Chasing a command that isn't where you expected it?
CleverUptime detects the services running on your box straight from the kernel, so you always know what's actually there and what it's doing — no guessing where anything lives.
Want to see your own server's health right now? One command, no signup, no install.