怎么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$
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$
>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
-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.
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
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