你是否刚接触 Linux,面对根目录下琳琅满目的文件夹感到困惑?/bin、/etc、/usr……它们到底有什么用,文件又该放在哪里?这背后都遵循着一个统一的行业规范——FHS。
FHS 是 Filesystem Hierarchy Standard(文件系统层次结构标准)的缩写。它规定了 Linux 和类 Unix 系统中文件与目录的组织结构。其主要目的是通过统一文件存放的位置、命名和用途,让不同的发行版(如 Ubuntu、CentOS)保持一致的目录布局,从而提升系统的兼容性、可维护性,并让用户和开发者的操作体验更统一。
核心设计原则
FHS 的制定主要基于以下几个原则:
- 可移植性:遵循此标准的程序,可以在不同的 Linux 发行版上正常运行,无需为不同的目录路径做特殊适配。
- 可管理性:系统文件、用户文件、配置文件、临时文件等按功能分类存放,极大地方便了系统管理和日常维护。
- 分离性:
- 静态文件(如二进制程序、库文件)与动态文件(如日志、缓存)分离;
- 系统核心文件与用户自定义文件分离;
- 可共享文件(如网络共享资源)与不可共享文件分离。
这些原则共同构成了一个清晰、高效的 操作系统 文件管理基础。
FHS 核心目录及用途
FHS 将目录大致分为系统级和用户级。以下表格列出了 Linux 中最常用、最核心的顶层目录及其标准用途:
| 目录 |
核心用途 |
/ |
根目录,所有文件和目录的顶级父目录,是整个文件系统的起点。 |
/bin |
存放所有用户都可执行的基础命令(如 ls、cp、mv),即使在单用户救援模式下也能访问。 |
/sbin |
存放系统管理员使用的系统管理命令(如 ifconfig、reboot、fdisk)。 |
/etc |
存放系统的配置文件(如网络配置、服务配置),例如 /etc/nginx/nginx.conf、/etc/profile。 |
/usr |
存放系统的用户程序和资源(核心目录,功能上类似 Windows 的 Program Files),占用空间通常较大。 |
/usr/bin |
存放非基础的普通用户命令(如 python、git),作为 /bin 的补充。 |
/usr/sbin |
存放非基础的系统管理员命令,作为 /sbin 的补充。 |
/usr/lib |
存放 /usr/bin 和 /usr/sbin 中程序所依赖的库文件(.so 文件)。 |
/var |
存放动态变化的文件(即易变数据),如日志 (/var/log)、缓存文件、数据库数据等。 |
/home |
普通用户的主目录,每个用户拥有独立的子目录(如 /home/zhangsan),用于存放个人文件。 |
/root |
超级管理员(root)的主目录,区别于普通用户的 /home。 |
/tmp |
系统的临时文件目录,所有用户可读写,但系统重启后文件通常会被清空。 |
/dev |
存放设备文件(体现 Linux “一切皆文件” 思想,如硬盘 /dev/sda、终端 /dev/tty1)。 |
/lib |
存放 /bin 和 /sbin 中命令所依赖的核心库文件(如动态链接器 ld-linux.so)。 |
/mnt |
临时挂载点,常用于手动挂载外部存储设备,如 U 盘、移动硬盘、光盘等。 |
/opt |
存放第三方软件包(非系统自带的大型软件),如 Oracle 数据库、Tomcat 等,便于独立安装和卸载。 |
几个关键点说明
- 并非强制,但广泛遵循:FHS 本身是推荐性标准,但几乎所有主流 Linux发行版 (如 Ubuntu、CentOS、RedHat、Debian)都严格遵循它,仅有少数小众发行版可能有细微调整。
- 版本迭代:FHS 标准会定期更新,目前最新版本是 FHS 3.0(于2015年发布),后续通过小版本进行完善。
- 关于
/bin vs /usr/bin:这种区分有历史原因。早期因磁盘空间限制,将系统启动和修复所必需的基础命令放在根分区的 /bin 和 /sbin 下;而其他非基础命令则放在可能单独挂载的 /usr 分区下的对应目录。在现代 Linux 系统中,二者功能边界已逐渐模糊,常通过符号链接互通,但目录命名仍遵循 FHS 传统。
简单来说,FHS 就是 Linux 文件系统的“交通规则”。它让系统管理员和开发者能快速定位所需文件,也为软件的安装、部署提供了统一的路径参考,是理解和高效使用 Linux 系统的基石。
|