linux打包压缩工具详解

Posted 向往自由的独行者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux打包压缩工具详解相关的知识,希望对你有一定的参考价值。

linux打包压缩工具详解



1.linux文件压缩工具

压缩文件会减少文件的大小,对于传输效率会大大提高,而文本类型的压缩比是比较高的,另外单个小文件传输速率会比较慢,而单个文件传输效率会比较高。

注意:一般压缩工具解压缩文件时是根据文件后缀进行的,因此需要严格指定压缩文件的后缀。

下面介绍几种常用的压缩工具。

1.1 compress命令详解

  • compress:用于压缩文件

  • unconpress:用于解压缩文件

  • zcat:不解压查看压缩文件内容

    compress压缩的文件的后缀名为.Z

    conpress的常用选项如下:

    选项 说明
    -d 解压缩文件
    -c 结果输出至标准输出,不删除原文件,默认会把原文件删除
    -v 显示过程
    #安装软件包ncompress
    [root@xuzhichao test2]# yum install ncompress
    
    #示例一:使用compress对文件进行压缩,压缩后原文件默认删除,压缩文件以原文件名加上.Z后缀名组成。
    [root@xuzhichao test2]# ll
    total 236760
    -rw-r--r-- 1 root root 242439168 May 25 21:19 file
    [root@xuzhichao test2]# compress file 
    [root@xuzhichao test2]# ll
    total 40
    -rw-r--r-- 1 root root 37451 May 25 21:19 file.Z
    
    #示例二:使用unconpress或compress -d选项对文件解压缩
    [root@xuzhichao test2]# compress -d file.Z
    #[root@xuzhichao test2]# uncompress file.Z
    [root@xuzhichao test2]# ll
    total 236760
    -rw-r--r-- 1 root root 242439168 May 25 21:19 file
    
    #示例三:使用compress -c选项压缩时保留原文件,需要使用重定向把屏幕的输出指定到文件中。
    [root@xuzhichao test2]# ll
    total 236760
    -rw-r--r-- 1 root root 242439168 May 25 21:19 file
    [root@xuzhichao test2]# gzip -c file > file.Z
    [root@xuzhichao test2]# ll
    total 236992
    -rw-r--r-- 1 root root 242439168 May 25 21:19 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    
    #示例四:zcat查看压缩文件内容
    [root@xuzhichao test2]# cp /etc/passwd .
    [root@xuzhichao test2]# compress passwd 
    [root@xuzhichao test2]# zcat passwd.Z 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    ......
    

1.2 gzip命令详解

gzip命令比compress应用更为广泛。

  • gzip:用于压缩文件

  • gunzip:用于解压缩文件

  • zcat:不解压查看压缩文件内容

    gzip压缩的文件后缀名为.gz

    gzip命令的常用选项如下:

    选项 说明
    -d 解压缩文件
    -c 结果输出至标准输出,不删除原文件,默认会把原文件删除
    -v 显示过程
    -# 1-9,指定压缩比,值越大,压缩比越大,但是压缩速度越慢,默认为6级别
    #示例一:使用gzip对文件进行压缩,压缩后原文件默认删除,压缩文件以原文件名加上.gz后缀名组成。
    [root@xuzhichao test2]# ll
    total 236992
    -rw-r--r-- 1 root root 242439168 May 25 21:19 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    [root@xuzhichao test2]# gzip file
    [root@xuzhichao test2]# ll
    total 464
    -rw-r--r-- 1 root root 235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root 235312 May 25 21:19 file.gz
    
    #示例二:使用gzip -d选项或gunzip命令对文件解压缩,默认会删除压缩文件
    [root@xuzhichao test2]# gzip -d file.gz 
    [root@xuzhichao test2]# ll
    total 236992
    -rw-r--r-- 1 root root 242439168 May 25 21:19 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    
    #示例三:默认gzip压缩文件会删除原文件,使用-c选项可以保留原文件
    [root@xuzhichao test2]# ll
    total 236992
    -rw-r--r-- 1 root root 242439168 May 25 21:19 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    [root@xuzhichao test2]# gzip -c file > file.gz
    [root@xuzhichao test2]# ll
    total 237224
    -rw-r--r-- 1 root root 242439168 May 25 21:19 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root    235302 May 25 21:27 file.gz
    
    #示例四:zcat也可以查看gzip压缩的文件,同时可以使用zcat命令解压缩文件同时保留压缩文件
    [root@xuzhichao test2]# zcat file.gz > file
    [root@xuzhichao test2]# ll
    total 237224
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root    235302 May 25 21:27 file.gz
    
    #示例五:gzip指定压缩级别,默认为6级别
    [root@xuzhichao test2]# ll
    total 473984
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root    235302 May 25 21:27 file.gz
    -rw-r--r-- 1 root root 242439168 May 25 21:28 file2
    [root@xuzhichao test2]# gzip -9 file2 
    [root@xuzhichao test2]# ll
    total 237456
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root    235312 May 25 21:27 file.gz
    -rw-r--r-- 1 root root    235298 May 25 21:28 file2.gz
    #PS:实际测试调整压缩比压缩文件并不理想,不建议修改。
    
    #示例六:gzip可以配合管道,实现对管道传过来的输入信息进行压缩
    [root@xuzhichao test2]# dmesg > dmesg.log
    [root@xuzhichao test2]# dmesg | gzip > dmesg.log.gz
    [root@xuzhichao test2]# ll dmesg.log*
    -rw-r--r-- 1 root root 125129 May 25 21:31 dmesg.log
    -rw-r--r-- 1 root root  23026 May 25 21:32 dmesg.log.gz
    

1.3 bzip2命令详解

bzip2比前两个压缩命令就有更好的压缩比。

  • bzip2:用于压缩文件

  • bunzip2:用于解压缩文件

  • bzcat:不解压查看bzip2压缩文件内容

    bzip2压缩的文件的后缀名是.bz2

    bzip2命令的常用选项如下:

    选项 说明
    -k 保留原文件,默认bzip2压缩后会删除原文件
    -d 接压缩文件
    -# 1-9,指定压缩比,值越大,压缩比越大,但是压缩速度越慢,默认为9级别
    #示例一:使用bzip2压缩文件,压缩比较高
    [root@xuzhichao test2]# ll
    total 237456
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root    235312 May 25 21:27 file.gz
    [root@xuzhichao test2]# bzip2 -k file
    [root@xuzhichao test2]# ll
    total 237228
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root       209 May 25 21:27 file.bz2
    -rw-r--r-- 1 root root    235312 May 25 21:27 file.gz
    
    #示例二:解压缩文件
    [root@xuzhichao test2]# bzip2 -d file.bz2 
    

1.4 xz命令详解

xz是一个较新的压缩工具,也具有比较高的压缩比。

  • xz:用于压缩文件

  • unxz:用于解压缩文件

  • xzcat:不解压查看xz压缩文件内容

    xz压缩的文件的后缀名是.xz

    xz命令的常用选项如下:

    选项 说明
    -k 保留原文件,默认xz压缩后会删除原文件
    -d 接压缩文件
    -# 1-9,指定压缩比,值越大,压缩比越大,但是压缩速度越慢,默认为9级别
    #示例一:使用xz压缩文件
    #[root@xuzhichao test2]# ll
    total 237228
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root       209 May 25 21:27 file.bz2
    -rw-r--r-- 1 root root    235312 May 25 21:27 file.gz
    [root@xuzhichao test2]# xz -k file
    [root@xuzhichao test2]# ll
    total 237264
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root       209 May 25 21:27 file.bz2
    -rw-r--r-- 1 root root    235312 May 25 21:27 file.gz
    -rw-r--r-- 1 root root     35396 May 25 21:27 file.xz
    
    #示例二:解压缩文件
    [root@xuzhichao test2]# xz -d file.xz 
    

1.5 zip命令详解

  • zip:用于对文件或目录进行压缩,以上压缩工具仅支持对文件进行压缩,不支持对目录进行压缩

  • unzip:用于文件或目录进行解压缩

    使用zip命令压缩的文件后缀名为.zip

    zip的命令使用格式为:

    zip [options] FILE.ZIP FILE
    说明:
    FILE:为需要压缩的文件或目录
    FILE.ZIP:为压缩的文件名
    

    zip主要参数如下:

    选项 说明
    -r 用于对目录文件进行压缩
    -T 检查zip压缩包是否是完整的

    unzip的主要参数如下:

    选项 说明
    -l或-t 不解压查看压缩包的内容
    -d 指定zip压缩包的内容解压到何处
    -p 内容输出到屏幕

    zip命令的使用示例如下:

    #安装zip和unzip工具包
    [root@xuzhichao test2]# yum install zip unzip
    
    #示例一:使用zip压缩文件,默认不会删除原文件
    [root@xuzhichao test2]# ll
    total 237264
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root       209 May 25 21:27 file.bz2
    -rw-r--r-- 1 root root    235312 May 25 21:27 file.gz
    -rw-r--r-- 1 root root     35396 May 25 21:27 file.xz
    [root@xuzhichao test2]# zip file.zip file
      adding: file (deflated 100%)
    [root@xuzhichao test2]# ll
    total 237496
    -rw-r--r-- 1 root root 242439168 May 25 21:27 file
    -rw-r--r-- 1 root root    235312 May 25 21:21 file.Z
    -rw-r--r-- 1 root root       209 May 25 21:27 file.bz2
    -rw-r--r-- 1 root root    235312 May 25 21:27 file.gz
    -rw-r--r-- 1 root root     35396 May 25 21:27 file.xz
    -rw-r--r-- 1 root root    235447 May 26 15:25 file.zip
    
    #示例二:使用zip压缩目录,使用-r参数
    root@xuzhichao data]# zip -r test.zip test2
      adding: test2/ (stored 0%)
      adding: test2/file.Z (stored 0%)
      adding: test2/file (deflated 100%)
      adding: test2/file.gz (deflated 100%)
      adding: test2/file.bz2 (deflated 63%)
      adding: test2/file.xz (deflated 98%)
      adding: test2/file.zip (stored 0%)
    [root@xuzhichao data]# ll
    -rw-r--r-- 1 root root 708565 May 26 15:26 test.zip
    
    #示例三:解压缩文件,若存在同名文件,会提示是否覆盖
    [root@xuzhichao test2]# unzip file.zip 
    Archive:  file.zip
    replace file? [y]es, [n]o, [A]ll, [N]one, [r]ename: r
    new name: file2
      inflating: file2                   
    
    #示例四:解压目录,会解压到文件的原始位置,并提示是否覆盖
    [root@xuzhichao data]# unzip test.zip 
    Archive:  test.zip
    replace test2/file.Z? [y]es, [n]o, [A]ll, [N]one, [r]ename: A  
     extracting: test2/file.Z            
      inflating: test2/file              
      inflating: test2/file.gz           
      inflating: test2/file.bz2          
      inflating: test2/file.xz           
     extracting: test2/file.zip 
     
    #示例五:检查zip压缩包是否是完整的
    [root@xuzhichao data]# zip -T test.zip 
    test of test.zip OK
    
    #示例六:使用-d选项指定解压缩位置
    [root@xuzhichao data]# unzip test.zip -d test3
    Archive:  test.zip
       creating: test3/test2/
     extracting: test3/test2/file.Z      
      inflating: test3/test2/file        
      inflating: test3/test2/file.gz     
      inflating: test3/test2/file.bz2    
      inflating: test3/test2/file.xz     
     extracting: test3/test2/file.zip    
    [root@xuzhichao data]# ll test3/
    total 0
    drwxr-xr-x 2 root root 94 May 26 15:25 test2
    
    #示例七:查看压缩文件内容,使用unzip -l参数
    [root@xuzhichao data]# unzip -l test.zip 
    Archive:  test.zip
      Length      Date    Time    Name
    ---------  ---------- -----   ----
            0  05-26-2021 15:25   test2/
       235312  05-25-2021 21:21   test2/file.Z
    242439168  05-25-2021 21:27   test2/file
       235312  05-25-2021 21:27   test2/file.gz
          209  05-25-2021 21:27   test2/file.bz2
        35396  05-25-2021 21:27   test2/file.xz
       235447  05-26-2021 15:25   test2/file.zip
    ---------                     -------
    243180844                     7 files
    [root@xuzhichao data]# unzip -l /data/test2/file.zip 
    Archive:  /data/test2/file.zip
      Length      Date    Time    Name
    ---------  ---------- -----   ----
    242439168  05-25-2021 21:27   file
    ---------                     -------
    242439168                     1 file
    
    #示例八:配合管道实现对输入重定向的内容进行压缩
    [root@xuzhichao data]# cat /var/log/messages | zip messages.zip -
      adding: - (deflated 86%)
    [root@xuzhichao data]# ll messages.zip 
    -rw-r--r-- 1 root root 46728 May 26 16:11 messages.zip
    
    #示例九:-p配合重定向进行解压
    [root@xuzhichao data]# unzip -p test2/file.zip > file
    

2.linux文件打包工具

2.1 tar命令详解

tar是linux中常用的一个打包工具,可以对文件和目录进行打包,还可以配合压缩工具同时进行打包压缩。

tar命令的语法如下:

tar [OPTION...] [FILE]...

tar命令的常用选项如下:

选项 说明
-c 创建归档文件
-t 查看归档文件内容
-x 将归档文件解包
-f 指定归档文件
-p 保留文件的原始权限,多用于备份
-C 指定归档文件解包目录
-z 使用gzip格式压缩
-j 使用bzip2格式压缩
-J 使用xz格式压缩
--exclude 排除文件
-T 指定需要打包的文件列表
-X 指定要排除打包的文件列表
-v 显示过程
-r 向归档文件中追加文件,注意归档为文件不能被压缩,否则无法追加文件
-P (大写P)可以保留绝对目录压缩

tar命令的常用组合选项如下:

组合选项 说明
czvf 使用gzip格式打包压缩
cjvf 使用bzip2格式打包压缩文件
cJVF 使用xz格式打包压缩
tf 查看压缩包内容
xvf 自动选择压缩格式对归档文件解包

tar命令的常用后缀名如下:

后缀名 说明
tar.gz 使用gzip格式压缩的文件
tar.bz2 使用bzip2格式压缩的文件
tar.xz 使用xz格式压缩的文件

tar命令的常见用法示例如下:

#tar包安装
[root@xuzhichao data]# yum install tar

#示例一:使用gzip,bzip2,xz分别压缩打包文件
[root@xuzhichao data]# tar czvf repo.tar.gz /etc/yum.repos.d/
tar: Removing leading `/\' from member names
/etc/yum.repos.d/
/etc/yum.repos.d/backup/
/etc/yum.repos.d/backup/CentOS-Base.repo
/etc/yum.repos.d/backup/CentOS-CR.repo
/etc/yum.repos.d/backup/CentOS-Debuginfo.repo
/etc/yum.repos.d/backup/CentOS-fasttrack.repo
/etc/yum.repos.d/backup/CentOS-Media.repo
/etc/yum.repos.d/backup/CentOS-Sources.repo
/etc/yum.repos.d/backup/CentOS-Vault.repo
/etc/yum.repos.d/backup/CentOS-x86_64-kernel.repo
/etc/yum.repos.d/base.repo

[root@xuzhichao data]# tar cjvf repo.tar.bz2 /etc/yum.repos.d/
tar: Removing leading `/\' from member names
/etc/yum.repos.d/
/etc/yum.repos.d/backup/
/etc/yum.repos.d/backup/CentOS-Base.repo
/etc/yum.repos.d/backup/CentOS-CR.repo
/etc/yum.repos.d/backup/CentOS-Debuginfo.repo
/etc/yum.repos.d/backup/CentOS-fasttrack.repo
/etc/yum.repos.d/backup/CentOS-Media.repo
/etc/yum.repos.d/backup/CentOS-Sources.repo
/etc/yum.repos.d/backup/CentOS-Vault.repo
/etc/yum.repos.d/backup/CentOS-x86_64-kernel.repo
/etc/yum.repos.d/base.repo

[root@xuzhichao data]# tar cJvf repo.tar.xz /etc/yum.repos.d/
tar: Removing leading `/\' from member names
/etc/yum.repos.d/
/etc/yum.repos.d/backup/
/etc/yum.repos.d/backup/CentOS-Base.repo
/etc/yum.repos.d/backup/CentOS-CR.repo
/etc/yum.repos.d/backup/CentOS-Debuginfo.repo
/etc/yum.repos.d/backup/CentOS-fasttrack.repo
/etc/yum.repos.d/backup/CentOS-Media.repo
/etc/yum.repos.d/backup/CentOS-Sources.repo
/etc/yum.repos.d/backup/CentOS-Vault.repo
/etc/yum.repos.d/backup/CentOS-x86_64-kernel.repo
/etc/yum.repos.d/base.repo

[root@xuzhichao data]# ll repo.tar.*
-rw-r--r-- 1 root root 2626 May 26 17:22 repo.tar.bz2
-rw-r--r-- 1 root root 2780 May 26 17:19 repo.tar.gz
-rw-r--r-- 1 root root 2532 May 26 17:22 repo.tar.xz

#示例二:预览打包文件内容,使用tvf选项,注意v选项会以长格式显示文件列表
[root@xuzhichao data]# tar tvf repo.tar.bz2 
drwxr-xr-x root/root         0 2020-11-03 17:48 etc/yum.repos.d/
drwxr-xr-x root/root         0 2020-11-03 17:48 etc/yum.repos.d/backup/
-rw-r--r-- root/root      1664 2020-04-08 06:01 etc/yum.repos.d/backup/CentOS-Base.repo
-rw-r--r-- root/root      1309 2020-04-08 06:01 etc/yum.repos.d/backup/CentOS-CR.repo
-rw-r--r-- root/root       649 2020-04-08 06:01 etc/yum.repos.d/backup/CentOS-Debuginfo.repo
-rw-r--r-- root/root       314 2020-04-08 06:01 etc/yum.repos.d/backup/CentOS-fasttrack.repo
-rw-r--r-- root/root       630 2020-04-08 06:01 etc/yum.repos.d/backup/CentOS-Media.repo
-rw-r--r-- root/root      1331 2020-04-08 06:01 etc/yum.repos.d/backup/CentOS-Sources.repo
-rw-r--r-- root/root      7577 2020-04-08 06:01 etc/yum.repos.d/backup/CentOS-Vault.repo
-rw-r--r-- root/root       616 2020-04-08 06:01 etc/yum.repos.d/backup/CentOS-x86_64-kernel.repo
-rw-r--r-- root/root       131 2020-11-03 17:48 etc/yum.repos.d/base.repo

[root@xuzhichao data]# tar tf repo.tar.bz2 
etc/yum.repos.d/
etc/yum.repos.d/backup/
etc/yum.repos.d/backup/CentOS-Base.repo
etc/yum.repos.d/backup/CentOS-CR.repo
etc/yum.repos.d/backup/CentOS-Debuginfo.repo
etc/yum.repos.d/backup/CentOS-fasttrack.repo
etc/yum.repos.d/backup/CentOS-Media.repo
etc/yum.repos.d/backup/CentOS-Sources.repo
etc/yum.repos.d/backup/CentOS-Vault.repo
etc/yum.repos.d/backup/CentOS-x86_64-kernel.repo
etc/yum.repos.d/base.repo

#示例三:tar解归档文件,默认解压缩到当前目录,使用-C选项解压到指定目录
#xf可以自动选择压缩算法,无需指定。
[root@xuzhichao data]# tar xvf repo.tar.bz2 -C test3
etc/yum.repos.d/
etc/yum.repos.d/backup/
etc/yum.repos.d/backup/CentOS-Base.repo
etc/yum.repos.d/backup/CentOS-CR.repo
etc/yum.repos.d/backup/CentOS-Debuginfo.repo
etc/yum.repos.d/backup/CentOS-fasttrack.repo
etc/yum.repos.d/backup/CentOS-Media.repo
etc/yum.repos.d/backup/CentOS-Sources.repo
etc/yum.repos.d/backup/CentOS-Vault.repo
etc/yum.repos.d/backup/CentOS-x86_64-kernel.repo
etc/yum.repos.d/base.repo

[root@xuzhichao data]# tree test3/etc/
test3/etc/
`-- yum.repos.d
    |-- backup
    |   |-- CentOS-Base.repo
    |   |-- CentOS-CR.repo
    |   |-- CentOS-Debuginfo.repo
    |   |-- CentOS-Media.repo
    |   |-- CentOS-Sources.repo
    |   |-- CentOS-Vault.repo
    |   |-- CentOS-fasttrack.repo
    |   `-- CentOS-x86_64-kernel.repo
    `-- base.repo

#示例四:如果需要向归档文件追加文件,使用-r选项
[root@xuzhichao data]# tar cf repo.tar /etc/yum.repos.d/
tar: Removing leading `/\' from member names
[root@xuzhichao data]# tar rf repo.tar /boot/
tar: Removing leading `/\' from member names

注意:使用tar压缩后,会提示“tar: Removing leading `/\' from member names”。

意思是移除每个文件名的根目录,这样主要是为了安全,例如使用tar备份/etc目录到root目录下的etc.tar.bz文件,如果要解归档文件,在tar归档文件中所记录的文件名就是解压缩后的实际档名,如果没有拿掉目录,解压缩后档名就是绝对路径,数据会覆盖到到/etc/xxx去,原本的/etc/下的数据就会丢失。拿掉了根目录,假设将备份的数据在/tmp解开,那么解压缩的档名就会变成/tmp/etc/xxx。-P选项会不移除根目录。

当需要打包文件夹内的部分内容,或需要排除,增加很多文件时,可以将需要打包和需要排除的文件路径分别写入一个路径文件,利用-T和-X读取路径文件,进行打包。

#示例:打包/etc和/boot目录,除了exlist中的文件。
[root@xuzhichao test1]# cat list.txt 
/etc
/boot
[root@xuzhichao test1]# cat exlist.txt 
/etc/fstab
/etc/passwd
/etc/hosts
/boot/config-3.10.0-1127.el7.x86_64
/boot/grub
[root@xuzhichao test1]# tar -cvpjf backup.tar.bz -T list.txt -X exlist.txt
[root@xuzhichao test1]# ll
total 146168
-rw-r--r-- 1 root root 149665940 May 26 23:07 backup.tar.bz

2.2 cpio命令详解

cpio命令和tar命令一样,可以打包文件或目录,也可以对打包文件进行解包,主要解包以cpio和tar结尾的文件。

cpio的主要语法如下:

cpio [OPTION...] [destination-directory]

cpio的常用选项如下:

选项 说明
-o 归档模式,cpio将向归档文件中拷贝文件
-i 提取模式,cpio从归档文件中提取文件,或列出归档文件中的文件列表
-t 预览,列出标准输入的归档文件中的文件列表
-v 显示过程
-u 解包时或文件名冲突会覆盖原始文件

cpio的常用组合选项如下:

组合选项 说明
-ov 打包文件,一般通过ls或find的标准输出获取打包文件
-tv 查看打包文件
-idv 解包文件

注意:只有在当前目录下找到文件并且执行cpio,cpio中的内容是当前路径,否则是绝对路径,解包时会以绝对路径解包。

cpio的使用示例如下:

#cpio安装包
[root@xuzhichao test1]# rpm -q cpio
cpio-2.11-27.el7.x86_64

#示例一:打包文件
[root@xuzhichao test1]# find /etc/ -name "*.conf" | cpio -ov > conf.cpio

#示例二:查看打包文件
[root@xuzhichao test1]# cpio -tv < conf.cpio 
-rw-r--r--   1 root     root           53 May 26 22:58 /etc/resolv.conf
......

#示例三:解打包文件,默认会解包到原始文件下,解包时若文件冲突,默认不会覆盖原文件,加上-u选项会覆盖原文件
[root@xuzhichao test1]# cpio -idv < conf.cpio 
cpio: /etc/resolv.conf not created: newer or same age version exists
/etc/resolv.conf
......

#示例四:/boot/initramfs-3.10.0-1127.el7.x86_64.img文件即为cpio打包文件
[root@xuzhichao boot]# file initramfs-3.10.0-1127.el7.x86_64.img 
initramfs-3.10.0-1127.el7.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
[root@xuzhichao boot]# cpio -tv < initramfs-3.10.0-1127.el7.x86_64.img
drwxr-xr-x   3 root     root            0 Nov  4  2020 .
drwxr-xr-x   3 root     root            0 Nov  4  2020 kernel
drwxr-xr-x   3 root     root            0 Nov  4  2020 kernel/x86
drwxr-xr-x   2 root     root            0 Nov  4  2020 kernel/x86/microcode
-rw-r--r--   1 root     root       100352 Nov  4  2020 kernel/x86/microcode/GenuineIntel.bin
-rw-r--r--   1 root     root            2 Nov  4  2020 early_cpio
198 blocks

2.3 split命令详解

split工具用于对大文件进行切割,切割成多个小文件。

split命令的常用选项如下:

split [OPTION]... [FILE [PREFIX]]
选项 说明
-b 指定切割单位的大小
-d 使用数值区分文件的后缀名
#示例一:切割文件,默认是以字母为切割文件的后缀的。
[root@xuzhichao data]# ll -h
total 320M
-rw-r--r-- 1 root root 320M May 27 00:18 exp.tar

[root@xuzhichao data]# split -b 20M exp.tar newfile
[root@xuzhichao data]# ll
total 655040
-rw-r--r-- 1 root root 335380480 May 27 00:18 exp.tar
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileaa
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileab
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileac
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfilead
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileae
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileaf
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileag
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileah
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileai
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileaj
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileak
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileal
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileam
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfilean
-rw-r--r-- 1 root root  20971520 May 27 00:20 newfileao
-rw-r--r-- 1 root root  20807680 May 27 00:20 newfileap

#示例二:使用数值做为切割文件的后缀
[root@xuzhichao data]# split -d -b 20M exp.tar newsplit
[root@xuzhichao data]# ll newsplit*
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit00
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit01
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit02
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit03
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit04
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit05
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit06
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit07
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit08
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit09
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit10
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit11
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit12
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit13
-rw-r--r-- 1 root root 20971520 May 27 00:22 newsplit14
-rw-r--r-- 1 root root 20807680 May 27 00:22 newsplit15

当需要把切割后的文件进行合并时,可以使用cat和重定向的方式进行合并,示例如下:

#示例:
[root@xuzhichao data]# cat newsplit* > newexp.tar
[root@xuzhichao data]# rm -f newsplit* 
[root@xuzhichao data]# tar tf newexp.tar 
test1/
test1/list.txt
test1/exlist.txt
test1/backup.tar.bz
test1/boot.cpio
test1/a.cpio
test1/b.cpio
test1/root.cpio
test1/conf.cpio
test1/etc.tar

以上是关于linux打包压缩工具详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux下的tar归档及解压缩功能详解

Linux系统文件的压缩与打包详解

Linux打包压缩与解压详解

tar打包工具详解

Linux下的tar压缩解压缩命令详解

Linux命令详解--压缩与解压缩