< 返回

    Linux 文件系统结构详解

    2026-02-11 18:47 作者:技术部 阅读量:11

    Linux 文件系统采用单一树状层次结构,所有分区、设备、虚拟文件系统都挂载在统一的根目录 / 之下,没有 Windows 式的 C:、D: 盘概念。这一设计遵循 Filesystem Hierarchy Standard(FHS),由 Linux 基金会(早期)维护,最新版本为 3.0(2015 年发布,2025 年由 FreeDesktop.org 重新发布并接管维护)。

    FHS 的核心目标是:

    • 确保不同发行版目录用途一致,便于用户、管理员、脚本跨系统迁移
    • 区分静态/可共享动态/主机特定 数据
    • 支持系统恢复、单用户模式、网络挂载等场景

    现代主流发行版(Ubuntu 24.04+、Fedora 40+、Arch、Debian bookworm+、Rocky/Alma 9+)基本遵循 FHS 3.0,同时大量采用 merged-/usr(/bin → /usr/bin 的符号链接),少数仍保留传统分离布局。

    1. FHS 目录分类原则

    FHS 将目录按两个维度分类:

    1. 可共享 vs 不可共享(shareable vs unshareable)
      • 可共享:可以放在 NFS 等网络文件系统上,多主机共用(如 /usr、/opt)
      • 不可共享:特定主机独有(如 /etc、/var、/home)
    2. 静态 vs 可变(static vs variable)
      • 静态:安装后基本不变(如 /bin、/usr/bin、/lib)
      • 可变:运行中频繁修改(如 /var/log、/var/spool、/tmp)

    这四个象限组合决定了目录的典型位置。

    2. 根目录 / 下主要目录详解(2026 年现状)

    以下表格按重要程度和实际使用频率排序,包含用途、是否 merged-/usr 影响、典型大小、是否可卸载到独立分区、现代变化点。

     
     
    目录 主要用途 是否必须在根分区 典型占用 可独立分区 现代趋势与备注
    / 整个文件系统根起点
    /boot 内核、initramfs、引导加载器(GRUB、systemd-boot)配置文件 强烈推荐 几百 MB–2GB 是(常见) EFI 系统下常为 /boot/efi(FAT32);某些发行版放 /boot/efi/boot
    /etc 主机特定系统和服务配置文件中心 几十–几百 MB 几乎所有手工修改集中在此;docker/kubernetes 配置常放 /etc/xxx
    /bin 基础必需命令(单用户模式也能用)→ 已 merged 到 /usr/bin 是(符号链接) 2025–2026 Fedora/Arch/Ubuntu/Debian 均为 symlink
    /sbin 系统管理命令(传统上 root 专用)→ 已 merged 到 /usr/sbin 是(符号链接) 同上;systemd 时代 /usr/sbin 内容越来越少
    /usr 只读、可共享的用户与系统软件主目录 推荐 5–20+ GB 是(常见) 现代 merged-/usr 布局下成为实际软件存储根;/usr/local 放手工编译软件
    /var 运行时可变数据:日志、缓存、队列、数据库文件、Docker/Podman 数据 推荐 可达数十 GB 是(强烈推荐) /var/log、/var/lib/docker、/var/cache 是磁盘爆满头号嫌疑人
    /home 用户个人数据、家目录 推荐 用户决定 是(常见) 企业服务器常单独分区,便于系统重装不丢数据
    /root root 用户家目录 与普通用户 /home 分开,避免混淆
    /tmp 临时文件(很多发行版用 tmpfs,重启清空) 几百 MB–几 GB 可(但多为 tmpfs) systemd-tmpfiles 自动清理;/var/tmp 保留跨重启临时文件
    /dev 设备节点(由 udev 动态创建) 很小 否(devtmpfs) 现代为 devtmpfs + tmpfs 混合
    /proc 进程与内核运行时信息(procfs,纯内存文件系统) 很小 /proc/cpuinfo、/proc/meminfo、/proc/<pid>/ 实时数据
    /sys 设备、驱动、内核参数暴露(sysfs,纯内存) 很小 /sys/class/net/、/sys/block/、/sys/module/ 常用
    /run 运行时临时数据(取代旧 /var/run,tmpfs) 否(tmpfs) systemd、lock 文件、pid 文件集中
    /mnt 管理员临时挂载点 手动 mount 用;不建议长期使用
    /media 自动挂载可移动介质(U 盘、光盘) udisks/桌面环境使用
    /opt 第三方独立软件包(非包管理器安装) 可大 如 Google Chrome、某些商业软件
    /srv 服务提供的数据(www、ftp、rsync 等) 可大 逐渐被 /var/www、/var/lib/gitea 等取代
    /lost+found ext4 文件系统修复时孤立文件恢复目录 fsck 自动生成
     

    3. 关键目录深度对比:/etc vs /var vs /usr vs /proc vs /sys

    这五个目录最常被新手混淆,以下是核心区别:

    • /etc静态、主机特定配置 只读性质为主(权限多 644/640),几乎不随运行变化。 典型文件:passwd、group、fstab、nginx.conf、sshd_config、resolv.conf 改动频率:管理员手工或 ansible 改,改后需重启服务。
    • /var动态、可变运行数据 权限宽松,内容随系统运行爆炸式增长。 子目录重点:
      • /var/log/* — 所有日志(journald 可选转存)
      • /var/lib — 服务状态数据(docker、mysql、postgresql 数据目录常在此)
      • /var/cache — 包缓存、字体缓存
      • /var/spool — 打印队列、邮件队列
      • /var/tmp — 需跨重启保留的临时文件
    • /usr静态、可共享的软件与数据 现代 merged 布局下,/usr 是实际的“程序安装根”。 子目录:
      • /usr/bin、/usr/sbin — 几乎所有命令
      • /usr/lib — 库、模块
      • /usr/share — 架构无关数据(文档、图标、locale)
      • /usr/local — 源码编译安装的软件(优先级高于 /usr)
    • /proc内核暴露的进程与系统实时信息(虚拟文件系统) 内容由内核动态生成,无实际磁盘占用。 常用文件:
      • /proc/cpuinfo、/proc/meminfo、/proc/loadavg
      • /proc/sys/* — 调整内核参数(sysctl 实际操作这里)
      • /proc/<pid>/ — 每个进程的 fd、maps、limits、environ
    • /sys设备模型与驱动参数接口(sysfs) 比 /proc 更结构化,面向设备树。 常用路径:
      • /sys/class/net/eth0/statistics/
      • /sys/block/nvme0n1/queue/
      • /sys/module/ — 加载的内核模块参数
      • /sys/power/ — 电源管理

    4. 现代趋势(2025–2026 年现状)

    • merged-/usr 已成事实标准:Fedora 42+、Arch、Ubuntu/Debian bookworm+、openSUSE 均完成 /bin、/sbin、/lib → /usr 下对应目录的符号链接转换。
    • /usr-merge 进一步简化 initramfs 和早期启动逻辑。
    • tmpfs 使用扩大:/run、/dev/shm、/tmp(部分发行版)、甚至 /var/tmp 在高安全环境中用 tmpfs。
    • /var/lib/containers 或独立分区越来越常见(Podman/Docker/Kubernetes 时代)。
    • FHS 本身更新缓慢,但实际实现随 systemd、容器化、eBPF 等技术演进。

    5. 实用建议

    • 服务器规划分区时推荐顺序:
      1. /boot 或 /boot/efi(1–2GB)
      2. /(根,20–50GB,根据软件量)
      3. /var(剩余大部分空间,或单独大分区)
      4. /home(用户数据)
      5. swap(视内存大小,推荐 zram + 小 swap 分区)
    • 快速查看目录占用:du -sh /* | sort -hr
    • 查找配置文件:find /etc -type f -name "*nginx*"
    • 实时监控 /proc /sys:watch -n 2 cat /proc/meminfo

     

    理解 Linux 文件系统结构,就是理解了“系统把什么放在哪里,为什么这么放”。一旦建立这个地图,后续排查问题、优化性能、写自动化脚本都会事半功倍。

    联系我们
    返回顶部