当前位置:首页>Linux>浅谈 Linux 虚拟文件系统(VFS):让文件操作无处不在

浅谈 Linux 虚拟文件系统(VFS):让文件操作无处不在

  • 2026-10-02 19:54:01
浅谈 Linux 虚拟文件系统(VFS):让文件操作无处不在
大家好!我是大虫子🐛!
学习 Linux 必须了解什么是虚拟文件系统,因为它的地位极其重要,你在系统中的所有操作基本上都离不开它,今天小编带大家简单了解下~
咱们在 Linux 系统中各种操作,几乎都离不开文件操作。但是你停下手头想过没,咱们在访问硬盘、U盘,甚至网络文件系统时,Linux 是如何让它们都表现得像操作普通文件一样的呢?答案就是虚拟文件系统。
🎯VFS 是什么?
VFS 是 Linux 内核中的一层抽象,它位于用户空间和实际文件系统(如 ext4、xfs、nfs 等)之间。
它的作用是:
  • 提供统一的接口,让程序不必关心底层文件系统类型;
  • 把不同文件系统的操作抽象成统一的“文件操作”模型;
  • 支持多种文件系统同时挂载并无缝操作。
简单理解,VFS 就像一个 "文件操作的翻译官",把应用程序的读写请求翻译成底层文件系统能理解的操作。虚拟文件系统支持的三类文件系统:
  • 磁盘文件系统:存储在本地磁盘、U 盘、CDROM 等物理存储设备上的文件系统,包含多种不同格式,例如 Windows 的 NTFS、VFAT,BSD 的 UFS,光盘的 CD-ROM 等。
  • 网络文件系统:数据存储在网络中的其他主机上,需通过网络进行访问,典型代表为 NFS。
  • 特殊文件系统:属于内存的映射,不存储实际物理数据,例如 /proc 文件系统。
🎯VFS 的工作流程
咱们举个例子,执行一个文件操作(比如 cat file.txt)时,流程大致如下:
  1. 应用程序发起系统调用(open, read, write 等);
  2. VFS 接收到调用,查找对应的 inode 和 dentry;
  3. 调用对应的底层文件系统驱动处理具体操作;
  4. 将结果返回给应用程序。
🎯虚拟文件系统四大对象类型
虚拟文件系统包含四个核心对象类型,分别承担不同功能:
  • Superblock(超级块):表示一个已挂载的特定文件系统
  • Inode(索引节点):表示一个特定的文件
  • Dentry(目录项):表示一个目录项,是路径的组成部分
  • File(文件对象):表示进程已打开的一个文件
1. Superblock(超级块)
超级块对象由各类文件系统自行实现,用于存储文件系统的核心信息,对应文件系统的超级块或控制块,会存储在磁盘的特定扇区。非磁盘类文件系统会在内存中临时生成并保存超级块。
2. Inode(索引节点)
索引节点对象包含内核操作文件或目录时所需的全部信息。对于 Unix 文件系统,这类信息可直接从磁盘索引节点读取;若文件系统本身无索引节点,内核会从其磁盘存储结构中提取对应信息。
3. Dentry(目录项)
为提升文件查找效率,虚拟文件系统引入目录项概念,每个 Dentry 代表路径中的一个特定部分。例如路径 /bin/ls 中,"/"、"bin"、"ls" 均为目录项对象,其中前两个是目录,最后一个是普通文件,路径中包含普通文件在内的每一段内容,都是目录项对象。
4. File(文件对象)
文件对象是虚拟文件系统的最后一个核心对象,代表进程已打开的文件。从用户空间视角来看,进程直接操作的是文件,而非超级块、索引节点或目录项。
文件对象包含访问模式、当前偏移量等常用信息,其操作逻辑与 read ()、write () 等系统调用高度契合,是已打开文件在内存中的表示。该对象由 open () 系统调用创建,close () 系统调用销毁,所有文件相关调用,本质上都是文件操作表中定义的方法。
🎯VFS 很重要!总结如下几点:
  • 统一接口:无论文件系统是 ext4、xfs 还是网络文件系统,程序操作方式一致;
  • 支持多文件系统:可以同时挂载本地磁盘、网络存储甚至虚拟文件系统如 /proc、/sys;
  • 简化开发:咱们搞开发的只需实现具体文件系统操作,而应用程序中就无需关心底层细节。
🎯常见虚拟文件系统示例
/proc:提供系统信息接口,实际上不是磁盘上的真实文件;
/sys:用于内核和硬件信息访问;
tmpfs:内存中的临时文件系统,读写速度极快;
devtmpfs:管理设备节点文件。
咱们弄明白 VFS,在 Linux 系统中不同类型的文件系统在咱们面前就像普通文件一样。
往期回顾
90%的 Linux 工程师都没真正搞懂的 /proc 目录,原来这么强大
Linux 必学目录:/sys 入门看这篇就够了

最新文章

随机文章