易君召
易君召
发布于 2026-11-08 / 4 阅读
0

Linux 文件系统结构解析

Linux 采用树形目录结构,根目录 / 是整棵树的起点,所有磁盘、分区、设备都会挂载(mount)到这棵树上的某个目录,没有 Windows 那种 C/D 盘符概念。

核心特点:一切皆文件 —— 普通文件、目录、硬件设备、管道、套接字都以文件形式访问。

一、顶层目录总览(FHS 标准:Filesystem Hierarchy Standard)

FHS 是 Linux 目录布局规范,绝大多数发行版(Debian、Ubuntu、CentOS、openEuler、麒麟)都遵循。

目录

全称

作用说明

/

root

根目录,整个文件系统起点

/bin

binaries

基础用户可执行命令(ls、cat、cp、mv),单用户救援模式也可用

/boot

boot

引导相关:内核 vmlinuz、initramfs、grub 引导文件

/dev

device

设备文件目录,硬盘、串口、显卡、终端都在这里

/etc

etcetera

系统全局配置文件,非常重要

/home

home

普通用户家目录,/home/xxx

/lib / /lib64

library

基础共享库、内核模块依赖库;lib64 是 64 位库

/media

media

自动挂载的可移动介质:U 盘、光盘

/mnt

mount

手动临时挂载点(运维常用)

/opt

optional

第三方独立大型软件(商业软件、自研程序)

/proc

process

伪文件系统,内存里的进程、内核参数,不占磁盘

/root

root

root 用户的家目录,不是 /!

/run

runtime

运行时临时数据:pid 文件、socket,重启清空

/sbin

system binaries

系统管理员命令(reboot、fdisk、ifconfig)

/srv

service

服务数据:web 站点、ftp 文件、自定义服务资源

/sys

system

伪文件系统,内核硬件、驱动、设备树信息

/tmp

temporary

临时文件,重启自动清空

/usr

Unix System Resources

最大的子树:用户程序、文档、库、man 手册

/var

variable

可变数据:日志、数据库、缓存、邮件

重点区分:/root 是管理员家目录,/ 是文件树根,不要搞混。

二、重点目录深度拆解

1. /etc 配置目录(运维高频)

  • /etc/passwd:用户账户信息

  • /etc/shadow:用户密码哈希(权限严格)

  • /etc/group:用户组

  • /etc/fstab:开机自动挂载表(磁盘挂载核心文件)

  • /etc/hosts:本地域名解析

  • /etc/hostname:主机名

  • /etc/profile:全局环境变量、登录脚本

  • /etc/nginx/、/etc/systemd/system/:服务配置

2. /proc 虚拟文件系统(procfs)

全部在内存,无磁盘文件:

  • /proc/cpuinfo:CPU 信息

  • /proc/meminfo:内存信息

  • /proc/[pid]/:每个进程的目录,fd、cmdline、status

  • /proc/sys/:动态内核参数(sysctl 修改)

3. /sys(sysfs)

内核导出硬件设备、总线、驱动,比 /proc 结构化更强;udev 靠它生成 /dev 设备。

4. /usr 子目录(Unix System Resources)

早期 /usr 曾经单独分区,存放大部分应用程序

  • /usr/bin:大部分普通用户命令

  • /usr/sbin:管理员命令

  • /usr/lib /usr/lib64:应用依赖库

  • /usr/share:共享资源:man 手册、字体、图标、配置模板

  • /usr/local:管理员手动编译安装软件默认目录(源码 make install 一般装这里)

    • /usr/local/bin、/usr/local/lib

5. /var 可变数据目录

内容会持续增长,数据库、日志服务器一般单独分区挂载 /var

  • /var/log:系统日志(syslog、journal、nginx 日志)

  • /var/lib:数据库、docker 数据、包管理状态

  • /var/cache:apt/yum/dnf 软件包缓存

  • /var/spool:打印队列、邮件队列

6. /dev 设备文件

两种设备文件:

  • 块设备(b):随机读写,硬盘 /dev/sda、分区 /dev/sda1、NVMe /dev/nvme0n1

  • 字符设备(c):流式读写,串口、终端 /dev/tty、/dev/urandom

  • /dev/null:黑洞,写入直接丢弃

  • /dev/zero:无限输出 0

三、文件系统的两层概念(非常容易混淆)

很多人把「目录树结构(FHS)」和「磁盘文件系统(ext4/xfs/btrfs)」混在一起:

  1. 目录树(FHS):逻辑视图,就是上面这套 /、/etc、/var 布局,所有 Linux 统一规范

  2. 磁盘文件系统:格式化在分区上的存储格式:ext4、XFS、btrfs、tmpfs、nfs

    • 一个分区格式化 ext4 → 挂载到 /,它就成为根分区

    • 另一个分区 XFS → 挂载到 /var,所有 /var 的数据存在这个分区

挂载的本质:把一个文件系统,接入到树形目录的某个节点。

常见特殊文件系统(df -T 可以看到)

  • tmpfs:内存文件系统,/tmp、/run 常用,断电消失

  • sysfs / proc:内核虚拟 fs,无磁盘

  • devtmpfs:/dev 的底层

  • nfs:网络文件系统,远程挂载

四、inode、block、superblock(底层核心)

这是 ext/XFS 这类本地文件系统底层,和上面的目录树配合工作:

  1. Superblock 超级块:文件系统元信息,总块数、空闲块、inode 总数,损坏则分区挂掉

  2. inode(索引节点)

    • 一个文件对应一个 inode,记录:文件大小、权限、属主、时间戳、数据块指针

    • inode 不存文件名!文件名存在目录项里

    • 硬链接:多个目录项指向同一个 inode

  3. block 数据块:真正存放文件内容的最小单元(4k 常见)

  4. 目录项(dentry):内存缓存,保存「文件名 → inode 号」映射,加速查找

一句话:目录存名字,inode 存属性,block 存内容。

五、软链接 vs 硬链接

  • 硬链接:同一个 inode,不能跨分区、不能链接目录;删除一个,其他还在

  • 软链接(symbolic link):单独 inode,存目标路径文本,可以跨分区、链接目录;源文件删了就失效(红闪烁)

六、典型生产分区方案参考

服务器部署常用拆分(防止日志打满根分区)

/boot    1G  ext4
/        50G xfs
/var     100G+ xfs (日志、数据库)
/home    按需
swap     内存1~2倍

容器环境很多会单独给 /var/lib/docker 单独挂载。

七、常用查看命令

ls /                # 看顶层目录
tree -L 1 /         # 树形展示一级目录
df -hT              # 查看挂载点 + 文件系统类型
du -sh /var/log     # 看目录占用
stat /etc/passwd    # 查看inode、权限、时间
ls -i               # 显示inode号
mount               # 查看当前挂载列表
cat /etc/fstab      # 开机挂载配置

八、容易踩坑的点总结

  1. /tmp 默认 tmpfs,空间是内存,大文件不要放这里

  2. /proc、/sys 不能直接 vim 修改,要用 echo、sysctl

  3. inode 耗尽:磁盘还有空间但新建文件报错(小文件超多场景)

  4. FHS 只是规范,部分嵌入式、定制系统不严格遵守

  5. 目录只是挂载入口,删掉挂载点目录,不会删掉分区数据,只是卸载入口


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/linux-filesystem-structure-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/