linux目录结构遵循fhs标准,核心是按用途归类、权限可控、挂载可分离;根目录最小化,/bin、/sbin、/lib*等启动必需,/home与/srv物理隔离,/var子目录需生命周期分离,挂载推荐uuid和systemd协同管理。

Linux目录结构遵循Filesystem Hierarchy Standard(FHS),核心目标是实现系统可维护性、安全隔离与跨发行版兼容性。关键不在于“所有目录必须存在”,而在于“按用途归类、权限可控、挂载可分离”。
/ 根目录:最小化原则与启动必需
根分区应仅包含启动和基础恢复所需的文件。建议控制在 2–4 GB(不含 /home、/var/log 等可分离部分)。
- /bin 和 /sbin:存放 shell、ls、cp、systemctl、iptables 等基础命令,必须位于根分区(init 进程依赖)
- /etc:配置中心,但避免存放大体积模板或动态生成文件(如不要把 Docker compose.yml 长期堆在此)
- /lib 和 /lib64:内核模块与 C 库,不可挂载为独立文件系统(否则系统无法启动)
- /boot:推荐单独挂载(如 /dev/sda1),便于双系统共用或 UEFI 固件更新;GRUB 配置、vmlinuz、initramfs 必须在此
/home 与 /srv:用户数据与服务数据的物理隔离
两者都应独立挂载,但目的不同:/home 隔离用户个人环境,/srv 隔离运行中的服务数据,避免混用导致权限混乱或备份遗漏。
- /home 挂载点建议使用 XFS 或 ext4,启用
noatime提升性能;若多用户共用,配合user_xattr支持 ACL - /srv 是 FHS 明确定义的服务数据根目录(例如
/srv/www/example.com、/srv/git/repo.git),不应被 nginx 或 git daemon 直接写入 /var/www 或 /opt —— 这违背语义且影响迁移 - 数据库(如 PostgreSQL)的数据目录默认在 /var/lib/pgsql,但生产环境强烈建议软链至 /srv/pgsql/data,便于备份策略统一和磁盘扩容
/var 的细分管理:日志、缓存与状态的生命周期分离
/var 不宜整体挂载为一个大分区。其子目录行为差异大:日志持续增长、缓存可丢弃、spool 有事务要求。
- /var/log:建议单独挂载(如 5–10 GB),启用 logrotate + systemd-journald 的 maxuse 设置,防止填满根分区
-
/var/cache:可挂载为 tmpfs(内存盘)用于 apt/dnf 缓存,或定期清理;Docker 的
/var/lib/docker/cache同理 - /var/spool:邮件队列、cron 任务暂存等,需保证原子写入,建议保留 ext4 默认挂载选项(data=ordered)
- /var/tmp:比 /tmp 更持久(重启不删),适合长时间运行服务的临时中间文件;可设为独立小分区或绑定挂载自 /srv/tmp
挂载点命名与自动化:/etc/fstab 与 systemd.mount 的协同
现代 Linux 推荐用 systemd 管理挂载(尤其加密卷、网络存储),但 /etc/fstab 仍是基础保障。关键不是“怎么写”,而是“是否可审计、可回滚、可复现”。
- 使用 UUID 或 PARTUUID 替代 /dev/sdX,避免设备名漂移(
blkid查看) - 对非关键挂载(如 /mnt/backup)添加
x-systemd.requires-mounts-for=/srv,确保依赖顺序 - 加密卷(LUKS)建议用
systemd-cryptsetup@.service+/etc/crypttab,而非 fstab 中的 crypt 参数 - 远程 NFS/CIFS 挂载务必加
_netdev,x-systemd.automount,soft,timeo=14,避免开机卡死











