一、Linux 目录树是什么?
Linux 系统的所有文件和目录都从根目录 / 开始,形成一个倒挂的树状结构。与 Windows 的“盘符”(C:、D:)不同,Linux 里一切皆文件,硬件设备、进程信息、内核参数都以文件形式挂载在某个目录下。
对我而言,理解目录架构的意义在于:拿到一台新服务器,不用问别人也能快速找到配置文件、日志文件、程序安装位置。另外,明白各目录的用途后,备份和清理磁盘时也能心中有数——知道哪些目录不能乱动,哪些目录可以放心删缓存。
核心原则:Linux 目录结构遵循 FHS(Filesystem Hierarchy Standard) 标准,大部分发行版(Ubuntu、CentOS、Debian)都基本一致。
二、根目录 / 与一级子目录概览
根目录 / 下挂载着系统运行所需的所有子目录。常用的有:
/ # 根目录
├── etc # 系统配置
├── usr # 用户程序与共享资源
├── bin # 基础命令(实际链接到 /usr/bin)
├── sbin # 系统管理命令(实际链接到 /usr/sbin)
├── home # 普通用户家目录
├── root # 管理员家目录
├── var # 变化数据(日志、缓存)
├── tmp # 临时文件
├── opt # 第三方软件
├── dev # 设备文件
├── proc # 进程与内核信息(虚拟文件系统)
├── sys # 内核与硬件信息(虚拟文件系统)
├── mnt # 手动挂载点
├── media # 自动挂载点(光盘、U盘)
└── boot # 引导文件
查看目录结构可以使用 ls -l / 或 tree /(需安装 tree 包)。
注意:现代 Linux 发行版中,
/bin、/sbin、/lib通常是指向/usr/bin、/usr/sbin、/usr/lib的符号链接。这是为了简化系统布局,但核心概念不变。
三、各目录详解
1. /etc — 配置中心
/etc 存放系统和服务的配置文件。绝大多数软件的全局配置都在这里,修改后通常需要重启服务或重新加载。
重要子文件/子目录:
| 路径 | 说明 |
|---|---|
/etc/skel/ | 新建普通用户时,复制该目录内容到用户家目录作为初始配置(如 .bashrc) |
/etc/profile | 系统级 shell 启动脚本,登录时执行,设置环境变量 |
/etc/bashrc | 系统级 bash 配置(部分发行版叫 /etc/bash.bashrc) |
/etc/profile.d/ | 存放独立脚本,登录 shell 会自动执行该目录下的 .sh 文件 |
/etc/ssh/ | SSH 服务配置文件目录(sshd_config、ssh_config) |
/etc/passwd | 用户数据库,每行一个用户,不含密码 |
/etc/shadow | 用户密码哈希(只有 root 可读) |
/etc/group | 组数据库 |
/etc/gshadow | 组密码和组安全信息 |
/etc/fstab | 文件系统挂载表,定义开机自动挂载的分区 |
/etc/hostname | 主机名配置 |
/etc/hosts | 静态主机名解析(类似 DNS 的本地记录) |
/etc/network/ 或 /etc/sysconfig/network-scripts/ | 网络接口配置 |
/etc/apt/(Debian/Ubuntu)或 /etc/yum.repos.d/(CentOS) | 软件源配置 |
注意事项:千万不要随意修改 /etc/passwd 或 /etc/shadow 的权限,否则可能导致无法登录。备份配置文件是个好习惯:cp /etc/xxx /etc/xxx.bak。
2. /home — 普通用户的家
每个普通用户在 /home 下拥有一个同名目录,例如 /home/alice。用户自己的文档、代码、下载、桌面、配置文件(以 . 开头的隐藏文件)都在这里。
/home/
├── alice/
│ ├── .bashrc
│ ├── .ssh/
│ └── Documents/
└── bob/
└── ...
个人习惯:备份用户数据时,只需要备份
/home目录(以及/etc里的系统配置)。重装系统后,把备份解压回去就能恢复大部分环境。
3. /root — 管理员的家
root 用户的家目录不在 /home/root,而是直接在根下 /root。这是出于安全考虑:普通用户默认无法访问 /root。
sudo ls -la /root
4. /usr — 用户系统资源
/usr 是只读的共享数据,存放大部分用户命令、库文件、文档。它是系统的主要程序存储区。
| 路径 | 说明 |
|---|---|
/usr/bin | 普通用户可用的命令程序(如 ls、grep、vim) |
/usr/sbin | 系统管理命令(如 fdisk、systemctl),普通用户可能无法执行 |
/usr/local | 本地管理员手动编译或安装的软件,默认路径优先级高,全局可用 |
/usr/lib | 库文件(类似 Windows 的 DLL) |
/usr/share | 架构无关的共享数据:man 手册、字体、图标、时区信息等 |
个人习惯:自己编译安装的软件一律放到
/usr/local下,方便管理和卸载。通过--prefix=/usr/local指定安装目录。
踩坑记录:不要手动删除 /usr/bin 或 /usr/lib 里的系统文件,会导致系统崩溃。卸载软件应该用包管理器(apt remove、yum remove)。
5. /var — 变化的数据
/var 存放系统运行过程中不断变化的数据,比如日志、缓存、队列、数据库文件、打印队列等。
| 路径 | 说明 |
|---|---|
/var/log | 系统和服务日志文件(如 syslog、auth.log、nginx/) |
/var/cache | 应用程序缓存(如 apt 的软件包缓存) |
/var/tmp | 比 /tmp 更持久的临时文件,系统重启后不会自动清理 |
/var/lib | 软件运行时的状态数据(如数据库文件、docker 镜像) |
/var/mail | 用户邮件队列 |
/var/run | 系统启动以来的进程 PID 文件(有些发行版放在 /run) |
踩坑记录:/var/log 如果长时间不清理,可能被日志撑爆导致系统异常。建议配置 logrotate 自动轮转。我每个月跑一次 du -sh /var/log/* 检查大文件。
6. /tmp — 临时垃圾区
所有用户都可读写的临时空间,用于存放程序运行产生的临时文件。重启后通常会被清理(有些发行版设置 tmpfs,重启即失)。
# 查看 /tmp 挂载类型
df -h /tmp
安全提示:不要在
/tmp存放敏感数据,因为任何用户都能访问。创建临时文件建议使用mktemp命令,避免文件名冲突。
7. /opt — 第三方大型软件
/opt 用于安装可选的、大型的、独立的第三方软件包,每个软件通常放在自己的子目录下(如 /opt/google/chrome)。
与 /usr/local 的区别:
/usr/local通常放手动编译的、符合系统层级结构的小工具。/opt放二进制分发的大软件(如 Oracle JDK、TeamViewer),它们自带目录结构,不分散到/usr/bin等目录。
个人习惯:从官网下载的
.tar.gz解压后,如果需要全局使用,我放在/opt/软件名,然后软链/opt/软件名/bin到/usr/local/bin。
8. /dev — 设备入口
/dev 包含设备文件,Linux 通过它们访问硬件。常见的有:
| 设备文件 | 说明 |
|---|---|
/dev/sda | 第一块 SCSI/SATA 硬盘 |
/dev/sda1 | 硬盘的第一个分区 |
/dev/nvme0n1 | NVMe 固态硬盘 |
/dev/tty | 当前终端 |
/dev/null | 黑洞,写入即丢弃 |
/dev/random | 随机数生成器 |
踩坑记录:直接读写 /dev/sda 可以绕过文件系统操作磁盘,但非常危险。不小心执行 dd if=/dev/zero of=/dev/sda 会清空整个硬盘。
9. /proc 和 /sys — 内核与硬件虚拟窗口
这两个目录是虚拟文件系统,内容存在于内存中,反映内核和硬件状态。
/proc:进程信息和内核参数。例如/proc/cpuinfo查看 CPU 信息,/proc/meminfo查看内存,/proc/<pid>/查看某个进程详情。/sys:更结构化的内核对象,用于管理设备和驱动。例如/sys/class/net/查看网卡。
cat /proc/version # 查看内核版本
cat /proc/uptime # 系统运行时间
ls /proc/$$/ # 查看当前 shell 进程的信息
个人习惯:当需要查 CPU 型号、内存大小、磁盘分区时,我第一反应是去
/proc和/sys找,而不是装额外的工具。
10. /mnt 和 /media — 挂载点
/mnt:传统的手动临时挂载点,比如挂载网络共享、ISO 文件、测试分区。/media:自动挂载点,用于插入 USB 硬盘、光盘时系统自动挂载到此目录下(由桌面环境或 udisks 管理)。
# 手动挂载 ISO 到 /mnt
sudo mount -o loop ubuntu.iso /mnt
11. /boot — 引导区
存放 Linux 内核、initrd(初始 RAM 磁盘)和引导加载程序(GRUB)的文件。
ls /boot/
# vmlinuz-5.4.0-xx-generic # 内核
# initrd.img-5.4.0-xx # 初始内存盘
# grub/ # GRUB 配置目录
四、常用命令速查
| 操作 | 命令 |
|---|---|
| 查看目录树 | ls -R / 或 tree / -L 2 |
| 查看磁盘使用情况 | df -h |
| 查看目录大小 | du -sh /var/log |
| 查找配置文件 | find /etc -name "*.conf" |
| 查看某个命令的位置 | which ls、whereis vim |
| 查看文件系统类型 | lsblk -f |
五、个人最佳实践总结
- 永远知道你在哪个目录:执行
pwd确认路径,特别是rm之前。 - 备份时优先考虑:
/etc(配置)、/home(用户数据)、/var/lib(服务状态,如数据库)。 - 清理空间时安全删除:
/var/log/*.log(旧日志)、/tmp/*、/var/cache/apt/archives/*.deb(已安装的包缓存)。 - 不要动的目录:
/dev、/proc、/sys、/boot(除非你知道在做什么)。 - 新手友好提示:修改系统配置前先备份,修改后测试,万一失败还能恢复。
六、速查表(Linux 目录架构)
| 目录 | 用途 | 是否可清理 |
|---|---|---|
/etc | 配置文件 | ❌ 不建议 |
/home | 用户数据 | ⚠️ 按用户清理 |
/root | root 家目录 | ⚠️ 谨慎 |
/usr | 系统程序 | ❌ 不要动 |
/var/log | 日志文件 | ✅ 可清理旧日志 |
/var/cache | 缓存 | ✅ 可清理 |
/var/tmp | 持久临时文件 | ✅ 可清理 |
/tmp | 临时文件 | ✅ 系统自动清理 |
/opt | 第三方软件 | ⚠️ 卸载软件时可删 |
/boot | 内核与引导 | ⚠️ 只删旧内核 |
/dev | 设备文件 | ❌ 不要动 |
/proc、/sys | 内核信息 | ❌ 虚拟文件系统 |