社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
在Linux中文件存储分为两个部分:
1. 数据块:保存文件中存储的数据
2. 索引节点( inode ):存储文件的大小、创建日期、读写权限等信息(文件元数据)
inode包括:
- 文件数据block的位置
- 文件的字节数
- 文件拥有者的User ID
- 文件的Group ID
- 文件的读、写、执行权限
- 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
- 链接数,即有多少文件名指向这个inode
每一个inode有自己唯一的inode号,可以通过ls -i显示
文件名对inode号来说只是一个绰号,一个inode号可以有多个绰号或者说是别名。
1. 为test文件创建硬链接如下:
shell-test:/u/nanaal/shell$ cp -l test test1
shell-test:/u/nanaal/shell$ ln -l test test2
shell-test:/u/nanaal/shell$ ls -li
total 12
4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test
4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test1
4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test2
命令ls显示的第一列为文件索引,在文件系统每个文件都有一个唯一的索引值。从上面的信息可以知道,test、test1、test2共享一份文件,且链接计数为3(ls显示结果的第三列)。根据上面信息,硬链接可表示为:
Note:
硬链接的所有文件必须在一个硬盘上,如test在磁盘/dev/sda1上面,那么test1和test2也必须在/dev/sda1上面。
硬链接相当于一个文件的别名
硬链接有如下特点:
2. 为test文件创建软链接如下:
shell-test:/u/nanaal/shell$ cp -s test test3
shell-test:/u/nanaal/shell$ ln -s test test4
shell-test:/u/nanaal/shell$ ls -li
total 12
4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test
4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test1
4298659818 -rw-rw-r--. 3 nanaal nanaal 6 Apr 19 06:24 test2
4298103063 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test3 -> test
4304030281 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test4 -> test
从ls命令的输出结果可以看到, test3和test4的文件索引值均与test的索引值不同,即test3和test4均是新的文件,但是文件大小比test小,且链接计数为1. 软链接文件test3、test4只保存了源文件test的文件信息,并没有对test文件指定的数据进行拷贝。根据上面信息,软链接可表示为如下:
Note:
软链接的所有文件可以保存在不同的磁盘上。如test在磁盘/dev/sda1上面,test3和test4可以保存在/dev/sda2上面。
软链接是一个普通的文件,拥有自己独立的inode号以及数据块,只不过软链接的数据块中存储的是源文件的路径
类似于windows中的快捷方式
软连接有如下特点:
修改文件
1) 修改源文件test
2) 修改硬链接文件test1或test2
3) 修改软链接文件test3或test4
修改上面的文件,会发现所有的文件均跟着修改了,这个方面,软链接和硬链接没有区别。
删除文件:删除软硬连接,都不影响其他链接阅读。但删除源文件,会影响软连链接阅读,硬链接不影响
1) 删除硬链接文件
shell-test:/u/nanaal/shell$ rm -rf test1
shell-test:/u/nanaal/shell$ ls -li
total 8
4298659818 -rw-rw-r--. 2 nanaal nanaal 6 Apr 19 06:24 test
4298659818 -rw-rw-r--. 2 nanaal nanaal 6 Apr 19 06:24 test2
4298103063 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test3 -> test
4304030281 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test4 -> test
从ls的输出可以看到,删除文件test1后,test和test2的链接计数由3变成了2. 文件test和test2可以正常阅读。
2) 删除软链接文件
shell-test:/u/nanaal/shell$ ls -li
total 8
4298659818 -rw-rw-r--. 2 nanaal nanaal 6 Apr 19 06:24 test
4298659818 -rw-rw-r--. 2 nanaal nanaal 6 Apr 19 06:24 test2
4304030281 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test4 -> test
从ls的输出来看,删除文件test3,对其他文件没有任何影响。且文件test和test4可以正常阅读。
3) 删除源文件
shell-test:/u/nanaal/shell$ rm -rf test
shell-test:/u/nanaal/shell$ ls -li
total 4
4298659818 -rw-rw-r--. 1 nanaal nanaal 6 Apr 19 06:24 test2
4304030281 lrwxrwxrwx. 1 nanaal nanaal 4 Apr 19 06:43 test4 -> test
从ls的输出可以看出,删除文件test后,test2的链接计数由2变为1,可以阅读。
文件test4属性没有任何变化,但是已经不能阅读。
硬链接和软链接在这点的不同,可以表示如下:
总结:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!