Linux学习笔记:压缩打包tar、zip、unzip命令

Linux 下一堆各式各样的压缩文件名:.gz、.tar.gz、tgz、bz2、.Z、.tar 等众多的压缩文件名,此外 Windows 下的 .zip、.rar 也可以在 Linux 下使用。

一、基本概念

1.打包

打包是指将多个文件或者目录放在一起,形成一个总的包,便于保存和传输,但是大小是没有变化的。

2.压缩

压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的,可以节省存储空间,在压缩的时候通常是先打包再压缩。

3.tar命令

  • tar命令参数前面加”-"与不加“-”的执行结果没啥区别
  • 区别在于linux风格,加“-”属于System V风格,不加“-”属于BSD风格,所以在使用tar命令的时候它的参数加不加“-”结果是一样的
# tar 命令常用参数
-z 是否同时具有gz属性
-j 是否同时具有bz2属性
-J 是否同时具有xz属性
-x 解压缩、提取打包的内容
-t 查看压缩包内容
-c 建立一个压缩,打包文档
-C 切换到指定目录,表示指定解压缩包的内容和打包的内容存放的目录
-v 显示压缩或者打包的内容
-f 使用文件名 -f选项是必须要用的 -f参数在使用的时候一定排在其他参数的后面
-p 保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P 保留绝对路径
-r 增加压缩文件 把要存档的文件追加到档案文件的未尾

二、打包

  • 打包文件
# 将3个文件打包
tar -cvf result.tar data_202105.txt data_202106.txt data_202107.txt
# 命令 + 参数 + 打包后文件名 + 需要打包的文件
# 显示打包的文件 -v
  • 打包目录
# 打包目录
tar -cvf data.tar /test
  • 查看文件内容
# 查看文件内容
tar -tf result.tar
  • 提取文件到某目录下
tar -xf result.tar -C /data/

如果不使用 -C 指定目录则会将文件提取到当前目录。

  • 追加文件
# tar -rf tar文件 需要追加的文件
tar -rf result.tar file.txt

# 查看验证
tar -tf result.tar

三、压缩

linux 主要有三种压缩方式:

  • gzip —— 公认的压缩速度最快,压缩大文件的时候与其他的压缩方式相比更加明显,历史最久,应用最广泛的压缩方式
  • bzip —— 压缩形成的文件小,但是可用性不如gzip
  • xz —— 是最新的压缩方式,可以自动提供最佳的压缩率

压缩的时候应该标明后缀。

参数 作用 命名方式
-z 用于gzip压缩方式 文件名:data.tar.gz
-j 用于bzip2压缩方式 文件名:data.tar.bz2
-J 用于xz压缩方式 文件名:data.tar.xz

实操:

# 查看文件
ll -rth
total 2.0G
-rw-r----- 1 xx xx 440M Sep  9 18:20 data_202105.txt
-rw-r----- 1 xx xx 382M Sep  9 18:20 data_202106.txt
-rw-r----- 1 xx xx 378M Sep  9 18:20 data_202107.txt
-rw-r----- 1 xx xx 821M Sep  9 18:25 result.tar

# gzip压缩方式
tar -zcvf result.tar.gz data_202105.txt data_202106.txt data_202107.txt

# bzip2压缩方式
tar -jcvf result.tar.bz2 data_202105.txt data_202106.txt data_202107.txt
# 如果报错需要安装bzip2软件包: yum -y install bzip2

# xz压缩方式
tar -Jcvf result.tar.xz data_202105.txt data_202106.txt data_202107.txt

# 压缩后文件对比
ll -rth
total 2.7G
-rw-r----- 1 xx xx 440M Sep  9 18:20 data_202105.txt
-rw-r----- 1 xx xx 382M Sep  9 18:20 data_202106.txt
-rw-r----- 1 xx xx 378M Sep  9 18:20 data_202107.txt
-rw-r----- 1 xx xx 821M Sep  9 18:25 result.tar
-rw-r----- 1 xx xx 285M Sep  9 18:41 result.tar.gz
-rw-r----- 1 xx xx 213M Sep  9 18:47 result.tar.bz2
-rw-r----- 1 xx xx 216M Sep  9 19:13 result.tar.xz

# 压缩速率、压缩率对比(反比)
压缩速度:gz > bz2 > xz
压缩率:xz > bz2 > gz

四、解压

tar 命令很智能,在解压的时候不需要指明压缩方式,它会自己选择跟压缩方式对应的方式去解压。

解压 gz 压缩方式的文件时不要添加 -z 参数,直接使用 -xf 即可,bz2xz 也一样,会自动选择。

不指定 -C 参数,会直接解压在当前目录。

# 解压
tar -xf result.tar.gz

# 指定目录
tar -xf result.tar.gz -C /data/

五、其他

1.警告

在打包和压缩的过程中,有时候会看到这样的语句:tar: 从成员名中删除开头的“/” ,这个并不是报错,是因为没有加上 -P 选项,没有保留原来的绝对路径去打包或者压缩,提取打包的内容跟解压一样。

如果在压缩文件的时候使用了 -P 选项,那么在解压的时候也要加上 -P 选项,否则也会出现同样的警告。

2.排除文件

在使用 tar 压缩或者打包的时候,可以通过增加 --exclude 来达到排除指定的文件的目的。

# 排除文件
tar -cvf data.tar --exclude=data_202107.txt test

压缩文件也是同理,想要排除指定的目录压缩或者打包也是同理。

六、zip和unzip命令

zip 命令主要用于 Windows 系统下,tar 命令主要用于 unix 系统下,想要在 unix 系统压缩文件后传给Windows 系统使用,一般会使用 zip 命令相对方便点。

查看系统是否已安装 zipunzip 命令:

# 查看版本号
rpm -q zip unzip
# zip-3.0-11.el7.x86_64
# unzip-6.0-16.el7.x86_64

1.zip命令

基本语法:

zip 参数 压缩包名 文件、目录
-m 将文件压缩后,删除原文件
-o 将压缩文件内的所有文件的最新变动时间设为压缩的时间
-q 安静模式,在压缩的时候不显示指令执行的过程
-r 递归压缩,将指定目录下的所有子文件以及文件一起处理
-x 压缩时排除文件列表中的文件
  • 压缩目录
# 正常压缩 不加-q参数 显示压缩过程
zip -r test.zip test
  adding: test/ (stored 0%)
  adding: test/data_202107.txt (deflated 76%)
  adding: test/data_202105.txt (deflated 76%)
  adding: test/data_202106.txt (deflated 76%)
  
# 添加-q参数 安静模式输出 不显示压缩过程
zip -q -r test.zip test
  • 压缩文件
# 压缩多个文件
# 因为压缩的全是文件,所以可以不用加上 -r 选项
zip -q rusult.zip data.txt data2.txt data3.txt

  • 压缩文件和目录
zip -q -r result.zip data.txt test
  • 排除文件
zip -r result.zip test -x "./test/data2.txt"

2.unzip命令

基本语法:

unzip 参数 压缩文件 (-d 目录) # 不指定目录则解压在当前目录
-c	将解压缩的结果显示到屏幕上(显示每一个目录下的每一个文件的内容),同时对字符做适当的转换,但是并没有解压压缩包
-l	显示压缩文件内所包含的文件
-t	检查压缩文件是否正确
-v	执行时显示压缩文件的详细信息
-q	安静模式,执行时不显示任何信息
-d	指定文件解压后存储的目录
-x	指定不要处理压缩文件中的那些文件
  • 显示解压缩结果
# 具体会显示到每一个文件跟每一个文件的内容
# 慎用!!!滚屏!!!
unzip -c test.zip
  • 显示包含的文件
unzip -l test.zip
Archive:  test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  09-09-2021 20:35   test/
395704334  09-09-2021 18:20   test/data_202107.txt
460339131  09-09-2021 18:20   test/data_202105.txt
400373218  09-09-2021 18:20   test/data_202106.txt
---------                     -------
1256416683                     4 files
  • 检查压缩文件是否正确
unzip -t test.zip
Archive:  test.zip
    testing: test/                    OK
    testing: test/data_202107.txt     OK
    testing: test/data_202105.txt     OK
    testing: test/data_202106.txt     OK
No errors detected in compressed data of test.zip.

全部OK表示全部文件都是正确的。

  • 不解压文件 查看压缩包内容(查看文件列表以及压缩率)
# 使用 -v 显示的信息比使用 -l 显示的信息更加详细
unzip -v test.zip
Archive:  test.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 09-09-2021 20:35 00000000  test/
395704334  Defl:N 94419298  76% 09-09-2021 18:20 128cfa97  test/data_202107.txt
460339131  Defl:N 109389109  76% 09-09-2021 18:20 cba661a9  test/data_202105.txt
400373218  Defl:N 94776009  76% 09-09-2021 18:20 4314b973  test/data_202106.txt
--------          -------  ---                            -------
1256416683         298584416  76%                            4 files
  • 指定目录解压
# 查看
unzip -l test.zip

# 解压
unzip -q test.zip -d /data/

参考链接:Linux压缩打包命令——tar、zip、unzip

posted @ 2021-09-10 09:04  Hider1214  阅读(839)  评论(0编辑  收藏  举报