什么是inode?
每个文件都对应一个仅有的inode,inode用来存储文件的元信息,包含:
- 对应的文件
- 文件字节数
- 文件数据块的位置
- 文件的inode号码
- 文件的硬链接数
- 文件的读写权限
- 文件的时刻戳
在Linux体系下,创立一个文件hello.txt
echo 'hello world' -> 'hello.txt'
接着运用stat指令检查hello.txt
的inode信息:
stat hello.txt
文件:hello.txt
大小:14 块:8 IO 块:4096 一般文件
设备:fd00h/64768d Inode:34025713 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-08-18 15:44:56.158501724 +0800
最近更改:2022-08-18 15:44:56.158501724 +0800
最近改动:2022-08-18 15:44:56.158501724 +0800
创立时刻:2022-08-18 15:44:56.158501724 +0800
inode和文件名
操作体系运用inode号码来辨认文件,而人运用文件名来辨认文件
人在翻开文件的时分,文件体系实际上是先经过文件名找到对应的inode号码,然后依据inode号码找到文件inode信息,依据inode信息找到文件内容所在的数据块,最终读取数据。
硬链接
文件和inode的联系是一对一,而文件名和inode的联系则是一对多,体系允许多个文件名对应一个inode
inode信息中的硬链接(Links)数,就表明当前有几个文件名对应着该inode,换句话说,每个文件名便是文件的一个硬链接
增加硬链接
运用ln指令为hello.txt
生成一个硬链接,格局:ln 源文件名 硬链接文件名
ln hello.txt hello-hard-link.txt
再用stat hello.txt
检查源文件的硬链接数,值从1变为2
删除硬链接
rm -f hello-hard-link.txt
再次检查硬链接数,值从2变为1
当一个文件的硬链接大于1时,删除一个硬链接(也便是文件名),不会影响源文件,只有当硬链接数等于0,体系才会删除源文件
修正源文件
修正源文件内容,会影响所有硬链接,由于硬链接都是指向同一个源文件的数据块
软链接
软链接也叫符号链接,很好了解,能够了解为window体系里的快捷方式
先创立一个硬链接:
ln hello.txt hello_hard_link.txt
然后,创立一个软链接:
ln -s hello.txt hello_s.txt
此时,文件hello.txt
有2个硬链接和1个软链接,接下来,删除刚刚用来创立软链接的文件名hello.txt:
rm -f hello.txt
这个时分,翻开文件hello_s.txt
就会报错“No such file or directory”。
方才仅仅删除了一个文件名,并没有影响到源文件,可是经过软链接翻开文件却报错了,并不是由于源文件不存在了,而是由于软链接指向的硬链接被删除了。
这便是软链接和硬链接的差异,软链接指向的是文件名(也便是硬链接),硬链接指向的是文件的inode号码。
本文永久地址GitHub