/
This should contain the minimum needed to boot, restore and repair the filesystem. The idea is to be able to ahve all the core files on small portable storage device.
/bin
binaries used by admins and normal users. This is not the complete set of all the commands available on the system - just the minimum needed for booting and restoring (the rest are in separate places, see below). For example, in OS X 10.6 these are:
[ bash cat chmod cp csh date dd df domainname echo ed expr hostname kill ksh launchctl link ln ls mkdir mv pax ps pwd rcp rm rmdir sh sleep stty sync tcsh test unlink unrar wait4path zsh
/dev
devices - i.e., drivers. In Unix they are setup to look and act as if they were files
/etc
system configurations, specific for a machine. These are static, i.e. only changeable by admins, and are not executable binaries. Classic examples /etc/hosts, /etc/group, /etc/passwd
/opt
Application packages added on. Used, for example, by MacPorts
/sbin
system binaries. These are only used by root or the system. This is the minimum set needed for booting / restoring the system. The other system binaries are in /usr/sbin and /usr/local/sbin
Typical examples include mount, reboot, fsck
/tmp
temporary files. These are deleted when the system reboots. /var/tmp is an alternative that doesn't.
/usr
Non root hierarchy. Static, i.e. shouldn't need to change unless an admin installs something.
/usr/bin
This is where most commands available to all users are. There's loads and loads of them, from python to who to calendar to ssh...
/usr/include
These are include libraries used by C programs. Of no interest to most users. C libraries get special treatment because at the time Unix was created C was 'the' programming language - indeed, early implementation of Unix were written in C, as opposed to assembly as it was then the norm.
/usr/lib
These are dynamic libraries used by packages and programs. Normally created as a side effect of installations.
/usr/local
This is where software for a specific machine should go. For example mysql, php5, etc. Within this folder the same hierarchy as root holds:
/usr/local/bin for binaries,
/usr/local/etc for config files,
/usr/local/include for C libraries,
/usr/local/lib for shared binaries that are not exectuded directly,
/usr/local/sbin for system libraries run locally
/usr/local/share for read only libraries
/usr/share
Read only files, like man pages. If you install a geo-location library like GeoIP, its data could go here
/usr/X11 and /usr/X11R6
This is used by the X11 - a full on Unix windows system available on your Mac. You may have come across it if using Gimp, the free Photoshop alternative. X11R6 is a symbolic link to X11
/var
Variable data. The opposite of static, i.e. users (or the system) change them all the time
/var/lib
This is non-shareable state information for apps. Users shouldn't need to touch this
/var/log
Log files, for example from your Apache web server
/var/run
These are files related to a currently running instance of a program or package. Typically process id (.pid) files and such.
/var/spool
This holds queues of data that need to be dealt with at some stage by an admin or a package. It will be typically deleted after processsing. /var/spool/mqueue holds the outgoing mail queue, for example
/var/tmp
This is temporary data, but unlike /tmp it is preserved between system reboots