第二十一章 创建任意大小的文件和分隔任意大小的文件:dd命令split命令csplit命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二十一章 创建任意大小的文件和分隔任意大小的文件:dd命令split命令csplit命令相关的知识,希望对你有一定的参考价值。
第二十一章 创建任意大小的文件和分隔任意大小的文件:dd命令、split命令、csplit命令
dd命令
名词解释
dd命令用语复制文件,并对原文件的内容进行转换和格式化处理。dd命令功能很强大对于一些比较底层的问题,使用dd命令往往可以得到出人意料的效果。用的比较多的还是用dd来备份裸设备。但是不推荐,如果需要备份oracle裸设备的,可以使用rman备份,或使用第三方软件备份,使用dd的话,管理起来不太方便。
建议在有需要的时候使用dd对物理磁盘操作,如果是文件系统的话,还是使用tar backup cpio等其他命令更加方便。另外,使用dd对磁盘操作时,最好使用块设备文件。
语法
dd(选项)
选项
bs=<字节数> :将ibs(输入)与欧巴桑(输出)设成指定的字节数。
cbs=<字节数> :转换时,每次只转换指定的字节数。
conv=<字节数>:指定文件转换的方式。
count=<区块数>:仅读取指定的区块数。
ibs=<字节数>:每次读取的字节数。
obs=<字节数>:每次输出的字节数。
of=<文件>:输出到文件。
seek=<区块数>:一开始输出时,跳过指定的区块数。
skip=<区块数>:一开始读取时,跳过指定的区块数。
--help:帮助
--version:显示版本信息
实例
[[email protected] dd]# dd if=/dev/zero of=sun.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00395019 s, 265 MB/s
[[email protected] dd]# du -sh sun.txt
1.0M sun.txt
该命令创建了一个1M大小的文件sun.txt,其中参数解释:
- if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。
- of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
- bs 代表字节为单位的块大小。
- count 代表被赋值的块数。
- /dev/zero 是一个字符设备,会不断返回0值字节( )。
块大小可以使用的计量单位表:
单元大小 | 代码 |
---|---|
字节(1B) | c |
字节(2B) | w |
块(512B) | b |
千字节(1024B) | k |
兆字节(1024KB) | M |
吉字节(1024MB) | G |
以上命令可以看出,可以使用dd命令来测试内存操作速度:
1048576 bytes (1.0 MB) copied, 0.00395019 s, 265 MB/s
split命令
名词解释
split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如:为提高可读性,生成日志等。
选项
-b:值为每一输出档案的大小,单位为byte 。
-C:每一输出当中,单行的最大byte数。
-d:使用数字作为后缀。
-l:值为每一输出档的列数大小。
-a length:设定length指定输出文件的后缀的长度
-a length split_file:设定split_file指定输出文件名的前缀
实例
生成一个大小为100KB的测试文件
[[email protected] split]# dd if=/dev/zero bs=100k count=1 of=date.file
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.000913943 s, 112 MB/s
使用split命令将上面创建的date.file文件分割成大小为10KB的小文件:
[[email protected] split]# split -b 10k date.file
[[email protected] split]# ls
date.file xaa xab xac xad xae xaf xag xah xai xaj
文件被分割成多个带有字母的后缀文件,如果想用数字后缀使用-d;同时可以使用-a length来指定后缀的长度:
[[email protected] split]# split -b 10k date.file -d -a 3
[[email protected] split]# ls
date.file x000 x001 x002 x003 x004 x005 x006 x007 x008 x009 xaa xab xac xad xae xaf xag xah xai xaj
为分割后的文件指定文件名的前缀:
[[email protected] split]# split -b 10k date.file -d -a 3 split_file
[[email protected] split]# ls
date.file split_file002 split_file005 split_file008 x001 x004 x007 xaa xad xag xaj
split_file000 split_file003 split_file006 split_file009 x002 x005 x008 xab xae xah
split_file001 split_file004 split_file007 x000 x003 x006 x009 xac xaf xai
使用-l选项根据文件的行数来分割文件,例如把文件分割成每个文件包含10行的小文件:
split -l 10 date.file
csplit命令
名词解释
csplit命令 用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。碎片文件的命令类似“xx00、xx01”。csplit命令 是split的一个变体,split只能够根据文件大小或行数来分割,但csplit能够根据文件本身特点来分割文件。
语法
csplit(选项)(参数)
选项
- -b<输出格式> 或 --suffix-format=<输出格式> :预设的输出 格式其文件名称为xx00、xx01等,用户可以通过改变<输出格式>来改变输出的文件名;
- -f<输出字首字符串> 或 --prefix=<输出字首字符串> :预设的输出字首字符串其文件名为xx00、xx01等;如果指定输出字首字符串为hello,则输出文件名为hello00、hello01等。
- -k 或 --keep-files :保留文件,就算发生错误或中断执行,也不能删除已经输出保存的文件。
- -n<输出文件名位数> 或 --digits=<输出文件名位数> :预设的输出文件名位数,其文件名称为xx00、xx01等;如果用户指定输出文件名位数为3,则输出文件名为xx000、xx001等。
- -q 或 --quiet 或 --silent :不显示指令执行过程。
- -z 或 --elide-empty-files :删除长度为0 byte文件。
参数
文件:指定要分割的原文件。
模式:指定要分割文件时的匹配模式。
实例
测试文件内容server.log
[[email protected] csplit]# cat server.log
SERVER-1
[con] 10.10.10.1 suc
[con] 10.10.10.2 fai
[dis] 10.10.10.3 pen
[con] 10.10.10.4 suc
SERVER-2
[con] 10.10.10.5 suc
[con] 10.10.10.6 fai
[dis] 10.10.10.7 pen
[con] 10.10.10.8 suc
SERVER-3
[con] 10.10.10.9 suc
[con] 10.10.10.10 fai
[dis] 10.10.10.11 pen
[con] 10.10.10.12 suc
需要将server.log分割成server1.log、server2.log、server3.log,这些文件的内容分别取自原文件中不同的SERVER部分:
[[email protected] csplit]# csplit server.log /SERVER/ -n2 -s {*} -f server -b "%02d.log"; rm -rf server00.log
[[email protected] csplit]# ls
server01.log server02.log server03.log server.log
命令详细说明:
- /正则表达式/ :匹配文本样式,如:/server/ ,从第一行到包含server的匹配行。
- {*} :表示根据匹配重复执行分割,知道文件末尾停止,使用{整数}代表分割执行的次数。
- -s :静默模式,不打印其他信息。
- -n :指定分割后的文件名后缀的数字个数。如:01、02、03
- -f :指定分割后的文件名前缀。
- -b :指定后缀格式。如:%02d.log,类似于C语言中的printf参数格式。
- rm -rf server00.log :是删除第一个文件,因为分割后的第一个文件没有内容,匹配的单词就位于文件的第一行中。
以上是关于第二十一章 创建任意大小的文件和分隔任意大小的文件:dd命令split命令csplit命令的主要内容,如果未能解决你的问题,请参考以下文章