创建硬链接与软链接的几点学习体会

来源:互联网 发布:全国姓名数据库官方 编辑:程序博客网 时间:2024/05/21 15:44

      今天在看《Linux命令行与脚本编程大全》时看到第三章的cp命令,发现在cp后面加一个 -l 参数也是可以创建一个链接的,不过只能是硬链接,但如果加 -s 参数,则可以创建一个软链接。这是以前看鸟哥的书时没发现的(有可能是看得不够仔细)。

             硬链接的实质:

                                                     实体链接的文件读取示意图  (图片来自鸟哥的私房菜第八章  8.2.2)

    然后,当我用 cp -l test1 test2指令来为test1 创建一个硬链接后,用 ls -il 查看,发现test1 test2两个文件的属性完全一样,包括inode号  权限 大小  时间 等等。并且此时,test1的硬链接总数(也就是 ls -l 查看的第二列)改为2了,证明此时test1有个硬链接存在。但需注意的是,硬链接只能在同一个挂载点上创建,不同的挂载点下不能创建硬链接,也不能为目录创建硬链接。如果在创建硬链接后,忘记了,但想删除这个文件,又不知道还有没有此文件的硬链接,因为有的话,只要查看硬链接就可以查看文件的内容,相当于根本没有删除。为解决这个问题,有个好用的指令可以派上用场:

      find -inum inode


   inode为文件的索引节点号。可用指令:


<h3 name="code" class="html">ls  -i filename    查看。指令find指令后就可以知道还有哪些硬链接,然后就可以完全删除文件了。</h3>

     然后再来说软链接:

     软链接跟硬链接不同,它会一个新的文件,会自己享有一个inode'号,与原文件许多属性不同,可以用 指令 :    

  

cp -s test3 test4 或 ln -s test3 test4

    来创建一个软链接。软链接好比Windows下的快捷方式。此时新建的test4文件的索引节点号(inode)与原文件不同,并且文件变小了,因为test4只存储了源文件的信息,并未存储数据。

    软链接实质:

                                                            实体链接的文件读取示意图  

     由图可知,只要删除源文件,虽然软链接还存在,但由于不能指到real,所以是读取不了它所链接的文件的内容的。这是与硬链接的最大差别。


        参考资料: 《鸟哥的私房菜》第八章 8.2.2

                              《Linux命令行与shell脚本编程大全》第三章

                                http://bbs.chinaunix.net/thread-2003975-1-1.html



    几点补充:

      在创建链接文件test2后,在用cp命令复制链接文件test2到另一个文件test3时,这时复制的其实是源文件的一个副本,即test3是源文件test1的一个副本,有自己的inode,自己的权限,自己的存放数据的地方,而不是源文件test1或者是链接文件test2的一个链接文件。

      可以创建一个指向源文件的新链接,而不用复制链接文件。可以创建指向同一个文件的多个链接,但不要创建指向其他符号链接文件的多个符号链接,这样会生成一个链接文件链,不但容易混淆,还容易断掉,造成各样的问题。

      另外,我在用cp -s 创建符号链接时,如果是链接到另外一个目录,需让源文件名为绝对路径名,这样才能创建成功,并且可以为当前符号链接继续创建一个符号链接(虽不提倡,为实验用)。但当我用 ln -s 为当前文件test1创建一个符号链接test2时,如果源文件test1为相对路径名,则如果我继续为符号链接文件test2创建一个符号链接test3时,虽然可以创建成功,但如果用cat test3来显示文件内容时,则会显示没有那个文件或目录。

     但当我用ln -s来为源文件test1建立一个符号链接test2.test1为绝对路径名。再用ln -s为test2建立一个符号链接test3时。test2也为绝对路径名,这是cat test3能顺利显示test1的内容。

    宗上所述,当想建立多层符号链接文件时,源文件必需使用绝对路径名这样一层层建立下去,这样才能成功。不过,一般不建议建立多层符号链接。

0 0
原创粉丝点击