为什么剪切比复制快?

为什么剪切比复制快?

本文基于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.txt1056459
world.txt1056554

对hello.txt进行复制操作

image-20210112121144328

对world.txt进行剪切操作

image-20210112121301169

操作之后的 inode

filenameinode
dest/hello.txt1056551
dest/world.txt1056554

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

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

类似于指针的应用吧

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

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

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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值