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

文章目录

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

详解软、硬链接

Linux常用命令——详解软、硬链接_第1张图片

参考阅读

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"

以上命令是创建了硬链接,在文件系统中的结构如下图Linux常用命令——详解软、硬链接_第2张图片

详细步骤:

注意,在上图中省略了/目录到/下的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 就代表软链接文件

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

Linux常用命令——详解软、硬链接_第3张图片

详细步骤:

迭代过程,每轮迭代的前提是要有权限访问
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 号
	软链接可以链接目录文件、可以跨分区链接;硬链接是不可以的

相同:
	修改任一链接文件,源文件也会被修改

你可能感兴趣的:(服务器运维—Linux,linux,软链接,硬链接)