Difference between revisions of "Linux directory structure"
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
The '''Filesystem Hierarchy Standard''' ('''FHS''') defines the main directories and their contents in Linux operating systems. More simply, it is the '''Linux directory structure'''. | The '''Filesystem Hierarchy Standard''' ('''FHS''') defines the main directories and their contents in Linux operating systems. More simply, it is the '''Linux directory structure'''. | ||
− | + | NOTE: Run <code>man hier</code> to get the most up to date hierarchy. | |
− | All files and | + | ==Directory structure== |
+ | All files and directories appear under the root directory "/", even if they are stored on different physical devices. Note, however, that some of these directories may or may not be present on a given Linux system as they depend on whether certain subsystems, such as the X Window System, are installed. | ||
{| align="center" style="border: 1px solid #999; background-color:#FFFFFF; vertical-align: top; width: 100%;" summary="A description of the hierarchy specified in the FHS." | {| align="center" style="border: 1px solid #999; background-color:#FFFFFF; vertical-align: top; width: 100%;" summary="A description of the hierarchy specified in the FHS." | ||
Line 147: | Line 148: | ||
/usr/local # maybe | /usr/local # maybe | ||
− | + | If you do not want run-away logging to fill up our <code>/var</code> partition, you can archive ([[tar]]) old logs (e.g., older than one day): | |
find /var/log/ -name "*.log" -mtime +1 -exec bzip2 -z '{}' \; | find /var/log/ -name "*.log" -mtime +1 -exec bzip2 -z '{}' \; | ||
− | and then delete old tars (e.g. older than 30 days): | + | and then delete old tars (e.g., older than 30 days): |
find /var/log -name "*.bz2" -mtime +30 -exec rm '{}' \; | find /var/log -name "*.bz2" -mtime +30 -exec rm '{}' \; | ||
− | + | *"Mountable" directories are: '<code>/home</code>', '<code>/mnt</code>', '<code>/tmp</code>', '<code>/usr</code>', and '<code>/var</code>'. | |
+ | *Essential for booting are (i.e., they should all be on one partition): '<code>/bin</code>', '<code>/boot</code>', '<code>/dev</code>', '<code>/etc</code>', '<code>/lib</code>', '<code>/proc</code>', and '<code>/sbin</code>'. | ||
+ | |||
+ | ==man pages== | ||
+ | The following directories are usually (actually, ''should be'') in <code>/usr/share/<mandir>/<locale></code> | ||
+ | ;man1 :User programs (optional) | ||
+ | ;man2 :System calls (optional) | ||
+ | ;man3 :Library calls (optional) | ||
+ | ;man4 :Special files (optional) | ||
+ | ;man5 :File formats (optional) | ||
+ | ;man6 :Games (optional) | ||
+ | ;man7 :Miscellaneous (optional) | ||
+ | ;man8 :System administration (optional) | ||
+ | |||
+ | ==Create the FHS from scratch== | ||
+ | ''Note: The following was taken from the [http://www.linuxfromscratch.org/lfs/view/stable/chapter06/creatingdirs.html Linux From Scratch] docs.'' | ||
+ | <pre> | ||
+ | mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} | ||
+ | mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} | ||
+ | install -dv -m 0750 /root | ||
+ | install -dv -m 1777 /tmp /var/tmp | ||
+ | mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} | ||
+ | mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} | ||
+ | mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo} | ||
+ | mkdir -v /usr/libexec | ||
+ | mkdir -pv /usr/{,local/}share/man/man{1..8} | ||
+ | |||
+ | case $(uname -m) in | ||
+ | x86_64) ln -sv lib /lib64 | ||
+ | ln -sv lib /usr/lib64 | ||
+ | ln -sv lib /usr/local/lib64 ;; | ||
+ | esac | ||
+ | |||
+ | mkdir -v /var/{log,mail,spool} | ||
+ | ln -sv /run /var/run | ||
+ | ln -sv /run/lock /var/lock | ||
+ | mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local} | ||
+ | </pre> | ||
==External links== | ==External links== | ||
Line 158: | Line 196: | ||
*[http://www.openaddict.com/documents/Linux-Filesystem-Hierarchy/ Linux Filesystem Hierarchy] | *[http://www.openaddict.com/documents/Linux-Filesystem-Hierarchy/ Linux Filesystem Hierarchy] | ||
*[http://www.ibm.com/developerworks/linux/library/l-proc.html?ca=dgr-wikiaProcFile#N10308 Fortune Cookies through the /proc Filesystem] | *[http://www.ibm.com/developerworks/linux/library/l-proc.html?ca=dgr-wikiaProcFile#N10308 Fortune Cookies through the /proc Filesystem] | ||
+ | *[[wikipedia:Filesystem Hierarchy Standard]] | ||
[[Category:Linux Command Line Tools]] | [[Category:Linux Command Line Tools]] |
Latest revision as of 20:12, 19 April 2022
The Filesystem Hierarchy Standard (FHS) defines the main directories and their contents in Linux operating systems. More simply, it is the Linux directory structure.
NOTE: Run man hier
to get the most up to date hierarchy.
Contents
Directory structure
All files and directories appear under the root directory "/", even if they are stored on different physical devices. Note, however, that some of these directories may or may not be present on a given Linux system as they depend on whether certain subsystems, such as the X Window System, are installed.
Directory | Description |
---|---|
/bin/ | Essential command binaries for all users (e.g., cat, ls, cp) |
/boot/ | Boot loader files (e.g., kernels, initrd) |
/dev/ | Essential devices (e.g., /dev/null) |
/etc/ | Host-specific system-wide configuration files. |
|
Configuration files for /opt/ |
|
Configuration files for the X Window System, version 11 |
|
Configuration files for SGML. |
|
Configuration files for XML. |
/home/ | Users' home directories. |
/lib/ | Libraries essential for the binaries in /bin/ and /sbin/ |
/mnt/ | Temporarily mounted filesystems. |
/media/ | Mount points for removable media such as CD-ROMs (appeared in FHS-2.3) |
/opt/ | Add-on application software packages. |
/proc/ | Virtual filesystem documenting kernel and process status, mostly text files (e.g., uptime, network) |
/root/ | Home directory for the root user. |
/sbin/ | System administrative binaries (e.g., init, route, ifup) (system binaries) |
/tmp/ | Temporary files. (See also /var/tmp) |
/srv/ | Site-specific data which is served by the system. |
/usr/ | Secondary hierarchy for user shareable, read-only data. |
|
Same as for top-level hierarchy, but non-essential (not needed to bring the system up or recover after problems). |
|
Standard include files. |
|
Same as for top-level hierarchy. |
|
Same as for top-level hierarchy, but non-essential (e.g. daemons for various network-services). |
|
Architecture-independent (shared) data. |
|
Source code. (e.g. the kernel source code with its header files) |
|
X Window System, Version 11 Release 6. |
|
Tertiary hierarchy for local data, specific to this host. |
/var/ | Variable files, such as logs, databases, websites, and temporary e-mail files. |
|
Lock files. Files keeping track of resources currently in use. |
|
Log files. Various logs. |
|
Users mail-boxes. |
|
Information about the running system since last boot. (e.g. currently logged-in users and running daemons) |
|
Spool for tasks waiting to be processed. (e.g. print queues and unread mail) |
|
Deprecated location for users mail-boxes. |
|
Temporary files. Preferred to /tmp once in multi-user mode. |
Partitions
/boot / /home swap
Also,
/tmp nosuid,noexec,nodev (no SUID programes, No executables, No Device Files). /var noexec,nosuid # maybe /usr/local # maybe
If you do not want run-away logging to fill up our /var
partition, you can archive (tar) old logs (e.g., older than one day):
find /var/log/ -name "*.log" -mtime +1 -exec bzip2 -z '{}' \;
and then delete old tars (e.g., older than 30 days):
find /var/log -name "*.bz2" -mtime +30 -exec rm '{}' \;
- "Mountable" directories are: '
/home
', '/mnt
', '/tmp
', '/usr
', and '/var
'. - Essential for booting are (i.e., they should all be on one partition): '
/bin
', '/boot
', '/dev
', '/etc
', '/lib
', '/proc
', and '/sbin
'.
man pages
The following directories are usually (actually, should be) in /usr/share/<mandir>/<locale>
- man1
- User programs (optional)
- man2
- System calls (optional)
- man3
- Library calls (optional)
- man4
- Special files (optional)
- man5
- File formats (optional)
- man6
- Games (optional)
- man7
- Miscellaneous (optional)
- man8
- System administration (optional)
Create the FHS from scratch
Note: The following was taken from the Linux From Scratch docs.
mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo} mkdir -v /usr/libexec mkdir -pv /usr/{,local/}share/man/man{1..8} case $(uname -m) in x86_64) ln -sv lib /lib64 ln -sv lib /usr/lib64 ln -sv lib /usr/local/lib64 ;; esac mkdir -v /var/{log,mail,spool} ln -sv /run /var/run ln -sv /run/lock /var/lock mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}