linux打包压缩工具详解

时间:2021-06-02 12:22:13   收藏:0   阅读:0

linux打包压缩工具详解



1.linux文件压缩工具

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

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

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

1.1 compress命令详解

1.2 gzip命令详解

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

1.3 bzip2命令详解

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

1.4 xz命令详解

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

1.5 zip命令详解

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
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!