Linux 目录详解

2026-02-08 Linux 运维

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 用完就清。记住这些,故障排查时就知道往哪看。