来源:马哥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-reference | Linux 常用命令速查 |
| linux-memory-management-deep-dive | Linux 内存管理(/proc/meminfo) |
| server-performance-four-dimensions | 服务器性能排查四维法 |
| linux-perf-troubleshooting-handbook | Linux 性能排查手册 |
| server-security-hardening-checklist | 服务器安全加固(/etc 配置项) |
| journalctl-log-tracking-guide | journalctl 日志追踪 |