linux文件系统inode/硬连接与软链接

本文详细介绍了inode的概念、内容及其在文件系统中的作用。包括inode的大小、inode号码、目录与inode的关系、硬链接与软链接的区别等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章转自以下作者,后加入我自己对原文章的理解
理解inode
作者:阮一峰
http://www.ruanyifeng.com/home.html 作者主页
http://www.ruanyifeng.com/blog/2011/12/inode.html 原文
PS:这个作者的主页里有很多不错的文章,可以去瞧一瞧

一、inode是什么?

硬盘上最小的存储单位是扇区(Sector),每个扇区512字节,每8个扇区为一个块(block),块是文件存取的最小单位。

数据存在硬盘上,需要有一块空间来存储某一个文件对应到硬盘的哪一"块"上,这个存文件信息的区域就叫inode,中文"索引节点"。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

二、inode的内容

   * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置

可以用stat命令,查看某个文件的inode信息:

stat debug.txt

在这里插入图片描述

3.inode大小

  • 操作系统给硬盘分区时分成两个区,一个是数据区,一个是inode区,存放inode所包含的信息。
  • 每个inode节点的大小一般为128/256,格式化时一般每1KB/2KB就设置一个inode。
  • 假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode
    table的大小就会达到128MB,占整块硬盘的12.8%。
  • 查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令:df -i
  • 由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

4.inode号码

每个inode都有一个号码,操作系统用inode码来识别不同的文件。
系统打开一个文件的过程:

1.通过文件名找到对应的inode号
2.通过inode号获得inode信息
3.根据inode信息里文件所在的位置,读出数据

5.目录也是文件

  • 目录也是一个文件,打开一个目录,实际上是打开一个目录文件
  • 目录文件的结构很简单,就是一系列的目录项(dirent 在我另一篇博文里有介绍:
    https://blog.youkuaiyun.com/qq_22655017/article/details/97124118
    这里粗略的介绍一下:
    dirent里面包含一个文件(目录)的inode号、名字字符串、文件在目录的偏移、文件名字的长度等)
  • 简单说dirent里包含了文件的文件名和文件名对应的inode
  • 这些目录项加起来就可以理解成这个目录里所有的文件(或者子目录)了

重要:至此就可以理解目录的权限:

  • 目录的读权限和写权限是对目录文件本身而言,目录文件内只有一堆dirent,即文件目录里只有一堆其目录里的文件名和文件名对应的inode
  • 读取inode节点内的信息需要目录文件的执行权限
  • 举例:当一个目录只有读权限时,也就是说其只能向它所指的那一块空间中读数据,也就能读出来它目录里的文件的名字,其他任何信息都没有,因为读inode节点的信息需要这一级目录的执行权限。

6.硬连接

如上所述,inode中有一个变量是存放链接数的,这个链接数指的就是硬链接数。

  • linux下,可以有多文件名指向同一个inode,这个文件名就叫硬连接

  • 每多一个文件名指向inode,inode的链接数就会加1;每删除一个文件的文件名,inode的链接数会减1,直到减到0时会将该inode号释放,接下来其他文件就可以指向这个inode存放其他文件的信息了。

  • 命令: ln 源文件 目标文件
    运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。

  • 创建目录时,默认会生成两个目录项:".“和”…"。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)

7.软链接

文件A的内容是文件B的路径,文件A就是文件B的软链接,也叫符号连接,类似于windows下的快捷方式。

  • 添加删除软链接时不会对inode里的链接数发生改变
  • 如果删除文件B,打开文件A时就会报错,而不像硬连接,删除任意一个都不会影响文件的存在与否
  • 创建软链接的命令:ln -s 源文件或目录 目标文件或目录

8.inode的特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象:

  • 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
  • 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  • 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
  • 第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值