【Linux】软连接与硬连接

软连接和硬连接

文件和目录的基本存储

每个分区都可以理解为分成两部分,一小部分里边是存放文件的i节点信息,大部分放的是Block文件块。

在文件的i节点当中保存的信息有:i节点号,时间,权限,保存位置。而Block块中保存的是文件中的数据。

每个文件夹中都会有i节点和对应的Block文件。

但是有一个问题,一个文件的文件名是存放哪里?

我们就以在文件夹root中有一个文件abc为例。文件路径为/root/abc

root目录中,所有的文件都有i节点名和对应的Block块,而root目录也有自己的i节点信息。有i节点信息,就有与之对应的Block块,root目录的Block块中存放的数据是root目录下所有的子文件和子目录的文件名,和它对应的i节点号。

也就是说,root目录下文件的文件名,没有写在该文件的i节点里。而是写在上级目录的Block块中。
如果我要查找abc文件的文件名,要先找到root文件夹的i节点,然后在root目录的Block块中找到abc的文件名和对应的i节点号才能找到。通过abc文件的i节点号最终读取到abc文件中的数据。

root目录的文件名或者说是i节点存储在哪里?

root目录是在根目录下的,根目录会有自己的i节点信息,也会有自己的Block,综上所述,那root目录的文件名和i节点号的信息是放在根目录的Block块中的。
那根的i节点号怎么获取?

根的i节点号是固定的,根的i节点号为2。(因为编号1在系统内核加载的时候被占用了)

[root@localhost ~]# ls -ild /``2 dr-xr-xr-x. 25 root root 4096 12月 27 22:27 /``第一位显示的就是i节点号。

综上所诉,要查看abc文件的内容,就先用通过根的i节点号,读取根的Block块中数据,找到root目录的i节点信息,读取root目录的Block块中数据,找到abc文件的i节点信息,读取abc文件的Block块中数据。
以上就是文件和目录的基本存储

ln

ln英文原意:make links between file所在路径:/bin/ln执行权限:所有用户。功能描述:在文件之间建立链接。

硬连接

源文件和硬链接文件拥有相同的InodeBlock。修改任意一个文件,另一个都改变。删除任意一个文件,另一个都能使用。硬链接标记不清,很难确认硬链接文件位置(很难确定这是一个硬连接文件,自己创建的还可能记住,要是别人创建的,我根本无法判定一个文件是硬连接文件),不建议使用。硬链接不能链接目录。硬链接不能跨分区(因为两个文件需要同一个分区的同一个i节点号。所以跨分区找不到)。

## 创建一个文件test.log 
[root@localhost src]# echo 666 > test.log

## 创建一个硬连接
[root@localhost src]# ln test.log test1.log
[root@localhost src]# ls -li
总用量 8
36251071 -rw-r--r-- 2 root root 4 1011 21:07 test1.log
36251071 -rw-r--r-- 2 root root 4 1011 21:07 test.log

## 查看文件内容
[root@localhost src]# cat test*
666
666

## 修改连接中的源文件test.log
[root@localhost src]# echo 666 >> test.log
[root@localhost src]# cat test1.log 
666
666

## 验证文件inodeID,和文件大小,完全一样
[root@localhost src]# ls -li
总用量 8
36251071 -rw-r--r-- 2 root root 8 1011 21:08 test1.log
36251071 -rw-r--r-- 2 root root 8 1011 21:08 test.log

## 删除掉硬连接源文件,验证连接文件是否正常
[root@localhost src]# rm -f test.log 
[root@localhost src]# ls -l 
总用量 4
-rw-r--r-- 1 root root 8 1011 21:08 test1.log
[root@localhost src]# cat test1.log 
666
666
## 连接文件正常访问inode也不变

软连接

软链接和源文件拥有不同的InodeBlock。两个文件修改任意一个,另一个都改变。删除软链接,源文件不受影响;删除源文件,软链接不能使用,因为软链接没有实际数据,只保存源文件的Inode,不论源文件多大,软链接文件大小不变。软链接的权限是最大权限lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限。软链接可以链接目录,软链接可以跨分区。软链接特征明显,建议使用软连接。

## 创建软连接的源文件测试使用
[root@localhost src]# echo 777 > test.log
[root@localhost src]# ls -li
总用量 8
36251071 -rw-r--r-- 1 root root 8 1011 21:08 test1.log
36259072 -rw-r--r-- 1 root root 4 1011 21:19 test.log
###  这里有个细节,新建的test.log 与上个实验的硬连接的inodeID 不同,证明是两个文件

## 创建软连接test_soft.log
[root@localhost src]# ln -s test.log test_soft.log
[root@localhost src]# ls -li
总用量 8
36251071 -rw-r--r-- 1 root root 8 1011 21:08 test1.log
36259072 -rw-r--r-- 1 root root 4 1011 21:19 test.log
36259073 lrwxrwxrwx 1 root root 8 1011 21:19 test_soft.log -> test.log
### 这里也有细节,生成的软连接的inodeID与源文件id不同


## 验证软连接生成文件内容
[root@localhost src]# cat test_soft.log 
777

## 修改软连接源文件
[root@localhost src]# echo 777 >> test.log
[root@localhost src]# cat test.log 
777
777

## 软连接也跟着改变
[root@localhost src]# cat test_soft.log 
777
777

## 删除软连接源文件,软连接无法使用
[root@localhost src]# rm -f test.log 
[root@localhost src]# ls -li
总用量 4
36251071 -rw-r--r-- 1 root root 8 1011 21:08 test1.log
36259073 lrwxrwxrwx 1 root root 8 1011 21:19 test_soft.log -> test.log
[root@localhost src]# cat test_soft.log 
cat: test_soft.log: 没有那个文件或目录
[root@localhost src]# ls -li
总用量 4
36251071 -rw-r--r-- 1 root root 8 1011 21:08 test1.log
36259073 lrwxrwxrwx 1 root root 8 1011 21:19 test_soft.log -> test.log
[root@localhost src]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值