Linux中链接
硬链接
touch f1,创建硬链接,两个文件的inode相同
ln -s F1 F2
软链接
touch f1,创建软链接,两个文件的inode不同
ln F1 F3
一般情况下,文件名与inode号码“一一对应”,即每一个inode号码对应一个文件名,但是Unix/Linux是允许多个文件名指向同一个inode号码,这意味着:可以用不同的文件名来访问同样的内容。
测试举例
删除F3,对于F1,F2 无影响
删除F2,对于F1,F3 无影响
删除F1,对于硬链接F2无影响,F3失效
删除F1,F2,文件被彻底删除
硬链接与软链接的区别
1、硬链接删除F1之后,F2仍然存在,且只有把文件以及相关的硬链接全部删除,才会最终删除。用户可以通过建立硬链接到重要文件,以防止“误删”。硬链接让所有的文件都指向同一个inode节点,这些文件名可以在同一目录或者不同目录。
而软链接(又叫符号链接)在删除F1之后,F3会彻底失效,(这里把F3有关的链接称为死链接,若被指向路径文件被重新创建,那么死链接可以重新恢复成正常的软链接。)但是删除软链接后,源文件不受影响。这里申请的新文件其实是一个文本文件,其中包含了另一个文件的路径名,可以是任意文件或者目录,可以链接不同文件系统的文件。
2、对他们的限制不同
硬链接只能对已存在的文件进行创建,不能交叉文件系统进行硬链接的创建。
软链接可以对不存在的文件或目录创建软链接,也可以交叉文件系统。
3、创建方式不同
硬链接不能对目录进行创建,只可对文件创建;
软链接,对文件或目录创建;
硬链接:
创建硬链接:ln
ln 源文件 目标文件
运行后,源文件与目标文件的inode号码相同,两个文件都指向同一个inode
此时的inode信息中,链接数会加一,而当inode信息中链接数为0,即没有文件指向inode,系统会回收inode以及其所对应的block区
目录文件的链接数
创建目录时,系统会自动生成‘.’和’. .'两个目录项,前者的inode号码是当前目录的inode号码,等同于当前目录的一个硬链接;后者的inode号码是其父目录的inode号码,等同于其父目录的硬链接;所以任何一个目录的硬链接总数等于"2+他的子目录总数(包含隐藏目录)"
软链接(符号链接):
创建软链接:ln -s
ln -s 源文件/源目录 目标文件/目标目录
源文件与目标文件的inode虽然不同,但是目标文件的内容是源文件的路径,读取目标文件时,系统自动将访问者导向源文件。因此,无论打开的是哪一个文件,最终读取到的都是源文件。而此时将目标文件称为源文件的软链接(符号链接)
这意味着:目标文件依赖于源文件而存在,如果删除源文件,再读取目标文件时会报错
这是软硬链接最大的不同,目标文件指向源文件的文件名,而不是指向源文件的inode号码,源文件的链接数不会发生改变。
三、inode的特殊作用
因为inode号码与文件名是分离的,所以会产生一些Unix/Linux系统的特有现象。
1、有时候,当文件名包含特殊字符时,系统无法正常删除,此时可以通过直接删除inode节点等价于删除文件。
2、当移动文件,或者重命名时,仅仅改变文件名,不影响inode号码
3、打开一个文件时,系统根据inode号码来识别文件,不考虑文件名,因此,通常系统无法从inode号码中得知文件名。
(这使得软件更新变的简单,可以在不关闭软件的状况下进行更新,不需要重启,因为系统根据inode号码识别运行中的文件,并不通过文件名。在更新时,新版文件以同样的文件名,生成一个新的inode号码,这不会影响运行中的文件。等下一次运行的时候,系统名自动指向新版文件,旧版文件的inode号码被回收。)
注意:1、在删除时,用 ls -i来查找对应文件的inode号码,这里假设是123456,当使用 find命令进行全部删除时
find ./ -inum 123456 -exec rm '{}'\;
2、当删除文件名以连字符开头时,如果按照一般删除模式,rm 文件名的话,会显示无效选项。
原因:Unix/Linux系统把他当做选项进行处理。
可以输入 rm —— -target
对于其他的字符,在特殊字符之前加一个"",或者用“”把文件名括起来。