返回首页

Linux 目录结构完全指南 — FHS 标准与运维实战

📅 创建于 2026-05-29 🔄 更新于 2026-05-29 📝 938 字

来源:马哥Linux运维 | 发布日期:2026-05-27

Linux 目录结构完全指南 — FHS 标准与运维实战

FHS(Filesystem Hierarchy Standard)定义了 Linux 目录的用途与组织逻辑。核心思维:按「是否可变」和「是否可共享」两个维度分类文件。理解了这个逻辑,遇到未知目录也能推导出用途。

设计总纲:FHS 的四个分类维度

维度 类别 典型目录
静态 vs 动态 静态(安装后不变) /bin, /etc, /usr, /lib
动态(持续增长) /var, /tmp, /run
系统级 vs 用户级 系统级(所有用户共享) /etc, /bin, /usr
用户级(单用户独享) /home, /root
可共享 vs 不可共享 可共享(NFS 导出) /usr, /opt
不可共享(本机专属) /etc, /var, /run

根目录全景

/            根目录,整棵树起点
├── bin      基础命令(所有用户可用)
├── sbin     系统管理命令(通常需 root)
├── boot     启动所需文件(内核、initramfs)
├── dev      设备文件
├── etc      系统配置文件(运维第一站)
├── home     普通用户家目录
├── lib, lib64 系统库
├── media    可移动介质挂载点
├── mnt      临时挂载点
├── opt      第三方可选软件
├── proc     内核和进程信息(伪文件系统)
├── root     root 用户家目录
├── run      运行时数据(PID 文件、socket)
├── srv      服务数据
├── sys      设备与内核参数(可写接口)
├── tmp      临时文件(所有用户可读写)
└── var      动态数据(日志/数据库/队列)

各目录详解

/bin 和 /sbin — 系统命令

/bin — 基础用户命令,单用户模式下也必须可用: ls, cp, mv, rm, cat, chmod, chown, grep, find, tar, gzip, awk, sed, sort

/sbin — 系统管理命令,通常需 root: fdisk, mkfs, mount, sysctl, iptables, reboot, shutdown, modprobe

/usr/bin 和 /usr/sbin — CentOS/RHEL 7+ 中 /bin 和 /sbin 是软链接指向 /usr 下:

ls -la /bin   # lrwxrwxrwx  /bin -> usr/bin

新 FHS 建议所有命令统一放到 /usr/bin 和 /usr/sbin。

运维意义: 精简 Docker 镜像可能没有此软链接,which ls 找不到命令时检查 /usr/bin。

/usr — 用户程序(最大目录)

子目录 用途 典型内容
/usr/bin 用户命令(含非基础工具) yum, docker, nginx, mysql
/usr/sbin 系统管理命令 httpd, named, mysqld
/usr/lib / lib64 系统库 动态链接库 .so
/usr/lib/systemd/system systemd unit 文件 nginx.service, docker.service
/usr/local 手动编译软件(重要) bin/sbin/lib/etc 子目录
/usr/share 架构无关共享数据 doc, man, zoneinfo
/usr/include C 头文件 编译所需头文件
/usr/src 内核源码 /usr/src/kernels/

排查磁盘空间时优先看 /usr,因所有软件包都装在这里。

/etc — 配置文件(运维第一站)

/etc/
├── passwd / shadow / group    # 用户账户信息
├── sudoers                     # sudo 权限(必须 visudo 编辑)
├── hosts / hostname            # 主机名解析
├── resolv.conf                 # DNS 服务器
├── sysconfig/                  # CentOS/RHEL 系统配置
│   └── network-scripts/        # 网卡配置文件
├── systemd/system/             # 自定义 systemd service
├── ssh/                        # SSH 配置(sshd_config)
├── nginx/ / httpd/             # Web 服务器配置
├── mysql/ / redis/             # 数据库配置
├── docker/                     # Docker daemon.json
├── kubernetes/                 # K8s 配置
├── cron.d/ / crontab           # 定时任务
├── logrotate.d/                # 日志切割配置
├── sysctl.conf / sysctl.d/     # 内核参数
├── security/ / pam.d/          # PAM 认证配置
├── profile.d/ / bashrc         # shell 环境变量
├── firewalld/ / iptables/      # 防火墙配置
└── modprobe.d/                 # 内核模块加载

运维口诀: 「找配置,先看 /etc」

/var — 动态数据(日志/数据库/缓存)

/var/
├── log/           # 各类日志
│   ├── messages       # CentOS 系统日志
│   ├── syslog         # Ubuntu 系统日志
│   ├── secure         # SSH 登录日志
│   ├── nginx/         # Nginx 日志
│   ├── mysql/         # MySQL 日志
│   └── audit/         # SELinux 审计日志
├── lib/           # 应用数据(增长最快)
│   ├── mysql/         # MySQL 数据库文件
│   ├── docker/        # Docker 镜像/容器数据
│   ├── redis/         # Redis 持久化数据
│   └── postgresql/    # PostgreSQL 数据
├── spool/         # 任务队列(邮件/打印)
├── tmp/           # 系统重启不清空的临时文件
├── cache/         # 应用缓存
├── run/           # PID 文件(→ /run 软链接)
└── lock/          # 锁文件

运维口诀: 「查日志,先翻 /var/log」

/proc — 内核与进程接口(伪文件系统)

内存中的虚拟文件系统,不占用磁盘空间:

/proc/PID/          # 各进程信息(cmdline, fd/, status, environ)
/proc/cpuinfo       # CPU 信息
/proc/meminfo       # 内存使用详情
/proc/loadavg       # 系统负载
/proc/net/*         # 网络栈统计
/proc/softirqs      # 软中断分布
/proc/interrupts    # 硬件中断分布
/proc/sys/          # 内核运行时参数(= /etc/sysctl.conf 的内容)

运维口诀: 「改内核参数,看 /proc/sys 或 /etc/sysctl.conf」

/sys — 设备与内核参数

较新的伪文件系统(sysfs),比 /proc 更结构化:

/sys/class/net/     # 网络接口
/sys/block/         # 块设备
/sys/devices/       # 设备树
/sys/fs/cgroup/     # cgroup 控制组

/dev — 设备文件

/dev/sda            # 第一块磁盘
/dev/sda1           # 第一块磁盘的第一个分区
/dev/null /dev/zero /dev/random    # 特殊设备
/dev/pts/           # 伪终端

/boot — 启动文件

/boot/vmlinuz-*     # 内核镜像
/boot/initrd.img-*  # 初始 RAM 文件系统
/boot/grub2/        # GRUB 引导配置

uname -r            # 查看当前内核版本

⚠️ /boot 独立分区过小(云服务器默认 500M~1G)会导致内核升级失败。用包管理器清理旧内核,不要手动删除内核文件。

/root 和 /home — 用户目录

目录 用途 要点
/root root 用户家目录 与 /home 分离,即使 /home 挂了也能登录修复
/home/username 普通用户家目录 .bashrc, .ssh/, Documents/

/tmp — 临时文件

  • 所有用户可读写(权限 1777 + sticky bit t)
  • 程序创建临时文件放这里
  • 重启后可能被清空(取决于 systemd tmp.mount 配置)
ls -ld /tmp   # drwxrwxrwt — t 表示 sticky bit

/srv, /opt, /mnt, /media

目录 用途 典型用法
/srv 服务提供的数据 www/, ftp/, git/
/opt 第三方/商业软件 google/chrome, jetbrains, docker-desktop
/mnt 临时挂载点 ISO 镜像、云盘、NFS
/media 自动挂载介质 U 盘、光盘

运维路径速查表

场景 路径
查看系统日志 /var/log/messages (CentOS) / /var/log/syslog (Ubuntu)
查看 SSH 登录日志 /var/log/secure (CentOS) / /var/log/auth.log (Ubuntu)
查看 Nginx 配置/日志 /etc/nginx/ / /var/log/nginx/
查看 MySQL 日志 /var/log/mysql/
查看 Docker 数据 /var/lib/docker/
查看 systemd 服务 /etc/systemd/system/ / /usr/lib/systemd/system/
查看防火墙规则 /etc/firewalld/zones/ / /etc/iptables/
查看定时任务 /etc/cron.d/ / /etc/crontab
查看内核参数 /etc/sysctl.conf / /proc/sys/
查看 DNS 配置 /etc/resolv.conf
查看网络接口配置 /etc/sysconfig/network-scripts/ (CentOS) / /etc/netplan/ (Ubuntu)
查看用户账户 /etc/passwd / /etc/shadow
查看 sudo 权限 /etc/sudoers

磁盘分区与挂载

常见分区方案:

场景 分区方案
云服务器(单盘) 根分区 / 包含所有目录
自建物理服务器 / 50-100G + /boot 1G + /var 剩余 + swap + /home
数据库服务器 / 100G + /boot 1G + /var/lib/mysql 独立大分区(SSD) + /var/log/mysql 独立分区

分区对运维的影响:若 /var/log 在独立分区,磁盘满了不影响根分区;若在根分区,磁盘满导致系统无法写入日志,严重时应用崩溃。

关联页面

页面关联点
linux-essential-commands-referenceLinux 常用命令速查
linux-memory-management-deep-diveLinux 内存管理(/proc/meminfo)
server-performance-four-dimensions服务器性能排查四维法
linux-perf-troubleshooting-handbookLinux 性能排查手册
server-security-hardening-checklist服务器安全加固(/etc 配置项)
journalctl-log-tracking-guidejournalctl 日志追踪