Filesystem Hierarchy Standard(FHS)

文章较长,建议搜索阅读

历史版本

legend Version Release Date Notes
旧版本 1 1994/2/14 FSSTND
旧版本 1.1 1994/10/9 FSSTND
旧版本 1.2 1995/3/28 FSSTND
旧版本 2 1997/10/26 FHS 2.0 直接继承自FSSTND 1.2 。 FSSTND更名为FHS
旧版本 2.1 2000/4/12 FHS
旧版本 2.2 2001/5/23 FHS
仍支持 2.3 2004/1/29 FHS
最新版 3 2015/5/18 FHS

 

 

FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:

可分享的(shareable) 不可分享的(unshareable)
不变的(static) /usr /etc
/opt /boot
可变动的(variable) /var/mail /var/run
/var/spool/news /var/lock
  • 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
  • 不可分享的:自己机器上面运作的装置文件或者是与程序有关的socket文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了.
  • 不变的:有些数据是不会经常变动的,跟随着distribution而不变动. 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
  • 可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等.

 

精简版解释

事实上,FHS针对目录树架构仅定义出三层目录,并定义了这三层目录里面应该存放哪些数据:

  1. / 根目录
  2. /usr(unix software resource)
  3. /var  (variable)

 

 

 

 

根目录 (/) 的意义与内容

概要:

  1. 所有的目录都是由根目录衍生出来的(根目录是整个系统最重要的一个目录)
  1. 与开机/还原/系统修复等动作有关. (由于系统开机时需要特定的开机软件、核心文件、开机所需程序、 函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行)
  1. FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好.(因为越大的分区你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会,如此不但效能较佳,根目录所在的文件系统也较不容易发生问题.)
  2. 由于根目录的重要性,在分区的时候,应该注意以下目录不能跟根目录分开(因为开机过程中只有根目录会被挂载,其他分区是在开机完成之后才进行挂载的):
    • /etc:
    • /bin:
    • /dev:
    • /lib:
    • /sbin:

Requirements

The following directories, or symbolic links to directories, are required in /.

Directory Description
bin Essential command binaries
boot Static files of the boot loader
dev Device files
etc Host-specific system configuration
lib Essential shared libraries and kernel modules
media Mount point for removable media
mnt Mount point for mounting a filesystem temporarily
opt Add-on application software packages
run Data relevant to running processes
sbin Essential system binaries
srv Data for services provided by this system
tmp Temporary files
usr Secondary hierarchy
var Variable data

 

 

Specific Options

The following directories, or symbolic links to directories, must be in /var, if the corresponding subsystem is installed:

Directory Description
account Process accounting logs (optional)
crash System crash dumps (optional)
games Variable game data (optional)
mail User mailbox files (optional)
yp Network Information Service (NIS) database files (optional)

 

 

 

 

 

 

 

根目录底下目录说明:

/bin Essential user command binaries (for use by all users)
/boot Static files of the boot loader
/dev Device files
/etc Host-specific system configuration

The /etc hierarchy contains configuration files. A “configuration file” is a local file used to control the operation of a program; it must be static and cannot be an executable binary.

/home User home directories (optional)
/lib Essential shared libraries and kernel modules

contains those shared library images needed to boot the system

and run the commands in the root filesystem, ie. by binaries in /bin and /sbin

/lib<qual> Alternate format essential shared libraries (optional)(备用格式共享库)

There may be one or more variants of the /lib directory on systems which support more than one binary format requiring separate libraries.(系统上的/ lib目录可能有一个或多个变体,它们支持需要单独库的多个二进制格式。)

/media Mount point for removable media
/opt Add-on application software packages

reserved for the installation of add-on application software packages.(保留用于安装附加应用程序软件包。要安装在/ opt中的软件包必须将其静态文件放置在单独的/ opt / <package>或/ opt / <provider>目录树中,其中<package>是描述软件包的名称,<provider>是 提供者的LANANA注册名称。)

/root Home directory for the root user (optional)
/run Run-time variable data

该目录包含系统信息数据,描述系统启动以来的情况。 在这个目录下的文件必须在引导过程开始时被清除(适当地删除或截断)。

 

这个目录的目的曾经由/ var / run提供。 一般而言,程序可以继续使用/ var / run来满足为了向后兼容而设置/运行的需求。 已经迁移到使用/运行的程序应该停止使用/ var / run,除非在/ var / run部分中注明。

 

程序也可以有一个/run的目录;并且 鼓励一个程序使用多个run-time file。 用户也可以拥有/run的目录,但必须限制访问权限,以防止未经授权的使用/run和其他子目录。

 

/sbin System binaries
/srv Data for services provided by this system

contains site-specific data which is served by this system.(主要用来存储本机或本服务器提供的服务或数据。(用户主动生产的数据、对外提供服务))

/tmp Temporary files

用于存储一些临时文件,以及程序的临时数据,一般会在系统重启后清空

/usr /usr is the second major section of the filesystem. /usr is shareable, read-only data. That means that /usr should be shareable between various FHS-compliant hosts and must not be written to. Any information that is host-specific or varies with time is stored elsewhere.

 

Large software packages must not use a direct subdirectory under the /usr hierarchy.

(/ usr是文件系统的第二个主要部分。 / usr是可共享的,只读数据。 这意味着/ usr应该可以在各种符合FHS的主机之间共享,而且不能写入。 任何主机特定或随时间变化的信息都存储在别处。

 

并且大型软件包不得在/ usr层次结构下使用直接子目录。)

/var contains variable data files.

包括假脱机目录和文件,管理和日志记录数据以及临时和临时文件。

/ var的某些部分不能在不同的系统之间共享。例如,/ var / log,/ var / lock和/ var / run。其他部分可能是共享的,特别是/ var / mail,/ var / cache / man,/ var / cache / fonts和/ var / spool / news。

 

/var is specified here in order to make it possible to mount /usr read-only. Everything that once went into /usr that is written to during system operation (as opposed to installation and software maintenance) must be in /var.(/ var能够挂载/ usr。在系统运行期间(而不是安装和软件维护)写入/ usr的所有东西都必须在/ var中。)

 

如果/ var不能成为一个单独的分区,通常最好将/ var移出根分区并移入/ usr分区。 (有时这样做是为了减少根分区的大小,或者当根分区中的空间不足时)。但是,/ var不能链接到/ usr,因为这使得/ usr和/ var变得更加困难,而且很可能创建一个命名冲突。相反,将/ var链接到/ usr / var。

 

应用程序通常不会将目录添加到/ var的顶层。这些目录只有在具有一定的系统意义时才能被添加,并且需要与FHS邮件列表进行协商。

 

 

 

 

/usr 的意义与内容

概要:

  1. 依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable, static), 如果你知道如何透过网络进行分区的挂载,那么/usr确实可以分享给局域网络内的其他主机来使用!
  2. usr(Unix Software Resource 即Unix操作系统软件资源) FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录.
  3. 所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录有点类似Windows 系统的『C:\Windows\ + C:\Program files\』这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量.

Requirements

The following directories, or symbolic links to directories, are required in /usr.

Directory Description
bin Most user commands
lib Libraries
local Local hierarchy (empty after main installation)
sbin Non-vital system binaries
share Architecture-independent data

 

Specific Options

Directory Description
games Games and educational binaries (optional)
include Header files included by C programs
libexec Binaries run by other programs (optional)
lib<qual> Alternate Format Libraries (optional)
src Source code (optional)

An exception is made for the X Window System because of considerable precedent and widely-accepted practice.

The following symbolic links to directories may be present. This possibility is based on the need to preserve compatibility with older systems until all distribution can be assumed to use the /var hierarchy.(由于有相当多的先例和广泛接受的做法,X窗口系统是个例外。可能会出现以下到目录的符号链接。 这种可能性是基于需要保持与旧系统的兼容性,直到所有分配都可以被假定为使用/var。)

/usr/spool -> /var/spool
/usr/tmp -> /var/tmp
/usr/spool/locks -> /var/lock

Once a system no longer requires any one of the above symbolic links, the link may be removed, if desired.

 

 

 

 

 

一般来说,/usr的次目录建议有底下这些:

/usr/bin Most user commands

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

/usr/include Directory for standard include files.

系统上所有的C能用到的include 文件放置的地方

/usr/lib Libraries for programming and packages

 

/usr/lib includes object files and libraries. 在一些系统上,还可能包含一些用户或shell直接执行的内部二进制文件

 

应用程序可以使用/ usr / lib下的单个子目录。 如果应用程序使用子目录,则应用程序专用的所有体系结构相关数据必须放在该子目录中。

/usr/libexec Binaries run by other programs (optional)

 

/usr/libexec includes internal binaries that are not intended to be executed directly by users or shell scripts. Applications may use a single subdirectory under /usr/libexec.

 

Applications which use /usr/libexec in this way must not also use /usr/lib to store internal binaries, though they may use /usr/lib for the other purposes documented here.

(以这种方式使用/ usr / libexec的应用程序也不能使用/ usr / lib来存储内部的二进制文件,尽管它们可能使用/ usr / lib作为其他目的。)

/usr/lib<qual> Alternate format libraries (optional)

 

/usr/lib<qual> performs the same role as /usr/lib for an alternate binary format

 

 

/usr/local Local hierarchy

 

Directory        Description

bin        Local binaries

etc        Host-specific system configuration for local binaries

games        Local game binaries

include        Local C header files

lib        Local libraries

man        Local online manuals

sbin        Local system binaries

share        Local architecture-independent hierarchy

src        Local source code

 

如果目录/ lib <qual>或/ usr / lib <qual>存在,则等效目录也必须存在于/ usr / local中。

 

/usr/local/etc可能是/etc/local的一个符号链接。

/usr/local/share 该目录内容的要求与/ usr / share相同。

/usr/sbin Non-essential standard system binaries

 

This directory contains any non-essential binaries used exclusively by the system administrator. System administration programs that are required for system repair, system recovery, mounting /usr, or other essential functions must be placed in /sbin instead.

(该目录包含系统管理员专门使用的任何非必要的二进制文件。 系统修复,系统恢复,安装/ usr或其他基本功能所需的系统管理程序必须放在/ sbin中。)

同时/usr/sbin里面不能有子目录

/usr/share Architecture-independent data

 

The /usr/share hierarchy is for all read-only architecture independent data files.

 

这个文件旨在可以在给定OS的所有体系结构平台之间共享; 因此,例如,具有i386,Alpha和PPC平台的站点可能会维护一个集中安装的/ usr / share目录。 但是请注意,/ usr / share一般不打算由不同的操作系统共享,或者由同一操作系统的不同版本共享。(放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件嘛!)

 

Any program or package which contains or requires data that doesn’t need to be modified should store that data in /usr/share (or /usr/local/share, if installed locally). It is recommended that a subdirectory be used in /usr/share for this purpose. Applications using a single file may use /usr/share/misc.(任何包含或需要不需要修改数据的程序或软件包都应该将该数据存储在/ usr / share(或/ usr / local / share,如果本地安装)。 为此,建议在/ usr / share中使用一个子目录。 使用单个文件的应用程序可能使用/ usr / share / misc。)

 

存储在/ usr / share / games中的游戏数据必须是纯粹的静态数据。 任何可修改的文件,例如乐谱文件,游戏记录等都应放置在/ var / games中。

 

The following directories, or symbolic links to directories, must be in /usr/share(以下目录或指向目录的符号链接必须位于/ usr / share中)

 

Directory        Description

man           Online manuals

misc         Miscellaneous architecture-independent data

 

The following directories, or symbolic links to directories, must be in /usr/share, if the corresponding subsystem is installed:()

 

Directory        Description

color        Color management information (optional)

dict        Word lists (optional)

doc        Miscellaneous documentation (optional)

games        Static data files for /usr/games (optional)

info        Primary directory for GNU Info system (optional)

locale        Locale information (optional)

nls        Message catalogs for Native language support (optional)

ppd        Printer definitions (optional)

sgml        SGML data (optional)

terminfo        Directories for terminfo database (optional)

tmac        troff macros not distributed with groff (optional)

xml        XML data (optional)

zoneinfo        Timezone information and configuration (optional)

 

/usr/src Source code (optional)

Source code may be placed in this subdirectory, only for reference purposes.

 

 

/var 的意义与内容

概要:

/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等. 所以/var在系统运作后才会渐渐占用硬盘容量的目录

Requirements

The following directories, or symbolic links to directories, are required in /var:

Directory Description
cache Application cache data
lib Variable state information
local Variable data for /usr/local
lock Lock files
log Log files and directories
opt Variable data for /opt
run Data relevant to running processes
spool Application spool data
tmp Temporary files preserved between system reboots

Several directories are `reserved’ in the sense that they must not be used arbitrarily by some new application, since they would conflict with historical and/or local practice. They are:

/var/backups
/var/cron
/var/msgs
/var/preserve

 

Specific Options

The following directories, or symbolic links to directories, must be in /var, if the corresponding subsystem is installed:

Directory Description
account Process accounting logs (optional)
crash System crash dumps (optional)
games Variable game data (optional)
mail User mailbox files (optional)
yp Network Information Service (NIS) database files (optional)

 

 

 

 

常见的次目录有:

/var/account Process accounting logs (optional)

该目录保存当前活动的进程记帐日志和复合进程使用数据(在lastcomm和sa的某些类UNIX系统中使用)

/var/cache Application cache data

 

/ var / cache用于从应用程序缓存的数据。 这些数据是由于耗时的I / O或计算而在本地生成的。 应用程序必须能够重新生成或恢复数据。 与/ var / spool不同,可以删除缓存的文件而不会丢失数据。 数据必须在应用程序的调用和重新启动系统之间保持有效。

位于/ var / cache下的文件可能会以特定于应用程序的方式,由系统管理员或两者同时过期。 应用程序必须始终能够从手动删除这些文件(通常由于磁盘空间不足)中恢复。 缓存目录的数据格式没有其他要求。

 

 

Specific Options

 

Directory        Description

fonts        Locally-generated fonts (optional)

man        Locally-formatted manual pages (optional)

www        WWW proxy or cache data (optional)

<package>        Package specific cache data (optional)

 

/var/crash System crash dumps (optional)

该目录保存系统崩溃信息转储。 截至本标准发布之日,系统崩溃转储在Linux下不受支持,但可能受到其他符合FHS的系统的支持。

/var/games Variable game data (optional)

任何与/ usr中的游戏有关的可变数据都应放在这里。 / var / games应该保存先前在/ usr中找到的变量数据; 静态数据(例如帮助文本,级别描述等)必须保留在别处,如/ usr / share / games。

/var/lib Variable state information

 

This hierarchy holds state information pertaining to an application or the system. State information is data that programs modify while they run, and that pertains to one specific host. Users must never need to modify files in /var/lib to configure a package’s operation, and the specific file hierarchy used to store the data must not be exposed to regular users.

State information is generally used to preserve the condition of an application (or a group of inter-related applications) between invocations and between different instances of the same application. State information should generally remain valid after a reboot, should not be logging output, and should not be spooled data.

 

An application (or a group of inter-related applications) must use a subdirectory of /var/lib for its data. There is one required subdirectory, /var/lib/misc, which is intended for state files that don’t need a subdirectory; the other subdirectories should only be present if the application in question is included in the distribution.

/var/lib/<name> is the location that must be used for all distribution packaging support. Different distributions may use different names, of course.

 

 

The following directories, or symbolic links to directories, are required in /var/lib:

 

Directory        Description

misc        Miscellaneous state data

 

The following directories, or symbolic links to directories, must be in /var/lib, if the corresponding subsystem is installed:

 

Directory        Description

<editor>        Editor backup files and state (optional)

<pkgtool>        Packaging support files (optional)

<package>        State data for packages and subsystems (optional)

color        Color management information (optional)

hwclock        State directory for hwclock (optional)

xdm        X display manager variable data (optional)

 

/var/lock Lock files

 

Lock files should be stored within the /var/lock directory structure.

 

Lock files for devices and other resources shared by multiple applications, 例如最初在/ usr / spool / locks或/ usr / spool / uucp中找到的串行设备锁定文件,现在必须存储在/ var / lock中。 必须使用的命名惯例是“LCK ..”,后跟设备的基本名称。 例如,要锁定/ dev / ttyS0文件“LCK..ttyS0”将被创建。

 

The format used for the contents of such lock files must be the HDB UUCP lock file format. The HDB format is to store the process identifier (PID) as a ten byte ASCII decimal number, with a trailing newline. For example, if process 1230 holds a lock file, it would contain the eleven characters: space, space, space, space, space, space, one, two, three, zero, and newline.

/var/log Log files and directories

 

该目录包含其他日志文件。 大多数日志必须写入此目录或适当的子目录。

 

The following files, or symbolic links to files, must be in /var/log, if the corresponding subsystem is installed:

 

File        Description

lastlog        record of last login of each user

messages        system messages from syslogd

wtmp        record of all logins and logouts

 

/var/mail User mailbox files (optional)

 

The mail spool must be accessible through /var/mail and the mail spool files must take the form <username>.

(mail spool 必须通过/ var / mail访问,mail spool files 必须采用<username>的形式。)

 

用户邮箱文件必须以标准的UNIX邮箱格式存储。

 

/var/run Run-time variable data

 

这个目录曾经用于系统信息数据,因为它是在系统引导之后描述系统的。 这些功能已经移到/run; 此目录的存在是为了确保与使用本规范的旧版本的系统和软件的兼容性。

 

一般来说,/run的要求也适用于/var/run。 将/var/run作为符号连接到/run是有效的。存储有关谁正在使用系统的信息的utmp文件位于此目录中。程序不应该直接访问/var/run和/run,除非是访问/var/run/utmp。

 

/var/spool Application spool data

 

/var/spool contains data which is awaiting some kind of later processing. Data in /var/spool represents work to be done in the future (by a program, user, or administrator); often data is deleted after it has been processed. (/var/spool 包含正在等待某种稍后处理的数据。 /var/spool中的数据代表将来要完成的工作(由程序,用户或管理员完成); 通常数据在处理后被删除。)

 

 

The following directories, or symbolic links to directories, must be in /var/spool, if the corresponding subsystem is installed:

 

Directory        Description

lpd        Printer spool directory (optional)

mqueue        Outgoing mail queue (optional)

news        News spool directory (optional)

rwho        Rwhod files (optional)

uucp        Spool directory for UUCP (optional)

 

 

/var/tmp Temporary files preserved between system reboots

 

The /var/tmp directory is made available for programs that require temporary files or directories that are preserved between system reboots. Therefore, data stored in /var/tmp is more persistent than data in /tmp.

 

Files and directories located in /var/tmp must not be deleted when the system is booted. Although data stored in /var/tmp is typically deleted in a site-specific manner, it is recommended that deletions occur at a less frequent interval than /tmp.(/var/tmp目录可用于需要在系统重新启动之间保留的临时文件或目录的程序。 因此,存储在/var/tmp中的数据比/tmp中的数据更持久。

位于/var/tmp中的文件和目录在引导系统时不能被删除。 尽管存储在/var/tmp中的数据通常以特定于站点的方式删除,但建议删除的次数不要超过/tmp。)

/var/yp Network Information Service (NIS) database files (optional)

 

Variable data for the Network Information Service (NIS), formerly known as the Sun Yellow Pages (YP), must be placed in this directory.

(网络信息服务(NIS)的变量数据,以前称为Sun Yellow Pages(YP),必须放在此目录中。)

 

 

 

 

对于一些特定的操作系统(linux)还有一些特殊的情况:

Operating System Specific Annex

 

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.(写入该设备的所有数据都被丢弃。 从这个设备读取将返回一个EOF条件。)

/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.(该设备是过程控制终端的同义词。 一旦这个设备被打开,所有的读写操作就好像实际的控制终端设备已经被打开一样。)

 

/etc : Host-specific system configuration

Linux systems which require them place these additional files into /etc.

  • lilo.conf
  • (实际并不存在,可能跟lilo弃用有关)

 

/proc : Kernel and process information virtual filesystem

The proc filesystem is the de-facto standard Linux method for handling process and system information, rather than /dev/kmem and other similar methods.

(proc文件系统是处理进程和系统信息的事实上的标准Linux方法,而不是/ dev / kmem和其他类似的方法。 )

We strongly encourage this for the storage and retrieval of process information as well as other kernel and memory information.

 

/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

 

/sys : Kernel and system information virtual filesystem

The sys filesystem is the location where information about devices, drivers, and some kernel features is exposed. Its underlying structure is determined by the particular Linux kernel being used at the moment, and is otherwise unspecified.

 

/usr/include : Header files included by C programs

These symbolic links are required if a C or C++ compiler is installed and only for systems not based on glibc.

(如果安装了C或C ++编译器,则只有非基于glibc的系统才需要这些符号链接。)

/usr/include/asm -> /usr/src/linux/include/asm-<arch>
/usr/include/linux -> /usr/src/linux/include/linux

 

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

(对于基于glibc的系统,这个目录没有具体的指导。 对于glibc之前基于Linux libc修订版的系统,下列指导原则和理由适用:应该放在特定位置的唯一源代码是Linux内核源代码。 它位于/ usr / src / linux中。如果安装了C或C ++编译器,但未安装完整的Linux内核源代码,则内核源代码中的包含文件必须位于以下目录中)

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

 

 

/var/spool/cron : cron and at jobs

This directory contains the variable data for the cron and at programs.

 

 

 

 

精简版解释:

/ 主层次结构的根&&整个文件系统的根目录

  • /bin 所有用户在单用户模式中必须具备的二进制命令文件,如 cat, ls, cp.
  • /boot Boot loader文件,如 kernels, initrd.
  • /dev必要的 device 文件,如 /dev/null.
  • /etc 特定主机 全系统 的配置文件
    一直以来,这个名字本身就有争议。在早期由Bell labs所撰写的UNIX实现文档中,/etc 被当作附加(etcetera)目录,因为历史上这个文件夹用来保存所有不属于其他地方的文件(但FHS限制/etc仅用于保存静态配置文件,不能保存二进制文件)。从早期的文档发布以来,这个文件夹的名字就被人们以不同的方式重新定义。最近的释义包括如”Editable Text Configuration” 或 “Extended Tool Chest”词源

    • /etc/opt保存在/opt/中的插件包的配置文件
    • /etc/sgml 处理SGML的程序(如catalogs)的配置文件
    • /etc/X11 X Window System, version 11 的配置文件
    • /etc/xml处理xml的程序(如catalogs)的配置文件
  • /home用户的个人目录,包含保存的文件和个人设置等
  • /lib /bin/ 和/sbin/ 中必须的依赖库
  • /lib Alternate format essential libraries. Such directories are optional, but if they exist, they have some requirements.
  • /media 一些可以热拔插的介质(如CD-ROMs)的挂载点 (在FHS-2.3中出现).
  • /mnt 临时挂载的文件系统
  • /opt 可选的应用程序包
  • /proc 将进程和内核信息以文件形式呈现的虚拟文件系统。在Linux中,与procfs mount(进程文件系统)对应
  • /root root用户的个人目录
  • /run 运行时变量数据:从本次启动到现在的系统信息。如当前登陆的用户和正在运行的守护进程
  • /sbin 必备的系统可执行文件,如fsck, init, route.
  • /srv 本系统提供的特定站点的数据。如web服务器提供的数据和脚本,FTP服务器提供的数据,VCS的仓库
  • /sys 包含连接到本台计算机的设备信息
  • /tmp 临时文件(和/var/tmp相同). 通常在重启后清空,并且受到严格的大小限制
  • /usr 只读用户数据的次要层次,包含大部分(多)用户功能和应用
    • /usr/bin 所有用户的非必要的二进制可执行文件(在单用户模式中不需要)
    • /usr/include Standard include files.
    • /usr/lib /usr/bin/ 和 /usr/sbin/ 中的二进制文件的依赖库
    • /usr/lib Alternate format libraries (optional).
    • /usr/local 仅针对当前主机的 本地数据的第三个层次。一般包含其他的子目录,如 bin/, lib/, share/
    • /usr/sbin 非必须的系统二进制文件,如多种网络服务的守护进程
    • /usr/share 结构独立(共享)的数据
    • /usr/src 源代码,如 内核的源代码和它的头文件
    • /usr/X11R6 X Window System, Version 11, Release 6 (up to FHS-2.3, optional).
  • /var Variable files:各种在系统运行中,内容会不停改变的文件。如日志文件,spool files,和临时的电子邮件文件
    • /var/cache 应用缓存数据。这类文件由于耗时的I/O或计算而被生成在本地。应用必须能够重新生成或转储这些文件,以保证这些数据被删除时不会造成数据丢失。(意思就是这些东西删了不会造成不良后果)
    • /var/lib 状态信息。程序运行时会改变的持久化数据,如 数据库,packaging system metadata, etc.
    • /var/lock Lock files. 追踪当前正在使用的资源的文件.
    • /var/log Log files. 各种日志.
    • /var/mail Mailbox files. 在某些发行版中,这些文件被放在已经不推荐使用的/var/spool/mail 目录中.
    • /var/opt 来自保存在/opt 中的插件包的可变数据。
    • /var/run Run-time variable data. 这个目录包含描述系统的自启动以来的系统信息数据
      在 FHS 3.0中, /var/run 被 /run 替代。系统不应该在使用/var/run 或者提供/var/run 到 /run 的符号连接,防止出现兼容性倒退
    • /var/spool Spool for tasks waiting to be processed, e.g., print queues and outgoing mail queue.
      • /var/spool/mail 不建议使用的用户邮箱位置,见/var/mail
    • /var/tmp 重启时会被保存的临时数据

 

 

FHS 约定

大多数Linux发行版遵循文件系统层次结构标准(FHS),并且为保持FHS约定发布了相关政策。GoboLinux 和 NixOS 提供了有意不遵循FHS约定的实现

有些基本遵循这个标准的发行版在部分方面有些违背,如

  • 现代Linux发行版将/sys 作为可以被连接到此系统的设备修改和保存的虚拟文件系统(sysfs,相当于/proc),但是许多UNIX和类UNIX系统使用/sys 作为指向 kernel source tree 的符号连接
  • 许多现代UNIX系统(像FreeBSD ,通过它的端口系统)安装第三方包至/usr/local 然而却将本应是操作系统的代码放在/usr 中
  • 一些Linux发行版不再区分/lib 与/usr/lib,并且将lib 作为指向 /usr/lib 的软连接
  • html文件更应该被放在/srv/www下,而不是/var/www下
  • 一些Linux发行版不再区分 /bin 与 /usr/bin 和/sbin 与/usr/sbin 。他们将 /bin 作为指向 /usr/bin 的软连接, 将/sbin 作为指向/usr/sbin 的软连接

现代Linux发行版将/run 作为(遵循FHS3.0的)保存不稳定的运行时数据的临时文件系统(tmpfs)。根据FHS2.3,这类数据被保存在/var/run ,但是由于在启动时这个目录并不总是可用,会导致一些问题。所以,这些程序必须借助欺骗的方式,如使用类似 /dev/.udev, /dev/.mdadm, /dev/.systemd 或 /dev/.mount 等并不是用来保存这些数据的设备目录。除其他好处外,这样也会使根目录以只读方式挂载的系统更容易使用。例如,以下是Debian在2013年的Wheezy版本中作出的改变:

  • /dev/.* → /run/*
  • /dev/shm → /run/shm
  • /dev/shm/* → /run/*
  • /etc/* (writeable files) → /run/*
  • /lib/init/rw → /run
  • /var/lock → /run/lock
  • /var/run → /run
  • /tmp → /run/tmp

 

参考资料:

FHS官方

<<鸟哥的linux私房菜>>

点赞

发表评论

电子邮件地址不会被公开。