linux命令自带切割 linux如何切割文件

linux文件拆分命令Linux中分割文件用split命令,这个命令可以将一个文件分割成指定大小的多个文件 , split命令的用法是:
split -b 分割的大小 需要分割的文件名 分割后文件的前导文字
这里解释一下,-b参数表示按照文件大小单位来进行分割(split命令还有一个-l参数,是根据文本文件的行数来进行分割,这个-b参数是根据大小来分割的),-b参数后面跟的是分割的依据——文件大?。募笮〉牡ノ豢梢允莃、k、m,比如300m 。“分割后文件的前导文字”是干嘛的呢,其实是在分割后的文件名前面加上一个前缀 。下面是一个例子,就假设需要分割的文件是/root/bigfile:
split -b 50m /root/bigfile chunk
这条命令产生的分割文件可能是:chunkaa、chunkab、chunkac,看到前导文字的作用了吧 。
那么如何将分割后的文件再合并起来呢,还是接着上面的那个例子,用下面这条命令就可以了(先用cd /root切换到/root目录):
cat chunk*bigfile
Linux系统日志切割-Logrotate 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到 。对于忙碌的服务器 , 日志文件大小会增长极快,服务器会很快消耗磁盘空间 , 这成了个问题 。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事 。
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件 。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循 , 并删除超过6个月的日志 。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预 。
在Debian或Ubuntu上:
在Fedora,CentOS或RHEL上:
logrotate的配置文件是/etc/logrotate.conf , 通常不需要对它进行修改 。日志文件的轮循设置在独立的配置文件中 , 它(们)放在/etc/logrotate.d/目录下 。
参数详解:
上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的 。
logrotate可以在任何时候从命令行手动调用 。要调用为/etc/lograte.d/下配置的所有日志调用logrotate:
要为某个特定的配置调用logrotate,执行一次切割任务测试
即使轮循条件没有满足 , 我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件 , ‘-v’参数提供了详细的输出 。
防止访问日志文件过大
logrotate工具对于防止因庞大的日志文件而耗尽存储空间是十分有用的 。配置完毕后,进程是全自动的,可以长时间在不需要人为干预下运行 。本教程重点关注几个使用logrotate的几个基本样例,你也可以定制它以满足你的需求 。
Linux里面分割,切片是什么?在Linux最常用的文件生成和切片工具是dd,它功能比较全面,但无法以行为单位提取文件数据,也无法直接将文件按大小或行数进行均分(除非借助循环) 。另两款数据分割工具split和csplit能够比较轻松地实现这些需求 。csplit是split的升级版 。
1.1 dd命令
从if指定的文件读取数据 , 写入到of指定的文件 。使用bs指定读取和写入的块大?。?使用count指定读取和写入的数据块数量,bs和count相乘就是文件总大小 。可以指定skip忽略读取if指定文件的前多少个块 , seek指定写入到of指定文件时忽略前多少个块 。
dd if=/dev/zero of=/tmp/abc.1 bs=1M count=20
if是input file , of是output file;bs有c(1byte)、w(2bytes)、b(512bytes)、kB(1000bytes)、K(1024bytes)、MB(1000)、M(1024)和GB、G等几种单位 。因此,不要随意在单位后加上字母B 。
假设现有文件CentOS.iso的大小1.3G , 需要将其切分后还原 , 切分的第一个小文件大小为500M 。
dd if=/tmp/CentOS.iso of=/tmp/CentOS1.iso bs=2M count=250
生成第二个小文件,由于第二个小文件不知道具体大?。?所以不指定count选项 。由于第二个小文件要从第500M处开始切分,于是需要忽略CentOS.iso的前500M 。假设bs=2M,于是skip掉的数据块数量为250 。
dd if=/tmp/CentOS.iso of=/tmp/CentOS2.iso bs=2M skip=250
现在CentOS.iso=CentOS1.iso CentOS2.iso 。可以将CentOS[1-2].iso还原 。
cat CentOS1.iso CentOS2.iso CentOS_m.iso
比较CentOS_m.iso和CentOS.iso的md5值,它们是完全一样的 。
shell md5sum CentOS_m.iso CentOS.iso
504dbef14aed9b5990461f85d9fdc667 CentOS_m.iso
504dbef14aed9b5990461f85d9fdc667 CentOS.iso
那么seek选项呢?和skip有什么区别?skip选项是忽略读取时的前N个数据块,而seek是忽略写入文件的前N个数据块 。假如要写入的文件为a.log,则seek=2时 , 将从a.log的第3个数据块开始追加数据 , 如果a.log文件本身大小就不足2个数据块,则缺少的部分自动使用/dev/zero填充 。
于是,在有了CentOS1.iso的基础上,要将其还原为和CentOS.iso相同的文件,可以使用下面的方法:
dd if=/tmp/CentOS.iso of=/tmp/CentOS1.iso bs=2M skip=250 seek=250
还原后,它们的md5值也是相同的 。
shellmd5sum CentOS1.iso CentOS.iso
504dbef14aed9b5990461f85d9fdc667 CentOS1.iso
504dbef14aed9b5990461f85d9fdc667 CentOS.iso
1.2 split命令
split工具的功能是将文件切分为多个小文件 。既然要生成多个小文件 , 必然要指定切分文件的单位,支持按行切分以及按文件大小切分,另外还需解决小文件命名的问题 。例如,文件名前缀、后缀 。如果未明确指定前缀,则默认的前缀为"x" 。
以下是命令的语法说明:
例如,将/etc/fstab按行切分,每5行切分一次,并指定小文件的前缀为"fs_",后缀为数值后缀,且后缀长度为2 。
[root@linuxidc ~]# split -l 5 -d -a 2 /etc/fstab fs_
[root@linuxidc~]# lsfs_00 fs_01 fs_02
查看任一小文件 。
[root@linuxidc ~]# catfs_01
# Accessible filesystems, by reference, are maintained under'/dev/disk'# Seeman pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#
UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 / xfs defaults 0 0UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot xfs defaults 0 0
可以将这些切分后的小文件重新组装还原 。例如,将上面的三个小文件还原为~/fstab.bak 。
[root@linuxidc ~]# cat fs_0[0-2] ~/fstab.bak
还原后,它们的内容是完全一致的 。可以使用md5sum比较 。
[root@linuxidc ~]# md5sum /etc/fstab ~/fstab.bak
29b94c500f484040a675cb4ef81c87bf/etc/fstab
29b94c500f484040a675cb4ef81c87bf/root/fstab.bak
【linux命令自带切割 linux如何切割文件】还可以将标准输入的数据进行切分,并分别写入到小文件中 。例如:
[root@linuxidc ~]# seq 1 2 15 | split -l 3 -d -new_
[root@linuxidc~]# ls new*new_00 new_01 new_02
可以为每个小文件追加额外的后缀 。有些老版本的split不支持该选项 , 而是在csplit上支持的,但是新版本的split已经支持 。例如,加上".log" 。
[root@linuxidc ~]# seq 1 2 20 | split -l 3 -d -a 3 --additional-suffix=".log" -new1_
[root@linuxidc~]# ls new1*new1_000.log new1_001.log new1_002.log new1_003.log
1.3 csplit命令
split只能按行或按照大小进行切分,无法按段落切分 。csplit是split的变体,功能更多 , 它主要是按指定上下文按段落分割文件 。
csplit [OPTION]... FILE PATTERN...
描述:按照PATTERN将文件切分为"xx00","xx01", ...,并在标准输出中输出每个小文件的字节数 。
选项说明:-b FORMAT:指定文件后缀格式,格式为printf的格式,默认为d 。表示后缀以2位数值,且不足处以0填充 。-f PREFIX:指定前缀,不指定是默认为"xx" 。-k:用于突发情况 。表示即使发生了错误,也不删除已经分割完成的小文件 。-m:明确禁止文件的行去匹配PATTERN 。-s:(silent)不打印小文件的文件大小 。-z:如果切分后的小文件中有空文件,则删除它们 。
FILE:待切分的文件,如果要切分标准输入数据,则使用"-" 。
PATTERNs:
INTEGER :数值,假如为N , 表示拷贝1到N-1行的内容到一个小文件中,其余内容到另一个小文件中 。/REGEXP/[OFFSET]:从匹配到的行开始按照偏移量拷贝指定行数的内容到小文件中 。
:其中OFFSET的格式为" N"或"-N" , 表示向后和向前拷贝N行%REGEXP%[OFFSET]:匹配到的行被忽略 。
{INTEGER} :假如值为N,表示重复N此前一个模式匹配 。
{*} :表示一直匹配到文件结尾才停止匹配 。
假设文件内容如下:
[root@linuxidc ~]# cattest.txt
SERVER-1[connection]192.168.0.1success
[connection]192.168.0.2failed
[disconnect]192.168.0.3pending
[connection]192.168.0.4success
SERVER-2[connection]192.168.0.1failed
[connection]192.168.0.2failed
[disconnect]192.168.0.3success
[CONNECTION]192.168.0.4pending
SERVER-3[connection]192.168.0.1pending
[connection]192.168.0.2pending
[disconnect]192.168.0.3pending
[connection]192.168.0.4 failed
假设每个SERVER-n表示一个段落 , 于是要按照段落切分该文件 , 使用以下语句:
[root@linuxidc ~]# csplit -f test_ -b d.log test.txt /SERVER/ {*}0
140
139
140
"-f test_" 指定小文件前缀为"test_","-b d.log" 指定文件后缀格式"00xx.log",它自动为每个小文件追加额外的后缀".log","/SERVER/" 表示匹配的模式,每匹配到一次,就生成一个小文件,且匹配到的行是该小文件中的内容,"{*}" 表示无限匹配前一个模式即/SERVER/直到文件结尾 , 假如不知道{*}或指定为{1},将匹配一次成功后就不再匹配 。
[root@linuxidc ~]# ls test_*test_0000.log test_0001.log test_0002.log test_0003.log
上面的文件中虽然只有三个段落:SERVER-1,SERVER-2,SERVER-3,但切分的结果生成了4个小文件,并且注意到第一个小文件大小为0字节 。为什么会如此?因为在模式匹配的时候,每匹配到一行,这一行就作为下一个小文件的起始行 。由于此文件第一行"SERVER-1"就被/SERVER/匹配到了,因此这一行是作为下一个小文件的内容,在此小文件之前还自动生成一个空文件 。
生成的空文件可以使用"-z"选项来删除 。
[root@linuxidc ~]# csplit -f test1_ -z -b d.log test.txt /SERVER/ {*}140
139
140
还可以指定只拷贝匹配到的行偏移数量 。例如,匹配到行时,只拷贝它后面的1行(包括它自身共两行),但多余的行将放入下一个小文件中 。
[root@linuxidc ~]# csplit -f test2_ -z -b d.log test.txt /SERVER/ 2 {*}42
139
140
98
第一个小文件只有两行 。
[root@linuxidc ~]# cattest2_0000.log
SERVER-1[connection]192.168.0.1 success
SERVER-1段落的其余内容放入到了第二个小文件中 。
[root@linuxidc ~]# cattest2_0001.log
[connection]192.168.0.2failed
[disconnect]192.168.0.3pending
[connection]192.168.0.4success
SERVER-2[connection]192.168.0.1 failed
同理第三个小文件也一样 , 直到最后一个小文件中存放剩余所有无法匹配的内容 。
[root@linuxidc ~]# cattest2_0003.log
[connection]192.168.0.2pending
[disconnect]192.168.0.3pending
[connection]192.168.0.4 failed
指定"-s"或"-q"选项以静默模式运行 , 将不会输出小文件的大小信息 。
[root@linuxidc ~]# csplit -q -f test3_ -z -b d.log test.txt /SERVER/ 2 {*}
linux下将文件按行分割的命令1)按2行切割 -l 2
2)指定切割后linux命令自带切割的文件前缀名 data_
3)指定切割后的文件后缀名为数字 -d
4)指定切割后的文件后缀名数字的长度-a 4linux命令自带切割,即位宽(10进制)linux命令自带切割 , 这里长度可根据切割出来的文件有多少估算linux命令自带切割,到底拆分为几个文件,由总行数,和每个文件的行数决定,不用指定 。
如果为-a 4文件的后缀数字从0000开始计算,依次为0001 , 0002,0003,0004
split -l 2 data.log -d -a 4 data_
将文件data.log进行拆分 , 每个文件2行,如果文件总共有7行,则分为data_0000,data_0001,data_0002,data_0003
linux切割、备份大的nohup日志文件nohup.out日志文件太大了 , 且一直增长,命令查看日志受阻
①切割大文件变成多个小文件
②每天定时保存前一天的日志,重新记录当天日志
1.利用split命令切割
①按文件大小切割大文件:
切割文件:将ohup.out文件每500M切割一个文件放到/home/nginx/logs/newlog/目录下
②按文件行数切割大文件:
查询文件行数:
wc -l b.log
2038711 b.log
按50W行切割一个文件:
split -l 500000 -d -a 4 /home/nginx/logs/b.log /home/nginx/logs/newlog/
2.定时备份前一天日志,重新记录当天日志splitlog.sh
3.定时执行
查看定时任务:
crontab -l
编辑定时任务:
crontab -e
重启定时任务:
删除10天以前的日志文件 , 此日期为文件本身的时间,非日志内容时间
关于linux命令自带切割和linux如何切割文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读