Linux文件系统目录结构详解
刚接触 Linux 时,打开根目录往往会看到 bin、etc、usr、var 等许多名称简短的目录。它们看起来有些抽象,但并不是随意摆放的:Linux 会按照文件的用途组织系统,而不是像 Windows 那样主要按照磁盘分区组织文件。
理解这些目录之后,我们就能更快地找到配置文件、程序、日志和用户数据,也能避免误删系统中的重要内容。
1. 从根目录 / 开始
Linux 文件系统只有一棵目录树,最顶层是根目录 /。其他磁盘分区、U 盘和网络存储也会被挂载到这棵树中的某个目录下。
需要注意的是:
/表示整个文件系统的根目录。/root是超级用户root的家目录,两者不是同一个概念。/home/alice/file.txt是从根目录开始的绝对路径。./file.txt是相对于当前工作目录的相对路径。
一套常见的 Linux 根目录结构如下:
1 | / |
不同发行版的具体结构会略有差异。大多数发行版参考 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准),但不一定完全相同。
2. /bin:基础命令
/bin 用来保存系统启动、修复以及普通用户操作时需要的基础命令,例如:
1 | ls cp mv rm cat mkdir bash |
在传统 Linux 系统中,即使 /usr 位于另一个尚未挂载的分区,/bin 中的命令也应该可以使用。
现代发行版大多采用 usr merge,此时 /bin 只是指向 /usr/bin 的符号链接:
1 | ls -ld /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 | /dev/sda 第一块常见的 SATA/SCSI 磁盘 |
这些通常不是保存在磁盘上的普通文件,而是在系统启动和设备变化时由内核及 udev 动态创建的设备节点。直接向磁盘设备写入数据可能破坏分区或文件系统,因此不要随意操作 /dev/sd*、/dev/nvme* 等设备。
6. /etc:系统级配置文件
/etc 是排查和修改系统配置时最常访问的目录之一。它主要保存系统范围内的配置,而不是程序本体。
常见内容包括:
1 | /etc/passwd 用户基本信息 |
许多配置文件都是纯文本,可以使用 less 查看。修改之前最好先备份,并通过对应程序提供的检查命令验证语法。例如,修改 Nginx 配置后可运行:
1 | sudo nginx -t |
/etc 中也可能包含密码哈希、私钥或访问凭据等敏感信息,不应该随意复制或公开。
7. /home 与 /root:用户的家目录
/home
普通用户的个人文件通常放在 /home/用户名 下,例如:
1 | /home/alice/Documents |
以 . 开头的文件和目录默认隐藏,通常用于保存用户级配置,如 .config、.ssh 和 .local。可以使用 ls -a 查看它们。
环境变量 $HOME 表示当前用户的家目录,~ 也可以作为它的简写:
1 | echo "$HOME" |
/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 | /opt/google/chrome/ |
与把可执行文件、库和配置分别散放到系统各处相比,这种方式更便于软件独立管理。实际是否使用 /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 | /proc/cpuinfo CPU 信息 |
许多系统监控命令,如 ps、free,底层都会读取 /proc。部分 /proc/sys 文件可以改变内核运行参数,但应该优先使用 sysctl 管理,并在修改前弄清参数含义。
15. /sys:设备、驱动与内核对象
/sys 同样是虚拟文件系统,主要以结构化方式展示设备、驱动、总线和内核对象之间的关系。
1 | /sys/class/ 按设备类别组织的信息 |
系统工具会通过 /sys 查询设备属性,有些文件还允许控制设备状态。除非明确知道接口的作用,否则不要直接向其中写入内容。
16. /mnt 与 /media:挂载其他文件系统
Linux 通过“挂载”把磁盘分区或其他文件系统接入现有目录树。
/mnt:通常由管理员临时手动挂载文件系统;/media:通常供桌面环境自动挂载 U 盘、移动硬盘和光盘。
例如,可以临时把一个分区挂载到 /mnt/data:
1 | sudo mkdir -p /mnt/data |
实际操作前必须确认设备名和文件系统,卸载时使用 umount。桌面发行版也可能把可移动设备挂载到 /run/media/用户名/,这属于正常的发行版差异。
17. /srv:服务对外提供的数据
srv 是 service 的缩写,按照 FHS 的设计,它用于保存系统所提供服务的数据,例如:
1 | /srv/www/ |
不过,很多发行版和应用也会使用 /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 | ls -ld /bin /sbin /lib |
查看磁盘与文件系统类型
1 | df -hT |
查看目录挂载关系
1 | findmnt |
查看哪个一级目录占用空间较大
1 | sudo du -xhd 1 / 2>/dev/null | sort -h |
其中 -x 表示不跨越其他文件系统,可以避免把挂载的网络磁盘或移动硬盘也统计进去。
阅读系统手册
1 | man hier |
不同发行版提供的手册页可能不同,但它们通常比网上的固定目录表更贴合当前系统。
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。
当目录用途不确定时,先用 ls、findmnt、du 和 man 查看,不要凭名称猜测,更不要使用 sudo rm -rf 直接清理。理解文件系统结构的目标不只是记住路径,而是能安全、快速地定位问题。









