Linux-inode和block概述
操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如Linux
操作系统的文件权限与文件属性。文件系统通常会将这两部分内容分别存放在inode
和block
中。
inode 和 block 概述
文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector
,每个扇区存储512字节
。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block
。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB
,即连续八个sector
组成一个block
。
文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode
,中文译名为索引节点
,也叫i节点
。因此,一个文件必须占用一个inode
,但至少占用一个block
。
- 元信息 → inode
- 数据 → block
inode 内容
inode
包含很多的文件元信息,但不包含文件名,例如:字节数、属主UserID
、属组GroupID
、读写执行权限、时间戳等。
而文件名存放在目录当中,但Linux
系统内部不使用文件名,而是使用inode号码
识别文件。对于系统来说文件名只是inode号码
便于识别的别称。
- 查看inode信息
stat 文件名
ls -i //直接查看文件的inode信息
- 查看文件类型
file 文件名
inode号码
表面上,用户通过文件名打开文件,实际上,系统内部将这个过程分为三步:
1.系统找到这个文件名对应的inode
号码;
2.通过inode
号码,获取inode
信息;
3.根据inode
信息,找到文件数据所在的block
,并读出数据。
其实系统还要根据inode
信息,看用户是否具有访问的权限,有就指向对应的数据block
,没有就返回权限拒绝。
硬链接与软链接
硬链接
通过文件系统的inode
链接来产生的新的文件名,而不是产生新的文件,称为硬链接。
一般情况下,每个inode
号码对应一个文件名,但是Linux
允许多个文件名指向同一个inode
号码。意味着可以使用不同的文件名访问相同的内容。
ln 源文件 目标
运行该命令以后,源文件与目标文件的inode
号码相同,都指向同一个inode
。inode
信息中的链接数这时就会增加1
。
当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名;但是删除一个文件名,不影响另一个文件名的访问。删除一个文件名,只会使得inode
中的链接数减1
。
需要注意的是不能对目录做硬链接。
通过mkdir
命令创建一个新目录,其硬链接数应该有2
个,因为常见的目录本身为1
个硬链接,而目录下面的隐藏目录.(点号)
是该目录的又一个硬链接,也算是1
个连接数。
软链接
类似于Windows的快捷方式功能的文件,可以快速连接到目标文件或目录,称为软链接。
ln -s 源文件或目录 目标文件或目录
软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。例如,文件A
和文件B
的inode
号码虽然不一样,但是文件A
的内容是文件B
的路径。读取文件A
时,系统会自动将访问者导向文件B
。这时,文件A
就称为文件B
的软链接soft link
或者符号链接symbolic link
。
这意味着,文件A
依赖于文件B
而存在,如果删除了文件B
,打开文件A
就会报错。这是软链接与硬链接最大的不同:文件A
指向文件B
的文件名,而不是文件B
的inode
号码,文件B
的inode
链接数不会因此发生变化。