Linux文件系统层次标准(FHS)详解

Linux文件系统层次标准(FHS)详解

一、FHS概述

定义:Filesystem Hierarchy Standard(文件系统层次标准),是Linux系统采用的标准化目录结构规范。

特点

  • 树形层次结构(类似Windows的C盘目录)
  • 定义了每个目录的用途、最小构成文件和目录
  • 包含例外处理和矛盾处理规范

规范层级

  1. 第一层:根目录(/)下的目录规范(如/etc放配置文件,/bin放可执行文件)
  2. 第二层:/usr和/var子目录的详细规范

二、Linux目录树结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/
├── bin # 用户二进制文件
├── boot # 引导加载程序文件
├── dev # 设备文件
├── etc # 配置文件
├── home # 用户家目录
├── lib # 系统库文件
├── media # 可移动媒体挂载点
├── mnt # 临时挂载点
├── opt # 可选应用程序
├── proc # 进程信息虚拟文件系统
├── root # 管理员家目录
├── sbin # 系统二进制文件
├── srv # 服务数据
├── sys # 系统设备虚拟文件系统
├── tmp # 临时文件
├── usr # 用户程序和数据
└── var # 可变数据

三、核心目录功能详解

1. 根目录(/)

  • 最高一级目录,所有目录的起点
  • 只有root用户具有写权限
  • 通常只存放目录,不存放普通文件

2. /bin - 基础命令二进制文件

  • 存放所有用户都可使用的基本命令
  • 如:ls, cp, cat, mv, rm等
  • 系统启动和修复所必需的命令

3. /sbin - 系统管理二进制文件

  • 存放系统管理员使用的命令
  • 通常需要root权限执行
  • 如:fdisk, ifconfig, reboot等

4. /etc - 配置文件目录

  • 包含系统和应用程序的配置文件
  • 例如:
    • /etc/passwd(用户账户信息)
    • /etc/fstab(文件系统挂载信息)
    • /etc/hosts(主机名解析)

5. /dev - 设备文件

  • 包含所有硬件设备的文件接口
  • 设备作为文件访问(一切皆文件)
  • 例如:
    • /dev/sda(第一块SATA硬盘)
    • /dev/tty(终端设备)
    • /dev/null(空设备)

6. /proc - 进程和内核信息

  • 虚拟文件系统,内存中生成
  • 提供系统和进程信息的实时访问
  • 例如:
    • /proc/cpuinfo(CPU信息)
    • /proc/meminfo(内存信息)
    • /proc/[PID]/(进程信息)

7. /usr - 用户程序资源

  • 存放用户安装的应用程序和文件
  • 子目录结构:
1
2
3
4
5
6
7
/usr/
├── bin/ # 非必需的用户命令
├── sbin/ # 非必需的管理员命令
├── lib/ # 程序库文件
├── share/ # 共享数据(文档、字体等)
├── local/ # 本地编译安装的软件
└── src/ # 源代码(可选)

8. /home - 用户家目录

  • 每个用户都有独立的子目录
  • 存放用户个人文件、配置和文档
  • 普通用户仅对自己的目录有写权限

9. /boot - 启动文件

  • 包含系统启动所需的文件
  • 例如:
    • 内核镜像(vmlinuz)
    • 引导加载程序(GRUB)
    • 初始RAM磁盘(initrd)

10. /lib - 系统库文件

  • 存放**/bin和/sbin中程序的共享库**
  • 提供系统基本功能的库文件

11. /opt - 可选应用程序

  • 存放第三方或大型应用程序
  • 每个应用通常在独立子目录中
  • 替代传统/usr/local的部分用途

12. /var - 可变数据

  • 存放经常变化的文件
  • 例如:
    • /var/log(系统日志)
    • /var/spool(队列数据)
    • /var/cache(应用程序缓存)
    • /var/lib(动态数据库)

13. /tmp - 临时文件

  • 存放临时文件
  • 系统重启可能清除
  • 所有用户都有读写权限

14. /root - 管理员家目录

  • root用户的个人目录
  • 与普通用户的/home分开

15. /mnt 和 /media - 挂载目录

  • /media:自动挂载可移动设备(U盘、光盘)
  • /mnt:手动临时挂载文件系统

四、设备节点概念

设备文件:Linux中访问硬件设备的特殊文件

特点

  • 统一存放在/dev目录
  • 提供标准文件接口访问设备
  • 分为:
    • 块设备(随机访问,如硬盘)
    • 字符设备(顺序访问,如键盘)

示例

1
2
3
4
/dev/sda     # 第一块SCSI/SATA硬盘
/dev/sda1 # sda的第一个分区
/dev/ttyS0 # 第一个串口
/dev/null # 空设备(丢弃所有写入)

五、特殊目录项

每个目录都包含两个特殊项:

  1. **.**(单点) - 当前目录
1
./script.sh    # 执行当前目录下的script.sh

**2. ..**(双点) - 父目录

1
2
cd ..          # 返回上级目录
ls ../ # 查看上级目录内容

六、路径表示方法

绝对路径

  • 以根目录(/)开始
  • 完整描述文件位置
  • 不受当前工作目录影响

示例

1
2
3
/home/user/documents/file.txt
/etc/ssh/sshd_config
/usr/bin/python3

相对路径

  • 不以根目录开始
  • 相对于当前工作目录
  • 使用.和..进行导航

示例

1
2
3
4
# 当前目录:/home/user
./downloads/ # 等同于 /home/user/downloads
../otheruser/ # 指向 /home/otheruser
documents/report/ # 指向 /home/user/documents/report

七、实践建议

目录使用规范

  1. 用户文件 → 存放在/home/[username]/
  2. 系统配置 → 修改/etc/下的文件
  3. 安装软件
    • 系统包管理 → /usr/
    • 手动编译 → /usr/local/
    • 第三方商业软件 → /opt/
  4. 日志查看 → 检查/var/log/

路径操作技巧

bash

1
# 快速切换目录cd -           # 返回上一个目录cd ~           # 返回家目录cd ~/Desktop   # 进入桌面目录# 路径补全# 按Tab键自动补全路径# 查看当前位置pwd# 打印当前绝对路径

八、扩展知识

FHS的历史意义

  • 解决不同Linux发行版间的兼容性问题
  • 为软件开发者提供统一的标准
  • 简化系统管理和维护

现代Linux的变化

  • 部分发行版合并/bin、/sbin到/usr对应目录
  • systemd等新组件引入新目录结构
  • 容器化技术带来新的文件系统视角

特殊文件系统

  • /sys:sysfs,内核对象信息
  • /run:运行时数据,替代/var/run
  • /srv:服务数据(如网站文件)