你有没有遇到过这样的情况:装了一个软件,用 which 死活找不到;磁盘报警了,却不知道哪个目录在疯狂吃空间;想改个配置文件,翻遍 /etc、/usr/local/etc 也不知道它在哪……
这些问题的根源,其实都一样:没搞懂 Linux 的目录是怎么设计的。
如果你是从 Windows 转过来的,可能会习惯性地想:“C盘装系统,D盘装软件,E盘存资料。” Linux 没有盘符,只有一个 /(根),下面挂着一堆看起来奇奇怪怪的目录名:/bin、/sbin、/etc、/var、/usr……
别慌。这篇文章带你把这些目录一个一个搞清楚。看完之后,你再也不会对着 Linux 的文件系统发懵。
先说一个标准:FHS
Linux 的目录结构不是随便定的,它背后有一个标准叫 FHS(Filesystem Hierarchy Standard)。你可以把它理解为“Linux 社区的物业公约”——规定了大厅(/etc)放什么、厨房(/var)放什么、卧室(/home)放什么。
大多数主流发行版(Ubuntu、CentOS、Debian)都遵守这个标准,所以你只要学会一次,换哪个发行版都差不多。
实操:打开终端,执行 ls /,看看你的根目录下有哪些文件夹。这就是我们今天要解剖的对象。
按功能分组,一个个来看
我把这些目录分成五组,每组解决一类问题。
第一组:你每天都会打交道的目录
/home —— 普通用户的“家”
每个普通用户在 /home 下都有自己的子目录,比如用户 zhangsan 的家目录就是 /home/zhangsan。你下载的文件、写的代码、桌面上的东西,默认都存在这里。
实操:ls /home 看看有几个用户。然后用 cd ~ 回到自己的家目录,pwd 确认一下。
/root —— 管理员的家
超级管理员(root)的家目录不放在 /home 下,而是独立的 /root。这是为了防止普通用户不小心窥探到 root 的文件。
实操:sudo ls /root(需要输入密码才能看)。
/tmp —— 临时文件的“垃圾桶”
任何程序都可以往 /tmp 里写临时文件。但它有一个重要特性:系统重启后,里面的内容会被清空。所以别把重要的东西放这里。
实操:touch /tmp/test.txt 创建一个临时文件,然后重启系统(reboot),回来看看这个文件还在不在。
第二组:系统和程序的核心零件
/bin 和 /sbin —— 命令存放处
/bin 放的是所有用户都能用的命令,比如 ls、cp、mv。/sbin 放的是管理员才能用的命令,比如 fdisk(分区工具)、reboot(重启)。
实操:which ls 看看 ls 命令在哪里。你会发现它就在 /bin/ls。
/lib 和 /lib64 —— 共享库(相当于 Windows 的 DLL)
很多命令并不是“一个人”在工作,它们需要调用一些公共的函数库。这些库就放在 /lib 和 /lib64 里。64 位系统会有 /lib64。
实操:ldd /bin/ls 看看 ls 命令依赖了哪些库文件。你会看到一大串 libxxx.so,这就是它的“外援”。
/boot —— 系统启动的“钥匙”
内核文件、引导加载器(GRUB)的配置都在这里。一般不要去碰它,弄坏了系统可能就起不来了。
第三组:配置和数据 —— 运维的重灾区
/etc —— 系统的“控制面板”
几乎所有的系统配置文件都在 /etc 里。比如用户密码文件 /etc/passwd、主机名映射 /etc/hosts、磁盘挂载表 /etc/fstab。
实操:ls /etc 看看有多少配置文件。然后用 cat /etc/passwd 看一眼,你会发现每一行对应一个用户。
/var —— 经常变化的数据
日志文件(/var/log)、缓存(/var/cache)、打印任务(/var/spool)都在这里。磁盘满了?十有八九是 /var/log 在作怪。
实操:du -sh /var/log 看看日志占了多少空间。如果很大,可以想想上次清理是什么时候。
/srv —— 服务数据
如果你的机器跑着网站、FTP 之类的服务,它们的数据通常放在 /srv 下。不过很多发行版并不强制使用,所以这个目录可能是空的。
第四组:设备和虚拟文件系统
/dev —— 设备文件
在 Linux 里,硬件设备也被当成文件来管理。硬盘是 /dev/sda,终端是 /dev/tty,U盘插上去可能是 /dev/sdb1。
实操:ls /dev/sda* 查看你的硬盘分区。sda1、sda2 就是不同的分区。
/proc 和 /sys —— 内核的“窗户”
这两个目录不是真实的磁盘文件,而是虚拟文件系统,反映的是内核和进程的实时状态。比如你想看 CPU 信息:cat /proc/cpuinfo。想看内存:cat /proc/meminfo。
实操:cat /proc/cpuinfo | grep "model name" 看看你的 CPU 型号。
第五组:挂载点和临时目录
/mnt 和 /media —— 临时挂载点
当你插入 U盘或光盘时,系统通常会把它挂载到 /media 下。如果你想手动挂载一个硬盘分区,通常用 /mnt。
实操:如果你有一块额外的硬盘(比如 /dev/sdb1),可以试试 sudo mount /dev/sdb1 /mnt,然后 ls /mnt 查看里面的内容。
/run —— 运行时数据
存放正在运行的程序的状态信息,比如 PID 文件。它是基于内存的,重启后消失。
怎么验证你学会了?
做完上面所有的实操练习,你应该已经能回答这几个问题了:
我的家目录在哪里? → /home/你的用户名 或 /root
配置文件去哪找? → /etc
日志文件在哪看? → /var/log
磁盘满了该查哪里? → 先 df -h 看分区,再 du -sh /var/log 排查
命令文件在哪里? → /bin 或 /usr/bin
踩坑经验:新手最容易犯的三个错误
1. 以为 /tmp 里的文件会一直存在
很多新手喜欢把临时脚本扔到 /tmp 里,结果重启后发现全没了。记住:/tmp 是临时空间,重启即清零。
2. 乱删 /var/log 下的文件
日志文件有时候会很大,但直接用 rm 删掉可能会导致正在写日志的程序崩溃。正确做法是用 truncate 清空:sudo truncate -s 0 /var/log/syslog。
3. 搞混 /bin 和 /usr/bin
在 CentOS 7 及更早版本,/bin 和 /usr/bin 是两个不同的目录。但从 CentOS 8 开始,为了遵循 UsrMerge 标准,/bin 变成了 /usr/bin 的一个软链接。所以如果你在网上看到老的教程说要把命令放到 /bin,在较新的系统上其实是放到 /usr/bin 里。
总结
Linux 的目录结构就像一栋房子的布局:客厅(/etc)放公共配置,厨房(/var)处理变化的数据,卧室(/home)属于个人,仓库(/usr)存放共享资源。理解了每个区域的职责,你就不会再迷路了。