FHS三层目录结构

READ

大家有没有发现,每套Linux distribution 版本的配置文件、执行文件、每个目录内放置的内容,其实都差不多?

换个想法,如果每接触一种Linux版本,目录结构完全不同,大家是不是会有很多困扰?


为了解决这种困扰,1993年8月,开发一套文件系统层次结构标准就变得非常迫切。这个标准,努力重整Linux文件和目录结构。1994年2月14日,发布了一个针对Linux操作系统的FSSTND(Filesystem Standard);但它并不能解决其他类Unix系统目录层次结构问题。故,1996年初,在BSD开发社区成员的协助下,FHS(Filesystem Hierarchy Standard),文件系统层次结构标准开发成功。

FHS定义了Linux操作系统中的主要目录及目录结构。通过指定文件系统各个区域的指导性原则、制定最少应该包含的必需的文件和文件夹、列举原则中的例外情况和与历史冲突的特殊情况,使得用户或应用程序可以预测已安装的文件和文件夹的位置。

FHS根据文件系统使用的频繁与否和是否允许用户随意改动,将目录定义为四种交互作用的形态,如下表所示:

四种状态详解:

  • 可分享的:可以分享给其他系统挂在使用的目录,如用户邮件等数据,是可以分享给网络上其他主机挂在用的目录。- 不可分享的:如本机运行的设备文件等数据,由于与自身机器特性相关,不适合分享给其他主机。- 不变的:有些数据是不会随着不同的Linux发行版而变动的,如函数库、系统管理员所管理的主机服务配置文件等。- 可变动的:经常改变的数据,如登录文件等。

事实上,FHS仅定义了三层目录下面的内容:

/:与开机系统有关

/usr:UNIX Software Resource,与软件安装/执行相关。不是user的缩写哦!

/var:variable,与系统运作过程相关。


/(根目录)

**/(根目录):**最最最重要的目录,没有之一!该目录是所有目录的源,而且还与开机、还原、修复系统相关!所以FHS标准建议,根目录所在分区应越小越好。与应用程序所安装的软件应区分开分区,这样不仅提高系统性能,而且还会保障系统的安全性。

为保障系统的正常运行,根目录下应包含如下文件:

/bin:存放单用户维护模式下还能被操作的命令。所有用户(普通用户和root)均可调用。

/boot:存放与系统启动相关的文件,如开机菜单、配置文件等。

/dev:以文件的形式,存放设备和接口设备。只要访问这个目录下的A文件,就相当于访问了A设备。

/etc:配置文件,存放几乎所有系统的主要配置文件,如用户账号(passwd)密码(shadow)、环境变量(profile)等信息。权限:普通用户可读,root可读可写。FHS标准建议,不将可执行文件存放在此。

/home:存放所有用户的主目录。在创建一个普通用户时,此文件夹就会创建一个用户主文件夹。

/lib:library,存放开机和/bin&/sbin调用的数据库。尤其是/lib/modules/目录,存放的是内和相关的模块(驱动程序)。

/media:媒体挂载的目录。该目录下的设备目录文件,均可删除。

/mnt:临时挂载使用的目录。


/mnt /media /dev的区别:

  • /mnt :一般为空,系统管理员用来手动挂载临时媒体设备用的。- /media:自动挂载的设备的目录,如插入一个U盘,就会在/media目录下生成一个u盘的目录。- /dev:存放的是访问外部设备文件的接口。因为linux文件系统与外接设备上的数据组织可能不同,没有办法直接读取。所以需要mount /dev/sda1 /mnt/usb1 ,转化成Linux自己的文件系统,然后解析并读取数据。

/opt:第三方软件存放的目录。

/root:系统管理员的主文件夹。将root主文件夹与根目录放在一个分区,可以使得单用户维护模式,仅挂载根目录时,该目录可以拥有root的主文件夹。

/sbin:存放管理员使用的基本的系统及系统维护程序。一般只有系统管理员使用,普通用户不可用。

/srv:service,某些网络服务启动后,所要取用的数据所在目录。

/tmp:temple,一般用户或正在执行程序暂放文件的地方。重要数据不会存放在此。FHS建议开机清除一次该目录下的内容。


Attention!!!

根目录与开机相关,有些人想将根目录所在分区缩之又缩。但是需要注意的是,与开机相关的目录,不能跟根目录分开存储在两个分区。

开机相关目录:/etc、/bin、/dev、/lib、/sbin


/usr

/usr:存放的是UNIX操作系统软件资源数据。FHS建议软件开发者将数据放置在此目录的子目录下。类似Windows 的“C:\Windows”和“C:\Program Files”的综合体。

一般/usr的的子目录有:

/usr/bin:普通用户的可使用命令。

/usr/sbin:非系统正常运行所需要的系统命令。如某些网络服务器软件的服务命令(daemon)。


/bin、/sbin、/usr/bin、/usr/sbin的区别:

/bin与/sbin需与/(根目录)同一分区,/usr/bin和/usr/sbin可以与/根目录不同分区。

  • /bin存放的是系统的一些指令,如cat、chmod等;- /sbin存放的是一些系统管理员管理系统用的指令,如dump、init、shutdown等;
    /bin和sbin在挂载其他文件系统前就可以使用。因为随着根目录(或理解为开机)启动。
  • /usr/bin 存放的用户后期安装的应用程序的运行脚本,如gcc、diff、gzip等;- /usr/sbin 存放的是用户安装的系统管理必需的程序,如httpd、tcpd等。

/usr/include:某些程序语言的头文件和包含文件存储目录。

/usr/lib:应用程序的函数库、目标文件,以及一些执行文件或脚本。如果使用的是X86_64系统,会有/usr/lib64目录。

/usr/local:存放系统管理员在本机自行下载安装的软件。

/usr/share:存放共享文件。这个目录下的数据,基本都是文本文件,几乎不分硬件架构,均可读取!如/usr/share/man(在线帮助文档)

/usr/src:源码存放处。除了内核源码存放在/usr/src/linux目录下。


/var

/var:针对常态性变动的文件,如缓存、登录文件等。

/var/cache:存放应用程序运行时产生的缓存文件。

/var/lib:存放程序执行过程中需要使用的数据文件。

/var/log:存放登录文件目录。如var/log/messages等。

/var/run:存放程序或服务启动后的PID。

/var/spool:存放等待程序使用的数据。如待发送的邮件。

各家distributions,只要遵循FHS标准即可。其他子目录层级内的目录可以有所不同,这样就可以实现各家的个性化设置了。如CentOS的网络设置数据存放在/etc/sysconfig/network-scripts目录下,但SuSE则放在/etc/sysconfig/network下。

参考文献:

  1. https://zh.wikipedia.org/wiki/文件系统层次结构标准1. 鸟哥的Linux私房菜1. /bin,/sbin,/usr/sbin,/usr/bin 目录之简单区别_bin sbin usr sbin 区别_IT农夫的博客-CSDN博客
    Q

是WEB平台部测试技术平台化、效率化的先锋力量!


转载自 360质量效能