什么是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来理解硬链接和软链接

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号码。

透过inode来理解硬链接和软链接

本文永久地址GitHub