AIGC标识 Linux 虚拟文件系统

Linux 中的虚拟文件系统(又称伪文件系统)是一类特殊的文件系统,它们不存储于磁盘,而是由内核在内存中动态生成,用作内核与用户空间之间的编程接口,设计它们,主要是为了避免“每加一个内核功能就加一个系统调用”。
核心思想是:用“文件”这个成熟、通用、可组合的接口,去统一复杂多变的内核功能、设备、资源和存储系统。用统一的文件抽象,把存储、设备、内核状态、配置、资源控制和调试接口全部纳入同一套编程模型。

例如:

目录 常见文件系统类型 性质
/proc procfs,挂载类型常显示为 proc 内核提供的伪文件系统,动态展示进程、内核状态和部分可调参数
/sys sysfs,挂载类型常显示为 sysfs 内核提供的伪文件系统,展示设备、驱动、总线、内核对象等
/run tmpfs 内存临时文件系统,存放运行时数据,如 pid 文件、socket、锁文件;重启清空

所以:

  • /proc 是 procfs
  • /sys 是 sysfs
  • /run 通常是 tmpfs

区别在于:

  • /proc、/sys 的内容不是真实磁盘文件,而是内核动态生成的接口,读写它们通常是在和内核交互。
  • /run 是 tmpfs,内容存在内存和/或 swap 中,可以像普通目录一样创建、删除文件,但重启后消失。
  • /var/run 在现代 Linux 上通常是指向 /run 的符号链接。

查看命令:

findmnt /proc /sys /run

或:

stat -f -c '%n -> %T' /proc /sys /run

典型输出类似:

/proc -> proc
/sys -> sysfs
/run -> tmpfs

补充:/sys 下面还可能挂载其他虚拟文件系统,例如 /sys/fs/cgroup 可能是 cgroup2;/run/user/1000 通常也是 tmpfs。另外 /dev 通常是 devtmpfs 或 tmpfs。

📋 Linux 主要虚拟文件系统一览

文件系统类型 典型挂载点 主要作用 示例/说明
内核信息接口
proc (procfs) /proc 暴露进程、内核状态及部分可调参数 cat /proc/cpuinfo 查看 CPU 信息
sysfs /sys 以树状结构导出设备、驱动、总线等内核对象 /sys/class/net/eth0/ 下查看网卡属性
debugfs /sys/kernel/debug 提供内核调试信息(通常仅 root 可访问) 用于调试内核子系统
tracefs /sys/kernel/tracing 专门用于 ftrace 跟踪框架的接口 与 debugfs 功能相关但更专一
securityfs /sys/kernel/security 暴露安全模块(如 SELinux、AppArmor)的接口 用于安全策略管理
configfs /sys/kernel/config 用于动态创建、配置内核对象(如 USB gadget) 用户空间可主动配置内核对象
bpf /sys/fs/bpf 持久化 BPF 文件系统对象 用于 eBPF 程序和映射的 pinning
pstore /sys/fs/pstore 在系统崩溃后保留内核日志的持久化存储 用于分析崩溃原因
efivarfs /sys/firmware/efi/efivars 读写 UEFI 固件变量 仅 UEFI 系统可用
fusectl /sys/fs/fuse/connections 暴露 FUSE 连接信息 用于管理 FUSE 文件系统连接
设备与终端
devtmpfs /dev 由内核维护的设备节点文件系统 自动创建设备文件
devpts /dev/pts 伪终端(PTY)设备节点 每个终端会话对应一个节点
内存与共享
tmpfs /run, /dev/shm, /tmp 等 基于内存/交换的临时文件系统,重启后消失 用于存放运行时数据、共享内存
ramfs (通常由 rootfs 使用) 最简单的内存文件系统,大小可动态伸缩 是 tmpfs 的基础,但不使用交换空间
hugetlbfs /dev/hugepages 用于分配“大页”内存的接口 高性能计算场景常用
进程间通信 (IPC)
mqueue /dev/mqueue 暴露 POSIX 消息队列对象 用于进程间消息传递
rpc_pipefs /run/rpc_pipefs 用于 NFS 等 RPC 服务的管道通信 由 sunrpc 模块使用
控制与自动化
cgroup2 (或 cgroup) /sys/fs/cgroup 控制组层次结构,用于资源限制与隔离 管理进程组的 CPU、内存等资源
autofs /proc/sys/fs/binfmt_misc 等 自动挂载文件系统,按需触发 常用于自动挂载远程目录或可执行格式
binfmt_misc /proc/sys/fs/binfmt_misc 注册额外的二进制格式,使内核能执行非原生程序 例如运行 Windows 或 Java 程序
nsfs (通过 nsfs 类型挂载) 命名空间文件系统,用于操作内核命名空间 与容器技术密切相关

💡 如何查看当前系统的虚拟文件系统

你可以使用以下命令,直观地看到系统中所有已挂载的虚拟文件系统及其类型:

# 查看所有挂载点及其类型
findmnt -t proc,sysfs,tmpfs,devtmpfs,devpts,cgroup,cgroup2,securityfs,debugfs,tracefs,configfs,fusectl,bpf,pstore,efivarfs,mqueue,hugetlbfs,autofs,binfmt_misc,rpc_pipefs,nsfs

# 或者更简单地,过滤 /proc/mounts
cat /proc/mounts | awk '{print $2, $3}' | sort

这些虚拟文件系统是 Linux 系统内部运作的“窗口”和“控制面板”,理解它们有助于你更深入地掌握系统管理、性能调优和容器化技术。

posted @ 2026-09-30 11:36  悠哉大斌  阅读(24)  评论(0)    收藏  举报