Linux常用命令——详解软、硬链接

tech2024-08-01  47

文章目录

详解软、硬链接参考阅读前言一、硬连接二、软链接三、总结比较

详解软、硬链接

参考阅读

Linux基础命令大礼包

Linux的文件管理权限

前言

对于Linux中的软、硬链接的解释与说明,首先要从inode、block说起,这二者的背景在于Linux的ext4这个文件系统

ext4文件系统将分区分为两大部分

inode(i节点) 128Byte 时间戳、权限、大小、位置 block(块) 1、2、4KB 默认为 4KB block 用于实际的数据存储,存储时不一定按顺序的,每个文件都有一个inode号,一个block是存储空间的最小单位 索引号:通过索引号来对文件进行查找;可以理解为图书馆的图书分类与目录

注意:

在 inode 信息中,不记录文件名称,而是把文件名记录在上级目录的 block 中。

目录的 block :

​ 记录的是这个目录下所有一级子文件和子目录的文件名及 与node 的对应;

了解到以上的信息,下面开始详解软、硬链接文件的具体含义

一、硬连接

命令:

[root@localhost ~]# touch test #建立源文件 [root@localhost ~]# ln /root/test /tmp/test-hard #给源文件建立硬链接文件 /tmp/test-hard [root@localhost ~]# ll -i /root/test /tmp/test-hard 262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /root/test hard 262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /tmp/test-hard #查看两个文件的详细信息,可以发现这两个文件的 inode 号是一样的,"ll"等同于"ls -l"

以上命令是创建了硬链接,在文件系统中的结构如下图

详细步骤:

注意,在上图中省略了/目录到/下的root目录的迭代

迭代过程,每轮迭代的前提是要有权限访问 1、首先找到/的inode(根目录的inode是系统已知的,inode号是2),然后判断用户是否有权限访问根目录的block, 2、有,就可以在/的block中访问到/root的文件名及对应的inode号 3、通过/root/目录的inode号,可以查找到/root/目录的inode信息,接着判断用户是否有权限访问 /root/目录的block 4、有,则可以从/root/目录的block中读取到test文件的文件名及对应的inode号 5、通过 test 文件的 inode 号,就可以找到test文件的inode信息,接着判断用户是否有权限访问 test文件的block。 6、有,则可以读取 block 中的数据,这样就完成了 /root/test 文件的读取与访问 / 到 /root 到 /root/tmp 到 /root/tmp/test-hard的过程与上述过程完全一致

二、软链接

命令:

[root@localhost ~]# touch check #建立源文件 [root@localhost ~]# ln -s /root/check /tmp/check-soft #建立软链接文件 [root@localhost ~]# ll -id /root/check /tmp/check-soft 262154 -rw-r--r-- 1 root root 0 6月 19 11:30 /root/check 917507 lrwxrwxrwx 1 root root 11 6月 19 11:31 /tmp/ check-soft -> /root/check #软链接和源文件的 inode 号不一致,软链接通过 -> 明显地标识出源文件的位置 #在软链接的权限位 lrwxrwxrwx 中,l 就代表软链接文件

以上命令是创建了软链接,在文件系统中的结构如下图

详细步骤:

迭代过程,每轮迭代的前提是要有权限访问 1、首先找到/的inode,然后判断用户是否有权限访问根目录的block 2、有,就可以在/的block中访问到/tmp的文件名及对应的inode号 3、接着访问/tmp/目录的inode信息,判断用户是否有权限访问/tmp/目录的block 4、有,就会在block中读取到软链接文件check-soft的inode号,因为软链接文件会真正建立自己的 inode索引和block,所以软链接文件和源文件的 inode 号是不一样的 5、访问软链接block中指向真实文件的inode 至此完成从软连接文件到真实文件的访问 / 到 /root 到 /root/check的过程与上述过程完全一致 不做过多赘述,还是一个迭代的过程,前提是目录要有访问的权限

三、总结比较

不同: 硬链接不会建立自己的 inode 索引和 block(数据块),而是直接指向源文件的 inode 信息和 block,所以硬链接和源文件的 inode 号是一致的; 软链接会真正建立自己的 inode 索引和 block,所以软链接和源文件的 inode 号是不一致的,而且在软链接的 block 中,写的不是真正的数据,而仅仅是源文件的文件名及 inode 号 软链接可以链接目录文件、可以跨分区链接;硬链接是不可以的 相同: 修改任一链接文件,源文件也会被修改
最新回复(0)