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

 

posted @ 2023-01-12 18:28  战斗小人  阅读(819)  评论(0编辑  收藏  举报