cp 引发的思考
文章插图
cp 是啥 ? 是的,就是 linux 是 Linux 下最常用的命令之一,copy 的简写,小伙伴 100% 都用过 。
cp 命令处于 Coreutils 库里,是 GNU 项目维护的一个核心项目,提供 Linux 上核心的命令 。
今天用 cp 命令,把小伙伴惊到了,引发了我对其中细节的思考 。
背景是这样的,奇伢今天用 cp 拷贝了一个 100 GiB 的文件,竟然一秒不到就拷贝完成了 。一个 SATA 机械盘的写能力能到 150 MiB/s (大部分的机械盘都是到不了这个值的)就算非常不错了,所以,正常情况下,copy 一个 100G 的文件至少要 682 秒 ( 100 GiB/ 150 MiB/s ),也就是 11 分钟 。
sh-4.4# time cp ./test.txt ./test.txt.cpreal 0m0.107suser 0m0.008ssys 0m0.085s
上面是我们理论分析,最少要 11 分钟,实际情况却是我们 cp 一秒没到就完成了工作,惊呆了,为啥呢?并且还有一个更诡异的我文件系统大小才 40 GiB,为啥里面会有一个 100 G的文件呢?分析文件
我们先用 ls 看一把文件,显示文件确实是 100 GiB.
sh-4.4# ls -lh-rw-r--r-- 1 root root 100G Mar 6 12:22 test.txt
但是再用 du 命令看却只有 2M ,这是怎么回事?(且所在的文件系统总空间都没 100G 这么大)sh-4.4# du -sh ./test.txt2.0M ./test.txt
再看 stat 命令显示的信息:sh-4.4# stat ./test.txt File: ./test.txt Size: 107374182400 Blocks: 4096 IO Block: 4096 regular fileDevice: 78h/120d Inode: 3148347 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2021-03-13 12:22:00.888871000 +0000Modify: 2021-03-13 12:22:46.562243000 +0000Change: 2021-03-13 12:22:46.562243000 +0000 Birth: -
stat 命令输出解释:- Size 为 107374182400(知识点:单位是字节),也就是 100G ;
- Blocks 这个指标显示为 4096(知识点:一个 Block 的单位固定是 512 字节,也就是一个扇区的大小),这里表示为 2M;
- Size 表示的是文件大小,这个也是大多数人看到的大小;
- Blocks 表示的是物理实际占用空间;
这里先梳理下文件系统的基础知识,文件系统究竟是怎么存储文件的?(以 Linux 上 ext系列的文件系统举例)
文章插图
文件系统
文章插图
文件系统听起来很高大上,通俗话就用来存数据的一个容器而已,本质和你的行李箱、仓库没有啥区别 。只不过文件系统存储的是数字产品而已 。我有一个视频文件,我把这个视频放到这个文件系统里,下次来拿,要能拿到我完整的视频文件数据,这就是文件系统,对外提供的就是存取服务 。
现实的存取场景
就跟你在火车站使用的寄存服务一样,包裹我能存进去,稍后我能取出来,就可以了 。问题来了,存进去?怎么取?仔细回忆下存储行李的场景 。
存行李的时候,是不是要登记一些个人信息?对吧,至少自己名字要写上 。可能还会给你一个牌子,让你挂手上,这个东西就是为了标示每一个唯一的行李 。
文章插图
取行李的时候,要报自己名字,有牌子的给他牌子,然后工作人员才能去特定的位置找到你的行李(不然机场那么多人,行李都长差不多,他肯定不知道你的行李是哪个) 。
文章插图
推荐阅读
- Linux查看硬件信息超强命令sar,以及可视化工具ksar
- 微信正在用的深度学习框架开源!支持稀疏张量,基于C++开发
- PC电脑|5分钟开机上千台 无影云电脑免费体验1周:Win、Linux通吃
- linux内核SMP负载均衡浅析
- 浅谈在Linux中如何将脚本做成系统服务开机自启动
- 寒湿型肥胖喝什么茶,喝什么茶排寒湿深度好文
- Linux服务器磁盘满了怎么办
- 色相饱和度深度解析,photoshop明度观察层是什么?原理讲解
- linux安装php步骤详解
- 「linux专栏」top命令用法详解,再也不怕看不懂top了