今天在看《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为文件的索引节点号。可用指令:
ls -i filename
查看。指令find指令后就可以知道还有哪些硬链接,然后就可以完全删除文件了。
然后再来说软链接:
软链接跟硬链接不同,它会一个新的文件,会自己享有一个inode'号,与原文件许多属性不同,可以用指令:
cp -s test3 test4 或 ln -s test3 test4
来创建一个软链接。软链接好比Windows下的快捷方式。此时新建的test4文件的索引节点号(inode)与原文件不同,并且文件变小了,因为test4只存储了源文件的信息,并未存储数据。
软链接实质:
由图可知,只要删除源文件,虽然软链接还存在,但由于不能指到real,所以是读取不了它所链接的文件的内容的。这是与硬链接的最大差别。
几点补充:
在创建链接文件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的内容。
宗上所述,当想建立多层符号链接文件时,源文件必需使用绝对路径名这样一层层建立下去,这样才能成功。不过,一般不建议建立多层符号链接。
Linux创建链接命令ln -s软链接:http://www.linuxdiyf.com/linux/7749.html
关于Linux中的软链接和硬链接:http://www.linuxdiyf.com/linux/7275.html
linux下创建和删除软、硬链接:http://www.linuxdiyf.com/linux/13459.html
解析Linux链接文件软硬链接类型:http://www.linuxdiyf.com/linux/158.html
Linux下的硬链接和符号链接:http://www.linuxdiyf.com/linux/4188.html