Linux 的目录结构和 Windows 完全不同。没有 C 盘 D 盘,没有 Program Files,取而代之的是一个从根 / 开始的树形结构。
这篇文章把 Linux 的每个一级目录拆开讲清楚——它的用途、该放什么、不该放什么、哪些可以删、哪些碰都不能碰。
一、FHS 标准
Linux 的目录结构遵循 FHS(Filesystem Hierarchy Standard,文件系统层次化标准)。虽然不同发行版略有差异,但核心结构是一致的。
/
├── bin → 用户二进制命令
├── sbin → 系统二进制命令
├── boot → 引导文件
├── dev → 设备文件
├── etc → 配置文件
├── home → 用户主目录
├── root → root 用户主目录
├── lib → 系统库文件
├── lib64 → 64位系统库
├── media → 可移动介质挂载点
├── mnt → 临时挂载点
├── opt → 可选软件包
├── proc → 虚拟进程文件系统
├── sys → 虚拟系统文件系统
├── run → 运行时数据
├── srv → 服务数据
├── tmp → 临时文件
├── usr → 用户软件资源(第二级根)
└── var → 可变数据二、按功能分类
系统启动相关
| 目录 | 用途 | 注意事项 |
|---|---|---|
| /boot | 内核、initrd、引导配置 | ❌ 不要动。删了系统起不来 |
| /boot/grub | GRUB 引导菜单和配置 | 修改前备份 grub.cfg |
# /boot 目录典型内容
ls /boot
# vmlinuz-6.8.0-xxx ← Linux 内核镜像
# initrd.img-6.8.0-xxx ← 初始 RAM 磁盘
# System.map-6.8.0-xxx ← 内核符号表
# config-6.8.0-xxx ← 编译配置用户命令与系统命令
/bin 和 /sbin 在现代 Linux 中通常是 /usr/bin 和 /usr/sbin 的符号链接。
| 目录 | 包含的命令 | 谁用 |
|---|---|---|
/bin (→ /usr/bin) |
ls、cp、mv、cat、echo |
所有用户 |
/sbin (→ /usr/sbin) |
fdisk、mount、iptables、reboot |
管理员 |
/usr/local/bin |
用户自行安装的命令 | 优先级高于系统命令 |
# 查看命令位置
which ls # /usr/bin/ls
which fdisk # /usr/sbin/fdisk系统配置 — /etc
/etc 是 Linux 的配置中心。几乎所有软件的配置文件都在这里。
# 常用配置文件
/etc/passwd # 用户账户信息(包含用户列表)
/etc/shadow # 用户密码哈希(root 可读)
/etc/group # 用户组信息
/etc/hostname # 主机名
/etc/hosts # 静态 DNS 解析
/etc/resolv.conf # DNS 服务器配置
/etc/fstab # 磁盘挂载表
/etc/ssh/sshd_config # SSH 服务配置
/etc/nginx/ # Nginx 配置目录
/etc/apt/ # APT 配置
/etc/cron.d/ # cron 定时任务核心原则:
/etc下的配置修改通常需要重启服务才能生效- 修改前建议备份(
cp file.conf file.conf.bak) - 系统级配置在
/etc,用户级配置在~/.config/
用户数据 — /home 与 /root
| 目录 | 用途 | 权限 |
|---|---|---|
/home/用户名 |
普通用户的主目录 | 仅用户自己可写 |
/root |
root 的主目录 | 仅 root 可访问 |
# 用户主目录常见内容
~/Desktop/ # 桌面
~/Downloads/ # 下载
~/Documents/ # 文档
~/.config/ # 用户级配置
~/.local/ # 用户级程序和数据
~/.ssh/ # SSH 密钥和配置/home 通常是独立分区的,重装系统后挂载回来数据不丢。
运行时数据 — /var
/var 存放经常变化的数据(日志、数据库、缓存、队列)。
| 子目录 | 用途 | 注意事项 |
|---|---|---|
/var/log/ |
系统日志 | 长期积累会很大,需要 logrotate |
/var/cache/ |
应用程序缓存 | 可以安全删除 |
/var/lib/ |
数据库和状态数据 | 不能随意删除 |
/var/tmp/ |
重启后保留的临时文件 | 比 /tmp 持久 |
/var/spool/ |
打印、邮件队列 | 一般用不到 |
# 查看什么占了 /var 空间
du -sh /var/* | sort -rh | head -10
# 清理 APT 缓存
sudo apt clean
# 查看日志大小
du -sh /var/log/临时文件 — /tmp
/tmp 存放临时文件,系统会定期清理(通常重启时清空)。
# 查看 /tmp 大小
df -h /tmp
# 很多 tmpfs 是内存盘,重启后消失
mount | grep /tmp
# tmpfs on /tmp type tmpfs (rw, noatime, size=2G)注意: 重要数据不要放 /tmp,随时可能被清掉。
虚拟文件系统 — /proc 和 /sys
这两个目录是虚拟的,不占用磁盘空间,反映内核和硬件的实时状态。
/proc(进程信息):
# 每个进程一个目录
ls /proc | head -5
# 1/ ← PID 为 1 的进程(systemd)
# 2/
# ...
# 查看 CPU 信息
cat /proc/cpuinfo
# 查看内存信息
cat /proc/meminfo
# 查看系统运行时间
cat /proc/uptime
# 查看内核参数
cat /proc/sys/net/ipv4/ip_forward/sys(硬件和内核对象):
# 查看块设备
ls /sys/block/
# sda sdb ...
# 查看 CPU 信息
ls /sys/devices/system/cpu/
# 查看电源状态
cat /sys/class/power_supply/两个目录的区别:
| 对比 | /proc | /sys |
|---|---|---|
| 用途 | 进程和系统信息 | 硬件拓扑和驱动参数 |
| 可写 | 部分参数可调(/proc/sys/) |
部分设备参数可调 |
| 布局 | 扁平(按 PID) | 分层(按设备和总线) |
| 替代 | 旧标准(兼容性) | 新标准(推荐) |
设备文件 — /dev
Linux 中所有设备都通过文件表示:
ls /dev | head -10
# sda ← 第一块 SCSI/SATA 硬盘
# sda1 ← 第一块硬盘的第一个分区
# sdb ← 第二块硬盘
# tty ← 终端设备
# random ← 随机数生成器
# null ← 黑洞设备(写入消失)
# zero ← 零字节流设备常用操作:
# 查看磁盘
lsblk
# 向 /dev/null 丢弃输出
echo "无用" > /dev/null
# 从 /dev/urandom 获取随机数
head -c 16 /dev/urandom | xxd三、/usr 详解
/usr 是 Linux 中最大的目录之一,可以理解为第二个根目录。在旧系统中 /usr 可以单独挂载。
/usr/
├── bin/ ← 用户命令(绝大多数命令都在这里)
├── sbin/ ← 系统管理命令
├── lib/ ← 库文件
├── lib64/ ← 64位库
├── include/ ← C/C++ 头文件
├── share/ ← 共享数据(doc、man、locale、icons)
├── local/ ← 本地安装的软件(手动编译一般都装在这里)
└── src/ ← 内核源码(可选)用户自行编译安装的软件应该放在 /usr/local/ 下:
# 从源码安装(约定)
./configure --prefix=/usr/local
make && sudo make install
# 这样你的软件和系统包管理器管理的软件不冲突
# PATH 中 /usr/local/bin 优先级通常高于 /usr/bin四、其他目录
| 目录 | 用途 |
|---|---|
/opt/ |
第三方商业软件(如 Google Chrome、VSCode) |
/srv/ |
服务数据目录(HTTP、FTP 等) |
/media/ |
可移动介质自动挂载(U 盘、光盘) |
/mnt/ |
手动挂载的临时文件系统 |
/run/ |
运行时变量文件(PID 文件、socket) |
五、磁盘空间排查指南
当磁盘空间告急时,按这个顺序查:
# 1. 查看总体使用情况
df -h
# 2. 逐级排查大目录
du -sh /home/* | sort -rh | head -10
du -sh /var/* | sort -rh | head -10
du -sh /opt/* | sort -rh | head -10
du -sh /tmp/* | sort -rh | head -10
# 3. 清洁候选
sudo apt clean # 清理 APT 缓存
sudo journalctl --vacuum-size=100M # 限制日志大小
sudo rm -rf /tmp/* # 清理临时文件
sudo rm -rf ~/.cache/* # 清理用户缓存六、目录速查表
┌────────────┬────────────────────────────────────┬──────────┐
│ 目录 │ 用途 │ 能否删除 │
├────────────┼────────────────────────────────────┼──────────┤
│ /bin │ 用户命令 │ ❌ │
│ /sbin │ 系统命令 │ ❌ │
│ /boot │ 内核和引导 │ ❌ │
│ /dev │ 设备文件(虚拟) │ ❌ │
│ /etc │ 系统配置 │ ❌ │
│ /home │ 用户数据 │ ⚠️ 备份后 │
│ /root │ root 主目录 │ ⚠️ │
│ /lib │ 系统库 │ ❌ │
│ /media │ 自动挂载 │ ✅ 空目录 │
│ /mnt │ 手动挂载 │ ✅ 空目录 │
│ /opt │ 第三方软件 │ ⚠️ 卸载后 │
│ /proc │ 进程信息(虚拟) │ ❌ │
│ /sys │ 硬件信息(虚拟) │ ❌ │
│ /run │ 运行时数据 │ ❌ │
│ /srv │ 服务数据 │ ⚠️ │
│ /tmp │ 临时文件 │ ✅ │
│ /usr │ 用户软件资源 │ ❌ │
│ /var │ 可变数据(日志/数据库) │ ⚠️ 部分可 │
│ /var/log │ 日志文件 │ ✅ 可清理 │
│ /var/cache │ 缓存文件 │ ✅ 可删除 │
│ /var/lib │ 数据库/状态 │ ❌ │
└────────────┴────────────────────────────────────┴──────────┘七、一句话总结
Linux 目录结构遵循 FHS 标准:
/bin命令、/etc配置、/var日志、/home用户数据、/proc和/sys是虚拟的、/tmp用完就清。记住这些,故障排查时就知道往哪看。