Linux硬链接混淆

我很困惑Linux的硬链接,

我在我的Ubuntu盒子上用这个命令创build了一个硬链接,

ln f1 f2 

所以f2应该是f1的硬链接,但是为什么我用emacs改变了f2并且保存了f2,f1根本没有改变。 我的理解是f1应该有我在f2上做的任何改变。

我做了一些testing,弄清楚发生了什么事。 首先,命令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都有索引号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〜,并创build一个新的文件f1。 f1〜保持硬链接到f2,而f1是一个新的文件没有链接到其他地方。

我不知道emacs中是否有设置来改变这种行为。