• ln(link)创建的软链接和硬链接的区别

    post by Holmesian / 2009-5-9 23:23 Saturday
    首先是hard link,大家都知道cp的用法,即cp oldfile newfile,这样一来就比较浪费空间,假设oldfile有600M,拷贝出来的newfile(也即

    oldfile的副本)也同样要占距600M的空间,这对于我的unix系统来说简直就是噩梦,居然两个文件就站了1G多!有没有一种方法能够即节省

    空间又能相互连接呢?答案是有的,大家回想一下自个儿在WINDOWS下有没有类似的解决方法?对了,就是建立快捷方式嘛!hard link就是相

    当于建立一个文件的快捷方式,还是迷茫?呵呵,举个例子吧:

    假设用户romeo在/tmp的目录下有个文件here,此时给here文件设置权限为:"rw-r-r",恰好系统内另一名用户Holmesian也要用这个文件,那么她就

    只需建立一个到/tmp/here的link即可:

    [Holmesian@BSD Holmesian]$ ln /tmp/here HolmesianLink

    这样就在用户Holmesian的目录下(/home/Holmesian)建立了一个hard link,其文件名为:HolmesianLink,这时执行:

    $ ls -l /home/Holmesian

    发现如下信息:

    -rw-r--r-- 2 romeo romeo 5096 ....... HolmesianLink

    可以得知文件的链接数是:2,表明该文件除了本身外还有另一个副本.如果再切换一个用户对这个文件进行链接,则链接数继续增加.同时发现

    建立链接后文件的属主和属组仍是:romeo

    接下来查看链接文件和原文件的索引节点编号:

    $ ls -s HolmesianLink
    24340 HolmesianLink

    $ ls -s /tmp/here
    24340 /tmo/here

    可知,这两个文件的索引节点编号是一致的,如果用复制而不是链接的话,就会产生两个不相干文件,各自拥有不同的索引节点编号:

    $ cp /tmp/here HolmesianLink

    $ ls -l HolmesianLink
    37027 HolmesianLink

    正如你发现的:37027!=243430

    最后,我们来看一下symbolic link:

    其用命令ln -s创建:

    $ln -s /tmp/here SysLink

    再:$ls -l /home/Holmesian

    lrwxrwxrwx 1 Holmesian Holmesian ...... SysLink->here

    由首项"l"发现这是一个链接文件,由"1"得知here和SysLink的链接数没有改变,(想想为什么:confused: )  由权限"rwxrwxrwx"知道文件的真正权限要以所

    指文件为准,软链接本身不做任何限制。软链接本身不保存文件的数据,其真正内容是指向原来的文件,如果将文件here删除或改名,则

    SysLink会指向一个不存在的文件,其内容变成空白;但是它会占用一个索引节点,并拥有自己的索引节点编号,不信你试试:

    $ls -i SysLink

    其显示的索引节点编号一定不同于here的索引节点编号:)


    [color=#DC143C]总结:hard link所创建的文件和原文件的索引节点编号相同,相当于一个原文件有多个别名;

    symbolic link所创建的链接和原文件的索引节点编号不同,相当于指向原文件的位置。
    [/color]


    ps:hard link 和 symbolic link创建后均可以用rm命令删除。

    发表评论: