Linux硬连接和软连接详解

时间:2022-07-23
本文章向大家介绍Linux硬连接和软连接详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Lnux也有类似于windows下的快捷方式,这种快捷方式在linux下称作硬连接(hard link)或软连接(symbolic link,又称作符号链接)。

创建链接文件 创建linkfile.txt文件

[root@localhost tmp]# touch linkfile.txt
[root@localhost tmp]# echo 'testlink' > linkfile.txt 

创建硬连接

[root@localhost tmp]# ln linkfile.txt hardlink

创建软连接

[root@localhost tmp]# ln -s linkfile.txt softlink

读取文件内容,可以看出三个文件的内容都是一样的

[root@localhost tmp]# cat hardlink 
testlink
[root@localhost tmp]# cat softlink 
testlink
[root@localhost tmp]# cat linkfile.txt 
testlink

通过链接文件修改文件内容

[root@localhost tmp]# echo 'testlink2' >> hardlink 
[root@localhost tmp]# cat linkfile.txt 
testlink
testlink2
[root@localhost tmp]# echo 'testlink3' >> softlink 
[root@localhost tmp]# cat linkfile.txt 
testlink
testlink2
testlink3

可以看出,通过修改链接文件内容,源文件的内容也发生了改变。这就是链接文件的作用,链接文件基本上代表了源文件,通过链接文件可以查看修改源文件内容,也可以通过链接文件修改源文件属性等等。

硬连接和软连接有什么不同? 实际上软连接更接近windows的快捷方式,可以看下面的操作。

我将源文件给删除了,通过硬连接依然可以读取文件内容,软连接则显示文件不存在(源文件被删除,软连接文件的颜色都发生了改变)。这就奇怪了,源文件都删除了,为啥还可以读取文件内容?这涉及到linux的文件系统原理,linux中一个文件是由inode和block来存储的,block中存放文件内容,inode存放文件属性和block的位置。当用户读取文件内容的时候,系统会先找到该文件对应的inode,从inode中获取该用户是否有权限读取文件内容,如果有权限,则通过inode中存放的block位置找到相应的block,获取文件的内容。我这里只是简单的介绍linux的文件系统,详细内容推荐去看下linux相关书籍。

我们再重复最开始的操作,创建源文件,创建链接文件。

[root@localhost tmp]# rm -rf testlink.txt 
[root@localhost tmp]# rm -rf hardlink 
[root@localhost tmp]# rm -rf softlink 
[root@localhost tmp]# touch testlink.txt
[root@localhost tmp]# ln testlink.txt hardlink
[root@localhost tmp]# ln -s testlink.txt softlink
[root@localhost tmp]# ll -i testlink.txt hardlink softlink 
50801629 -rw-r--r-- 2 root root  0 Nov 16 15:54 hardlink
50801663 lrwxrwxrwx 1 root root 12 Nov 16 15:54 softlink -> testlink.txt
50801629 -rw-r--r-- 2 root root  0 Nov 16 15:54 testlink.txt

其中ll -i 指令可以查看文件的inode(第一列为inode编号)。可以看到hardlink和testlink.txt对应的是同一个inode,而softlink则占用了另外一个inode。软连接是指向源文件的,所以当删除源文件后,由于无法找到源文件的inode,自然就无法读取源文件的内容。但是对于硬连接来说,硬连接和源文件共享同一个inode,删除了源文件,inode和对应的block并没有被删除,所以依然可以通过硬连接来读取源文件的内容。

这样看来,硬连接貌似更安全。删除了源文件,依然可以通过硬连接来查看源文件的内容。但是由于硬连接的限制比较多,比如不能给文件夹创建硬连接。所以实际上,软连接用得更多一些。

给文件夹创建软连接

[root@localhost tmp]# mkdir dirlinktest
[root@localhost tmp]# ln dirlinktest/ dirhardlink
ln: ‘dirlinktest/’: hard link not allowed for directory --不允许给文件夹创建硬连接
[root@localhost tmp]# ln -s dirlinktest/ dirsoftlink