bzip2

將文件壓縮成bz2格式

補充說明

bzip2命令 用於創建和管理(包括解壓縮)“.bz2”格式的壓縮包。

bzip2 採用 Burrows-Wheeler 塊排序文本壓縮算法和 Huffman 編碼方式壓縮文件。 壓縮率一般比基於 LZ77/LZ78 的壓縮軟件好得多,其性能接近 PPM 族統計類壓縮軟件。

命令行參數有意設計爲非常接近 GNU gzip 的形式,但也不完全相同。

bzip2 從命令行讀入文件名和參數。 每個文件被名爲 "原始文件名.bz2" 的壓縮文件替換。 每個壓縮文件具有與原文件相同的修改時間、 權限, 如果可能的話,還具有相同的屬主, 因此在解壓縮時這些特性將正確地恢復。 在某些文件系統中, 沒有權限、 屬主或時間的概念, 或者對文件名的長度有嚴格限制, 例如 MSDOS,在這種情況下,bzip2 沒有保持原文件名、 屬主、 權限以及時間的機制, 從這個意義上說,bzip2 對文件名的處理是幼稚的。

bzip2 和 bunzip2 在缺省情況下不覆蓋已有的文件。 如果想覆蓋已有的文件,要指定 -f 選項。

如果未指定文件名, bzip2 將壓縮來自標準輸入的數據並寫往標準輸出。在這種情況下, bzip2 會拒絕將壓縮結果寫往終端,因爲這完全無法理解並且是沒有意義的。

bunzip2 (以及 bzip2 -d) 對所有指定的文件進行解壓縮處理。不是由 bzip2 產生的文件將被忽略,同時發出一個警告信息。 bzip2 按下列方式由壓縮文件名確定解壓後的文件名:

1filename.bz2    解壓成   filename
2filename.bz     解壓成   filename
3filename.tbz2   解壓成   filename.tar
4filename.tbz    解壓成   filename.tar
5anyothername    解壓成   anyothername.out

如果文件名的後綴不是下列之一: .bz2, .bz, .tbz2 或 .tbz, .bzip2 將抱怨無法確定原始文件名,並採用原文件名加 .out 作爲解壓縮文件名。

在壓縮時,如果不提供文件名,bzip2 將從標準輸入讀取數據,壓縮結果寫往標準輸出。

bzip2 採用 32 位 CRC 校驗碼作自我檢查,以確認解壓後的文件與原始文件相同。 這可用於檢測壓縮文件是否損壞,並防止 bzip2 中未知的缺陷(運氣好的話這種可能性非常小)。 數據損壞而未檢測到的幾率非常之小, 對於每個被處理的文件大約是四十億分之一。 檢查是在解壓縮時進行的,因此它只能說明某個地方出問題了。 它能幫助恢復原始未壓縮的數據。可以用 bzip2recover 來嘗試從損壞的文件中恢復數據。

返回值:正常退出返回 0, 出現環境問題返回 1 (文件未找到,非法的選項,I/O錯誤等), 返回 2 表明壓縮文件損壞,出現導致 bzip2 緊急退出的內部一致性錯誤(例如缺陷)時返回 3。

語法

1bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ...  ]

選項

 1-c --stdout
 2    # 將數據壓縮或解壓縮至標準輸出。
 3
 4-d --decompress
 5    # 強制解壓縮。 bzip2, bunzip2 以及 bzcat 實際上是同一個程序,進行何種操作將根據程序名確定。  指定該選項後將不考慮這一機制,強制 bzip2 進行解壓縮。
 6
 7-z --compress
 8    # -d 選項的補充:強制進行壓縮操作,而不管執行的是哪個程序。
 9
10-t --test
11    # 檢查指定文件的完整性,但並不對其解壓縮。 實際上將對數據進行實驗性的解壓縮操作,而不輸出結果。
12
13-f --force
14    # 強制覆蓋輸出文件。通常 bzip2 不會覆蓋已經存在的文件。該選項還強制 bzip2 打破文件的硬連接,缺省情況下 bzip2 不會這麼做。
15
16-k --keep
17    # 在壓縮或解壓縮時保留輸入文件(不刪除這些文件)。
18
19-s --small
20    # 在壓縮、解壓縮及檢查時減少內存用量。採用一種修正的算法進行壓縮和測試,每個數據塊僅需要 2.5 個字節。這意味着任何文件都可以在 2300k
21    # 的內存中進行解壓縮, 儘管速度只有通常情況下的一半。
22
23    # 在壓縮時,-s將選定 200k 的塊長度,內存用量也限制在 200k 左右, 代價是壓縮率會降低。 總之,如果機器的內存較少(8兆字節或更少),
24    # 可對所有操作都採用-s選項。參見下面的內存管理。
25
26-q --quiet
27    # 壓制不重要的警告信息。屬於 I/O 錯誤及其它嚴重事件的信息將不會被壓制。
28
29-v --verbose
30    # 詳盡模式 -- 顯示每個被處理文件的壓縮率。 命令行中更多的 -v 選項將增加詳細的程度, 使 bzip2 顯示出許多主要用於診斷目的信息。
31
32-L --license -V --version
33    # 顯示軟件版本,許可證條款及條件。
34
35-1 to -9
36    # 在壓縮時將塊長度設爲 100 k、200 k ..  900 k。 對解壓縮沒有影響。參見下面的內存管理。
37
38-- # 將所有後面的命令行變量看作文件名,即使這些變量以減號"-"打頭。 可用這一選項處理以減號"-"打頭的文件名, 例如:bzip2 -- -myfilename.
39
40--repetitive-fast --repetitive-best
41    # 這些選項在 0.9.5 及其以上版本中是多餘的。 在較早的版本中,這兩個選項對排序算法的行爲提供了一些粗糙的控制,有些情況下很有用。 0.9.5
42    # 及其以上版本採用了改進的算法而與這些選項無關。

參數

文件:指定要壓縮的文件。

實例

壓縮指定文件filename:

1bzip2 filename
23bzip2 -z filename

這裏,壓縮的時候不會輸出,會將原來的文件filename給刪除,替換成filename.bz2.如果以前有filename.bz2則不會替換並提示錯誤(如果想要替換則指定-f選項,例如bzip2 -f filename;如果filename是目錄則也提醒錯誤不做任何操作;如果filename已經是壓過的了有bz2後綴就提醒一下,不再壓縮,沒有bz2後綴會再次壓縮。

解壓指定的文件filename.bz2:

1bzip2 -d filename.bz2
23bunzip2 filename.bz2

這裏,解壓的時候沒標準輸出,會將原來的文件filename.bz2給替換成filename。如果以前有filename則不會替換並提示錯誤(如果想要替換則指定-f選項,例如bzip2 -df filename.bz2

壓縮解壓的時候將結果也輸出:

1$bzip2 -v filename

輸入之後,輸出如下:

1filename:  0.119:1, 67.200 bits/byte, -740.00% saved, 5 in, 42 out.

這裏,加上-v選項就會輸出了,只用壓縮舉例了,解壓的時候同理bzip2 -dv filename.bz2不再舉例了。

模擬解壓實際並不解壓:

1bzip2 -tv filename.bz2

輸入之後,輸出如下:

1filename.bz2: ok

這裏,-t指定要進行模擬解壓,不實際生成結果,也就是說類似檢查文件,當然就算目錄下面有filename也不會有什麼錯誤輸出了,因爲它根本不會真的解壓文件。爲了在屏幕上輸出,這裏加上-v選項了,如果是真的解壓bzip2 -dv filename.bz2則輸出的是把"ok"替換成了"done"。

壓縮解壓的時候,除了生成結果文件,將原來的文件也保存:

1bzip2 -k filename

這裏,加上-k就保存原始的文件了,否則原始文件會被結果文件替代。只用壓縮舉例了,解壓的時候同理$bzip2 -dk filename.bz2不再舉例了。

解壓到標準輸出:

1bzip2 -dc filename.bz2

輸入之後,輸出如下:

1hahahhaahahha

這裏,使用-c指定到標準輸出,輸出的是文件filename的內容,不會將filename.bz2刪除。

壓縮到標準輸出:

1bzip2 -c filename
2bzip2: I won't write compressed data to a terminal.
3bzip2: For help, type: `bzip2 --help'.

這裏,使用-c指定壓縮到標準輸出不刪除原有文件,不同的是,壓縮後的文件無法輸出到標準輸出。

使用bzip2的時候將所有後面的看作文件(即使文件名以'-'開頭):

1bzip2 -- -myfilename

這裏主要是爲了防止文件名中-產生以爲是選項的歧義。

來源:https://github.com/jaywcjlove/linux-command

最後修改於: Wednesday, January 31, 2024

相關文章:

翻譯: