hard link陷阱

先看一系列操作:

$ echo "A" >A
$ echo "BB" >B
$ ln A C
$ ls -l -i
total 12
2056743 -rw-rw-r-- 2 liang liang 2 2011-12-31 10:28 A
2059789 -rw-rw-r-- 1 liang liang 3 2011-12-31 10:28 B
2056743 -rw-rw-r-- 2 liang liang 2 2011-12-31 10:28 C
$ cp B A
$ ls -l -i
total 12
2056743 -rw-rw-r-- 2 liang liang 3 2011-12-31 10:28 A
2059789 -rw-rw-r-- 1 liang liang 3 2011-12-31 10:28 B
2056743 -rw-rw-r-- 2 liang liang 3 2011-12-31 10:28 C
$ cat *
BB
BB
BB

你会发现,当我们用文件B覆盖文件A的时候,文件C的内容也变了。

这种情况是在编译binutils时使用--enable-gold=default这个configure选项时出现的。使用这个选项,我们会得到三个linker,文件名分别为ld, ld.bfdld.gold,其中ldld.gold的硬链接,即如上例中的AC。在这种情况下,如果想尝试BFD ld,那么不能直接使用ld.bfd覆盖ld,否则就会出现上面的情况,即ld.gold实际上也被改变为ld.bfd,而真正的ld.gold就没有了。

这种情况如果不是特别留意,很难发现,会误以为只要用ld.gold覆盖ld,就可以恢复使用Gold作为linker,其实还是在使用BFD ld。

尿裤子

儿子还不会自己撒尿,但是每次有尿的时候都会喊:“我要撒尿!”。

一次偶然的机会发现,原来儿子在喊撒尿之前,就在裤子里尿了一些,难怪档里总是黄黄的颜色。想起夏天光着身子在床上玩,通常都是“在床上尿了一个小圈圈”之后才叫撒尿的,甚至还有实在憋不住,直接尿在iPad上或者尿在妈妈身上的情况。

现在看不到,就尿到裤子里了。