Mac 应用程序如何能够跟踪文件的位置?

nic*_*jou 19 osx filesystems files

我在 Mac 上观察到这样的行为:

  • 使用 PDF Expert 打开 PDF,对文件进行一些更改,在 Finder 中移动文件,将其保存在 PDF Expert 中,它将正确保存到新位置。
  • 在类似目录中打开一个 shell,~/foo用另一个应用程序删除该目录,shell 的密码正确输出~/.Trash/foo.

引擎盖下发生了什么?这些情况似乎表明应用程序不仅仅像 emacs 那样保存文件的绝对路径(我对这个是否正确?),还是完全不同的机制?

the*_*rpy 21

macos 有一个特殊的/.vol/系统映射到实际的目录和文件。/.vol/<device_id>/<inode_number>无论文件在文件系统上的哪个位置,都可以通过 访问文件和目录。

这是一个不错的小系统。

因此,程序可以例如获取 inode 编号,/Users/jdoe/someFile.txt然后通过以下方式打开它/.vol/12345/6789(在这种情况下,设备 ID 为 12345,inode 编号为 6789)。然后/Users/jdoe/someFile.txt你可以移动到任何你想要的地方(在同一卷上),一切都正常。您甚至可以编写支持此功能的 shell 脚本magic

ls -di <file> 获取inode编号。

$ ls -di /User/jdoe/someFile.txt
6789 /User/jdoe/someFile.txt
Run Code Online (Sandbox Code Playgroud)

编辑:

stat根据 IMSoP 突出显示的链接答案,您用来获取卷的 id 和 inode 编号。

GetFileInfo /.vol/12345/6789将返回先前位于/Users/jdoe/someFile.txt.

有关更多信息,请参阅/sf/ask/836592991/

  • 在 Debian 中,我没有 `/.vol/`,这仍然会发生(虽然我需要 `pwd -P`,只有这样才会更新普通 `pwd` 的输出)。我猜程序不必通过任何特殊路径打开文件,因为通常它们会获取(并保留)由内核映射到 inode 的文件描述符。我*怀疑* Mac `/.vol/` 也不是必需的。 (4认同)