linux下的文件与链接

389 阅读2分钟

在学习使用硬链接和软链接的过程中,着实了解了下 linux 中的文件和文件系统的概念。

在 linux 中,一切皆文件

大名鼎鼎,看一遍就记住了。下面具体解释下。

众所周知,linux 是一个操作系统,操作系统是计算机中很重要的一类程序,由它来负责管理计算机的硬件资源。在 linux 中,无论是各种用户数据还是硬件设备,都被看做是文件。这样的好处是简化了操作,很多事件可以用 read 或 write 这类系统调用实现。

文件组织形式

文件由两部分组成,一是元数据,二是用户数据。元数据表示文件的额外属性,如创建日期,属主等;用户数据也就是文件数据块,是真正的内容。元数据中存储着文件数据块的唯一标志 inode 号,程序会通过 inode 号找到对应的文件数据块,从而获取数据。

硬链接软链接

硬链接即同一文件的别名,他的 inode 同原本文件的 inode 是相同的;软链接则是一个新的文件,其 user data 含有原本文件的路径。

硬链接的特点:

  • 文件有相同的 inode 及 data block;
  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建;
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件。

软链接特点:

  • 软链接有自己的文件属性及权限等;
  • 可对不存在的文件或目录创建软链接;
  • 软链接可交叉文件系统;
  • 软链接可对文件或目录创建;
  • 创建软链接时,链接计数 i_nlink 不会增加;
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

各种文件系统的媒人——vfs

文件系统用于管理文件,linux 中各种文件系统通过挂载的方式共存,其共存的基础是 vfs。vfs 即虚拟文件系统 virtual file system,其定义了一套通用的接口,统一了不同文件系统如 ext4 等文件系统的行为,方便用户操作。