Linux基础13 打包压缩解压 compress,gzip,bzip2,xz,zip, tar, zcat命令, split分割命令
压缩打包
windows下我们接触最多的压缩文件就是.rar格式, 但Linux有自己所特有的压缩工具。
一般linux上的压缩包windows上可以使用
如果希望windows和Linux互相能使用的压缩工具, 建议.zip格式
压缩打包的优点:
1节省磁盘空间占用率
2节省网络传输带宽消耗
3网络传输更加快捷
格式 压缩工具
.zip zip压缩工具
.gz gzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)
.bz2 bzip2压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)
.tar.gz 先使用tar命令归档打包,然后使用gzip压缩
.tar.bz2 先使用tar命令归档打包,然后使用bzip压缩
0.compress 和 uncompress
此工具来自于ncompress包,此工具目前已经很少使用 对应的文件是 .Z 后缀
格式 compress [OPTION]... [FILE]... uncompress [OPTION]... [FILE]... #常用选项 -d #解压缩,相当于于uncompress -c #结果输出至标准输出,不删除原文件 -f #覆盖己存在目标文件 -v #显示过程 -r #递归压缩目录里面所有文件
#默认选项压缩 [root@ubuntu2204 ~]# compress fstab [root@ubuntu2204 ~]# ls fstab.Z #解压缩 [root@ubuntu2204 ~]# uncompress fstab.Z [root@ubuntu2204 ~]# ls fstab #显示过程 [root@ubuntu2204 ~]# compress -v fstab fstab: -- replaced with fstab.Z Compression: 33.88% #解压缩 [root@ubuntu2204 ~]# compress -dv fstab.Z fstab.Z: -- replaced with fstab #保留源文件 [root@ubuntu2204 ~]# compress -c fstab > fstab.Z [root@ubuntu2204 ~]# ls fstab fstab.Z
# 查看文件的压缩类型 file abc.ini.gz
1.gzip压缩工具
来自于 gzip 包
对应的文件是 .gz 后缀
yum install -y gzip # 安装 gzip打包会删除源文件 #压缩 [root@oldboyedu ~]# gzip file1 #解压 [root@oldboyedu ~]# gzip -d file1.gz #不需要解压,查看文件内容 [root@oldboyedu ~]# zcat file1.gz 123 练习题: 把/etc目录 拷贝/root下,找到/root/etc/下面所有一级二级目录中的 普通文件,压缩 [root@oldboyedu ~]# find /root/etc/ -maxdepth 2 -type f|xargs gzip 注意: 1.gzip 不可以压缩目录,只能压缩文件 [root@oldboyedu ~]# gzip /tmp gzip: /tmp is a directory -- ignored
gzip -r # 递归打包文件夹下所有文件 2.gzip压缩的文件不在当前目录下(在原路径下) 3.压缩会删除源文件 4.解压会删除压缩文件 gzip的案例:mysql备份的时候 mysqldump -A |gzip > /tmp/mysql_$(date +%F).sql.gz
2.bzip2和bunzip2
来自于 bzip2 包
对应的文件是 .bz2 后缀
bzip2 [OPTION]... FILE ... bunzip2 [OPTION]... FILE ... #常用选项 -d|--decompress #解压缩,相当于bunzip2 -z|--compress #强制压缩 -k|--keep #保留原文件 -f|--force #覆盖己存在目标文件 -t|--test #测试,检测压缩文件是否完整 -c|--stdout #将压缩数据输出到标准输出中,并保留原文件 -q|--quiet #安静模式,忽略警告 -v|--verbose #显示过程 -N #指定压缩等级,取值为1-9之间,默认9 --fast #同 -1 --best #同 -9
#保留原文件,并显示过程 [root@ubuntu2204 0510]# bzip2 -kv fstab passwd fstab: 1.731:1, 4.622 bits/byte, 42.22% saved, 720 in, 416 out. passwd: 2.516:1, 3.180 bits/byte, 60.25% saved, 2858 in, 1136 out. #输出重定向 [root@ubuntu2204 0510]# bzip2 fstab -cv > fstab.bz2 fstab: 1.731:1, 4.622 bits/byte, 42.22% saved, 720 in, 416 out. #管道+输出重定向 [root@ubuntu2204 0510]# cat fstab | bzip2 -cv >fstab.bz2 (stdin): 1.731:1, 4.622 bits/byte, 42.22% saved, 720 in, 416 out. #解压缩 [root@ubuntu2204 0510]# bunzip2 -kfv fstab.bz2 fstab.bz2: done #不解压查看文件内容 [root@ubuntu2204 0510]# bzcat fstab.bz2
3.xz 和 unxz
来自于 xz 包
对应的文件是 .xz 后缀
xz [OPTION]... FILE ... unxz [OPTION]... FILE ... #常用选项 -z|--compress #强制压缩 -d|--decompress #解压缩,相当于unxz -t|--test #测试,检测压缩文件是否完整 -l|--list #查看压缩文件相关信息 -k|--keep #保留原文件 -f|--force #覆盖己存在目标文件 -c|--stdout #将压缩数据输出到标准输出中,并保留原文件 -T|--threads=NUM #开多线程,默认1 -q|--quiet #安静模式,忽略警告 -v|--verbose #显示过程 -N #指定压缩等级,取值为1-9之间,默认6
#保留原文件 [root@ubuntu2204 0510]# xz -kv messages messages (1/1) 100 % 29.5 KiB / 393.1 KiB = 0.075 #查看 [root@ubuntu2204 0510]# xz -l messages.xz Strms Blocks Compressed Uncompressed Ratio Check Filename 1 1 29.5 KiB 393.1 KiB 0.075 CRC64 messages.xz #重定向 [root@ubuntu2204 0510]# xz -kcv messages > msg.xz messages (1/1) 100 % 29.5 KiB / 393.1 KiB = 0.075 #解压缩 [root@ubuntu2204 0510]# unxz -vfk fstab.xz msg.xz fstab.xz (1/2) 100 % 444 B / 720 B = 0.617 msg.xz (2/2) 100 % 29.5 KiB / 393.1 KiB = 0.075
4.zip压缩工具
zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:所有者和组信息
分别来自于 zip 和 unzip 包
对应的文件是 .zip 后缀
yum install -y zip unzip # 安装
zip -r:递归压缩
-T: 检查压缩包是否完好
-q: 静默输出,不显示指令执行过程
unzip
-d: 解压到指定路径
-l: 查看压缩包里面的内容
-t: 检查压缩包里面的文件是否完好
#压缩 [root@oldboyedu ~]# zip zls.zip file1 #解压 [root@oldboyedu ~]# unzip zls.zip Archive: zls.zip replace file1? [y]es, [n]o, [A]ll, [N]one, [r]ename: 替换 不替换 替换所有 啥也不做 改名 # 如果压缩的是一个文件,可以通过zcat查看压缩文件的内容, 如果压缩的是文件夹, linux下无法查看里面内容 #压缩目录 (压缩文件-r参数必须加上, 否则压缩的是一个空目录) [root@oldboyedu tmp]# zip -r tmp_dir2.zip /tmp/ 注意: 1.压缩不会删除源文件 2.解压不会删除压缩文件 3.解压开会覆盖源文件内容 练习题: 查找到etc下所有1,2,3目录,包括目录下的文件,zip打包名字叫:yourname_etc.zip
5.tar压缩工具
zcat 来源于 "zip cat" 的缩写,见字知义
其功能是在不解压的情况下查看压缩文件内容
zcat [OPTION]... [FILE]... #常用选项 -c #将内容输出到标准输出,默认 -d #解压缩 -l #显示压缩文件(包)内的文件列表 -r #在目上递归操作 -t #测试压缩文件完整性 [root@ubuntu2204 0510]# zcat fstab.Z [root@ubuntu2204 0510]# zcat fstab.gz [root@ubuntu2204 0510]# zcat fstab.zip
6.tar压缩工具
#语法:tar [-zjxcvfP] filename # tar的选项不用加-,加-显得不专业 c //创建新的归档文件 归档(本身并没有压缩的功能) x //对归档文件解包 解压 t //列出归档文件里的文件列表 v //输出命令的归档或解包的过程 f //指定包文件名,多参数f写最后 C //指定解压目录位置 z //使用gzip压缩归档后的文件(.tar.gz) # 先gzip压缩,后tar归档打包 j //使用bzip2压缩归档后的文件(.tar.bz2) J //使用xz压缩归档后的文件(tar.xz) X //排除多个文件(写入需要排除的文件名称) h //打包软链接 P //连带绝对路径打包 --hard-dereference //打包硬链接 --exclude //在打包的时候写入需要排除文件或目录
--exclude-from= // 从一个文件中列出要被排除的目录或文件 在--exclude较多时使用 #打包压缩(一般正常打包zcf即可) [root@oldboyedu ~]# tar zcf zls2.tar.gz /etc 归档文件 包文件名
#这里可以用其他压缩方式,分别是(要有对应压缩程序) tar -jcvf对应.tar.bz2 tar -Jcvf对应.tar.xz
#查看打包内容 [root@oldboyedu ~]# tar tf zls1.tar.gz #解压 [root@oldboyedu ~]# tar xf zls1.tar.gz # 参数z不用加,自动选择解压格式。加了只能解压gzip压缩的 注意: 1.不要使用绝对路径(centos6中如果打包路径是绝对路径,解压直接覆盖。centos7中打包时会把绝对路径地址开头/删掉,变相对路径,起保护作用) 如果非要打包绝对路径:[root@oldboyedu ~]# tar zcfP b.sh.tar.gz /usr/local/nginx/a.sh 解压的时候:[root@oldboyedu ~]# tar xfP b.sh.tar.gz 2.tar 打包可以接多个文件f [root@oldboyedu ~]# tar zcf abc1.tar.gz 1.txt 2.txt 3.txt 格式 压缩工具 .zip zip压缩工具 zip -r dir.zip dirname 目录 zip file.zip filename 文件 .gz gzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用) gzip filename .bz2 bzip2压缩工具,只能压缩文件,会删除源文件(通常配合tar使用) .tar.gz 先使用tar命令归档打包,然后使用gzip压缩 tar zcf dirname.tar.gz dirname .tar.bz2 先使用tar命令归档打包,然后使用bzip压缩 tar cjf dirname.tar.bz2 dirname .tar.xz tar cJf dirname.tar.xz dirname //常用打包与压缩组合 czf //打包tar.gz格式 cjf //打包tar.bz格式 cJf //打包tar.xz格式 xf //自动选择解压模式 tf //查看压缩包内容 #不想打包 的文件 [root@oldboyedu /]# tar zcf etc3.tar.gz --exclude=Makefile etc # 排除Makefile文件 [root@oldboyedu /]# tar zcf etc3.tar.gz --exclude={Makefile,Makefile1,Makefile2} etc # 排除多个文件 # 排除a.txt上多个文件(写入需要排除的文件名称) [root@oldboyedu /]# cat a.txt etc/latrace.d/headers/ etc/latrace.d/headers/ctype.h etc/latrace.d/headers/dirent.h etc/latrace.d/headers/dlfcn.h etc/latrace.d/headers/fcntl.h etc/latrace.d/headers/getopt.h etc/latrace.d/headers/inet.h etc/latrace.d/headers/ioctl.h etc/latrace.d/headers/latrace.h etc/latrace.d/headers/libintl.h [root@oldboyedu /]# tar zcfX etc4.tar.gz a.txt etc #指定解压路径 [root@oldboyedu ~]# tar xf abc1.tar.gz -C /opt/
查文件夹大小,计算压缩比
[root@localhost ~]# du -sh gdir/ # 查文件夹大小 8.0K gdir/ [root@localhost ~]# ll 总用量 12 -rw-r--r--. 1 root root 4 1月 11 21:31 abc.ini -rw-r--r--. 1 root root 122 1月 12 19:48 abc.ini.tar.gz -rw-r--r--. 1 root root 964 4月 14 2022 check_ip.py drwxr-xr-x. 2 root root 34 1月 12 19:32 gdir # 只有文件夹大小,没有里面内容大小
split命令
split 命令可以分割一个文件为多个文件
split [OPTION]... [FILE [PREFIX]] #常用选项 -b|--bytes=SIZE #按大小指定分割单位 -C|--line-bytes=SIZE #同-b,但是在切割时将尽量维持每行的完整性 -d #切割后小文件的后缀用数字表示 -l|--lines=NUMBER #指定行数,按多少行切一个小文件 --verbose #显示过程 #将test.txt 以6行为单位进行切切割成以 x 为前缀名称的小文件 [root@ubuntu2204 0510]# split -l 6 test.txt #同上 [root@ubuntu2204 0510]# split -6 test.txt
#以1M大小为单位切割,小文件以数字为后缀,etc.part 开头 [root@ubuntu2204 0510]# split -b 1M etc.tar.gz -d etc.part
#显示过程 [root@ubuntu2204 0510]# split --verbose -b 1M etc.tar.gz -d etc.part
#合并回去(和原来一样,压缩包可以解压,执行程序可以执行) [root@ubuntu2204 0510]# cat etc.part* > etc.tar.gz