先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
正文
[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
选项表示文件大小,单位是字节,后面可以接K
、KB
、M
、MB
、G
、GB
等单位
如下示例是使用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
命令一样,后面可以接K
、KB
、M
、MB
、G
、GB
等单位
如下示例为使用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
命令只支持btrfs
、ext4
、 ocfs2
、xfs
这几种文件系统,而truncate
命令支持所有的现代文件系统。
二、优劣分析
对比上述不同命令创建10G
的文件的差异,尤其是生成速度方面,比较如下:
- dd 5.1秒
- yes 9.6秒
- fallocate 0.001秒
- truncate 0.001秒
根据上述结果可知,不同命令创建文件的速度方面相差了几千倍,为什么会有如此大的差距呢?我想可能在于以下区别:
- dd 需要进行写文件操作,进行大量的IO
- yes 需要进行写文件操作,进行大量的IO
- fallocate 将空间分配给文件,但不会写入任何数据到文件中
- truncate 创建的是稀疏文件,不会写入任何数据到文件中
dd
和yes
都有写文件操作,而这需要大量的 IO
时间,所以同样创建10G
的文件,它们比fallocate
和truncate
要慢很多。
如果对生成文件的速度没有很高的要求且对内容无要求的情况下首选dd
,如果希望自定义文件内容的话,则使用yes
。
如果想快速地生成超大文件,比如 1
秒内创建一个 100G
的文件,选择fallocate
和truncate
,如果还需要确保文件是实际占用磁盘空间的话,则只能选择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-
符号,除了LFD
和TAB
之外。-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 (备注运维)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
给大家整理的电子书资料:
[外链图片转存中…(img-q0ElAi0r-1713267020294)]
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
[外链图片转存中…(img-QPTLpRRT-1713267020295)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!