Difference between /bin and /usr/bin

I read this up on this website and it doesn’t make sense.

http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/basic/node32.html

When UNIX was first written, /bin and
/usr/bin physically resided on two
different disks: /bin being on a
smaller faster (more expensive) disk,
and /usr/bin on a bigger slower disk.
Now, /bin is a symbolic link to
/usr/bin: they are essentially the
same directory.

But when you ls the /bin folder, it has far less content than the /usr/bin folder (at least on my running system).

So can someone please explain the difference?

Asked By: whoami

||

What? no /bin/ is not a symlink to /usr/bin on any FHS compliant system. Note that there are still popular Unices and Linuxes that ignore this – for example, /bin and /sbin are symlinked to /usr/bin on Arch Linux (the reasoning being that you don’t need /bin for rescue/single-user-mode, since you’d just boot a live CD).

/bin

contains commands that may be used by both the system administrator and by users, but which are required when no other filesystems are mounted (e.g. in single user mode). It may also contain commands which are used indirectly by scripts

/usr/bin/

This is the primary directory of executable commands on the system.

essentially, /bin contains executables which are required by the system for emergency repairs, booting, and single user mode. /usr/bin contains any binaries that aren’t required.

I will note, that they can be on separate disks/partitions, /bin must be on the same disk as /. /usr/bin can be on another disk – although note that this configuration has been kind of broken for a while (this is why e.g. systemd warns about this configuration on boot).

For full correctness, some unices may ignore FHS, as I believe it is only a Linux Standard, I’m not aware that it has yet been included in SUS, Posix or any other UNIX standard, though it should be IMHO. It is a part of the LSB standard though.

Answered By: xenoterracide

There are many UNIX-based systems. Linux, AIX, Solaris, BSD, etc. The original quote gives historical context that applies to all flavors. If you look on any one specific system, you will see different results. The last sentence of the original quote is specific to only some versions and distributions.

Answered By: Chris Quenelle

On Linux /bin and /usr/bin are still separate because it is common to have /usr on a separate partition (although this configuration breaks in subtle ways, sometimes). In /bin is all the commands that you will need if you only have / mounted.

On Solaris and Arch Linux (and probably others) /bin is a symlink to /usr/bin. Arch also has /sbin and /usr/sbin symlinked to /usr/bin.

Of particular note, the statement that /bin is for “system administrator” commands and /usr/bin is for user commands is not true (unless you think that bash and ls are for admins only, in which case you have a lot to learn). Administrator commands are in /sbin and /usr/sbin.

Answered By: bahamat

Update: For some history and the real reason why there is /usr, read this: http://lists.busybox.net/pipermail/busybox/2010-December/074114.html. Also this.


/sbin – Binaries needed for booting, low-level system repair, or maintenance (run level 1 or S)

/bin – Binaries needed for normal/standard system functioning at any run level.

/usr/bin – Application/distribution binaries meant to be accessed by locally logged in users

/usr/sbin – Application/distribution binaries that support or configure stuff in /sbin.

/usr/share/bin – Application/distribution binaries or scripts meant to be accesed via the web, i.e. Apache web applications

*local* – Binaries not part of a distribution; locally compiled or manually installed. There’s usually never a /local/bin but always a /usr/local/bin and /usr/local/share/bin.

Answered By: LawrenceC

Some kind of “update” on this issue:

Recently some Linux distributions are merging /bin into /usr/bin and relatedly /lib into /usr/lib. Sometimes also (/usr)/sbin to /usr/bin (Arch Linux).
So /usr is expected to be available at the same time as /.

The distinction between the two hierarchies is taken to be unnecessary complexity now.
The idea was once having only /bin available at boot, but having an initial ramdisk makes this obsolete.

I know of Fedora Linux (2011) and Arch Linux (2012) going this way and Solaris is doing this for a long time (> 15 years).

Answered By: JonnyJD
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.