Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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?

share|improve this question
    
aren't those guys talking about a specific machine? –  Tshepang Jan 15 '11 at 11:57
    
@tshepang well if you keep clicking up, in the article you'll reach Basic Introduction to UNIX/linux. So I'd say no, they're not talking about a specific machine –  xenoterracide Jan 15 '11 at 12:08
3  
@xeno Yeah, I did, but didn't stick around long enough. In that case, that page must be taken down. So misleading. –  Tshepang Jan 15 '11 at 12:10
    
@whoami How did you reach that link? –  Tshepang Jan 15 '11 at 12:10
2  
That document can be considered 'historical reference'. If you look at the "about this document" page, you will see that it was copyrighted originally in 1993. If you look at the bibliography, it's most recent source is 1997. Most of the popular unix-like operating systems have changed substantially since then. –  gabe. Jan 15 '11 at 15:02

5 Answers 5

up vote 32 down vote accepted

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.

share|improve this answer
    
So does it mean that I can share /usr/bin between two distros? like ubuntu 10.04 and 10.10? –  balki Jan 15 '11 at 12:48
3  
@balki no, they still have to be linked correctly, which means they'd have to be using the right version of the libs they are built against. –  xenoterracide Jan 15 '11 at 13:07
2  
/bin is a link to /usr/bin on some unices, such as (some releases of?) Solaris. –  Gilles Jan 15 '11 at 16:08
    
@balki you might be able to share /usr between two very similar distro's, though I wouldn't try it unless you know what you are doing, and you are prepared for the experiment to fail in a way that makes the computer not boot, or eat your data. Also be advised that many of the big differences between 10.04 and 10.10 will be in /usr –  xenoterracide Jan 20 '11 at 13:23

/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.

share|improve this answer
1  
Oh, and you can put all these on a separate disk or partition if you like, for security or whatever. The idea is that you can umount /usr and the system will have all it needs for basic functioning, but it can't run any non-system applications. –  ultrasawblade Jan 19 '11 at 19:16
    
I wish I would've known this years ago. Best explanation I have seen so far. I can't say I looked very hard, but glad to finally know the answer. –  David Sep 27 '13 at 7:20
    
this is a great answer. i'd donate you 10 of my own points if i could –  amphibient Oct 24 '13 at 15:16

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).

share|improve this answer

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.

share|improve this answer
1  
who said bin is only for system administrators? that's what sbin is for. –  xenoterracide Jan 17 '11 at 13:08
    
Misquoted you. Sorry, I was reading too fast. –  bahamat Jan 17 '11 at 16:23

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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.