源本科技 | 码上会

Linux 文件层次结构

2025/12/23
98
0

什么是 FHS?

文件系统层次标准(Filesystem Hierarchy Standard, FHS)是由 Linux 基金会维护的一套规范,用于定义 Unix-like 系统(尤其是 Linux)中目录的组织结构与用途。

  • 所有文件和目录都位于根目录 / 之下;

  • 即使数据存储在不同的物理设备或虚拟磁盘上,它们在逻辑上仍统一挂载到 / 下的某个路径;

  • 某些目录(如 /srv/opt)仅在安装了特定子系统(如 Web 服务、第三方软件)后才会被使用;

  • 虽然大多数 Unix 系统采用类似结构,但本文描述严格遵循 Linux 的 FHS 规范

核心原则“一切皆文件” + “统一命名空间” = 所有资源通过 / 树状结构访问

标准目录详解

01. / 根目录(Root)

  • 位置:整个文件系统的起点,没有上级目录。

  • 权限:只有 root 用户 可写;普通用户无法在此创建或修改文件。

  • 注意

    • //root

    • /root 是 root 用户的家目录,而 / 是整个系统的根节点

02. /bin 基础用户命令

  • 作用:存放所有用户(包括单用户模式)必需的可执行二进制文件

  • 典型命令ls, cp, mv, grep, ping, ssh, kill, ps

  • 特点

    • 系统启动早期即可使用;

    • /usr/bin 不同,/bin 中的命令是系统运行所依赖的核心工具

03. /boot 启动相关文件

  • 作用:包含系统引导所需的关键文件。

  • 内容示例

    • 内核镜像:vmlinuz-5.15.0-86-generic

    • 初始 RAM 磁盘:initrd.img-5.15.0-86-generic

    • 引导加载器配置:/boot/grub/grub.cfg

04. /dev 设备文件

  • 作用:提供硬件设备的文件接口(一切皆文件的体现)。

  • 类型

    • 块设备(Block):如硬盘 /dev/sda, /dev/nvme0n1

    • 字符设备(Character):如终端 /dev/tty1、USB 监控 /dev/usbmon0

  • 机制:由内核动态生成(通过 udev 等服务管理)。

05. /etc 系统配置文件

  • 全称:Editable Text Configuration(可编辑文本配置)

  • 作用:存放主机级(host-specific)的全局配置。

  • 关键文件示例

    • 网络 DNS:/etc/resolv.conf

    • 用户账户:/etc/passwd, /etc/shadow

    • 服务配置:/etc/nginx/nginx.conf, /etc/ssh/sshd_config

    • 日志轮转:/etc/logrotate.conf

  • 脚本:包含系统启动 / 关闭时运行的 shell 脚本(如 /etc/rc.local

06. /home 普通用户目录

  • 结构:每个非 root 用户拥有一个子目录,如 /home/anshu

  • 用途

    • 存放个人文件、文档、下载内容

    • 保存用户专属配置(如 ~/.bashrc, ~/.config/

  • 权限:用户只能访问自己的家目录,无法进入他人目录(除非授权)。

约定~ 符号代表当前用户目录(如 cd ~ 等价于 cd /home/username

07. /lib 系统共享库

  • 作用:存放 /bin/sbin 中程序运行所需的动态链接库

  • 文件命名:通常为 lib*.so.*ld-*.so

  • 示例

    • C 标准库:libc.so.6

    • 动态链接器:ld-linux-x86-64.so.2

64 位系统补充

  • /lib64 用于 64 位库(常见于 RHEL/CentOS)

  • /lib32 用于 32 位兼容库(较少见)

08. /media 可移动设备挂载点

  • 用途:自动挂载 USB 闪存盘、CD-ROM、SD 卡等可热插拔设备

  • 命名惯例

    • CD-ROM → /media/cdrom

    • U 盘 → /media/usb-drive

  • FHS 规定:自 FHS 2.3 起正式纳入标准。

桌面环境行为:插入 U 盘后,文件管理器通常自动挂载到 /media/用户名/设备名

09. /mnt 临时挂载目录

  • 用途:供系统管理员手动挂载临时文件系统(如 NFS、外部硬盘)。

  • /media 区别

    • /media:面向用户的自动挂载

    • /mnt:面向管理员的手动挂载

最佳实践:挂载测试或一次性操作优先使用 /mnt

10. /opt 第三方软件安装目录

  • 作用:存放独立分发的商业或开源软件包(非系统默认组件)。

  • 结构建议

    • 软件 A → /opt/softwareA/

    • 软件 B → /opt/softwareB/

  • 典型应用:Google Chrome、JetBrains IDE、Oracle JDK 等常安装于此。

11. /sbin 系统管理命令

  • 作用:存放系统管理员专用的二进制工具。

  • 典型命令

    • 网络:ifconfig, route, iptables

    • 存储:fdisk, mkfs, fsck

    • 系统控制:reboot, halt, swapon

  • 权限:通常需 root 权限执行。

/bin 对比

  • /bin → 所有用户日常命令

  • /sbin → 仅管理员维护命令

12. /srv 服务数据目录

  • 全称Service

  • 作用:存放本机对外提供服务的特定数据

  • 示例

    • Web 服务 → /srv/www//srv/httpd/

    • FTP 服务 → /srv/ftp/

    • Git 仓库 → /srv/git/

    • CVS 数据 → /srv/cvs/

设计思想:将服务数据与程序分离,提升可维护性。

13. /tmp 临时文件目录

  • 作用:供程序和用户存放短期使用的临时文件

  • 生命周期

    • 文件可能在程序退出后被清理;

    • 系统重启时清空(部分发行版启用 tmpfs 内存文件系统)。

  • 权限:所有用户可读写,但通常设置粘滞位(sticky bit)防止互相删除。

14. /usr 用户程序与只读数据

注意/usr 不是 “user” 的缩写,而是 “Unix System Resources” 的历史遗留。

这是一个二级只读层次结构,包含绝大多数用户级应用程序和资源:

子目录

用途

示例

/usr/bin

用户命令(非核心)

gcc, python3, wget, scp

/usr/sbin

管理员命令(非核心)

sshd, cron, useradd

/usr/lib

应用程序共享库

libssl.so, libpython3.10.so

/usr/local

本地编译安装的软件

从源码安装的 Apache → /usr/local/apache2

/usr/src

内核源码与头文件

/usr/src/linux-headers-5.15.0-86

/usr/share

架构无关数据(文档、图标、字体)

/usr/share/man, /usr/share/doc

关键理解

  • /bin vs /usr/bin:前者是启动必需,后者是运行时可用

  • 现代 Linux(如 systemd 系统)已模糊此界限,但 FHS 仍保留区分

15. /proc 进程与系统信息虚拟文件系统

  • 类型伪文件系统(pseudo-filesystem),不占用磁盘空间

  • 作用:以内存映射方式暴露内核运行时状态

  • 核心特性

    • 每个运行中的进程对应一个以 PID 命名的目录(如 /proc/1234

    • 提供实时系统信息(纯文本格式,可直接 cat 查看)

文件

说明

/proc/cpuinfo

CPU 详细信息

/proc/meminfo

内存使用统计

/proc/mounts

当前挂载的文件系统

/proc/version

内核版本

/proc/uptime

系统运行时间

/proc/[pid]/cmdline

进程启动命令行

调试利器:运维人员常通过 /proc 快速诊断系统状态。

FHS 核心价值

目录

核心用途

是否可写

典型用户

/

根节点

仅 root

系统

/bin, /sbin

基础命令

所有用户 / 管理员

/etc

配置文件

管理员

/home

用户数据

普通用户

/tmp

临时文件

所有用户

/usr

应用程序

否(只读)

所有用户

/proc, /sys

内核接口

虚拟

程序 / 管理员