0


Linux的软链接与硬链接

Linux的软链接与硬链接

1,创建硬链接:

ln 默认创建的是硬链接

touch file1
ln filename1 h1
2,创建软链接:
ln-s file1 s1
ls -l

可以查看文件的硬链接数 和 字节数(文件大小)

3,软链接是什么

查看文件和查看它的软链接,内容是一样的,即

cat file1

cat s1

结果是一样的

可是软链接的大小并不是和原文件一样大,(用ls -l查看其字节数),因为它就是原文件的路径。

同样给file创建软链接file.s:
在这里插入图片描述
此时file.s大小为4字节:
在这里插入图片描述

ln -s ./file file.s2 

创建,其大小就是6字节:
在这里插入图片描述
如果把软链接file.soft放到别的目录下,

cat file.soft

会报错没有该目录。因为软链接的内容就是原文件的目录,在别的文件夹下,相当于在别的文件夹下面

cat ./file

,而那个文件夹下面并没有该文件。

windows里某个文件夹的快捷方式无论放在哪里都能打开到那个原文件夹(文件同理)。

Linux下想实现这种功能,那就得用绝对路径了:

ln-s 绝对路径 s3

该软链接的大小也变成13字节了:
在这里插入图片描述
注意,

~

是用户目录的缩写,虽然创建的时候用的它,但是由上面是13字节可以得知,软链接的内容并不是~/file,不然就是6字节了

所以其实软链接就是个特殊的文件,文件的内容是被链接文件的路径(相对路径还是绝对路径看自己咋创建的)

但是查看它的时候,却是被链接文件的内容。

4,软链接文件的权限

在这里插入图片描述
原文件的权限如上,而软链接文件是全开放的rwxrwxrwx,这个只是代表软链接文件自己的权限(任何人都可以访问这个软链接),但是原文件的权限还是原先的-rw-rw-r–,至于能不能通过这个软链接来对原文件进行读写和修改,还得看源文件的权限(硬链接的权限则和原文件一样)

5,硬链接是什么

给file创建一个硬链接file.h,用

ls -l

查看硬链接计数,文件file的硬链接计数起始值是1,现在变成2了

创建n个硬链接,那么硬链接计数是n+1;

对一个硬链接文件进行修改,其它文件也跟着变————这个在windows系统里没有类似机制

这个其实像指针,即多个指针指向同一个变量,可以通过指针来修改该变量。

其实就是文件系统里的

inode

,用

stat 文件名

可以查看inode,就是个编号,然后

每个硬链接的inode一模一样

,都是原文件的inode号:
在这里插入图片描述
所有修改某个硬链接,那直接是找到对应的inode去修改的

硬链接的文件权限,也就和原文件一模一样,删除一个硬链接

rm file.h -r

只是硬链接计数-1,只有当硬链接计数为0时,这个文件才能被删除

软链接的inode则和原文件不同,因为它是不同的文件:
在这里插入图片描述

关于inode:

inode(index node)是一个存储文件或目录元数据的数据结构。每个文件或目录在文件系统中都有一个唯一的inode,该inode包含了文件或目录的属性信息和指向文件数据块的指针:
当我们访问一个文件时,操作系统会根据文件路径找到相应的inode,然后通过inode中的指针找到文件的实际数据块。inode的存在可以提高文件系统的性能,因为它可以减少文件路径的查找时间,同时也方便了文件的管理和操作。
注意:inode只存储文件和目录的元数据信息,而不包含文件的实际内容。文件的实际内容存储在数据块中,inode中的指针指向这些数据块

6,做个小实验

vi创建一个文件file,写上hello word

对file创建一个软链接s1和两个硬链接h1、h2,然后把file移动到别的目录下,可以看到软链接那有警报,闪烁:
在这里插入图片描述
软链接的文件类型是l,这个是链接的意思,而硬连接的文件类型是-,即文件(ASCII或二进制):
在这里插入图片描述
具体的可以用

file h1

查看,是ASCII,如下:
在这里插入图片描述
此时file不在当前目录下了,那像前面说的,cat s1肯定会报错,因为s1就是文件的路径,相当于

cat 路径

,然后vim 打开s1,会创建新文件s1.。。。就像这个文件被删了一样。
在这里插入图片描述
但是查看硬链接却可以:
在这里插入图片描述
因为查看硬链接h1,就是查看inode=138896292指向的文件。这个时候用vim打开h1,查看到的也是和file一样的内容,是hello word,h1文件的大小也和file一样是11字节,因为他们三个都是指向同一个文件。

删除原文件file或移动,其软链接就会失效,因为该路径指向的文件不存在了;删除软链接则就是删除一个目录文件,对原文件毫无影响;

删除原文件file则会使得硬连接数-1,h1和h2依然能查看原文件内容(因为这三个是平等的,都是同一个inode),删除硬链接同理。
在这里插入图片描述

总结

在Linux系统中,硬连接和软连接(也称为符号链接或软链接)都是文件系统中用于创建链接的方式,但它们有一些区别。

硬连接(Hard Link):

  1. 硬连接是通过在文件系统中创建一个新的目录项,将其链接到已存在的文件上来实现的。
  2. 硬连接与原始文件共享相同的inode,它们在文件系统中被视为相同的文件。
  3. 当任何一个硬链接被删除时,原始文件和其他的硬链接都不会受到影响,只是硬链接计数-1。只有当所有的硬链接和原始文件都被删除时,文件的内容才会被释放。原文件删除也是硬链接计数-1,硬链接和原文件是等价的,都是同一个inode。它们实际上是同一个文件,只是文件名和路径不同。因此,对硬链接的修改会影响到原文件。

软连接(Symbolic Link):

  1. 软连接是创建一个指向目标文件或目录的特殊文件,它包含了目标文件的路径信息。
  2. 软连接与原始文件有不同的inode,它们在文件系统中被视为不同的文件。
  3. 当原始文件被删除或者移动时,软连接仍然存在,但是指向的目标文件将变为失效状态(因为软链接是原文件路径,此时会显示文件不存在)。删除软链接就是删除一个目录文件,对原文件毫无影响,它也没有软链接计数。

总结: 硬连接是文件系统中对同一个文件的多个链接,它们共享相同的inode和数据块,删除一个链接并不影响其他链接;而软连接是一个特殊的文件,它指向目标文件或目录的路径,删除或移动原始文件会导致软连接失效。硬连接不能跨越文件系统,而软连接可以跨越文件系统(一般一台linux是一个文件系统)。

注意文件权限:
硬链接的文件权限和原文件一样(毕竟共享同一个inode),而软链接则不是,它有自己的权限且默认是-rwxrwxrwx。通过软链接读的时候,权限是依据原文件的权限是否可读,而不是软链接文件本身(其本身是rwx全开)

问题:为什么有软链接了(快捷方式)还需要硬链接?

虽然软链接在某些方面更灵活,但硬链接也有其独特的优势。相对于软链接,硬链接占用的磁盘空间更小,因为它们共享相同的inode。另外,硬链接对于备份和恢复数据更方便,因为它们不会丢失或失效,即使目标文件或目录被删除


本文转载自: https://blog.csdn.net/mrqiuwen/article/details/131649090
版权归原作者 鱼在树上飞 所有, 如有侵权,请联系我们删除。

“Linux的软链接与硬链接”的评论:

还没有评论