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

文件或目錄

 


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