网安知识系列&运维系列:Linux平台大文件生成和处理方法_notepad打开二进制

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
img

正文

[root@localhost 73]# yes "This is my test file" | head -c 10G > yesfile
[root@localhost 73]# du -h yesfile
10G     yesfile

[root@localhost 73]# time yes "This is my test file" | head -c 10G > yesfile

real    0m6.635s
user    0m0.882s
sys     0m9.645s

为了查看使用yes创建大文件的速度,我们这里通过time命令量测yes指令执行时所需消耗的时间及系统资源,从结果可以看出,yes命令创建一个10G的文件花费了 9.6 秒,比dd命令慢一些。

3、fallocate
fallocate

命令表示为文件预先分配或取消分配空间。

语法如下:
fallocate -l [size of file] [name of file]

-l选项表示文件大小,单位是字节,后面可以接KKBMMBGGB等单位

如下示例是使用fallocate命令是创建一个10G大小的文件
[root@localhost 73]# time fallocate -l 10G falfile

real    0m0.027s
user    0m0.000s
sys     0m0.001s
[root@localhost 73]# du -h falfile
10G     falfile

这里通过time命令量测fallocate指令执行时所需消耗的时间及系统资源,从结果可以看出:
fallocate命令创建一个10G大小的文件竟然只花费了 0.001 秒,速度可谓是极快的。

4、truncate
truncate

命令表示将文件的大小缩小或扩展到指定的大小。

语法如下:
truncate -s [file-size] [name of the file]

-s选项表示文件大小,单位是字节,跟fallocate命令一样,后面可以接KKBMMBGGB等单位

如下示例为使用truncate命令创建一个10G大小的文件。
[root@localhost 73]# time truncate -s 10G trunfile

real    0m0.025s
user    0m0.000s
sys     0m0.001s

#查看文件实际占用磁盘空间大小
[root@localhost 73]# du -h trunfile
0       trunfile

#查看文件显示大小(逻辑大小)
[root@localhost 73]# ll -h trunfile
-rw-r--r-- 1 root root 10G Jul  3 04:41 trunfile

这里通过time命令量测fallocate指令执行时所需消耗的时间及系统资源,从结果可以看出,truncate命令创建一个10G的文件也只花费了 0.001 秒,和fallocate
基本一样。但是,du -h trunfile命令的结果显示trunfile大小为 0

原因是 truncate 命令 创建的是一个稀疏文件(空洞文件)而不是实际的文件 ,稀疏文件不会占用实际的磁盘空间,文件只是看上去逻辑大小比较大,但实际占用空间却是0

提示:

ls显示文件的“逻辑上”的size, 这不是文件真正占用磁盘空间大小,这部分空间也会被其他进程使用du显示文件“物理上”的size,即du显示的size是文件在硬盘上占据了多少个block计算出来的

注意:

fallocate命令只支持btrfsext4ocfs2xfs这几种文件系统,而truncate命令支持所有的现代文件系统。

二、优劣分析

对比上述不同命令创建10G的文件的差异,尤其是生成速度方面,比较如下:

  • dd 5.1秒
  • yes 9.6秒
  • fallocate 0.001秒
  • truncate 0.001秒

根据上述结果可知,不同命令创建文件的速度方面相差了几千倍,为什么会有如此大的差距呢?我想可能在于以下区别:

  • dd 需要进行写文件操作,进行大量的IO
  • yes 需要进行写文件操作,进行大量的IO
  • fallocate 将空间分配给文件,但不会写入任何数据到文件中
  • truncate 创建的是稀疏文件,不会写入任何数据到文件中

ddyes都有写文件操作,而这需要大量的 IO 时间,所以同样创建10G的文件,它们比fallocatetruncate要慢很多。

如果对生成文件的速度没有很高的要求且对内容无要求的情况下首选dd,如果希望自定义文件内容的话,则使用yes

如果想快速地生成超大文件,比如 1 秒内创建一个 100G 的文件,选择fallocatetruncate,如果还需要确保文件是实际占用磁盘空间的话,则只能选择fallocate。大部分情况下,fallocate都能满足要求,因此,Linux中生成大文件时,建议使用fallocate命令。

三、大文件处理
在Linux下
vim、cat

打开超大文件,受到内存硬件原因,往往会遇到打不开或者内存使用过高导致卡机问题。针对Linux大文件处理一般通过Linux提供的命令split切割成小文件再进行处理。

1、文件分割

针对大文件处理,Linux系统提供了split 工具将大文件切分为多个小文件,以方便通过vi,cat等命令进一步处理。既然要生成多个小文件,必然要指定切分文件的单位,支持按行切分以及按文件大小切分,另外还需解决小文件命名的问题。例如,文件名前缀、后缀。如果未明确指定前缀,则默认的前缀为”x”。

语法如下:
split [选项]... [待分割的文件 [小文件的前缀]]

选项含义如下:
  • -a: 指定输出文件名的后缀长度(默认为2个:aa,ab…)
  • -b:指定每一输出文件的大小,单位为 byte
  • -C:每一输出文档中,单行的最大 byte
  • -d:使用数字作为后缀
  • -l:行数分割模式(指定每多少行切成一个小文件;默认行数是1000行)
示例如下:
#行切割文件且使用数字后缀
[root@localhost test]# split -l 50000000 -d -a 3 yesfile yesfile\_
[root@localhost test]# ls -l
total 20971536
-rw-r--r-- 1 root root 10737418240 Jun 30 09:28 yesfile
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_000
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_001
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_002
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_003
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_004
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_005
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_006
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_007
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_008
-rw-r--r-- 1 root root  1050000000 Jun 30 09:39 yesfile_009
-rw-r--r-- 1 root root   237418240 Jun 30 09:39 yesfile_010
[root@localhost test]#
[root@localhost test]# du -h yesfile\_000
1002M   yesfile_000
[root@localhost test]# tail -5 yesfile\_000
this is my test file
this is my test file
this is my test file
this is my test file
this is my test file

#按字节大小分割
[root@localhost test]# split -d -b 1G yesfile yes\_
[root@localhost test]# ls
yes_00  yes_01  yes_02  yes_03  yes_04  yes_05  yes_06  yes_07  yes_08  yes_09  yesfile
[root@localhost test]# du -h yes\_00
1.0G    yes_00

#指定输出文件后缀长度
[root@localhost test]# split -d -b 1G yesfile -a 3 yes\_
[root@localhost test]# ls
yes_000  yes_001  yes_002  yes_003  yes_004  yes_005  yes_006  yes_007  yes_008  yes_009  yesfile

2、文件合并

Linux 系统下使用 cat 命令进行多个小文件的合并也很方便。cat命令用于连接文件并打印到标准输出设备上。

语法如下:
cat [-AbeEnstTuv] [--help] [--version] fileName

参数说明:
  • -n--number :由 1 开始对所有输出的行数编号。
  • -b--number-nonblank :和 -n 相似,只不过对于空白行不编号。
  • -s--squeeze-blank :当遇到有连续两行以上的空白行,就代换为一行的空白行。
  • -v--show-nonprinting :使用 ^M- 符号,除了 LFDTAB 之外。
  • -E--show-ends : 在每行结束处显示 $
  • -T--show-tabs : 将 TAB 字符显示为 ^I
  • -A, --show-all :等价于 -vET
  • -e :等价于"-vE"选项;
  • -t :等价于"-vT"选项;
示例如下:
#把testfile的文档内容加上行号后输入yesfile这个文档里
[root@localhost tmp]# cat -n testfile > yesfile

#使用tail读取yesfile文件的末尾几行,第一列为行号
[root@localhost tmp]# tail yesfile
4993211 this is my test file
4993212 this is my test file
4993213 this is my test file
4993214 this is my test file
4993215 this is my test file
4993216 this is my test file
4993217 this is my test file
4993218 this is my test file
4993219 this is my test file

#将test目录下之前分割的小文件通过cat命令进行合并,重新生成yesfile文件
[root@localhost test]# cat yes\_\* > yesfile

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
给大家整理的电子书资料:

[外链图片转存中…(img-q0ElAi0r-1713267020294)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
[外链图片转存中…(img-QPTLpRRT-1713267020295)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值