第 3 章 · 文件系统与目录规范(FHS)
这一章直接回答你最大的两个困惑:「软件、服务、功能应该装在什么地方」和「安装系统时分区怎么处理」。FHS(文件系统层次标准)是 Linux 的「城市地图」——地图看懂了,装软件、找文件、排故障都不再瞎猜。
本章目录
3.1 挂载:目录树与磁盘 3.2 FHS 目录全解 3.3 软件到底装在哪 3.4 反查:文件属于哪个包 3.5 分区规划 3.6 文件系统选型 3.7 分区实操与 fstab 3.8 磁盘空间与目录大小 自测题3.1核心概念:挂载(Mount)——目录树与磁盘的桥
Linux 没有 C 盘 D 盘的概念。整个系统是一棵目录树,从根 / 开始。一块磁盘或一个分区要被使用,必须「挂载」到某个目录上:
lsblk看磁盘和分区长什么样;mount把设备挂到目录;/etc/fstab记录开机自动挂载清单(相当于「永久挂载表」);df -h看所有已挂载文件系统的使用情况。
lsblk # 树状看磁盘/分区/挂载点(两个系统通用)
df -h # 已挂载分区容量与使用率
mount # 列出当前所有挂载
cat /etc/fstab # 开机自动挂载表(改这里要非常小心)
为什么先讲这个
「软件装在哪」的第一性原理就是:一切内容都落在目录树里,目录树被挂载到磁盘上。你给 / 分了 50GB,往 /data 装大文件却忘了单独挂载 —— 数据一样会写进 / 所在的分区。分区规划就是在回答「哪些目录放在哪块盘上」。
3.2FHS 目录全解(Linux 城市地图)
FHS(Filesystem Hierarchy Standard)是主流发行版共同遵守的目录布局标准。下面是最关键的目录及其用途:
| 目录 | 装什么 / 放什么 | 运维要点 |
|---|---|---|
/ | 根目录,一切起点 | 至少要有它;崩溃恢复时最重要 |
/boot | 内核与引导文件(vmlinuz、initramfs、grub) | 建议独立分区(尤其双系统/多系统);空间 1–2GB 足够 |
/boot/efi | UEFI 引导分区(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 | 普通用户的个人目录 | 独立分区便于重装系统保留数据 |
/root | root 用户的个人目录 | 不是 /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反查三连:命令/文件属于哪个包、装到了哪
which nginx # 可执行文件在哪:/usr/sbin/nginx
dpkg -S /usr/sbin/nginx # 这个文件属于哪个包:nginx-core
dpkg -L nginx-core # 这个包装了哪些文件(安装位置全清单)
apt show nginx # 包信息:版本/依赖/描述
which nginx
rpm -qf /usr/sbin/nginx # 文件属于哪个包:nginx-core-1.20.1-...
rpm -ql nginx-core # 包安装了哪些文件
dnf info nginx # 包信息
这三个命令(which / 属于哪个包 / 装了哪些文件)是「软件装在哪」问题的完整答案工具,务必练熟。
3.5分区规划:怎么处理才科学
图 3-1 · 服务器分区示意(非唯一答案,重点看思路)
分区四问(每装一台机器都先回答)
- 引导方式:UEFI(新机器)→ 必须留 EFI 分区;BIOS/MBR(老机器)→ /boot 分区 1GB。
- swap 要不要、多大:内存小(≤4GB)就设 2 倍;内存大(16GB+)设 8–16GB 或按需;云厂商一般建议有 swap 防 OOM。
- 哪些目录要独立分区:
/必分;/var(日志写满不拖垮系统)与/home(重装修数据)二选一或都要;数据盘单独分给 /data 或 /srv 并独立挂载(数据库、网站、备份都放这,与系统隔离)。 - 用不用 LVM:LVM 允许在线扩容、快照,生产强烈建议:/ 和 /data 都建在 LVM 上(第 3.6 节)。
云主机注意
阿里云/腾讯云/华为云控制台创建的数据盘默认未分区未挂载,需自己
mkfs + mount + 写 fstab。很多新手「买了数据盘没用上」就是这个原因 —— 3.7 节有完整步骤。
3.6文件系统选型:ext4 / xfs / btrfs
| 文件系统 | 特点 | 适合 | 缺点 |
|---|---|---|---|
| ext4 | Debian/Ubuntu 默认,最通用 | 几乎所有场景;启动分区、根分区 | 单个文件最大 16TB,特大存储稍逊 |
| xfs | Red Hat/Rocky 默认,高性能大文件 | 大数据、数据库数据目录、根分区 | 不能缩小(只可扩容) |
| btrfs | 快照/子卷/校验和,现代特性多 | 需要快照备份、新型存储 | 复杂、部分场景性能争议 |
| tmpfs | 内存文件系统(/run、/dev/shm) | 临时高速数据 | 重启丢数据,别放持久内容 |
决策口诀:Ubuntu 默认 ext4 够用;Rocky/大数据用 xfs;要快照备份用 btrfs。不要在这上面花太多时间,先跑起来。
LVM 与 RAID(一句话入门)
- LVM:把多个磁盘分区组成「卷组」,再切出「逻辑卷」当分区用 —— 好处是空间不够时可以随时在线扩容,还可以做快照。安装 Ubuntu/Rocky 时选「使用 LVM」即可。
- RAID:多块盘做冗余/加速。服务器常用 RAID1(镜像,两块盘坏一块数据还在)、RAID5/6(多盘冗余)、RAID10(性能+冗余)。RAID 不是备份——误删照样删,RAID 只防「硬盘坏」。
- 云主机不要折腾 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 管理
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 章会讲命令行的安全习惯。
本章自测题
- 一句话解释「挂载」;fstab 的作用是什么?
- 说出以下内容的规范存放位置:系统软件、源码编译的软件、配置文件、日志、数据库数据、用户文件。
- 用哪条命令查 nginx 可执行文件路径?查它属于哪个包?查这个包装了哪些文件?
- 生产服务器分区,哪三个目录建议独立分区?为什么?
- ext4 和 xfs 各适合什么场景?LVM 最大的好处是什么?
- 云主机新买的数据盘为什么 df 看不到?完整处理步骤是什么?
- 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 验证、记救援恢复步骤。