Linux 文件系统层次标准详细指南

基于 Linux 的操作系统中的目录(文件夹)结构遵循 Linux 文件系统层次标准 (FHS) 由 Linux 基金会定义和维护。 拥有明确定义的标准使用户和软件开发人员更容易了解已安装二进制文件、系统文件、系统信息等的位置。这样,Linux 应用程序不必针对特定发行版进行定制,并且可以普遍使用.

在本文中,我们将详细了解 Linux 中的目录结构,并通过示例一一讨论所有目录的作用。

目录

Linux 文件系统层次结构标准

FHS 的测试版本 由 Linux Foundation 于 2015 年发布。这是符合 FHS 的目录结构。

/ (根)

这是 Linux 文件系统层次结构的开始。 所有文件路径都源自根目录。 上面列出的目录或指向这些目录的符号链接在 / 中是必需的,否则,文件结构不符合 FSH 标准。

/垃圾桶

  • 存储系统管理员和用户都可以使用的基本命令二进制文件,例如 cat、ls、mv、ps、mount 等。
  • 这些命令用于启动系统(访问启动文件、挂载驱动器),并且可以在 /usr 中的二进制文件不可用时在修复系统时使用

笔记:在上面的屏幕截图中,您可能会看到 /bin 不仅包含必要的二进制文件,还包含非必要的二进制文件,例如 7z。 有关完整说明,请查看 /usr 合并部分

/启动

  • 此目录包含系统启动所需的所有文件
  • 这包括内核文件、initrd、initramfs、引导加载程序等。
引导目录 1

/dev

  • 包含系统中安装的所有物理和虚拟设备的设备文件。
  • 设备文件不是传统意义上的文件。 它们是设备驱动程序访问所述设备并与之交互的一种方式
  • 通常,主存储称为 sda (/dev/sda)
开发目录

/ETC

  • 该目录包含系统的配置文件。
  • 您的设备名称、密码、网络配置、DNS、crontab、日期和时间等都存储在配置文件中。
  • 此目录不能包含任何根据 FHS 的二进制可执行文件。
  • 这些配置文件影响系统上的所有用户。 如果您想为特定用户进行配置更改, ~/.conf/ 应该用来代替 /etc/
等目录

/家

  • 主页包含所有个人用户特定的文件。 它包含每个用户的单独目录,可以通过 cd /home/username 访问
  • 这是您完成大部分工作的地方。 您系统上的所有下载、图片、音乐等都在 /home 中。
  • 每个应用程序的用户特定配置文件可以在 /home/ 中找到[username]/.conf
  • 您可以通过执行 cd ~ 转到任何用户的主目录[username] . 如果系统上只有一个用户,只需 cd ~ 作品。

/lib

  • 库是定义编程语言中使用的命令的标准代码文件。 在编译期间,编译器查找这些库以理解代码,就像我们在阅读书籍时查找字典以理解单词的含义一样。
  • 此目录包含启动系统所需的所有库以及运行 /bin 和 /sbin 中的命令所需的所有库。
  • 这还包含控制许多硬件和设备功能的内核模块
  • 很多时候,有相同名称的不同 32 位和 64 位库。 为了避免任何串通,这些二进制文件保存在两个单独的目录中,相应地命名为 /lib32 和 /lib64.
库目录

/媒体

  • 该目录包含几个子目录,系统在其中挂载可移动设备,例如 USB 驱动器。

/mnt

  • 用户可以使用此目录手动挂载设备。 (与仅由系统使用的 /media 相对)
  • 用户当前的惯例是在 /mnt 下创建一个单独的子目录并将设备安装在该子目录中,而旧的传统是将设备直接安装在 /mnt 中。

/选择

  • /opt 包含与包相关的库和二进制文件,这些库和二进制文件不是由系统的包管理器安装的,而是通过第三方方式安装的,例如使用 Discord的应用程序内更新按钮。
  • /opt 是 /usr/local 的一个不太受欢迎的替代品。 由供应商决定库和二进制文件的去向,但通常是更单一和专有的软件,如 zoom 使用 /opt 。
选择目录

/跑

  • 此目录包含自上次启动以来设备的元数据。
  • 这包括在当前会话中执行的所有系统进程和守护进程的数据。
  • 此目录下的文件在启动过程开始时被清除(删除或截断)。
运行目录

/sbin

  • 就像 /bin 一样,/sbin 也包含必要的系统二进制文件。 但是,这些二进制文件仅供系统管理员使用,而非普通用户。
  • 这些二进制文件主要用于设备管理。 为了 examplefdisk, fsck, mkfs, ifconfig, 重启。
斯宾目录

笔记:在上面的屏幕截图中,您可能会看到 /sbin 不仅包含必要的二进制文件,还包含非必要的二进制文件。 有关完整说明,请查看 /usr 合并部分

/srv

  • 只有当您的设备充当网络服务器时,您才会使用此目录,因为此目录包含有关网络服务器的所有文件。
  • 为了 example 如果托管 FTP 连接,所有需要共享的文件默认都应该放在 /srv/ftp 中。

/tmp

  • 包含当前运行进程的临时文件。
  • 每次启动后也会刷新此数据。
临时目录

/proc

  • 就像 /dev 以文件的形式提供设备一样,这个文件夹包含系统信息和内核信息作为文件。
  • 这包括有关内存、分区、硬件(电池、温度等)、所有加载的内核模块等的信息。
过程目录

/sys(特定于发行版)

  • 它包含类似保存在 /proc/ 中的信息,但显示有关热插拔设备的特定设备信息的分层视图。
系统目录

/var

  • 包含有关正在运行的进程的可变数据。
  • 这包括 日志、缓存和线轴 适用于所有应用程序。
  • 假脱机是等待进一步处理的数据。 为了 example在打印机队列中等待的文档或等待发送的电子邮件标题。
变量目录

/lost+found(ext4 功能)

  • 虽然未在 FHS 中列出,但该目录由 fsck 自动生成。
  • 它将所有孤立和损坏的文件存储在此文件夹中。
  • 这包括由于断电而无法保存的文件、由于升级过程失败而损坏的文件等。

/root(可选)

  • 这应该是 root 用户的主目录,而不是 /home 是非 root 用户的主目录。

/usr

/usr 目录有非常有趣的起源。 在形成的时候,它应该像 /home 目录一样工作,但是当人们用完 /bin 上的空间时,他们开始将非必要的二进制文件存储在 /usr 中。 你可以阅读整个故事 这里.

随着时间的推移,该目录已被设计为存储用户安装的应用程序的二进制文件和库。 因此对于 example, 尽管 bash 位于 /bin 中(因为它可以被所有用户使用)并且 fdisk 位于 /sbin 中(因为它只能由管理员使用),用户安装的应用程序如 vlc 在 /usr/bin 中。

这边走 /usr 就像 / (root) 一样有自己的层次结构。

/usr/bin

  • 这是系统上可执行命令的主目录。
  • 包含所有用户安装的命令二进制文件和
  • 如果要使用单个命令执行脚本,通常将它们放在 /usr/bin/

/usr/sbin

  • 这包含用户安装的命令二进制文件,只能由系统管理员使用。

/usr/lib

  • 它包含 /usr/bin 和 /usr/sbin 中软件包的基本库,就像 /lib 一样。

/usr/本地

  • 这用于系统管理员从源代码​​手动编译的所有包。
  • 此目录有自己的层次结构,其中包含所有 bin、sbin 和 lib 文件夹,其中包含已编译软件的二进制文件和应用程序。

/usr/共享

  • 包含几个与体系结构无关的杂项文件
  • 手册文件、单词列表(字典)和定义文件都包含在其中。

/usr 合并的案例 – /bin 和 /usr/bin 之间真的有区别吗?

历史上,由于 /bin 硬盘空间不足,需要将非必要的二进制文件移动到不同的文件夹。 然而,那是 1971 年。50 多年后的今天,我们不再面临同样的规模问题。 这使得默认和用户安装的二进制文件的两个单独文件夹变得无用。 随着时间的推移,这也导致了文件系统中的大杂烩,两个目录都有冗余的二进制文件,这使得它变得混乱。

为此原因,多年来,许多发行版(Debian, Fedora、Ubuntu、Arch 等)已将 /usr/bin 和 /bin 合并到同一目录中。

同样/usr/sbin – /sbin 和 /usr/lib – /lib 也被合并到同一个目录中,以简化目录结构。 现在 /bin 文件夹只是 /usr/bin 目录的符号链接,其他合并也是如此。

你可以阅读更多关于这些合并的讨论 这里这里.

用户合并/bin 、 /sbin 和 /lib (包括其变体)符号链接到它们的 /usr 对应项

结论

自 1993 年以来,文件系统层次标准一直是类 Unix 目录结构的指南。 它要求根目录分区包含系统启动和挂载附加分区所需的所有文件。

2015 年,FHS 被集成到 Linux 标准库 (LSB) 中,现在由 Linux 基金会维护。 要了解有关当前 FHS 标准的更多信息,我强烈建议您查看 全文 2015 年的最后一个版本。继续探索!