Linux 运维与安全专家 03 · 文件系统与目录规范

第 3 章 · 文件系统与目录规范(FHS)

阶段 A预计 6–8 小时核心章节

这一章直接回答你最大的两个困惑:「软件、服务、功能应该装在什么地方」和「安装系统时分区怎么处理」。FHS(文件系统层次标准)是 Linux 的「城市地图」——地图看懂了,装软件、找文件、排故障都不再瞎猜。

3.1核心概念:挂载(Mount)——目录树与磁盘的桥

Linux 没有 C 盘 D 盘的概念。整个系统是一棵目录树,从根 / 开始。一块磁盘或一个分区要被使用,必须「挂载」到某个目录上:

终端 · 看磁盘与挂载
lsblk                     # 树状看磁盘/分区/挂载点(两个系统通用)
df -h                     # 已挂载分区容量与使用率
mount                     # 列出当前所有挂载
cat /etc/fstab            # 开机自动挂载表(改这里要非常小心)
为什么先讲这个 「软件装在哪」的第一性原理就是:一切内容都落在目录树里,目录树被挂载到磁盘上。你给 / 分了 50GB,往 /data 装大文件却忘了单独挂载 —— 数据一样会写进 / 所在的分区。分区规划就是在回答「哪些目录放在哪块盘上」。

3.2FHS 目录全解(Linux 城市地图)

FHS(Filesystem Hierarchy Standard)是主流发行版共同遵守的目录布局标准。下面是最关键的目录及其用途:

目录装什么 / 放什么运维要点
/根目录,一切起点至少要有它;崩溃恢复时最重要
/boot内核与引导文件(vmlinuz、initramfs、grub)建议独立分区(尤其双系统/多系统);空间 1–2GB 足够
/boot/efiUEFI 引导分区(EFI System Partition)新机器 UEFI 引导必须有,FAT32 格式,一般 100–500MB
/etc系统与服务的所有配置文件(纯文本)备份重点;改配置后多数服务要重启;「一切可配置」的所在地
/usr系统自带软件(可执行文件、库、文档)包管理器默认安装目标;/usr/bin 可执行、/usr/lib 库、/usr/share 数据文档
/usr/local管理员手动安装(源码编译)的软件约定俗成:系统包管理器装的进 /usr,你自己编译的进 /usr/local,互不干扰
/opt大型第三方/商业软件(独立目录)每个软件一个子目录(如 /opt/java、/opt/oracle),卸载=删目录
/var运行时可变数据:日志、缓存、数据库、队列/var/log 日志、/var/lib 软件数据(数据库、包缓存)、/var/cache、/var/spool;生产环境常把 /var 独立分区防日志写满拖垮系统
/home普通用户的个人目录独立分区便于重装系统保留数据
/rootroot 用户的个人目录不是 /home/root,别搞混
/tmp临时文件(重启通常清空)任何人可写,别放重要数据;被攻击者常利用(第 15 章)
/srv本机提供的服务数据(如网站、FTP)部分发行版用于放站点数据;也可用 /data 约定替代
/run运行时临时状态(进程 PID、socket)内存文件系统(tmpfs),重启清空,别手动写
/dev设备文件(/dev/sda 磁盘、/dev/nvme0n1 NVMe)内核自动管理,别乱删
/proc内核与进程信息(虚拟文件系统)读它=查状态:/proc/cpuinfo、/proc/meminfo、/proc/loadavg
/sys内核设备/驱动参数(虚拟)硬件与电源管理相关
/mnt / /media临时挂载点 / 移动设备自动挂载点临时用 /mnt 下建子目录即可
「软件装在哪」一句话版 发行版包管理器装的 → /usr;你自己编译/手动装的 → /usr/local;大型商业软件 → /opt;配置 → /etc;运行数据 → /var/lib;日志 → /var/log;用户文件 → /home;网站等对外服务数据 → /srv 或自定义 /data。判断一个文件/命令装在哪:which nginx、dpkg -L nginx(Ubuntu)、rpm -ql nginx(Rocky)。

3.3软件到底装在哪:五种安装方式对照

安装方式典型安装位置说明
包管理器(apt/dnf)/usr/bin、/usr/lib、/etc、/var/lib自动处理依赖、可卸载、可更新 —— 服务器安装首选
下载 .deb/.rpm 手动装同包管理器位置官方站点下载安装包;dpkg -i / rpm -ivh;依赖可能要自己解决
源码编译(./configure && make && make install)默认 /usr/local(可 --prefix 指定)适合定制需求/官方没打包的软件;升级卸载都要自己管
商业/绿色软件包(解压即用)/opt 下建子目录如 JDK、Tomcat、部分闭源软件;删目录即卸载,注意环境变量
容器(Docker/Podman)镜像内文件系统,宿主机只存镜像文件最干净:不污染系统目录;第 13 章详讲
新手最常犯的错 网上下载一个 tar.gz 解压后直接放 /root 或 /home 下跑,于是:找不到命令(没进 PATH)、开机不启动(没写 systemd)、卸载删不干净。规范做法:可执行程序放 /opt/软件名/bin 或 /usr/local/bin,配 /etc 里的配置,注册 systemd 服务(第 7 章)。

3.4反查三连:命令/文件属于哪个包、装到了哪

终端 · Ubuntu(dpkg 系)
which nginx                # 可执行文件在哪:/usr/sbin/nginx
dpkg -S /usr/sbin/nginx    # 这个文件属于哪个包:nginx-core
dpkg -L nginx-core         # 这个包装了哪些文件(安装位置全清单)
apt show nginx             # 包信息:版本/依赖/描述
终端 · Rocky(rpm 系)
which nginx
rpm -qf /usr/sbin/nginx    # 文件属于哪个包:nginx-core-1.20.1-...
rpm -ql nginx-core         # 包安装了哪些文件
dnf info nginx             # 包信息

这三个命令(which / 属于哪个包 / 装了哪些文件)是「软件装在哪」问题的完整答案工具,务必练熟。

3.5分区规划:怎么处理才科学

一块 500GB 数据盘的建议分区(生产服务器示例) /boot 1GB · ext4 内核/引导 /boot/efi 512MB swap 8–16GB 内存不足时用 / (根) 60–100GB 系统+软件 /home 或 /var 50GB 用户/日志独立 /data(数据盘) 剩余全部 · xfs/ext4 数据库/网站/备份 示意方案;/home 与 /var 按业务取舍(见正文)。LVM 可实现「后面随时扩容」,强烈推荐。

图 3-1 · 服务器分区示意(非唯一答案,重点看思路)

分区四问(每装一台机器都先回答)

  1. 引导方式:UEFI(新机器)→ 必须留 EFI 分区;BIOS/MBR(老机器)→ /boot 分区 1GB。
  2. swap 要不要、多大:内存小(≤4GB)就设 2 倍;内存大(16GB+)设 8–16GB 或按需;云厂商一般建议有 swap 防 OOM。
  3. 哪些目录要独立分区:/ 必分;/var(日志写满不拖垮系统)与 /home(重装修数据)二选一或都要;数据盘单独分给 /data 或 /srv 并独立挂载(数据库、网站、备份都放这,与系统隔离)。
  4. 用不用 LVM:LVM 允许在线扩容、快照,生产强烈建议:/ 和 /data 都建在 LVM 上(第 3.6 节)。
云主机注意 阿里云/腾讯云/华为云控制台创建的数据盘默认未分区未挂载,需自己 mkfs + mount + 写 fstab。很多新手「买了数据盘没用上」就是这个原因 —— 3.7 节有完整步骤。

3.6文件系统选型:ext4 / xfs / btrfs

文件系统特点适合缺点
ext4Debian/Ubuntu 默认,最通用几乎所有场景;启动分区、根分区单个文件最大 16TB,特大存储稍逊
xfsRed Hat/Rocky 默认,高性能大文件大数据、数据库数据目录、根分区不能缩小(只可扩容)
btrfs快照/子卷/校验和,现代特性多需要快照备份、新型存储复杂、部分场景性能争议
tmpfs内存文件系统(/run、/dev/shm)临时高速数据重启丢数据,别放持久内容

决策口诀:Ubuntu 默认 ext4 够用;Rocky/大数据用 xfs;要快照备份用 btrfs。不要在这上面花太多时间,先跑起来。

LVM 与 RAID(一句话入门)

3.7分区/挂载实操:一块新数据盘从零到用上

终端 · 给云主机新数据盘做分区+格式化+挂载
lsblk                          # 找到新盘,如 /dev/vdb(无挂载点)
sudo fdisk /dev/vdb            # 交互式分区:n 新建 → p 主分区 → 回车默认 → w 写入
sudo mkfs.xfs /dev/vdb1        # Rocky 默认 xfs;Ubuntu 常用 mkfs.ext4 /dev/vdb1
sudo mkdir -p /data            # 创建挂载点目录
sudo mount /dev/vdb1 /data     # 临时挂载(重启失效)
sudo blkid /dev/vdb1           # 查 UUID,写 fstab 要用
# 永久挂载:编辑 /etc/fstab 追加一行
# UUID=xxxx-xxxx  /data  xfs  defaults  0  2
sudo mount -a                  # 验证 fstab 无错(很重要!改错 fstab 会开不了机)
df -h | grep /data             # 确认挂载成功
fstab 红线 改 /etc/fstab 前先备份(cp /etc/fstab /etc/fstab.bak);每次改完必须 mount -a 验证,报错就立即改回。fstab 写错导致开不了机时,进救援模式挂载根分区后恢复(第 17 章)。

swap 管理

终端 · 给运行中的系统加 swap 文件(不用重分区)
sudo fallocate -l 4G /swapfile     # 建 4GB swap 文件
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile              # 立即生效
# /etc/fstab 追加:/swapfile  none  swap  sw  0  0
free -h                            # 查看内存与 swap

3.8磁盘空间与目录大小:日常体检

终端 · 空间体检全家桶
df -h                  # 分区使用率(-i 看 inode,文件太多也会满)
du -sh /var/log         # 某目录总大小
du -h --max-depth=1 /  | sort -h   # 找出根下谁最大(Ubuntu 可用 du -d 1)
ncdu /                 # 交互式磁盘分析(apt/dnf 装 ncdu,神器)
journalctl --disk-usage # systemd 日志占用(第 10 章)
本机操作纪律(贯穿全书) 用 sudo 保持最小化,先 df -h 确认空间再装大软件;删东西前 du -sh 确认大小与路径;rm 危险命令前先 ls 核对路径。第 4 章会讲命令行的安全习惯。

本章自测题

  1. 一句话解释「挂载」;fstab 的作用是什么?
  2. 说出以下内容的规范存放位置:系统软件、源码编译的软件、配置文件、日志、数据库数据、用户文件。
  3. 用哪条命令查 nginx 可执行文件路径?查它属于哪个包?查这个包装了哪些文件?
  4. 生产服务器分区,哪三个目录建议独立分区?为什么?
  5. ext4 和 xfs 各适合什么场景?LVM 最大的好处是什么?
  6. 云主机新买的数据盘为什么 df 看不到?完整处理步骤是什么?
  7. fstab 改错最坏后果是什么?如何预防?
参考答案
1. 把磁盘分区「接到」目录树的某个目录上,目录内容落到该磁盘;fstab 记录开机自动挂载表。
2. /usr;/usr/local(或 /opt);/etc;/var/log;/var/lib(或自定义 /data);/home。
3. which nginx;Ubuntu: dpkg -S 路径(Rocky: rpm -qf 路径);dpkg -L 包名(Rocky: rpm -ql 包名)。
4. /(必分);/var 或 /home 独立;数据盘单独 /data。原因:日志写满不拖垮系统、重装保留用户数据、业务数据与系统隔离。
5. ext4 通用默认;xfs 适合大文件/大数据/Red Hat 系默认;LVM 好处是可在线扩容+快照。
6. 云厂商数据盘默认未分区挂载。步骤:lsblk 找盘 → fdisk 分区 → mkfs 格式化 → mkdir 挂载点 → mount → 写 fstab → mount -a 验证。
7. 开不了机。预防:先备份、改后 mount -a 验证、记救援恢复步骤。