我在我的Mac上观察到这样的行为:
~/foo这样的目录中打开一个shell,用另一个应用程序破坏目录,shell的pwd正确地输出~/.Trash/foo。引擎盖下面发生了什么?这些案例似乎表明,应用程序不只是像emacs那样保持文件的绝对路径(我这样说对吗?),还是完全不同的机制?
发布于 2017-11-08 08:04:03
macos有一个特殊的/.vol/系统,映射到实际的目录和文件。文件和目录可以通过/.vol/<device_id>/<inode_number>访问,而不管文件系统上的文件在哪里。
这是一个很好的小系统。
因此,例如,程序可以获取/Users/jdoe/someFile.txt的inode编号,然后通过/.vol/12345/6789打开它(在本例中,设备id为12345,inode编号为6789)。然后,您可以将/Users/jdoe/someFile.txt移动到任何您想要的位置(在相同的卷上),一切都可以正常工作。您甚至可以编写支持此magic的shell脚本。
ls -di <file>以获取inode编号。
$ ls -di /User/jdoe/someFile.txt
6789 /User/jdoe/someFile.txt编辑:
您可以使用stat获取卷的id和inode号,根据IMSoP突出显示的链接答案。
GetFileInfo /.vol/12345/6789将返回以前位于/Users/jdoe/someFile.txt中的文件的当前位置。
发布于 2017-11-08 16:52:21
除了给出的好答案外,您的程序很可能只是保存了一个文件句柄,该句柄与目录树中的文件位置无关(在Unix系统上,至少在关闭文件之前,Unix系统甚至会坚持文件删除)。
文件句柄基本上是对文件的直接访问,它独立于目录结构中存在的位置或频率(在硬链接情况下)。
https://unix.stackexchange.com/questions/403244
复制相似问题