一、概念
1、什么是硬连接?
硬链接是多个文件都指向同一个inode,硬链接知识点:
①、具有相同inode的多个文件互为硬链接文件,创建硬链接相当于文件实体多了入口。
②、对于硬链接文件,只有删除了源文件以及对应的所有硬连接文件,文件实体才会被删除。
③、根据硬链接文件的特点,我们可以通过给文件创建硬连接的方式来防止文件误删除。
④、不论修改源文件还是连接文件,另一个文件的数据都会被改变。
⑤、硬连接不能跨文件系统。
⑥、硬连接不能连接到目录。
2、什么是软连接?
符号连接类似Windows下的快捷方式,符号链接也叫做软连接,软连接要用的多。符号连接相当于创建了一个独立的文件,这个文件会让数据读取指向它连接的哪个文件的文件名。软连接的特点:
①、可以连接到目录。
②、可以跨文件系统。
③、删除源文件以后,软连接文件也就“打不开了”。
④、符号连接文件通过->来指示具体的连接文件。
⑤、符号连接要使用绝对路径,否则连接出问题。
二、实验
1、写一个简单的C程序,编译成一个可执行文件:
1 #include <stdio.h> 2 3 4 5 int main() 6 { 7 printf("Hello Linux!\r\n"); 8 return 0; 9 }
命令行输入:gcc hello.c -o hello
执行这个文件:
2、创建2个硬连接:
ln命令不带参数,默认就是创建硬连接,从上图可以看出,创建出来的硬连接(hello1和hello2)跟源文件(hello)的inode是一样的;
3、验证
3.1 验证硬连接的第②个结论:
删除掉源文件(hello),hello1和hello2还是可以正常执行:
由此可以验证硬连接的第②个结论。
3.2 验证硬连接的第④个结论:
创建一个目标文件为hello.c的硬连接:
修改源文件的内容:
由此可以验证硬连接的第④个结论。
3.3 验证软连接的第⑤个结论:
注意,上图是一个错误的示范,因为没有使用绝对路径,所以当hello1被复制到其他的目录下时,cp命令没有使用-d参数,其实它已经不是一个软连接了,由图中可以看到它的颜色从原来的蓝色变为绿色,所以它还可以执行成功
上图中创建软连接的方法才是正确的,应该加上绝对路径!输入ll -i hello*命令后看到软连接和源文件的inode是不一样的。
上图中的复制方式才是正确的,应该加上参数-d,这样复制到test1目录后,hello2还是蓝色的,是一个软连接。
3.4 验证软连接的第③个结论