Operating System Specific Annex
This section is for additional requirements and recommendations
that only apply to a specific operating system. The material in this
section should never conflict with the base standard.
Linux
This is the annex for the Linux operating system.
/ : Root directory
On Linux systems, if the kernel is located in
/, we recommend using the names
vmlinux or vmlinuz, which
have been used in recent Linux kernel source packages.
/bin : Essential user command binaries (for use by all users)
Linux systems which require them place these additional files into
/bin:
setserial
/dev : Devices and special files
The following devices must exist under
/dev.
/dev/null
All data written to this device is discarded. A read from this device
will return an EOF condition.
/dev/zero
This device is a source of zeroed out data. All data written to this
device is discarded. A read from this device will return as many bytes
containing the value zero as was requested.
/dev/tty
This device is a synonym for the controlling terminal of a
process. Once this device is opened, all reads and writes will behave
as if the actual controlling terminal device had been opened.
Rationale
Previous versions of the FHS had stricter requirements for
/dev.
Other devices may also exist in /dev.
Device names may exist as symbolic links to other device nodes
located in /dev
or subdirectories of /dev.
There is no requirement
concerning major/minor number values.
/etc : Host-specific system configuration
Linux systems which require them place these additional files into
/etc.
lilo.conf
/sbin : Essential system binaries
Linux systems place commands relating to filesystem maintenance and
boot loader management into /sbin.
Optional files for /sbin:
Static binaries:
ldconfig
sln
ssync
Static ln (sln) and
static sync (ssync) are
useful when things go wrong. The primary use of
sln (to repair incorrect symlinks in
/lib after a poorly orchestrated upgrade) is no
longer a major concern now that the ldconfig
program (usually located in /usr/sbin)
exists and
can act as a guiding hand in upgrading the dynamic libraries. Static
sync is useful in some emergency situations.
Note that these need not be statically linked versions of the standard
ln and sync, but may
be.
The ldconfig binary is optional for
/sbin since a site may choose to run
ldconfig at boot time, rather than only when
upgrading the shared libraries. (It's not clear whether or not it is
advantageous to run ldconfig on each boot.) Even
so, some people like ldconfig around for the
following (all too common) situation:
I've just removed /lib/<file>.
I can't find out the name of the library because ls is
dynamically linked, I'm using a shell that doesn't have ls
built-in, and I don't know about using "echo *" as a
replacement.
I have a static sln, but I don't know what to call the link.
Miscellaneous:
ctrlaltdel
kbdrate
So as to cope with the fact that some keyboards come up with
such a high repeat rate as to be unusable,
kbdrate may be installed in
/sbin on some systems.
Since the default action in the kernel for the Ctrl-Alt-Del key
combination is an instant hard reboot, it is generally advisable to
disable the behavior before mounting the root filesystem in read-write
mode. Some init suites are able to disable
Ctrl-Alt-Del, but others may require the
ctrlaltdel program, which may be installed in
/sbin on those systems.
/usr/src : Source code
For systems based on
glibc,
there are no specific guidelines for
this directory. For systems based on Linux
libc revisions prior to
glibc,
the following guidelines and rationale apply:
The only source code that should be placed in a specific
location is the Linux kernel source code. It is located in
/usr/src/linux.
If a C or C++ compiler is installed, but the complete Linux
kernel source code is not installed, then the include files from the
kernel source code must be located in these directories:
/usr/src/linux/include/asm-<arch>
/usr/src/linux/include/linux
<arch> is the name of the system
architecture.
Note
/usr/src/linux
may be a symbolic link to a kernel source code tree.
Rationale
It is important that the kernel include files be located in
/usr/src/linux and not in
/usr/include
so there are no problems when system
administrators upgrade their kernel version for the first time.
/var/spool/cron : cron and at jobs
This directory contains the variable data for the
cron and at programs.