欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux硬连接和软连接详解

程序员文章站 2022-05-10 18:11:31
...

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的文件系统原理,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