为什么剪切比复制快?

为什么剪切比复制快?

为什么剪切比复制快?

本文基于linux环境进行介绍

回答这个问题之前,首选要明白几个概念

  • 文件是怎么存储的

  • 文件节点(inode),文件信息的保存(文件名,大小,创建时间,修改时间等信息)

文件是怎么存储的

为什么剪切比复制快?

文件存储在硬盘上,硬盘的最小存储单位叫做扇区(sector)。每个扇区存放 512 字节即 0.5 Kb.

操作系统在读取硬盘的时候,会一次性连续读取多个扇区以提高效率。一般是连续读取 8 个扇区,即一次性读取一个块(block)。

文件都存储在块中

为什么剪切比复制快?

那么还需要一个 inode 来记录文件的相关信息。

inode

使用stat命令查看inode保存的信息

stat hello.txt

为什么剪切比复制快?

核心信息

  • 文件名,文件字节数

  • 文件拥有者,所属组

  • 文件的读写可执行权限

  • Inode号码

  • 文件创建时间修改时间等

在linux下,使用的是inode去识别文件的唯一性

ls -i [filename]

为什么剪切比复制快?

可以看到 hello.txt 是 1056459,world.txt inode 是 1056554.

对于系统而言,文件名只是 inode 号码便于识别的一个绰号,类似于 ip 与域名的关系

用户通过文件名打开文件的过程

  • 系统找到这个文件名对应的 inode 号码

  • 通过 inode 号码,获取 inode 信息

  • 根据 inode 信息,找到文件数据所在的块,进而读取数据

 

从操作系统层面看剪切与复制的差别

注:

源文件放在 source 文件夹

剪切和复制的文件放在 dest 文件夹中

为什么剪切比复制快?

文件名 inode
hello.txt 1056459
world.txt 1056554

对hello.txt进行复制操作

为什么剪切比复制快?

对world.txt进行剪切操作

为什么剪切比复制快?

操作之后的 inode

filename inode
dest/hello.txt 1056551
dest/world.txt 1056554

发现了区别,对文件进行剪切之后文件的 inode 是没有变化的

即在硬盘下的块是同一块区间

类似于指针的应用吧

然而复制之后 inode 的值是不一样的

相当于重新在硬盘上开辟了一个区间去存储

肯定是很慢的,尤其是当文件特别大的时候

【注】从 inode 层面可以更好的去理解硬链接和软链接。有兴趣的可以自己去探究探究!

上一篇:Linux系统inodes资源耗尽问题


下一篇:Java中高级核心知识全面解析——初探Linux&Linux文件系统概览(什么是Inode&Linux目录树)