怎么ubuntu11.04下安装软件会出现各种问题

代码:
>0< work$ ls -li /usr/bin/tic /home/fb/work/fonts/microsoft/simsun-yahei-mono-1.0.20100530/simsunbd.ttc
524799 -rw-r--r-- 1 fb   users 13655024  5月 29 2010 /home/fb/work/fonts/microsoft/simsun-yahei-mono-1.0.20100530/simsunbd.ttc
524799 -rwxr-xr-x 1 root root     49840  1月  4 11:33 /usr/bin/tic*

>0< work$ test /usr/bin/tic -ef /home/fb/work/fonts/microsoft/simsun-yahei-mono-1.0.20100530/simsunbd.ttc

>1< work$ touch t1

>0< work$ ln t1 t2

>1< work$ ln -s t1 t3

>0< work$ test t1 -ef t2

>0< work$ test t1 -ef t3

>0< work$ test \! \( -h t1 -o -h t2 \) -a t1 -ef t2

>0< work$ test \! \( -h t1 -o -h t3 \) -a t1 -ef t3

>1< work$

结论:
只用 ls -i 判断硬链接不可靠,除非确定在同一文件系统(或许还不够严谨,LVM、RAID 等情况尚不清楚)
只用 test -ef 同样不可靠,除非两个都不是软连接(同样或许还不够严谨,LVM、RAID 等情况尚不清楚)
还有什么别的方法不?

--------------------------------------------------------------------------------------
新发现情况更复杂了,上面的 test \! \( -h t1 -o -h t2 \) -a t1 -ef t2 也已经不凑效了。
这种情况,如何判断 t1 和 t2 是否是同一个硬链接呢?
代码:
>0< urd$ ln -s /bin/sh t1

>0< urd$ ln t1 t2

>0< urd$ ln -s t1 t3

>0< urd$ ls -li t?
178539 lrwxrwxrwx 2 fb users 7  5月 26 19:58 t1 -> /bin/sh*
178539 lrwxrwxrwx 2 fb users 7  5月 26 19:58 t2 -> /bin/sh*
178547 lrwxrwxrwx 1 fb users 2  5月 26 19:58 t3 -> t1*

>0< urd$ test t1 -ef t2

>0< urd$ test t1 -ef t3

>0< urd$

作者: 自由建客   发布时间: 2011-05-26

"只用 ls -i 判断硬链接不可靠,除非确定在同一文件系统"

没明白,不在同一文件系统也能硬链接??

作者: 懒蜗牛Gentoo   发布时间: 2011-05-26

懒蜗牛Gentoo, 不能硬链接,但可能有相同的索引节点号,看最上面的例子。所以通过 ls -i 看索引节点号是否相同来判断硬链接不可靠。

作者: 自由建客   发布时间: 2011-05-26

代码:
ls -l

-rw-rw-r--  2 nansun users   21 May 26 19:05 hard
lrwxr-xr-x  1 nansun users    4 May 26 19:04 soft -> test
-rw-rw-r--  2 nansun users   21 May 26 19:05 test


第一列:hard link会显示为正常文件,soft link显示为link,l表示它是个soft link
第二列:test和hard都显示2,表示该文件有2个完全相同的副本,test就是hard,hard就是test。而soft link和原文件并不是同一个文件,所以soft显示为1。
第三列:用户名
第四列:组名。
第五列:test和hard的大小都是21,为什么是21呢?因为:

代码:
cat test
this is a test file.


this is a test file.加上EOF(^D)共21个字符。

而soft的大小是4,为什么是4呢?因为soft link到test,test是4个字符。

最后一列:箭头表示这个是soft link.

所以ls -l的第二列是N的文件必有N-1个硬链接。


代码:
rm hard
ls -l

lrwxr-xr-x  1 nansun users   4 May 26 19:04 soft -> test
-rw-rw-r--  1 nansun users   21 May 26 19:05 test


如果删掉源文件(或者硬链接),那么剩下的那个硬链接(或者源文件)第二列的数字会减1,如果这个数字减到0,文件会被真正删除,无法访问内容。

ls -l的第二列叫做number of links,很久很久以前只有hard link,后来才有soft link,所以这一列实际上是指number of hard links

所以回到你的问题上来,如果inode相同,但number of hard link都为1,必定是不同的文件。
反之,如果number of hard link大于一,且inode相同,则不一定就是硬链接。因为有可能跨文件系统。

所以,要在同一个文件系统里面找inode相同的文件。

虽然不确定你具体的需求是什么,但是:

    cut可以取出某一列。

    find有两个参数-xdev和-inum。

希望对你有用。

作者: neil.sun   发布时间: 2011-05-26