壓縮與歸檔,這是兩種不同的概念,其用途也不一樣,壓縮是通過壓縮算法對文件進行壓縮,其體積會根據算法減少;歸檔則是將文件打包,相當與給文件加了個“盒子”,體積還有可能增大。
壓縮工具只能壓縮單個文件,不能壓縮多個文件或文件夾,所以需要先歸檔文件再壓縮。
常見的壓縮工具有:gzip、bzip2、xz、zip、compress(比較古老了)
常見的歸檔工具有:zip(既可壓縮、也可歸檔)、tar、cpio
壓縮工具 | 對應解壓工具 | 展開工具 | 壓縮後綴 |
---|---|---|---|
compress | uncompress | zcat | .Z |
gzip | gunzip、gzip -d | zcat | .gz |
bzip2 | bunzip2、bzip2 -d | bzcat | .bz2 |
xz | unxz、xz -d | xzcat | .xz |
zip | unzip、zip -d | zip -l | .zip |
一、compress
compress 是早期Linux使用的壓縮工具,到現在基本不用了。
壓縮文件:
[root@localhost ~]# compress messages
[root@localhost ~]# ll messages
-rw-------. 1 root root 4354 Jan 7 21:49 messages.Z
解壓文件:
[root@localhost ~]# uncompress messages.Z
二、gzip
gzip 這是以前較爲流行的壓縮工具,採用LZ77算法,至今也還能見其被使用
gzip [options] filename
-d 解壓,相當於gunzip
-t test,檢查壓縮文件是否完整,並不解壓
-r 對文件夾中的所文件進行壓縮/解壓,並不能真正的壓縮/解壓文件夾
-c --stdout --to-stdout,將壓縮結果作爲標準化輸出,不修改原文件
-# 指定壓縮比,1-9,級別越高壓縮率越高,越消耗資源
對messages文件進行壓縮:
[root@localhost ~]# ll -h messages
-rw-r--r--. 1 root root 10K Jan 7 22:05 messages
[root@localhost ~]# gzip -9 messages
[root@localhost ~]# ll -h messages.gz
-rw-r--r--. 1 root root 54 Jan 7 22:05 messages.gz
對messages文件進行解壓:
[root@localhost ~]# gunzip messages.gz
或 [root@localhost ~]# gzip -d messages.gz
[root@localhost ~]# ll -h messages
-rw-r--r--. 1 root root 10K Jan 7 22:05 messages
不解壓,僅查看文件:
[root@localhost ~]# zcat messages.gz | less
不管是壓縮還是解壓都會刪除原文件,若要保留則:
保留源文件壓縮:
[root@localhost ~]# gzip -c messages >>messages.gz
[root@localhost ~]# ll mess*
-rw-------. 1 root root 46245 Jan 7 22:23 messages
-rw-r--r--. 1 root root 3385 Jan 7 22:35 messages.gz
保留原文件解壓:
[root@localhost ~]# gzip -d -c messages.gz >messages
[root@localhost ~]# ll messages*
-rw-r--r--. 1 root root 46245 Jan 7 22:32 messages
-rw-------. 1 root root 3294 Jan 7 22:23 messages.gz
三、bzip2
bzip2,對gzip進行了升級改進,壓縮算法爲 LZ77/LZ78,其用法與gzip非常類似。
bzip2 [options] filename1 filename2 ...
-d 解壓文件,相當於bunzip2
-k 保留源文件
-t test,檢查壓縮文件是否完整,並不解壓
-q 靜默操作
-r 對文件夾中的所文件進行壓縮/解壓,並不能真正的壓縮/解壓文件夾
-c --stdout --to-stdout,將壓縮結果作爲標準化輸出,不修改原文件
-# 與gzip類似,指定壓縮級別,1-9,越高越佔用資源
壓縮文件:
[root@localhost ~]# bzip2 -k -9 messages
[root@localhost ~]# ll mes* -h
-rw-------. 1 root root 46K Jan 7 22:23 messages
-rw-------. 1 root root 3.0K Jan 7 22:23 messages.bz2
可以看到壓縮還是挺強的
查看壓縮文件:
[root@localhost ~]# bzcat messages.bz2 | less
解壓文件:
[root@localhost ~]# bzip2 -d messages.bz2 -c >123
解壓文件,並重輸出到指定文件123
四、xz
xz 是推薦使用的一種壓縮格式,在網上經常被使用爲源代碼打包的首選格式。
xz [options] filename ...
-d 解壓文件,相當於bunzip2
-k 保留源文件
-t test,檢查壓縮文件是否完整,並不解壓
-q 靜默操作
-r 對文件夾中的所文件進行壓縮/解壓,並不能真正的壓縮/解壓文件夾
-c --stdout --to-stdout,將壓縮結果作爲標準化輸出,不修改原文件
-# 與gzip類似,指定壓縮級別,1-9,越高越佔用資源
-F 指定壓縮格式,可以爲LZMA算法,壓縮後的文件後綴爲.lzma,不常用
壓縮文件:
[root@localhost ~]# xz -k -9 messages
[root@localhost ~]# ll messages.xz -h
-rw-------. 1 root root 2.6K Jan 7 22:23 messages.xz
查看文件:
[root@localhost ~]# xzcat messages.xz | less
解壓文件:
[root@localhost ~]# xz -d messages.xz
五、zip
zip也是一種比較古老的壓縮工具了,其支持壓縮、打包,並且Windows/Linux都默認支持,不需要解壓安裝工具。
壓縮文件:
[root@localhost ~]# zip messages.zip messages
adding: messages (deflated 93%
注意,先指定壓縮後的文件名,然後纔是源文件
解壓文件:
[root@localhost ~]# unzip messages.zip
查看文件:
[root@localhost ~]# zcat messages.zip
打包並壓縮文件:
[root@localhost ~]# zip log.zip log/*
adding: log/anaconda/ (stored 0%)
adding: log/anaconda.zip (stored 0%)
adding: log/audit/ (stored 0%)
adding: log/boot.log (deflated 80%)
adding: log/btmp (stored 0%)
adding: log/btmp-20180103 (stored 0%)
[root@localhost ~]# ll -h log.zip
-rw-r--r--. 1 root root 391K Jan 7 23:16 log.zip
六、tar
tar是個專門用於打包的工具,使用gzip、bzip2、xz等工具的遞歸壓縮,可以發現實際上是對文件夾內的所有文件進行單獨的壓縮,並不是將多個文件壓縮成個壓縮包。
[root@localhost ~]# gzip -r log
[root@localhost ~]# ll log
-rw-r--r--. 1 root root 184715 Jan 7 19:37 anaconda.zip.gz
-rw-r--r--. 1 root root 2759 Jan 7 19:37 boot.log.gz
-rw-------. 1 root root 619 Jan 7 19:37 cron-20171220.gz
-rw-------. 1 root root 659 Jan 7 19:37 cron-20180103.gz
-rw-------. 1 root root 1621 Jan 7 19:37 cron-20180107.gz
...
tar的作用就是將多個文件打包(歸檔)並壓縮
tar [options] file ...
-c 創建歸檔
-x 解開歸檔
-t 不展開歸檔,僅查看
-f 指定歸檔的文件名稱
-j --bzip2,調用bzip2工具進行壓縮/解壓
-J --xz,調用xz工具進行壓縮/解壓
-z --gzip 調用gzip工具進行壓縮/解壓
-v 顯示過程
-p 保留權限
-C 更改解壓/壓縮的目錄,缺省爲本地
常見用法:
tar -cf 歸檔.tar 源文件.... //創建歸檔
tar -xf 歸檔.tar 解壓文件 //解壓歸檔
tar -tf 歸檔.tar //查看歸檔
創建歸檔並使用xz壓縮:
[root@localhost ~]# tar -Jcvf mess.tar.xz messages
解壓歸檔並使用xz解壓:
[root@localhost ~]# tar -Jxvf mess.tar.xz -C /tmp/
不解壓僅展開歸檔:
[root@localhost ~]# tar -tvf mess.tar.xz
-rw------- root/root 46245 2018-01-07 22:23 messages