【9.10】Linux文件压缩和打包

6.1 压缩打包介绍

  • 常见压缩文件
    Windows:.rar,.zip,.7z
    Linux:.zip,.gz,.bz2,.xz,.tar.gz,.tat.bz2,.tar.xz
    Linux下后缀名并不像Windows重要,不过还是需要通过后缀名来判断压缩包是哪种类型的文件

6.2 gzip压缩工具

  • Linux下常用的压缩工具:gzip,bzip2,xz,zip,tar
    注意:gzip只能压缩文件,不能压缩目录

准备一个文件,用作压缩

[root@arslinux-01 ~]# cd /tmp/
[root@arslinux-01 tmp]# mkdir d6z/
[root@arslinux-01 tmp]# cd d6z/
[root@arslinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec  cat {} >> 1.txt \;
[root@arslinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec  cat {} >> 1.txt \;
[root@arslinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec  cat {} >> 1.txt \;
[root@arslinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec  cat {} >> 1.txt \;
[root@arslinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec  cat {} >> 1.txt \;
[root@arslinux-01 d6z]# du -sh 1.txt 
2.0M	1.txt
[root@arslinux-01 d6z]# ll -h 1.txt 
-rw-r--r--. 1 root root 1.1M 3月  26 15:20 1.txt
  • gzip 文件 压缩命令
[root@arslinux-01 d6z]# gzip 1.txt 
[root@arslinux-01 d6z]# ll -h
总用量 264K
-rw-r--r--. 1 root root 262K 3月  26 15:20 1.txt.gz
[root@arslinux-01 d6z]# du -sh 1.txt.gz 
264K	1.txt.gz
  • gzip -d 压缩文件 解压缩命令
[root@arslinux-01 d6z]# gzip -d 1.txt.gz 
[root@arslinux-01 d6z]# du -sh 1.txt 
1.1M	1.txt
  • gunzip 压缩文件 解压缩命令
[root@arslinux-01 d6z]# gunzip 1.txt.gz 
[root@arslinux-01 d6z]# du -sh 1.txt 
1.1M	1.txt
  • gzip -压缩级别(1-9) 文件 指定文件压缩级别,默认级别为6
    默认6级别,1为最不严谨,9为最严谨,9级耗费CPU资源更大,运行速度更慢,一般保持默认就行
[root@arslinux-01 d6z]# gzip -1 1.txt 
[root@arslinux-01 d6z]# du -sh 1.txt.gz 
308K	1.txt.gz
[root@arslinux-01 d6z]# gzip -d 1.txt.gz 
[root@arslinux-01 d6z]# gzip -9 1.txt 
[root@arslinux-01 d6z]# du -sh 1.txt.gz 
264K	1.txt.g
  • 压缩也是有极限的,不会无休止的压缩

  • .gz 文件的类型介绍

[root@arslinux-01 d6z]# file 1.txt.gz 
1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Tue Mar 26 15:20:37 2019, max compression
  • zcat 压缩包 查看压缩包内容
[root@arslinux-01 d6z]# zcat 1.txt.gz
  • gzip -c 文件 > 压缩包绝对路径 压缩时指定压缩文件保存目录且不删除源文件
[root@arslinux-01 d6z]# gzip -c 1.txt > /tmp/1.txt.gz
[root@arslinux-01 d6z]# ll
总用量 1044
-rw-r--r--. 1 root root 1067315 3月  26 15:20 1.txt
[root@arslinux-01 d6z]# ll /tmp/1.txt.gz 
-rw-r--r--. 1 root root 267637 3月  26 15:59 /tmp/1.txt.gz
  • gunzip -c 压缩包 > 目标文件绝对路径 解压缩文件时不删除原压缩文件 或 gzip -d -c
[root@arslinux-01 d6z]# gunzip -c /tmp/1.txt.gz > /tmp/d6z/2.txt
[root@arslinux-01 d6z]# ll
总用量 2088
-rw-r--r--. 1 root root 1067315 3月  26 15:20 1.txt
-rw-r--r--. 1 root root 1067315 3月  26 16:02 2.txt

6.3 bzip2压缩工具

bzip2gzip 比压缩更狠,使用方法差不多

  • bzip2 安装
[root@arslinux-01 d6z]# yum install -y bzip2
  • bzip2 文件 压缩命令
[root@arslinux-01 d6z]# bzip2 1.txt 
[root@arslinux-01 d6z]# du -sh 1.txt.bz2 
108K	1.txt.bz2
bzip2 压缩默认级别压缩文件要比 gzip 同级别要小

注意:bzip2同样不支持压缩目录

  • bzip2 -dbunzip2 解压命令
[root@arslinux-01 d6z]# bunzip2 1.txt.bz2 
[root@arslinux-01 d6z]# du -sh 1.txt 
1.1M	1.txt
  • bzip2 -c 文件 > 压缩文件绝对路径 压缩到指定目录下
[root@arslinux-01 d6z]# bzip2 -c 1.txt > /tmp/1.txt.bz2
[root@arslinux-01 d6z]# du -sh /tmp/1.txt.bz2 
108K	/tmp/1.txt.bz2
[root@arslinux-01 d6z]# ll
总用量 2088
-rw-r--r--. 1 root root 1067315 3月  26 15:20 1.txt
-rw-r--r--. 1 root root 1067315 3月  26 16:02 2.txt
  • bzip2 -d -c 压缩文件绝对路径 > 目标目录绝对路径 解压到指定目录,指定名称
    bunzip -c 也可以
[root@arslinux-01 d6z]# bzip2 -d -c /tmp/1.txt.bz2 > 3.txt
[root@arslinux-01 d6z]# ll
总用量 3132
-rw-r--r--. 1 root root 1067315 3月  26 15:20 1.txt
-rw-r--r--. 1 root root 1067315 3月  26 16:02 2.txt
-rw-r--r--. 1 root root 1067315 3月  26 18:06 3.txt
[root@arslinux-01 d6z]# du -sh 3.txt 
1.1M	3.txt
  • bzip2 -压缩级别(1-9) 文件名 指定文件压缩级别,默认级别为9
[root@arslinux-01 d6z]# bzip2 -9 1.txt 
[root@arslinux-01 d6z]# du -sh 1.txt.bz2 
108K	1.txt.bz2

file 命令查看文件信息

[root@arslinux-01 d6z]# file 1.txt.bz2 
1.txt.bz2: bzip2 compressed data, block size = 900k
[root@arslinux-01 d6z]# mv 1.txt.bz2 1.txt
[root@arslinux-01 d6z]# file 1.txt 
1.txt: bzip2 compressed data, block size = 900k
[root@arslinux-01 d6z]# file 2.txt 
2.txt: UTF-8 Unicode text
  • 给文件改名,不以 .bz2 结尾,file 同样能显示出文件是压缩数据

  • bzcat 查看 .bz2 压缩文件内容

[root@arslinux-01 d6z]# bzcat 1.txt.bz2

6.4 xz压缩工具

  • xz 文件 压缩命令( xz 压缩比 gzip 和 bzip2 都要狠)
    [root@arslinux-01 d6z]# xz 2.txt .
    [root@arslinux-01 d6z]# du -sh 2.txt.xz
    48K 2.txt.xz

  • xz -d 压缩包 解压缩命令

  • unxz 压缩包 解压缩命令

[root@arslinux-01 d6z]# xz -d 2.txt.xz 
[root@arslinux-01 d6z]# du -sh 2.txt 
1.1M	2.txt
  • xz -压缩级别(1-9) 文件 指定压缩级别(默认是6)
[root@arslinux-01 d6z]# xz -9 2.txt 
[root@arslinux-01 d6z]# du  -sh 2.txt.xz 
48K	2.txt.xz
  • xzcat 文件名 查看压缩文件内容
[root@arslinux-01 d6z]# xzcat 2.txt.xz
  • xz -c 文件名 > 压缩包绝对路径 指定压缩包位置(可改名)
  • unxz -c 压缩包绝对路径 > 文件名(非当前目录需要绝对名) 指定解压缩位置
[root@arslinux-01 d6z]# xz -c 2.txt > /tmp/3.txt.xz
[root@arslinux-01 d6z]# du -sh /tmp/3.txt
48K	/tmp/3.txt
[root@arslinux-01 d6z]# du -sh /tmp/3.txt.xz 
48K	/tmp/3.txt.xz
[root@arslinux-01 d6z]# xz -d -c /tmp/3.txt.xz > 2.txt
[root@arslinux-01 d6z]# du -sh 2.txt 
1.1M	2.txt
  • gzip bzip2 xz都不支持压缩目录
[root@arslinux-01 d6z]# gzip 123/
gzip: 123/ is a directory -- ignored
[root@arslinux-01 d6z]# bzip2 123/
bzip2: Input file 123/ is a directory.
[root@arslinux-01 d6z]# xz 123/
xz: 123/: Is a directory, skipping

6.5 zip压缩工具

  • zip 支持压缩目录
    zip 命令和 unzip 命令都需要安装
[root@arslinux-01 d6z]# yum install -y zip
[root@arslinux-01 d6z]# yum install -y unzip
  • zip 压缩包名 源文件名 压缩命令(可以压缩目录)
[root@arslinux-01 d6z]# zip 2.txt.zip 2.txt 
  adding: 2.txt (deflated 75%)
[root@arslinux-01 d6z]# du -sh 2.txt.zip 
264K	2.txt.zip
  • zip -r 压缩包名 源目录 压缩目录命令
[root@arslinux-01 d6z]# zip -r arslinux.zip arslinux/
  adding: arslinux/ (stored 0%)
  adding: arslinux/2/ (stored 0%)
  adding: arslinux/2/2.txt (deflated 75%)
  adding: arslinux/ars2/ (stored 0%)
  adding: arslinux/ars2/2/ (stored 0%)
  adding: arslinux/ars2/2/2.txt (deflated 75%)
  adding: arslinux/ars2/ars1/ (stored 0%)
  adding: arslinux/ars2/ars1/2/ (stored 0%)
  adding: arslinux/ars2/ars1/2/2.txt (deflated 75%)
  adding: arslinux/ars2/ars1/arslinux/ (stored 0%)
  adding: arslinux/ars2/ars1/arslinux/2/ (stored 0%)
  adding: arslinux/ars2/ars1/arslinux/2/2.txt (deflated 75%)
  adding: arslinux/ars2/ls2 (deflated 53%)
  • zip 压缩命令在压缩后会保留源文件

  • unzip 压缩包 解压缩命令

[root@arslinux-01 d6z]# unzip arslinux.zip 
Archive:  arslinux.zip
replace arslinux/2/2.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: 

在zip压缩时,默认保留源文件或目录,在解压缩时,由于源文件存在,因此会提示你是否覆盖或者不操作或者改名
根据实际情况选择相应选项

  • unzip 压缩包 -d 指定目录 解压到指定目录,不指定就是当前目录
[root@arslinux-01 d6z]# unzip 2.txt.zip -d test/
Archive:  2.txt.zip
  inflating: test/2.txt

压缩前什么文件名,压缩后还是什么文件名,不能更改

  • unzip -l 压缩包 查看压缩包文件列表(文件内容无法查看)
[root@arslinux-01 d6z]# unzip -l arslinux.zip 
Archive:  arslinux.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  03-27-2019 22:04   arslinux/
        0  03-27-2019 22:04   arslinux/2/
  1067315  03-27-2019 22:04   arslinux/2/2.txt
        0  03-27-2019 22:04   arslinux/ars2/
        0  03-27-2019 22:04   arslinux/ars2/2/
  1067315  03-27-2019 22:04   arslinux/ars2/2/2.txt
        0  03-27-2019 22:04   arslinux/ars2/ars1/
        0  03-27-2019 22:04   arslinux/ars2/ars1/2/
  1067315  03-27-2019 22:04   arslinux/ars2/ars1/2/2.txt
        0  03-27-2019 22:04   arslinux/ars2/ars1/arslinux/
        0  03-27-2019 22:04   arslinux/ars2/ars1/arslinux/2/
  1067315  03-27-2019 22:04   arslinux/ars2/ars1/arslinux/2/2.txt
   117680  03-27-2019 22:04   arslinux/ars2/ls2
---------                     -------
  4386940                     13 files

6.6 tar打包

服务器之间传输多个文件和目录,把所有文件和目录打包成一个大文件,可能会减小文件大小,这样传输速度更快(不绝对)

  • tar -cvf 压缩包 文件/目录 打包命令
[root@arslinux-01 d6z]# tar -cvf arslinux.tar arslinux/
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
  • tar -cvf 压缩包 文件 目录 同时打包多个
[root@arslinux-01 d6z]# tar -cvf arslinux.tar arslinux 3.txt 2.txt
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
2.txt
  • tar -xvf 压缩包 解压缩命令(如果压缩前的源文件存在,会覆盖,不提示)
[root@arslinux-01 d6z]# tar xvf arslinux.tar 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2

tar -tf 压缩包 查看tar包列表

[root@arslinux-01 d6z]# tar -tf arslinux.tar 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
2.txt

tar -cvf 包名 --exclude 文件/目录 其余不过滤的文件/目录 过滤不要打包的文件

[root@arslinux-01 d6z]# tar -cvf arslinux2.tar --exclude ars1 arslinux 3.txt 2.txt
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ls2
3.txt
2.txt
[root@arslinux-01 d6z]# tar -cvf arslinux3.tar --exclude ars1 --exclude ars2 arslinux 3.txt 2.txt
arslinux/
arslinux/2/
arslinux/2/2.txt
3.txt
2.txt
  • 可以多次使用 --exclude,过滤多个
[root@arslinux-01 d6z]# tar -cvf arslinux4.tar --exclude "*.txt" arslinux 3.txt 2.txt
arslinux/
arslinux/2/
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ls2

以上是可以过滤掉 .txt 结尾的文件

6.7 打包并压缩

tar 打包时支持同时压缩

  • tar -zcvf 压缩包 文件/目录 打包同时用gzip压缩
  • tar -zxvf 压缩包 解包命令
[root@arslinux-01 d6z]# tar -zcvf arslinux.tar.gz arslinux 3.txt 4.txt 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
[root@arslinux-01 d6z]# du -sh arslinux.tar.gz 
1.6M	arslinux.tar.gz
[root@arslinux-01 d6z]# tar -zxvf arslinux.tar.gz 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
  • tar -jcvf 压缩包 文件/目录 打包同时用bzip2压缩
  • tar -jxvf 压缩包 解包命令
[root@arslinux-01 d6z]# tar -jcvf arslinux.tar.bz2 arslinux 3.txt 4.txt 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
[root@arslinux-01 d6z]# tar -jxvf arslinux.tar.bz2
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
[root@arslinux-01 d6z]# du -sh arslinux.tar.bz2 
564K	arslinux.tar.bz2
  • tar -Jcvf 压缩包 文件/目录 打包同时用 xz 压缩
  • tar -Jxvf 压缩包 解包命令
[root@arslinux-01 d6z]# tar -Jcvf arslinux.tar.xz arslinux 3.txt 4.txt 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
[root@arslinux-01 d6z]# tar -Jxvf arslinux.tar.xz 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
  • tar -tf 压缩包 查看压缩包内文件列表(.gz .bz2 .xz 三种格式都支持)
[root@arslinux-01 d6z]# tar -tf arslinux.tar.gz 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
[root@arslinux-01 d6z]# tar -tf arslinux.tar.bz2 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
[root@arslinux-01 d6z]# tar -tf arslinux.tar.xz 
arslinux/
arslinux/2/
arslinux/2/2.txt
arslinux/ars2/
arslinux/ars2/2/
arslinux/ars2/2/2.txt
arslinux/ars2/ars1/
arslinux/ars2/ars1/2/
arslinux/ars2/ars1/2/2.txt
arslinux/ars2/ars1/arslinux/
arslinux/ars2/ars1/arslinux/2/
arslinux/ars2/ars1/arslinux/2/2.txt
arslinux/ars2/ls2
3.txt
4.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值