==============================================================================? ?

?Linux系統解壓縮

==============================================================================

概述:

??本篇將介紹Linux系統中的壓縮和解壓縮的工具,以及歸檔工具(tar,cpio)

  • compress/uncompress:對應 .Z 結尾的壓縮格式文件;

  • gzip/gunzip:其對應的是 .gz 結尾的壓縮格式文件;

  • bzip2/bunzip2:其對應的是 .bz2 結尾的壓縮格式文件;

  • xz/unxz: 其對應的是 .xz 結尾的壓縮格式文件;

  • zip/unzip:其對應的是 .zip 結尾的壓縮格式文件

==============================================================================

Linux系統解壓縮

?1.壓縮比和常用工具

壓縮比:

  • 時間換空間(CPU的時間 --->磁盤空間)

常用工具:

早期的有compressuncompress,其對應的是 .Z 結尾的壓縮格式文件,現在適應較多的有:

  • gzip/gunzip:其對應的是 .gz 結尾的壓縮格式文件;

  • bzip2/bunzip2:其對應的是 .bz2 結尾的壓縮格式文件;

  • xz/unxz:?其對應的是 .xz 結尾的壓縮格式文件;

  • zip/unzip:其對應的是 .zip 結尾的壓縮格式文件

  • tar,cpio:歸檔和展開歸檔

?2.gzip和gunzip(使用最多)

常用工具:

  • gzip,gunzip,zcat

語法:

  • gzip [OPTION]... FILE ...

選項:

  • -d:解壓縮,相當于gunzip

  • -c:將壓縮或解壓縮的結果輸出至標準輸出(gzip -c FILE > /PATH/TP/SOMEFILE.gz);

  • -#:1-9,指定壓縮比,值越大壓縮比越大 ?如:gzip -9 m

  • -v:顯示詳情

解壓縮:

  • guzip

zcat:

  • 不顯式解壓縮的前提下查看文本文件內容(適用于查看小文件) ?如:zcat FILE >?/PATH/TP/SOMEFILE

演示:

[root@centos7?~]#?cp?/var/log/messages?/tmp/test/
[root@centos7?~]#?ll?/tmp/test/
總用量?288
-rw-r-----?1?root?root??????0?2月??20?13:41?a
-rw-rw-rw-?1?root?root??????0?2月??20?13:41?b.danger
-r--r-----?1?root?root??????0?2月??20?13:41?c
-rwxrwxr-x?1?root?root??????0?2月??20?13:41?d
-rwxrwxrwx?1?root?root??????0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root??????0?2月??20?13:41?f
-rw-r--r--?1?root?root??????0?2月??20?13:41?g
-rw-------?1?root?root?292504?2月??20?16:28?messages
[root@centos7?~]#?ll?-h?/tmp/test/messages?
-rw-------?1?root?root?286K?2月??20?16:28?/tmp/test/messages#?壓縮,刪除原文件,保留壓縮后以.gz結尾的文件
[root@centos7?~]#?gzip?/tmp/test/messages[root@centos7?~]#?ll?-h?/tmp/test
總用量?44K
-rw-r-----?1?root?root???0?2月??20?13:41?a
-rw-rw-rw-?1?root?root???0?2月??20?13:41?b.danger
-r--r-----?1?root?root???0?2月??20?13:41?c
-rwxrwxr-x?1?root?root???0?2月??20?13:41?d
-rwxrwxrwx?1?root?root???0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root???0?2月??20?13:41?f
-rw-r--r--?1?root?root???0?2月??20?13:41?g
-rw-------?1?root?root?41K?2月??20?16:28?messages.gz#?解壓縮,原來的壓縮文件被刪除,保留解壓縮后的文件
[root@centos7?~]#?gunzip?/tmp/test/messages.gz?
[root@centos7?~]#?ll?-h?/tmp/test
總用量?288K
-rw-r-----?1?root?root????0?2月??20?13:41?a
-rw-rw-rw-?1?root?root????0?2月??20?13:41?b.danger
-r--r-----?1?root?root????0?2月??20?13:41?c
-rwxrwxr-x?1?root?root????0?2月??20?13:41?d
-rwxrwxrwx?1?root?root????0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root????0?2月??20?13:41?f
-rw-r--r--?1?root?root????0?2月??20?13:41?g
-rw-------?1?root?root?286K?2月??20?16:28?messages#?zcat可以查看壓縮的文件,不建議對大文件使用zcat命令查看
[root@centos7?~]#?zcat?/tmp/test/messages.gz#=====================================================================================
#?解壓縮
[root@centos7?~]#?gzip?-d?/tmp/test/messages.gz?
[root@centos7?~]#?ll?/tmp/test/
總用量?288
-rw-r-----?1?root?root??????0?2月??20?13:41?a
-rw-rw-rw-?1?root?root??????0?2月??20?13:41?b.danger
-r--r-----?1?root?root??????0?2月??20?13:41?c
-rwxrwxr-x?1?root?root??????0?2月??20?13:41?d
-rwxrwxrwx?1?root?root??????0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root??????0?2月??20?13:41?f
-rw-r--r--?1?root?root??????0?2月??20?13:41?g
-rw-------?1?root?root?292504?2月??20?16:28?messages#?將壓縮或解壓縮的結果輸出至標準輸出(gzip?-c?FILE?>?/PATH/TP/SOMEFILE.gz)
[root@centos7?~]#?gzip?-c?/tmp/test/messages?>?/tmp/test/messages.gz
[root@centos7?~]#?ll?/tmp/test/
總用量?332
-rw-r-----?1?root?root??????0?2月??20?13:41?a
-rw-rw-rw-?1?root?root??????0?2月??20?13:41?b.danger
-r--r-----?1?root?root??????0?2月??20?13:41?c
-rwxrwxr-x?1?root?root??????0?2月??20?13:41?d
-rwxrwxrwx?1?root?root??????0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root??????0?2月??20?13:41?f
-rw-r--r--?1?root?root??????0?2月??20?13:41?g
-rw-------?1?root?root?292504?2月??20?16:28?messages
-rw-r--r--?1?root?root??41791?2月??20?16:44?messages.gz#?解壓縮到標準輸出
[root@centos7?~]#?rm?-f?/tmp/test/messages
[root@centos7?~]#?gzip?-d?-c?/tmp/test/messages.gz?>?/tmp/test/messages
[root@centos7?~]#?ll?/tmp/test/
總用量?332
-rw-r-----?1?root?root??????0?2月??20?13:41?a
-rw-rw-rw-?1?root?root??????0?2月??20?13:41?b.danger
-r--r-----?1?root?root??????0?2月??20?13:41?c
-rwxrwxr-x?1?root?root??????0?2月??20?13:41?d
-rwxrwxrwx?1?root?root??????0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root??????0?2月??20?13:41?f
-rw-r--r--?1?root?root??????0?2月??20?13:41?g
-rw-r--r--?1?root?root?292504?2月??20?16:50?messages
-rw-r--r--?1?root?root??41791?2月??20?16:44?messages.gz

?

?2.bzip2/bunzip2/bzcat

語法:

  • bzip2 [OPTION]... FILE ...

選項:

  • -k:keep, 保留原文件;

  • -d解壓縮;

  • -#:1-9,壓縮比,默認為6

bzcat:

  • 不顯式解壓縮的前提下查看文本文件內容

注意:

  • bzip2和gzip命令的使用方式基本相同,壓縮或解壓縮后都會刪除源文件

演示:

#?壓縮
[root@centos7?~]#?bzip2?/tmp/test/messages[root@centos7?~]#?ll?-h?/tmp/test/
總用量?72K
-rw-r-----?1?root?root???0?2月??20?13:41?a
-rw-rw-rw-?1?root?root???0?2月??20?13:41?b.danger
-r--r-----?1?root?root???0?2月??20?13:41?c
-rwxrwxr-x?1?root?root???0?2月??20?13:41?d
-rwxrwxrwx?1?root?root???0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root???0?2月??20?13:41?f
-rw-r--r--?1?root?root???0?2月??20?13:41?g
-rw-r--r--?1?root?root?26K?2月??20?16:50?messages.bz2?#壓縮后的結果
-rw-r--r--?1?root?root?41K?2月??20?16:44?messages.gz#?解壓縮
[root@centos7?~]#?bunzip2?/tmp/test/messages.bz2?
[root@centos7?~]#?ll?-h?/tmp/test/
總用量?332K
-rw-r-----?1?root?root????0?2月??20?13:41?a
-rw-rw-rw-?1?root?root????0?2月??20?13:41?b.danger
-r--r-----?1?root?root????0?2月??20?13:41?c
-rwxrwxr-x?1?root?root????0?2月??20?13:41?d
-rwxrwxrwx?1?root?root????0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root????0?2月??20?13:41?f
-rw-r--r--?1?root?root????0?2月??20?13:41?g
-rw-r--r--?1?root?root?286K?2月??20?16:50?messages??#?解壓縮后的結果
-rw-r--r--?1?root?root??41K?2月??20?16:44?messages.gz#?-k?選項不用指明重定向的文件,自動保留源文件在當前文件中
[root@centos7?~]#?bzip2?-k?/tmp/test/messages
[root@centos7?~]#?ll?-h?/tmp/test/
總用量?360K
-rw-r-----?1?root?root????0?2月??20?13:41?a
-rw-rw-rw-?1?root?root????0?2月??20?13:41?b.danger
-r--r-----?1?root?root????0?2月??20?13:41?c
-rwxrwxr-x?1?root?root????0?2月??20?13:41?d
-rwxrwxrwx?1?root?root????0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root????0?2月??20?13:41?f
-rw-r--r--?1?root?root????0?2月??20?13:41?g
-rw-r--r--?1?root?root?286K?2月??20?16:50?messages
-rw-r--r--?1?root?root??26K?2月??20?16:50?messages.bz2
-rw-r--r--?1?root?root??41K?2月??20?16:44?messages.gz


?3.xz/unxz/zxcat(壓縮比最強)

語法:

  • xz [OPTION]... FILE ...

選項:

  • -k:keep, 保留原文件;

  • -d:解壓縮;

  • -#:1-9,壓縮比,默認為6;

xzcat:

  • 不顯式解壓縮的前提下查看文本文件內容

演示:

[root@centos7?~]#?xz?/tmp/test/messages
[root@centos7?~]#?ll?-h?/tmp/test/
總用量?96K
-rw-r-----?1?root?root???0?2月??20?13:41?a
-rw-rw-rw-?1?root?root???0?2月??20?13:41?b.danger
-r--r-----?1?root?root???0?2月??20?13:41?c
-rwxrwxr-x?1?root?root???0?2月??20?13:41?d
-rwxrwxrwx?1?root?root???0?2月??20?13:41?e.danger
-rw-r--r--?1?root?root???0?2月??20?13:41?f
-rw-r--r--?1?root?root???0?2月??20?13:41?g
-rw-r--r--?1?root?root?26K?2月??20?16:50?messages.bz2
-rw-r--r--?1?root?root?41K?2月??20?16:44?messages.gz
-rw-r--r--?1?root?root?21K?2月??20?16:50?messages.xz

歸檔工具:tar

?1.歸檔及常用工具

歸檔:

  • 歸檔就是將多個文件打包為單個文件以便于管理,默認的歸檔不會執行壓縮。

常用的工具:

  • tar,cpio(不常用)

?2.tar命令

語法:

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

創建歸檔(-c,-f 指定文件):

  • tar -c -f?/PATH/TO/SOMEFILE.tar ?FILE...?(后綴名固定以 .tar 結尾;)

  • tar -cf /PATH/TO/SOMEFILE.tar ?FILE...?(可以合并寫為-cf ,但不能寫為 -fc ,因為-f 選項后帶參數)

展開歸檔(-x,-f 指定文件):

  • tar -x -f?/PATH/TO/SOMEFILE.tar?(展開至歸檔所在的文件中)

  • tar xf /PATH/TO/SOMEFILE.tar?-C?/PATH/TO/SOMEFILE?(-C :展開歸檔至指定文件中)

查看歸檔文件中的列表(-t,-f 指定文件):

  • tar -tf?/PATH/TO/SOMEFILE.tar

注意:

  • 多個選項可以合并,但-f由于要帶參數,因此要放到最右側 如:-cf,-xf,-cf;

  • 選項的引導符 "-" 可省略。如:tar xf,tar zf

演示:

[root@centos7?~]#?ls?/tmp/test/tao
boot.log??fstab??issue??pacemaker.log??wpa_supplicant.log??Xorg.0.log??yum.log#?對所有以?.log?結尾的文件進行歸檔
[root@centos7?~]#?tar?-cf?/tmp/test/mylog.tar?/tmp/test/tao/*.log
[root@centos7?~]#?ll?/tmp/test/
總用量?136
-rw-r--r--?1?root?root?26074?2月??20?16:50?messages.bz2
-rw-r--r--?1?root?root?41791?2月??20?16:44?messages.gz
-rw-r--r--?1?root?root?21420?2月??20?16:50?messages.xz
-rw-r--r--?1?root?root?40960?2月??20?17:45?mylog.tar???#?歸檔后的文件
drwxr-xr-x?2?root?root???121?2月??20?17:43?tao????#?展開歸檔
[root@centos7?test]#?tar?xf?mylog.tar?
[root@centos7?test]#?ll
總用量?176
-rw-r--r--?1?root?root?12097?2月??20?17:42?boot.log
-rw-r--r--?1?root?root?26074?2月??20?16:50?messages.bz2
-rw-r--r--?1?root?root?41791?2月??20?16:44?messages.gz
-rw-r--r--?1?root?root?21420?2月??20?16:50?messages.xz
-rw-r--r--?1?root?root?40960?2月??20?17:51?mylog.tar
-rw-r-----?1?root?root?????0?2月??20?17:42?pacemaker.log
drwxr-xr-x?2?root?root???121?2月??20?17:43?tao
-rw-r--r--?1?root?root??2800?2月??20?17:42?wpa_supplicant.log
-rw-r--r--?1?root?root?18303?2月??20?17:42?Xorg.0.log
-rw-------?1?root?root???105?2月??20?17:42?yum.log#?-C?展開歸檔至指定文件中
[root@centos7?test]#?mkdir?/tmp/newtest
[root@centos7?test]#?tar?xf?mylog.tar?-C?/tmp/newtest
[root@centos7?test]#?ll?/tmp/newtest
總用量?40
-rw-r--r--?1?root?root?12097?2月??20?17:42?boot.log
-rw-r-----?1?root?root?????0?2月??20?17:42?pacemaker.log
-rw-r--r--?1?root?root??2800?2月??20?17:42?wpa_supplicant.log
-rw-r--r--?1?root?root?18303?2月??20?17:42?Xorg.0.log
-rw-------?1?root?root???105?2月??20?17:42?yum.log#?查看歸檔文件中的文件列表
[root@centos7?test]#?tar?tf?mylog.tar?
boot.log
pacemaker.log
wpa_supplicant.log
Xorg.0.log
yum.log



? 歸檔完成后通常需要壓縮,結合此前的壓縮工具,就能實現壓縮多個文件了。?

結合壓縮工具實現:歸檔并壓縮

-z:gzip(后綴名.tar.gz)

  • tar -zcf /PATH/TO/MEFILE.tar.gz?FILE... ?(創建歸檔并壓縮);

  • tar -zxf /PATH/TO/SOMEFILE.tar.gz ??(解壓縮并展開歸檔,z不寫也行)

-j:bzip2(后綴名.tar.bz2)

  • -jcf

  • -jxf

-J:xz(后綴名:.tar.xz)

  • -Jcf

  • -Jxf

注意:

  • 展開歸檔可以直接使用?tar xf?,而無需為其指定對應的壓縮工具選項即可

演示:

#?對目錄進行歸檔并壓縮
[root@centos7?test]#?tar?zcf?/tmp/test/tao.tar.gz?tao
[root@centos7?test]#?ll?/tmp/test
總用量?184
-rw-r--r--?1?root?root?12097?2月??20?17:42?boot.log
-rw-r--r--?1?root?root?26074?2月??20?16:50?messages.bz2
-rw-r--r--?1?root?root?41791?2月??20?16:44?messages.gz
-rw-r--r--?1?root?root?21420?2月??20?16:50?messages.xz
-rw-r--r--?1?root?root?40960?2月??20?17:51?mylog.tar
-rw-r-----?1?root?root?????0?2月??20?17:42?pacemaker.log
drwxr-xr-x?2?root?root???121?2月??20?17:43?tao???????????#?原文件
-rw-r--r--?1?root?root??7232?2月??20?18:15?tao.tar.gz????#?歸檔壓縮后的文件
-rw-r--r--?1?root?root??2800?2月??20?17:42?wpa_supplicant.log
-rw-r--r--?1?root?root?18303?2月??20?17:42?Xorg.0.log
-rw-------?1?root?root???105?2月??20?17:42?yum.log#?刪除原文件
[root@centos7?test]#?rm?-fr?tao?????????#?展開歸檔,其中?z?可省略,tar命令會自動識別其為壓縮文件
[root@centos7?test]#?tar?xf?tao.tar.gz?
[root@centos7?test]#?ll
總用量?184
-rw-r--r--?1?root?root?12097?2月??20?17:42?boot.log
-rw-r--r--?1?root?root?26074?2月??20?16:50?messages.bz2
-rw-r--r--?1?root?root?41791?2月??20?16:44?messages.gz
-rw-r--r--?1?root?root?21420?2月??20?16:50?messages.xz
-rw-r--r--?1?root?root?40960?2月??20?17:51?mylog.tar
-rw-r-----?1?root?root?????0?2月??20?17:42?pacemaker.log
drwxr-xr-x?2?root?root???121?2月??20?17:43?tao???????????#?展開后的文件
-rw-r--r--?1?root?root??7232?2月??20?18:15?tao.tar.gz
-rw-r--r--?1?root?root??2800?2月??20?17:42?wpa_supplicant.log
-rw-r--r--?1?root?root?18303?2月??20?17:42?Xorg.0.log
-rw-------?1?root?root???105?2月??20?17:42?yum.log

zip/unzip

? ? ? ? ---最通用的壓縮工具,即可以歸檔,又能壓縮(現在不常用)

創建歸檔(.zip后綴):

  • zip file.zip ?/PATH/TO/SOMEFILE

解壓縮

  • unzip?file.zip

演示:

#?對目錄進行歸檔并壓縮
[root@centos7?test]#?zip?/tmp/test/tao.zip?taoadding:?tao/?(stored?0%)
[root@centos7?test]#?ll
總用量?188
-rw-r--r--?1?root?root?12097?2月??20?17:42?boot.log
-rw-r--r--?1?root?root?26074?2月??20?16:50?messages.bz2
-rw-r--r--?1?root?root?41791?2月??20?16:44?messages.gz
-rw-r--r--?1?root?root?21420?2月??20?16:50?messages.xz
-rw-r--r--?1?root?root?40960?2月??20?17:51?mylog.tar
-rw-r-----?1?root?root?????0?2月??20?17:42?pacemaker.log
drwxr-xr-x?2?root?root???121?2月??20?17:43?tao
-rw-r--r--?1?root?root??7232?2月??20?18:15?tao.tar.gz
-rw-r--r--?1?root?root???158?2月??20?18:26?tao.zip
-rw-r--r--?1?root?root??2800?2月??20?17:42?wpa_supplicant.log
-rw-r--r--?1?root?root?18303?2月??20?17:42?Xorg.0.log
-rw-------?1?root?root???105?2月??20?17:42?yum.log[root@centos7?test]#?rm?-fr?tao#?解壓縮
[root@centos7?test]#?unzip?tao.zip?
Archive:??tao.zipcreating:?tao/
[root@centos7?test]#?ll
總用量?188
-rw-r--r--?1?root?root?12097?2月??20?17:42?boot.log
-rw-r--r--?1?root?root?26074?2月??20?16:50?messages.bz2
-rw-r--r--?1?root?root?41791?2月??20?16:44?messages.gz
-rw-r--r--?1?root?root?21420?2月??20?16:50?messages.xz
-rw-r--r--?1?root?root?40960?2月??20?17:51?mylog.tar
-rw-r-----?1?root?root?????0?2月??20?17:42?pacemaker.log
drwxr-xr-x?2?root?root?????6?2月??20?17:43?tao
-rw-r--r--?1?root?root??7232?2月??20?18:15?tao.tar.gz
-rw-r--r--?1?root?root???158?2月??20?18:26?tao.zip
-rw-r--r--?1?root?root??2800?2月??20?17:42?wpa_supplicant.log
-rw-r--r--?1?root?root?18303?2月??20?17:42?Xorg.0.log
-rw-------?1?root?root???105?2月??20?17:42?yum.log

cpio 命令

cpio

  • cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio”或者“.tar”結尾的文件。

用法:

  • cpio[選項] > 文件名或者設備名

  • cpio[選項] < 文件名或者設備名

選項:

  • -o:將文件拷貝打包成文件或者將文件輸出到設備上;

  • -i:解包,將打包文件解壓或將設備上的備份還原到系統;

  • -t:預覽,查看文件內容或者輸出到設備上的文件內容;

  • -v:顯示打包過程中的文件名稱;

  • -d:解包生成目錄,在cpio還原時,自動的建立目錄;

  • -c:一種較新的存儲方式

示例:

將etc目錄備份:

  • find ./etc-print |cpio -ov> etc.cpio

內容預覽

  • cpio–tv < etc.cpio

要解包文件

  • cpio–iv < etc.cpio

  • cpio–idv < etc.cpio