Linux中inode详解,硬链接和软链接介绍

inode 详解

  在Linux中,我们经常会做一些关于数据的操作(备份、传输、压缩等)或是要在后台持续的运行一些程序。由于,工作的数据量很大或者工作要持续很长的时间,我们就必须保证这个终端的启动,一旦终端关闭了,它所运行的进程也会关闭,我们所做的工作就可能前功尽弃。但是,即使我们不主动的关闭终端,终端有的时候也会应为一些原因(网络、锁屏等)而中断,导致我们的工作进度清零。

1.inode 定义

inode是用来存储文件元信息的区域。中文译名叫做“索引节点”。

  简单来说,inode 指示了一个文件的基本信息,如inode编号、修改时间、文件的位置等,就如同一本书的目录,会直接告诉你想看的章节是在第几页。不同的是,书是以页为单位的,而 linux 文件存取是以“块”为单位的。
操作系统在读取硬盘的时候,会一次性读取一个“块”(一个“块”的大小往往是4kb,包含了连续8个扇区,每个扇区存储512个字节)。而inode就告诉了文件位于哪个“块”,于是系统就会从这个“块”开始读取内容,我们就可以看到这个文件的内容。
每个文件都有对应的inode,存储着关于这个文件的基本信息。linux 系统不使用文件名,而使用 inode 号来识别文件。对于使用者,我们是通过文件名打开的文件;但是对于系统内部,是分为三步的:

  1. 系统找到这个文件名对应的 inode 号
  2. 通过 inode 号,获取 inode 信息
  3. 根据 inode 信息,找到文件数据所在的 block,读取内容

2.inode 内容

inode 包含了文件的以下基本信息:

  • 文件的字节数
  • inode 编号
  • 文件拥有者的 Uid
  • 文件所属group的 Gid
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:
    change:inode 上一次变动的时间
    modify:文件内容上一次变动的时间
    access:文件上一次打开的时间
  • 链接数,即有多少文件名指向这个 inode
  • 文件数据 block 的位置

查看inode内容可以使用命令:stat -i 和 ls -i

3.目录原理

  要理解文件的操作对 inode 的影响,先要理解目录的原理。目录对外表现是一个容器,存放着子文件和子目录,实际上在系统内部,目录本身也是一个文件,目录文件的内容即是该目录下的文件名与 inode 号的映射表(即一个个的目录项)。因此,linux 访问一个文件时,要先查询到上一级目录,根据目录内容查找到文件对应的 inode 号,然后读取对应的 block。

4.文件操作原理

cp命令

  1. 分配一个空闲的inode号,inode表中新增一条索引记录
  2. 在目录中新建一个目录项,并指向步骤一中的inode号关联
  3. 将数据复制到block中

rm命令

  1. 减少要删除文件链接数,如果链接数变为0,则释放inode号
  2. 数据block放到空闲列表中
  3. 删除目录项
    (数据文件不会马上删除,当新的文件覆盖数据块,则数据删除,若没有覆盖,则还可以恢复)

mv命令

如果源文件和目标文件在一个文件系统

  1. 目标文件目录中新建目录项
  2. 源文件目录中的目录项
  3. 目标文件名指向inode记录
    (inode记录没有影响(除时间戳),数据位置没有变化)

    如果目标文件和源文件属于不同文件系统,则相当于 cp + rm。

ln命令

硬链接

  一般情况下,文件名和 inode 号是一一对应,但是也有可能多个文件名指向同一个 inode 号,即硬链接。硬链接可以实现用不同的文件名访问同一个文件。

软链接

  软链接也可以通过不同的文件名访问同一块数据,但是与硬链接不同的是,两个文件名的 inode 是不一样的。那如何访问同一块区域呢?比如文件 A 是文件 B 的软连接,那么文件 A 的内容存放的是文件 B 的路径名(可以通过这个找到文件 B 的目录项)。因此访问 A 时,会读取文件 B 的路径,进而读取文件 B 的内容。这样,对外表现来看,文件 A 和文件 B 的内容就相同了。类似于 windows 系统下的快捷方式。

创建软链接语法:
ln -s [source file] [new file]

  在生产环境中,创建软链接一般选择相对路径,这样在数据整体迁移中,软链接保持相对关系不受根目录影响。特殊需要强调的是:源文件路径是相对于新链接文件的相对路径,不是相对当前工作目录的相对路径

例如:

硬链接与软链接的区别

  1. 本质不同,硬链接指向同一个文件,软链接指向文件不同
  2. 跨分区,硬链接不支持跨分区,软链接可以跨分区
  3. inode编号,硬链接inode编号相同,软链接inode编号不同
  4. 目录,硬链接不支持目录,软链接可以对目录创建
  5. 创建硬链接时,链接数加1,创建软链接时,链接数不变
  6. 硬链接属于平等关系,软链接属于依赖关系,删除原文件效果不同

本文参考文章
作者:HappyRocking
来源:CSDN
原文:https://blog.csdn.net/HappyRocking/article/details/80671997
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.51cto.com/14322522/2395294