mat*_*age 3 filesystems inode files
我从一些来源(例如:this)中了解到以下几点:
我不明白的主要是最后一行。inode 访问inode,但inode 是独立于文件的实体。并且给出的描述并没有说 inode 以任何方式与文件相关联,只是说 inode 是包含与文件相关的元数据的数据结构。那么文件是如何访问的呢?inode 是否调用文件?
inode是文件,它仅由其 inode 编号标识。文件名只是文件系统中引用文件的元数据。单个文件/inode 可以有多个文件名引用它:
$ touch foo
$ ln foo bar
$ ls -li foo bar
28098391 -rw-r--r-- 2 xxxxxxx xxxxx 0 Jul 6 22:15 bar
28098391 -rw-r--r-- 2 xxxxxxx xxxxx 0 Jul 6 22:15 foo
Run Code Online (Sandbox Code Playgroud)
第一列是inode编号;请注意,这两个文件是相同的。权限后的第一个数字是链接数;双方foo
并bar
具有2链接数,因为每个两个名字指的是同一个文件。
$ rm foo
$ ls -li bar
28098391 -rw-r--r-- 1 xxxxxxx xxxxx 0 Jul 6 22:15 bar
Run Code Online (Sandbox Code Playgroud)
rm foo
仅删除指向基础文件的特定链接;bar
仍然引用它(注意 inode 编号没有改变,但链接计数现在是 1 而不是 2)。另请注意,文件的“真实”名称既不是,foo
也不bar
是;foo
首先创建的事实并没有使其特别。在删除所有链接之前(即,直到链接计数减少到 0),文件才真正被删除。即便如此,该文件实际上并未被删除;分配给该 inode 的块被简单地标记为可供文件系统重用。