压缩、解压缩和归档工具
压缩:拿时间换空间
压缩比:压缩前与压缩后体积大小的比例,压缩后的文件体积越小压缩比越大;压缩后的文件大小与源文件的大小越接近压缩比越小
压缩操作很耗CPU
压缩工具
早期的压缩、解压缩的工具:compress/uncompress;压缩后的文件以“.Z” 的格式结尾
v gzip/gunzip/zcat
Ü 压缩后的文件以“.gz”的格式结尾
v bzip2/bunzip2/bzcat
Ü 压缩后的文件以“.bz2”的格式结尾
v xz/unxz/xzcat
Ü 压缩后的文件以“.xz”的格式结尾
v lzma/unlzma
Ü 压缩后的文件以“.lzma”的格式结尾
v zip/unzip
Ü 压缩后的文件以“.zip”的格式结尾
v 归档工具:tar、cpio
压缩工具
支持压缩文件,不支持压缩目录
gzip/gunzip
v 依靠后缀名识别压缩文件
语法:gzip 文件...
gzip 选项… 文件…
gzip [OPTION]... FILE ...
选项:
-c FILE…:将结果输出到标准输出>;而不是默认以.gz的文件中(保留源文件)
gzip -c FILE > /PATH/TO/SOMEFILE.gz
[root@localhost tmp]# gzip -c test.txt > test.gz
[root@localhost tmp]# ls -l test.*
-rw-r--r--. 1 root root 421 6月 19 14:39 test.gz
-rw-r--r--. 1 root root 899 6月 19 14:39 test.txt
[root@localhost tmp]# gzip -d -c test.gz > test.new
[root@localhost tmp]# ls -l test.*
-rw-r--r--. 1 root root 421 6月 19 14:39 test.gz
-rw-r--r--. 1 root root 899 6月 19 14:40 test.new
-rw-r--r--. 1 root root 899 6月 19 14:39 test.txt
-d FILE…:解压缩;相当于gunzip
-#:指定压缩比;默认为6
数字越大,压缩比越高
-1:压缩速度快;压缩比低
-9:压缩速度慢;压缩比高
-r:压缩文件或递归压缩目录中的每一个文件
-f:强制覆盖输出文件和压缩链接
-l:压缩文件列表内容
-a:使用ASCII文字模式
-n:不保存或恢复原始名称和时间戳
-N:保存或恢复原来的名称和时间戳
-q:抑制所有警告
-S:在压缩文件上使用后缀SUF
-t:测试压缩文件的完整性
-v:显示详细信息
-V:显示版本号
gzip保留源文件的压缩方法
压缩单个文件保留源文件
gzip -c FILE1 > NEW.gz
向压缩文件里追加内容
gzip -c FILE2 >> NEW.gz
同时压缩多个文件并保留源文件
cat FILE1 [FILE2]... | gzip > NEW.gz
gzip -c FILE1 [FILE2]... > NEW.gz
重新压缩压缩文件以获得更好的压缩效果
gzip -cd OLD.gz | gzip > NEW.gz
压缩文件
[root@localhost tmp]# gzip test.txt test2.txt
解压文件
[root@localhost tmp]# gzip –d test.txt test2.txt
压缩文件并保留源文件
[root@zhangdaifu tmp]# cp {/etc/fstab,/etc/issue,/etc/inittab} ./
[root@zhangdaifu tmp]# ls
fstab inittab issue
[root@zhangdaifu tmp]# ls -l
total 12
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
[root@zhangdaifu tmp]# gzip -c ./{fstab,issue} > file.gz
[root@zhangdaifu tmp]# ls -l
total 16
-rw-r--r-- 1 root root 221 Oct 19 16:20 file.gz
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
[root@zhangdaifu tmp]# zcat file.gz
/dev/vda1 / ext3
../..省略部分内容
\S
Kernel \r on an \m
[root@zhangdaifu tmp]# gzip -c ./inittab >> file.gz
[root@zhangdaifu tmp]# zcat file.gz
/dev/vda1 / ext3
../..省略部分内容
\S
Kernel \r on an \m
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
[root@zhangdaifu tmp]# cat ./{inittab,issue,fstab} | gzip > file2.gz
[root@zhangdaifu tmp]# ls
file2.gz file.gz fstab inittab issue
[root@zhangdaifu tmp]# ls -l
total 20
-rw-r--r-- 1 root root 451 Oct 19 16:24 file2.gz
-rw-r--r-- 1 root root 537 Oct 19 16:21 file.gz
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
[root@zhangdaifu tmp]# zcat file2.gz
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
\S
Kernel \r on an \m
../..省略部分内容
gunzip是gzip的硬链接;用法选项和gzip一样
zcat 查看.gz压缩包内容
不显式展开的前提下查看文本文件内容
语法:zcat gzip压缩文件
zcat的选项和gzip一样
bzip2/bunzip2
语法:bzip2文件...
bzip2 选项... 文件...
bzip2 [OPTION]... FILE...
选项:
-k(keep):保留原文件
-d:解压缩
-#:指定压缩比;默认为6,数字越大压缩比越大(1-9)
-q:静默整个过程
-s:减少内存使用,用于压缩、解压和测试。文件被解压和测试
-z:强制压缩
--repetitive-best:若文件中有重复出现的资料时,可利用此选项提高压缩效果
--repetitive-fast:若文件中有重复出现的资料时,可利用此选项加快执行效果
其余选项和gzip一样
bzcat查看.bz2压缩包内容
语法:bzcat bzip2压缩文件
[root@zhangdaifu tmp]# bzip2 -k ./{inittab,issue,fstab}
[root@zhangdaifu tmp]# ls
file2.gz file.gz fstab fstab.bz2 inittab inittab.bz2 issue issue.bz2
[root@zhangdaifu tmp]# ls -l
total 32
-rw-r--r-- 1 root root 451 Oct 19 16:24 file2.gz
-rw-r--r-- 1 root root 537 Oct 19 16:21 file.gz
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 186 Oct 19 16:19 fstab.bz2
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 349 Oct 19 16:19 inittab.bz2
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
-rw-r--r-- 1 root root 61 Oct 19 16:19 issue.bz2
[root@zhangdaifu tmp]# bzcat issue.bz2
\S
Kernel \r on an \m
xz/unxz/xzcat(RHEL5/CentOS5不支持)
v 扩展名 .xz
语法:unxz 选项... 文件...
xz [OPTION]... FILE...
选项:
-d:解压缩
-k:保留原文件
-#:指定压缩比;默认为6,数字越大压缩比越大(1-9)
-F:指定压缩格式;默认为xz
其他选项和用法和gzip的一样
xzcat 查看.xz压缩包内容
语法:xzcat [xzun压缩文件]
[root@zhangdaifu tmp]# xz -k ./{inittab,issue,fstab}
[root@zhangdaifu tmp]# ls -l
total 44
-rw-r--r-- 1 root root 451 Oct 19 16:24 file2.gz
-rw-r--r-- 1 root root 537 Oct 19 16:21 file.gz
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 186 Oct 19 16:19 fstab.bz2
-rw-r--r-- 1 root root 208 Oct 19 16:19 fstab.xz
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 349 Oct 19 16:19 inittab.bz2
-rw-r--r-- 1 root root 372 Oct 19 16:19 inittab.xz
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
-rw-r--r-- 1 root root 61 Oct 19 16:19 issue.bz2
-rw-r--r-- 1 root root 80 Oct 19 16:19 issue.xz
[root@zhangdaifu tmp]# xzcat inittab.xz
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
归档(打包)命令
v 归档:把多个文件打包(合并)成一个文件
v 支持文件,支持目录
zip 通用压缩工具
zip是个既能压缩又能归档的工具,和前面几个工具不同的是,zip工具支持压缩目录,且zip命令没有专门的选项用于解压缩
语法:zip 压缩后的名称 源文件或目录
zip 选项 压缩后的名称 源文件或目录
选项:
-d:从压缩文件中删除指定的文件
-r:递归处理;将指定目录下的所有文件和子目录一并处理
-#:指定压缩比;默认为6,数字越大压缩比越大(1-9)
-F:修复已损坏的压缩文件
-P PASSWORD:加密zip文件
-T:测试压缩文件的完整性
-y:直接压缩软链接 ;而不是所指向的文件
-z:给压缩文件添加注释
-t 日期时间:把压缩文件的日期设成指定的日期
-u:更换较新的文件到压缩文件内
-v:显示执行过程
-q:不显示执行过程
更多:http://www.runoob.com/linux/linux-comm-zip.html
解压缩:unzip zip压缩后的文件名
tar 归档文件或目录,不删除源文件
语法:tar [选项...] 压缩后的名称 要压缩的文件或目录
tar zcf today.tar.gz today
tar [OPTION...] [FILE]...
v tar命令支持2种格式的选项
v tar归档后的文件需手动指明后缀名 {.tar|.tar.gz|.tar.bz2…}
v 归档后的后缀:.tar
v 归档并压缩的后缀:.tar.XXX
v 归档完成后通常需要压缩,结合(调用)此前的压缩工具联合归档,就能实现压缩多个文件了
选项:可以合并使用;选项前也可以不用加“-”
创建归档
-c:创建新归档 .tar格式
-f /PATH/TO/SOMEFILE.tar FILE...:指明归档文件;操作归档文件时必用此选项(此选项后必须跟归档文件,而不能跟其他选项)
-r:追加文件到已有tar归档文件末尾;不支持对压缩文件追加
--exclude FILE:不打包指定的文件
--remove-files:创建完归档后,删除源文件;不推荐
归档并压缩(调用压缩工具)
-z:调用gzip进行压缩
-zcf /PATH/TO/SOMEFILE.tar.gz FILE...
解压缩并展开归档:-zxf /PATH/TO/SOMEFILE.tar.gz
-j:调用bzip2进行压缩
-J:调用unxz进行压缩
-p:打包时,保留源文件或目录的权限(仅root)
-P:打包时,保留源文件或目录的绝对路径
--delete FILE:从tar包里删除指定文件
查看归档文件中的文件列表
-t:列出归档内容
-f:指明归档文件
-tf /PATH/TO/SOMEFILE.tar
-z,-j,-J
--delete:从归档文件中删除文件
解开归档
-x:从已有tar归档文件中提取文件
-f:指明要解压的归档文件
-xf /PATH/FROM/SOMEFILE.tar
-C /PATH/TO/DIRNAME:解压后的目录(默认为当前目录)
-xf /PATH/FROM/SOMEFILE.tar -C /PATH/TO/SOMEDIR
-z:调用gzip进行解压缩
-j:调用bzip2进行解压缩
-J:调用unxz进行解压缩
注意:在解开归档时,调用压缩工具的选项可以不写;tar命令会自动识别
-v:显示过程
other
-d:检查归档文件和文件系统的不同之处
-A:将一个已有tar归档文件追加到另一个已有tar归档文件
-u:将比tar归档文件中已有的同名文件较新的文件追加到该tar归档文件中
注:在创建归档时压缩必须使用{-z|-j|-J}选项调用压缩工具,而在解压归档文件时可以省略压缩选项
Error
tar: Removing leading `/' from member names
其原因是tar默认为相对路径,使用绝对路径的话就会报这个错,可以使用-P选项(注意大写)来解决这个问题
tar命令示例
# tar xf redis-5.0.0.tar.gz -C /tmp
# tar Jcf redis.tar.xz /tmp/redis-5.0.0/
# tar tf redis.tar.xz
不打包指定文件(支持通配符)
# tar zcvf data.tar.gz * --exclude sync_batch.sh
创建完归档删除源文件
# tar -jcvf data.tar.bz2 data.tar.gz --remove-files
# tar -jcvf data.tar.bz2 && rm –rf data.tar.gz
只提取tar包里的单个文件(支持通配符)或目录
# tar xf TAR包 TAR包里的文件
# tar xf kernel_compilation.tar.xz kernel_compilation/.config
# tar tf etc-2018-12-07.tar.xz etc/fstab
注意:只能提取到tar包所在目录下,而不能提取到指定目录下
cpio
STDIN | cpio
压缩归档命令对比
命令 |
压缩/解压后默认是否保留源文件 |
压缩对象 |
解压后压缩包是否消失 |
gzip |
否 |
文件 |
是 |
bzip2 |
可以保留 |
文件 |
可以保留 |
zip |
是 |
文件或目录 |
是 |
tar |
是 |
文件或目录 |
否 |