Linux 压缩、解压缩和归档工具

压缩、解压缩和归档工具

压缩:拿时间换空间

压缩比:压缩前与压缩后体积大小的比例,压缩后的文件体积越小压缩比越大;压缩后的文件大小与源文件的大小越接近压缩比越小

image.png

image.png

压缩操作很耗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  归档工具:tarcpio

压缩工具

支持压缩文件,不支持压缩目录

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

../..省略部分内容

gunzipgzip的硬链接;用法选项和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/xzcatRHEL5/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

image.png

 

 

压缩归档命令对比

命令

压缩/解压后默认是否保留源文件

压缩对象

解压后压缩包是否消失

gzip

文件

bzip2

可以保留

文件

可以保留

zip

文件或目录

tar

文件或目录

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章