刚接触 Linux 时,打开根目录往往会看到 binetcusrvar 等许多名称简短的目录。它们看起来有些抽象,但并不是随意摆放的:Linux 会按照文件的用途组织系统,而不是像 Windows 那样主要按照磁盘分区组织文件。

理解这些目录之后,我们就能更快地找到配置文件、程序、日志和用户数据,也能避免误删系统中的重要内容。


1. 从根目录 / 开始

Linux 文件系统只有一棵目录树,最顶层是根目录 /。其他磁盘分区、U 盘和网络存储也会被挂载到这棵树中的某个目录下。

需要注意的是:

  • / 表示整个文件系统的根目录。
  • /root 是超级用户 root 的家目录,两者不是同一个概念。
  • /home/alice/file.txt 是从根目录开始的绝对路径。
  • ./file.txt 是相对于当前工作目录的相对路径。

一套常见的 Linux 根目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/
├── bin 常用命令
├── boot 启动文件
├── dev 设备文件
├── etc 系统配置
├── home 普通用户家目录
├── lib 基础共享库和内核模块
├── media 可移动设备挂载点
├── mnt 临时挂载点
├── opt 可选的第三方软件
├── proc 进程与内核信息
├── root root 用户家目录
├── run 本次启动后的运行时数据
├── sbin 系统管理命令
├── srv 服务提供的数据
├── sys 设备与内核对象信息
├── tmp 临时文件
├── usr 大部分程序和只读资源
└── var 经常变化的数据

不同发行版的具体结构会略有差异。大多数发行版参考 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准),但不一定完全相同。


2. /bin:基础命令

/bin 用来保存系统启动、修复以及普通用户操作时需要的基础命令,例如:

1
ls  cp  mv  rm  cat  mkdir  bash

在传统 Linux 系统中,即使 /usr 位于另一个尚未挂载的分区,/bin 中的命令也应该可以使用。

现代发行版大多采用 usr merge,此时 /bin 只是指向 /usr/bin 的符号链接:

1
2
ls -ld /bin
readlink -f /bin

所以,看到 /bin -> usr/bin 是正常现象。


3. /sbin:系统管理命令

/sbin 主要存放系统管理和维护命令,例如磁盘检查、文件系统创建、网络配置等工具。很多命令通常需要 root 权限才能完成实际操作。

1
fsck  mkfs  shutdown  ip

/bin 类似,在采用 usr merge 的系统中,/sbin 通常会链接到 /usr/sbin

sbin 中的 s 可以理解为 system,表示这些命令更偏向系统管理,但这并不意味着普通用户完全不能执行或查看它们。


4. /boot:系统启动所需文件

/boot 保存启动 Linux 所需的文件,常见内容包括:

  • Linux 内核镜像,如 vmlinuz-*
  • 初始内存文件系统,如 initramfs-*initrd-*
  • GRUB 引导加载器的配置和相关文件;
  • 部分系统的 CPU 微码文件。

UEFI 系统通常还会有 EFI 系统分区,它可能挂载在 /boot/efi

这个目录直接关系到系统能否启动,不应手工随意删除旧内核或修改引导文件。清理旧内核时,应优先使用发行版提供的包管理工具。


5. /dev:设备也表现为文件

Linux 中有“一切皆文件”的设计思想。硬盘、终端、串口以及随机数生成器等设备,会通过 /dev 下的特殊文件提供访问接口。

常见例子如下:

1
2
3
4
5
6
/dev/sda       第一块常见的 SATA/SCSI 磁盘
/dev/nvme0n1 第一块 NVMe 磁盘
/dev/tty 当前控制终端
/dev/null 丢弃写入的数据,读取时立即返回文件末尾
/dev/zero 持续提供零字节
/dev/random 随机数据源

这些通常不是保存在磁盘上的普通文件,而是在系统启动和设备变化时由内核及 udev 动态创建的设备节点。直接向磁盘设备写入数据可能破坏分区或文件系统,因此不要随意操作 /dev/sd*/dev/nvme* 等设备。


6. /etc:系统级配置文件

/etc 是排查和修改系统配置时最常访问的目录之一。它主要保存系统范围内的配置,而不是程序本体。

常见内容包括:

1
2
3
4
5
6
7
8
/etc/passwd          用户基本信息
/etc/group 用户组信息
/etc/hostname 主机名
/etc/hosts 静态主机名解析
/etc/fstab 文件系统自动挂载配置
/etc/ssh/ SSH 服务配置
/etc/systemd/ systemd 配置
/etc/nginx/ Nginx 配置(安装后才会出现)

许多配置文件都是纯文本,可以使用 less 查看。修改之前最好先备份,并通过对应程序提供的检查命令验证语法。例如,修改 Nginx 配置后可运行:

1
sudo nginx -t

/etc 中也可能包含密码哈希、私钥或访问凭据等敏感信息,不应该随意复制或公开。


7. /home/root:用户的家目录

/home

普通用户的个人文件通常放在 /home/用户名 下,例如:

1
2
3
/home/alice/Documents
/home/alice/Downloads
/home/alice/.bashrc

. 开头的文件和目录默认隐藏,通常用于保存用户级配置,如 .config.ssh.local。可以使用 ls -a 查看它们。

环境变量 $HOME 表示当前用户的家目录,~ 也可以作为它的简写:

1
2
echo "$HOME"
cd ~

/root

/root 是超级用户 root 的家目录。它直接位于根目录下,而不是 /home/root,这样即使 /home 单独挂载且暂时不可用,管理员仍然可以登录并修复系统。


8. /lib/lib64:基础共享库

程序运行时经常需要共享库,作用类似 Windows 中的 DLL。/lib 保存基础命令所需的共享库,以及部分内核模块。

1
/lib/modules/内核版本/    当前内核可加载的模块

在某些 64 位系统上还会存在 /lib64,用来区分不同架构的库。采用 usr merge 的发行版中,/lib/lib64 可能分别链接到 /usr/lib/usr/lib64

不要通过手工删除库文件来“清理空间”,否则可能导致大量命令无法启动。库的安装和卸载应交给包管理器处理。


9. /usr:大部分程序和只读资源

/usr 是 Linux 中内容最多的目录之一,存放可供所有用户使用的大部分程序、库、文档和静态资源。这里的文件通常由包管理器维护,正常运行期间不会像日志那样频繁变化。

主要子目录如下:

  • /usr/bin:绝大多数普通命令和应用程序;
  • /usr/sbin:非基础的系统管理命令;
  • /usr/lib:程序使用的库和内部数据;
  • /usr/share:与 CPU 架构无关的共享数据,如手册、图标和时区信息;
  • /usr/include:C/C++ 等语言使用的头文件;
  • /usr/src:源代码,如内核头文件或源码包;
  • /usr/local:由本机管理员手工安装的软件。

/usr/local/usr 的区别很重要:发行版的包管理器主要管理 /usr,而自行编译或只供本机使用的软件通常安装到 /usr/local,这样可以减少与系统软件包发生冲突的机会。


10. /opt:独立的第三方软件

/opt 用于安装附加的、可选的第三方软件。某些体积较大或希望保持自身目录结构的商业软件,会把所有内容放在类似下面的位置:

1
2
/opt/google/chrome/
/opt/company/application/

与把可执行文件、库和配置分别散放到系统各处相比,这种方式更便于软件独立管理。实际是否使用 /opt 取决于软件的安装方式和发行版约定。


11. /var:不断变化的数据

var 是 variable 的缩写,用来保存运行过程中持续变化的数据。服务器磁盘空间异常时,/var 往往是重点检查对象。

常见子目录如下:

  • /var/log:系统和服务日志;
  • /var/cache:可以重新生成的缓存;
  • /var/lib:应用程序持久化的状态数据,如软件包数据库;
  • /var/spool:等待处理的队列数据,如邮件和打印任务;
  • /var/tmp:需要比 /tmp 保留更久的临时文件;
  • /var/www:一些 Web 服务器默认使用的网站目录。

如果 /var/log 占用很大,应先确认是哪个服务在持续写入,并使用 journalctl、日志轮转或程序自身的清理机制处理,而不是直接删除仍在使用的日志文件。

查看一级子目录占用空间可以使用:

1
sudo du -xhd 1 /var | sort -h

12. /tmp/var/tmp:临时文件

/tmp 供程序和用户保存短期临时文件。它通常允许所有用户写入,但设置了 sticky bit,普通用户只能删除自己的文件。

1
ls -ld /tmp

常见权限形式是 drwxrwxrwt,最后的 t 就表示 sticky bit。

/tmp 的内容可能在重启时或由系统定期清理,不能用来保存重要数据。/var/tmp 也用于临时文件,但按照传统约定,它的内容通常应比 /tmp 保留更久。具体清理策略仍由发行版和管理员配置决定。


13. /run:本次启动的运行时数据

/run 保存系统自本次启动以来产生的运行时数据,通常位于内存文件系统中,重启后会重新创建。

常见内容包括:

  • 进程 ID 文件;
  • Unix Socket;
  • 锁文件;
  • 当前登录用户信息;
  • 服务运行状态。

例如,某些服务会把套接字放在 /run/服务名/ 下。旧系统中的 /var/run 通常已经成为指向 /run 的符号链接。


14. /proc:进程和内核参数的窗口

/proc 是由内核提供的虚拟文件系统,里面的内容并不是普通磁盘文件。它以文件形式展示进程状态和内核信息。

常见内容如下:

1
2
3
4
5
6
7
/proc/cpuinfo       CPU 信息
/proc/meminfo 内存信息
/proc/version 内核版本
/proc/mounts 当前挂载信息
/proc/1234/ PID 为 1234 的进程信息
/proc/self/ 当前访问进程自身的信息
/proc/sys/ 可调节的内核参数

许多系统监控命令,如 psfree,底层都会读取 /proc。部分 /proc/sys 文件可以改变内核运行参数,但应该优先使用 sysctl 管理,并在修改前弄清参数含义。


15. /sys:设备、驱动与内核对象

/sys 同样是虚拟文件系统,主要以结构化方式展示设备、驱动、总线和内核对象之间的关系。

1
2
3
4
/sys/class/     按设备类别组织的信息
/sys/block/ 块设备信息
/sys/bus/ 各类总线上的设备和驱动
/sys/devices/ 设备层级结构

系统工具会通过 /sys 查询设备属性,有些文件还允许控制设备状态。除非明确知道接口的作用,否则不要直接向其中写入内容。


16. /mnt/media:挂载其他文件系统

Linux 通过“挂载”把磁盘分区或其他文件系统接入现有目录树。

  • /mnt:通常由管理员临时手动挂载文件系统;
  • /media:通常供桌面环境自动挂载 U 盘、移动硬盘和光盘。

例如,可以临时把一个分区挂载到 /mnt/data

1
2
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data

实际操作前必须确认设备名和文件系统,卸载时使用 umount。桌面发行版也可能把可移动设备挂载到 /run/media/用户名/,这属于正常的发行版差异。


17. /srv:服务对外提供的数据

srv 是 service 的缩写,按照 FHS 的设计,它用于保存系统所提供服务的数据,例如:

1
2
3
/srv/www/
/srv/ftp/
/srv/git/

不过,很多发行版和应用也会使用 /var/www/var/lib/应用名 或管理员自定义的位置,因此 /srv 在一些系统中可能是空的。


18. 其他可能见到的目录

/lost+found

ext2、ext3、ext4 等文件系统的根目录中可能存在 lost+found。文件系统检查工具发现无法确定原始路径的数据块时,可能会把恢复出的文件放到这里。它不是回收站。

/snap

Ubuntu 等使用 Snap 的系统可能通过 /snap 暴露已安装 Snap 软件包的只读内容。这不是所有发行版都有的标准目录。

/selinux

启用 SELinux 的系统可能出现与其相关的虚拟文件系统或目录。现代系统通常将相关接口挂载在 /sys/fs/selinux


19. 如何判断一个目录的实际情况

目录名称告诉我们它的设计用途,但排查具体系统时还应以实际挂载和链接关系为准。下面这些命令很有帮助。

查看根目录详细信息

1
ls -lah /

判断目录是不是符号链接

1
2
ls -ld /bin /sbin /lib
readlink -f /bin

查看磁盘与文件系统类型

1
2
df -hT
lsblk -f

查看目录挂载关系

1
2
findmnt
findmnt /home

查看哪个一级目录占用空间较大

1
sudo du -xhd 1 / 2>/dev/null | sort -h

其中 -x 表示不跨越其他文件系统,可以避免把挂载的网络磁盘或移动硬盘也统计进去。

阅读系统手册

1
2
man hier
man file-hierarchy

不同发行版提供的手册页可能不同,但它们通常比网上的固定目录表更贴合当前系统。


20. 总结:按用途记忆,而不是死记名称

可以把常见目录归纳为几类:

用途 目录
程序和库 /bin/sbin/lib/usr/opt
配置 /etc
用户数据 /home/root
启动和设备 /boot/dev
运行时与变化数据 /run/var/tmp
内核虚拟接口 /proc/sys
挂载与服务数据 /mnt/media/srv

最重要的规律是:配置通常在 /etc,用户文件在 /home,日志和变化数据在 /var,大部分程序在 /usr,进程与内核信息在 /proc/sys

当目录用途不确定时,先用 lsfindmntduman 查看,不要凭名称猜测,更不要使用 sudo rm -rf 直接清理。理解文件系统结构的目标不只是记住路径,而是能安全、快速地定位问题。