玩弄linux

为什么剪切比复制快?

为什么剪切比复制快?

本文基于linux环境进行介绍

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

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

文件是怎么存储的

在这里插入图片描述

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

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

文件都存储在块中

在这里插入图片描述

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

inode

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

stat hello.txt

image-20210112111158651

核心信息

  • 文件名,文件字节数
  • 文件拥有者,所属组
  • 文件的读写可执行权限
  • Inode号码
  • 文件创建时间修改时间等

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

ls -i [filename]

image-20210112111908034

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

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

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

  • 系统找到这个文件名对应的 inode 号码
  • 通过 inode 号码,获取 inode 信息
  • 根据 inode 信息,找到文件数据所在的块,进而读取数据

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

注:

源文件放在 source 文件夹

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

image-20210112112938569

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

对hello.txt进行复制操作

image-20210112121144328

对world.txt进行剪切操作

image-20210112121301169

操作之后的 inode

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

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

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

类似于指针的应用吧

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

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

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

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

linux必知必会知识点

上一篇

云计算

下一篇

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

个人微信公众号

we-tuiguang

qq交流群

群号:1046260719

微信扫一扫

微信扫一扫