一尘不染

Unix文件系统:文件名如何转换为磁盘扇区?

linux

一个非常基本的问题。通过提供文件的完全限定路径,尝试打开文件描述符时执行的步骤的确切顺序是什么?

我在寻找

  • 在Linux上如何运作
  • 给定文件名-如何将其转换为inode和磁盘扇区
  • linux文件系统(特别是ext3和ext4)是否维护某种文件名到inode的映射?

阅读 481

收藏
2020-06-07

共1个答案

一尘不染

文件确实是inode

通常,给定文件在某个目录中有一些条目指向其索引节点。目录将名称映射到索引节点,目录是一种文件。请参见stat(2)以了解inode包含的内容(并可通过应用程序代码查询),尤其是各种文件类型(普通文件,目录,字符或块设备,fifo,symlink等)。因此,目录通常是字典(以各种特定于文件系统的方式实现)将字符串映射到inode。因此,在该目录中/bin/,通常存在一个bash
bash shell(即/bin/bash)的ELF可执行文件的inode
关联的条目。使用readdir(3)
-依次调用getdents(2)
-读取目录中的条目。

某些名称可能无法再访问给定的inode。当进程打开(2)-创建文件,然后取消链接(2)-创建文件(同时保留打开的文件描述符)时,尤其会发生这种情况。这是制作临时文件的首选方法。(当不再有进程使用它们时,它们将由内核释放)。

给定的inode有 _多个_指向它的目录条目也可能发生。(即文件具有“多个名称”)这是通过link(2)syscall发生的。(symlink文件是使用symlink(2)创建的)。

还参见path_resolution(7)UNIX文件系统文件系统EXT2EXT3EXT4BTRFS文件系统的比较
wikipages。另请阅读此旧文件系统描述(有些细节很烂,但是总体思路在这里,尤其是VFS的作用)

2020-06-07