我对 Linux 硬链接感到困惑,
我在我的 Ubuntu 机器上用这个命令创建了一个硬链接,
ln f1 f2
因此 f2 应该是 f1 的硬链接,但为什么我用 emacs 更改了 f2 并保存了 f2,而 f1 根本没有变化。我的理解是 f1 应该具有我对 f2 所做的任何更改。
答案1
我做了一些测试,弄清楚了发生了什么。首先,命令 ls -li 在第一列中显示 inode 编号,指向同一文件的两个硬链接将具有相同的 inode 编号:
$ echo hi > f1
$ ln f1 f2
$ ls -li
total 8
1646595 -rw-r--r-- 2 randy randy 3 2011-06-18 06:50 f1
1646595 -rw-r--r-- 2 randy randy 3 2011-06-18 06:50 f2
文件 f1 和 f2 的 inode 号均为 1646595,它们是指向相同数据的硬链接。我使用 emacs 编辑 f1 并保存:
$ ls -li
total 12
1646597 -rw-r--r-- 1 randy randy 9 2011-06-18 06:51 f1
1646595 -rw-r--r-- 2 randy randy 3 2011-06-18 06:50 f1~
1646595 -rw-r--r-- 2 randy randy 3 2011-06-18 06:50 f2
现在,f1~和 f2 具有相同的 inode 编号,并且 f1 具有一个新的 inode 编号。
当您保存时,emacs 所做的就是将 f1 重命名为 f1~,并创建一个新文件 f1。f1~ 仍然硬链接到 f2,而 f1 作为一个新文件未链接到其他任何地方。
我不知道 emacs 中是否有设置可以改变这种行为。