常見壓縮格式的區別,及 Linux 下的壓縮相關指令

一、常見壓縮檔

*.zip | zip 程序壓縮打包的檔案; (很常見,但是因爲不包含文檔名編碼信息,跨平臺可能會亂碼)
*.rar | rar 程序壓縮打包的檔案;(在windows上很常見,但是是商業軟件。)
*.gz | gzip 程序壓縮的檔案; (linux目前使用最廣泛的壓縮格式)
*.bz2 | bzip2 程序壓縮的檔案;
*.xz | xz 程序壓縮的檔案;
*.tar | tar 程序打包的資料,並沒有壓縮過;
*.tar.gz | tar 程序打包的檔案,其中並且經過 gzip 的壓縮 (最常見)
*.tar.bz2 | tar 程序打包的檔案,其中並且經過 bzip2 的壓縮
*.tar.xz | tar 程序打包的檔案,其中並且經過 xz 的壓縮 (新一代壓縮選擇)
*.7z | 7zip 程序壓縮打包的檔案。

二、以能否壓縮多文檔分類

  1. gzip bzip2 xz 這三個壓縮格式都只能壓縮單個文檔。(換而言之,該進程的輸入輸出都是流,不包含文檔樹信息。)
    因此如果要用它們壓縮多個文檔或目錄,需要使用另一個軟件來先將要壓縮的文檔打包成一個文檔(包含文檔樹信息),這個命令就是 tar.
    先使用 tar 歸檔要壓縮的多文檔,再對生成的 *.tar 使用 上述壓縮指令(或者直接使用管道重定向),linux 下是這樣實現多文檔壓縮的。

  2. 而 7z 和 zip,以及 rar 格式,都同時具有了 歸檔(tar) 和 壓縮 兩個功能,(也就是該格式包含了文檔樹信息咯)也就是說它們可以直接壓縮多個文檔。

三、各格式使用的算法差別

  1. gzip 成熟的格式,使用的算法基於 DEFLATE。(壓縮比適中)
  2. 7z 新一代格式,使用的壓縮算法可替換,默認是使用的 lzma/lzma2 算法,使用 AES-256 作爲加密算法。
  3. xz 同樣使用的 lzma/lzma2 算法,不過只能壓縮一個文檔。(壓縮比很高,相對的用時也更多)
  4. zip 同樣是支持多種算法的壓縮格式,默認應該是使用的 DEFLATE 算法。誕生較早,有很多缺陷。(跨平臺亂碼、容易被破解等)
  5. rar 使用 類DEFLATE 的專有算法,使用 AES 加密。(rar5.0 以後使用 AES-256CBC)

不過 zip 被廣泛應用在 安卓的 apk 格式、java 的 jar、電子書 的 epub,還有github、雲硬盤的多文檔下載 中,原因嘛大概是zip很流行,所以不用擔心目標平臺沒解壓軟件吧。

四、如何選用壓縮方案

  1. tar.gz 在 linux 上最常見,在壓縮率和壓縮時間上擁有良好的平衡。如果有任何疑惑,就選用它吧,不會錯。
  2. tar.xz 是新一代的壓縮格式,雖然擁有更好的壓縮率,壓縮/解壓速度相對要慢很多倍。一般在電腦性能足夠好的時候,可選用它。
  3. 7z 和 xz 同爲新一代壓縮格式,它更復雜,支持多文檔壓縮。而且更適合跨平臺,推薦使用。
  4. zip 因爲跨平臺容易導致文檔名亂碼,不建議使用。(雖然有這樣的缺陷,但是卻意外的用得很廣泛,在前一節有說過)
  5. rar 性能不差,但是是商業格式,不開源,不建議使用。(做得比較好的是它的 recovery records,在網絡環境不好,容易導致包損壞時,這個功能就特別棒
  6. tar.bz2 算是 linux 壓縮歷史上,過渡時期的產物,性能也介於 gz 和 xz 之間,一般來說不需要考慮它。

總的來說,就是 windows 上推薦使用 7z,而 linux 上 推薦使用 tar.gz tar.xz 7z 之一。此外 rar 的損壞很容易修復,zip 受衆多(要注意亂碼問題),也可以考慮。

五、Linux 上的壓縮相關指令

1. tar 指令

通過之前的介紹,可以看出常用的就是 tar gzip xz 等,如果要壓縮多個文檔,需要先使用tar,再用管道重定向到 gzip 或 xz,比較麻煩,而這幾個指令又很常用。於是後來對tar做了增強。
tar 最初只是一個歸檔進程,而壓縮則由其他的壓縮軟件來完成(一個進程只幹一件事)。後來爲了方便,喪心病狂地集成了各種壓縮指令。因此這裏就只介紹這一個命令了(它囊括了所有)。
tar 的選項與參數非常的多!我們只講幾個常用的選項,更多選項您可以自行 man tar 查詢囉!

[dmtsai@study ~]$ tar [-z|-j|-J] [cv] [-f 待創建的新檔名] filename... <==打包與壓縮 [dmtsai@study ~]$ tar [-z|-j|-J] [tv] [-f 既有的 tar檔名] <==察看檔名 [dmtsai@study ~]$ tar [-z|-j|-J] [xv] [-f 既有的 tar檔名] [-C 目錄] <==解壓縮 

選項與參數:

-c :創建打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename)
-t :察看打包檔案的內容含有哪些檔名,重點在察看『檔名』就是了;
-x :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開
特別留意的是, -c, -t, -x 不可同時出現在一串指令列中。
-z :透過 gzip 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.gz
-j :透過 bzip2 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.bz2
-J :透過 xz 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.xz
特別留意, -z, -j, -J 不可以同時出現在一串指令列中
-v :在壓縮/解壓縮的過程中,將正在處理的檔名顯示出來!
-f filename:-f 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉!(比較不會忘記)
-C 目錄 :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。

其他後續練習會使用到的選項介紹:

-p(小寫) :保留備份資料的原本權限與屬性,常用於備份(-c)重要的設定檔
-P(大寫) :保留絕對路徑,亦即允許備份資料中含有根目錄存在之意;
--exclude=FILE:在壓縮的過程中,不要將 FILE 打包!

其實最簡單的使用 tar 就只要記憶底下的方式即可:

壓 縮:tar -zcv -f filename.tar.gz 要被壓縮的檔案或目錄名稱
查看文檔樹:tar -ztv -f filename.tar.gz
解壓縮:tar -zxv -f filename.tar.gz -C 欲解壓縮的目錄

上面的命令需要根據壓縮格式的不同,選用 -z -j -J 選項,而實際上文檔的後綴就已經表明了它的壓縮格式,不免讓人覺得多餘。
因此就有這幺一條通用的壓縮/解壓 option

**-a, --auto-compress **
Use archive suffix to determine the compression program.

使用這個,便有了通用的解壓指令

tar -axv -f file.tar.* (它適用於上述三種壓縮格式)

僅解壓指定的文檔

  1. 先查看文檔樹找到需要解壓的文檔的文檔名
  2. tar -zxv -f 打包檔.tar.gz 待解開檔名

打包某目錄,但不含該目錄下的某些檔案之作法

使用 --exclude=FILE 選項(支持文檔名的模式匹配,而且可重複)

tar -zcv -f filename.tar.gz directory --exclude=FILE1 --exclude=func*

只打包目錄中比指定時刻更新的文檔

使用 --newer-mtime="2015/06/17" 選項。

tarfile, tarball

tarfile 純打包、未壓縮的 tar 文檔
tarball 壓縮了的 tar 文檔

2. zip格式(linux 一般也會自帶,詳細的請man)

  1. 壓縮:zip

    • 壓縮目錄:zip -r filename.zip directory (r 表示遞歸壓縮,壓縮包會包含這個目錄)
  2. 解壓:unzip

    • 解壓到某目錄:unzip -d directory filename.zip (-d dir 表示將內容解壓到dir目錄內)
      • -t 測試壓縮檔的完整性
      • -x filename 排除某文檔

3. 7z格式(需要p7zip,deepin自帶,更多的請man)

  1. 查看目錄樹:7z l file.7z (List contents of archive)
  2. 壓縮:7z a file.7z file1 directory1 (a 爲創建壓縮檔或向壓縮檔中添加文檔/目錄,一次可指定多個要壓縮的文檔或目錄)
  3. 解壓:7z x file.7z -o directory (解壓到指定目錄)
  4. 測試完整性: 7z t file.7z

p7zip安裝好後,會提供7z、7za、7zr三個指令,一般來說直接用7z就行。

P.S. 7z不會保存 linux 文檔的用戶、用戶組信息,因此不能直接用於linux系統備份,此時建議用tar.xz或tar.7z(也就是先用tar打包)

4. rar格式(還是那句話,更多的請man)

rar是非開源的格式,linux 默認是不會包含 rar 壓縮軟件的,但是它的解壓軟件是開源的,deepin 自帶 unrar,順便7zip也可解壓 rar 文檔。
若想用linux創建rar壓縮檔,需要從rarlab上下載linux版,(deepin源自帶)不過要注意的是該linux版是40天試用版,要長期使用的話,可能需要破解。(rar的key網上一搜一大把)

  1. 壓縮:rar a file.rar file (這個是試用的)
  2. 解壓:unrar x file.rar (這個開源免費)

其實我挺中意rar的修復功能的,不知道爲啥 7z xz 這樣的新格式沒有添加類似的 recorvery records。上次下個 Idea 的 tarball,下了四五次才下到一個完整的,要是用 rar 的話,大概一鍵修復就好了,可 tar.gz 我不知道怎幺修復,只好一遍遍重複下載。。

六、參考

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