跳到主要内容

Linux 目录结构分析

· 阅读需 5 分钟

第一次登录 Linux 服务器,ls / 看到一排陌生的短名字目录,多半会有点懵。这篇笔记把根目录下常见目录的职责梳理一遍,弄清楚"什么东西该放在哪"。

为什么目录长这样

Linux 的目录布局不是随意约定的,背后有一份叫 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)的规范。它规定了每类文件应该放在哪个目录下:可执行程序、配置、日志、临时文件各归各位。这样做的好处很直接——

  • 软件包管理器知道把文件装到哪里,卸载时也能干净地删掉;
  • 运维排查问题时,不用猜配置和日志在哪,/etc/var/log 基本不会落空;
  • 不同发行版之间保持大体一致,经验可以迁移。

想看自己机器上的根目录布局,一条命令就够:

# 查看根目录下的一级目录
ls -l /

核心目录逐个看

1)程序与命令

/bin:存放着常用的指令和二进制可执行程序,比如 lscpcat 这些所有用户都会用到的基础命令。

/sbin:管理员用户才能执行的命令和程序文件夹,典型的如网络配置、磁盘分区、系统关机重启相关的工具。普通用户的 PATH 里通常不包含它。

/usr:用户应用程序和文件放置的文件夹目录。名字容易被误解成 "user",实际是 Unix System Resources 的意思。系统安装的绝大多数软件都在这里,/usr/bin/usr/lib/usr/share 分别放程序、库和共享数据。不少现代发行版做了 usr 合并,/bin 其实是指向 /usr/bin 的软链接:

# 在做了 usr 合并的发行版上可以看到软链接关系
ls -ld /bin /sbin

/opt:optional,"可选择"的意思,作用是安装第三方软件的地方。区别于 /usr 由包管理器接管,/opt 更适合放自带完整目录结构的商业软件或手动解压安装的大型软件,一个软件一个子目录,删起来也省事。

2)配置与设备

/etc:专用于存放系统的配置文件和子目录列表。改系统行为基本都是在这里动手,比如 /etc/fstab/etc/hosts/etc/ssh/。备份系统配置时,这个目录是重点。

/dev:Device(设备)的缩写,是 Linux 系统目前连接的外部设备。Linux 遵循"一切皆文件"的设计,外部设备的访问和文件访问的方式一样——磁盘是 /dev/sda,终端是 /dev/tty,还有 /dev/null 这种特殊设备。

/boot:存放启动 Linux 系统的内核文件,包括连接文件和镜像文件,引导加载器(如 GRUB)的配置也在这里。这个目录轻易不要动,删错文件系统可能起不来。

3)用户数据

/home:用户文件夹,每个系统账号都会创建一个不同的文件夹名称,比如用户 alice 的家目录就是 /home/alice

/root:管理员用户的主目录。注意它不在 /home 下面——这样即使 /home 挂载的分区出问题,root 用户依然能正常登录排障。

4)运行时与易变数据

/var:存放着经常变动的文件,例如系统日志等文件。/var/log 放日志,/var/lib 放服务的持久数据(数据库文件常在这里),/var/cache 放缓存。磁盘被打满时,第一个该检查的往往就是它:

# 找出 /var 下占用空间最大的子目录
du -sh /var/* | sort -rh | head

/tmp:临时文件目录。存放程序运行中产生的临时文件,任何用户都可写。很多发行版会定期清理其中长时间未访问、未更改或未修改的文件(比如 10 天),所以别把需要保留的东西放在这里。

/run:临时文件目录,存储系统启动以来的临时信息,比如服务的 PID 文件和 socket 文件。当系统重启,该目录下的文件将会被清理掉——它通常挂载在内存上,天然易失。

容易混淆的几组目录

  • /tmp 与 /run:都是临时目录,但 /tmp 面向应用程序和用户,/run 面向系统服务的运行时状态;/run 重启必清空,/tmp 取决于发行版策略。
  • /opt 与 /usr/local:都用来装包管理器之外的软件。手动编译安装的软件习惯放 /usr/local(结构与 /usr 平行),整包解压的第三方软件放 /opt
  • /root 与 /:前者是 root 用户的家目录,后者是整个文件系统的根,名字像但完全是两回事。
提示

排查"磁盘满了"这类问题时,优先看 /var/log/tmp;找某个软件的配置时,优先去 /etc 下搜同名目录。记住目录职责,比记住具体路径更有用。

小结

Linux 的目录结构本质上是按"文件的性质"分类:程序放 /bin/usr,配置放 /etc,易变数据放 /var,临时文件放 /tmp/run,用户数据放 /home。理解了这套分类逻辑,面对一台陌生的机器也能很快找到要找的东西。

评论 / COMMENTS