跳轉至內容

Unix/命令/檔案壓縮指南

來自華夏公益教科書,為開放世界提供開放書籍

gzip 壓縮檔案。每個單獨的檔案被壓縮成一個單獨的檔案。壓縮後的檔案包含一個 GNU zip 標頭和壓縮後的資料。

如果給定一個檔案作為引數,gzip 會壓縮該檔案,新增 ".gz" 字尾,並刪除原始檔案。如果沒有引數,gzip 會壓縮標準輸入並將壓縮後的檔案寫入標準輸出。

一些有用的選項是

-c  Write compressed file to stdout. Do not delete original file.
-d  Act like gunzip.
-1  Performance: Use fast compression (somewhat bigger result)
-9  Performance: Use best compression (somewhat slower)

示例

壓縮名為README的檔案。 建立README.gz並刪除README.

$ gzip README

壓縮名為README的檔案。 標準輸出(即壓縮後的檔案)由 shell 重定向到gzips/README.gz。 保留README.

$ gzip -c README > gzips/README.gz

不帶引數使用 gzip 壓縮README.

$ < README gzip > gzips/README.gz

連結

gunzip 解壓縮用 "gzip" 或 "compress" 壓縮的檔案。它試圖同時處理 gzip 的 GNU zip 格式和舊的 Unix compress 格式。它透過識別檔案的副檔名(".gz" 或 ".Z" 或其他一些副檔名)來實現這一點。

一些有用的選項是

-c  Write uncompressed data to stdout. Do not delete original file.

撤銷gzip README.gz的效果,用原始的未壓縮版本替換檔案的壓縮版本。 建立README並刪除README.gz.

$ gunzip README.gz

README.gz的未壓縮內容寫入標準輸出。將其透過管道傳輸到分頁器以方便閱讀壓縮後的檔案。

$ gunzip -c README.gz | more

另一種方法是

$ gunzip < README.gz | more

有些人將檔案命名為package.tgz作為package.tar.gz.

連結

的簡寫

zcat

[編輯 | 編輯原始碼]zcatuncompress -c相同,雖然在許多系統上它實際上與 "gzcat" 和.

連結

  • gunzip -c
  • 相同。 zcat,opengroup.org
  • GNU Gzip,手冊,gnu.org

zcat,freebsd.org

gzcat

[編輯 | 編輯原始碼]相同,雖然在許多系統上它實際上與 "gzcat" 和gzcat 等同於.

gzip -dc

tar

[編輯 | 編輯原始碼]

無壓縮的歸檔。未被現代 POSIX 涵蓋,POSIX 涵蓋了 #pax;然而,tar 仍然被廣泛使用。歸檔包含一個或多個檔案或目錄。

tar 的選項令人困惑。每次都指定一個模式。

  • 模式
  • -c 建立一個歸檔(要歸檔的檔案,從檔案建立歸檔)
  • -x 提取一個歸檔(歸檔到檔案,從歸檔提取檔案)

-t 列出歸檔(列出歸檔中的檔案)

  • 選項
  • -f FILE 歸檔的名稱 - 必須指定,除非使用磁帶驅動器進行歸檔
  • -v 詳細,列出所有正在歸檔/提取的檔案
  • -p 在提取時保留許可權和(如果可能)使用者/組。
  • -z 使用 gzip/gunzip 建立/提取歸檔
  • -j 使用 bzip2/bunzip2 建立/提取歸檔

示例

-J 使用 XZ 建立/提取歸檔壓縮(gzip)和打包(tar)目錄myfiles以建立:

$ tar -czvf myfiles.tar.gz myfiles

myfiles.tar.gz壓縮(gzip)和打包(tar)目錄:

$ tar -xzvf myfiles.tar.gz

解壓縮(gzip)和解包壓縮後的包,從

中提取內容。 有兩種不同的關於 gzip 壓縮包的約定。一種經常遇到的 .tar.gz。另一種流行的選擇是 .tgz。Slackware 軟體包使用後一種約定。

如果您能夠訪問磁帶裝置或其他備份介質,則可以使用它而不是歸檔檔案。如果要歸檔的資料超過備份介質的容量,程式將提示使用者插入新的磁帶或軟盤。壓縮(gzip)和打包(tar)目錄使用以下命令備份

$ tar -cvf /dev/fd0 myfiles

目錄到軟盤

$ tar -xvf /dev/fd0

使用以下命令還原備份您也可以指定標準輸入或輸出-f -而不是歸檔檔案或裝置。透過將兩個 "tar" 命令連線在一起,可以實現目錄之間的複製。例如,假設我們有兩個目錄,from-stuff

$ ls -F
from-stuff/
to-stuff/

to-stuff而不是歸檔檔案或裝置。透過將兩個 "tar" 命令連線在一起,可以實現目錄之間的複製。例如,假設我們有兩個目錄,正如 Running Linux 中所述,您可以將中的所有內容映象到

$ tar cf - . | (cd ../to-stuff; tar xvf -)

,方法如下

連結

  • 參考:Welsh, Matt, Matthias Kalle Dalheimer 和 Lar Kaufman (1999),Running Linux. 第三版,O'Reilly and Associates。
  • tar,The Single UNIX ® Specification,版本 2,1997,opengroup.org
  • C.4 實用程式,opengroup.org - 指示 tar 已被移除
  • tar 手冊頁,man.cat-v.org
  • tar,freebsd.org
  • GNU tar,手冊,gnu.org

tar (computing),wikipedia.org

cpio

[編輯 | 編輯原始碼]

cpio 用於建立歸檔。建立歸檔時,會將檔案列表饋送到其標準輸入(而不是在命令列上指定檔案)。該檔案列表通常由 lsfindlocate 建立,然後直接透過管道傳輸到 cpio;但它也可以先用 *grepsedsort 等命令進行過濾/編輯。儲存為檔案的(預先編輯過的)列表也可以使用,方法是使用 cat 將其饋送到管道或簡單地重定向 shell 的標準輸入 (<)。

  • cpio 以三種模式之一工作
  • cpio -o - 複製輸出模式:檔案從檔案系統複製建立一個歸檔。通常歸檔是透過使用 shell 將 cpio 的輸出重定向到檔案(使用 >)來建立的。
  • cpio -i - 複製輸入模式:從現有歸檔中提取檔案,並將它們複製迴文件系統。

cpio -p - 直通模式cpio 用於將檔案從目錄樹中的一個位置複製到另一個位置,而不會建立實際的歸檔。

  • 此外還有
  • cpio -t - 列出歸檔:歸檔的內容將在不提取的情況下列出。

cpio -tv - 在這裡,詳細選項 (-v) 將導致 "長列表",包括許可權、大小和所有權。

在複製輸入、複製輸出和直通模式中新增詳細選項 (-v) 將導致 cpio 在提取/歸檔/複製檔案時列出它們。

$ ls *.doc | cpio -ov > word-docs.cpio

使用 ls 建立當前目錄中所有 doc 檔案的歸檔(詳細)

$ find . -name "*.txt" | cpio -ov > text-files.cpio

使用 find 建立當前目錄及下級目錄中所有 txt 檔案的歸檔

$ find . -name "*.txt" -exec fgrep -l -i "wiki" {} \; | cpio -ov > wiki.cpio

使用 findfgrep 建立僅包含單詞 wiki(不區分大小寫)的 txt 檔案的歸檔

對於 fgrep,選項 -i 表示 "忽略大小寫",選項 -l 導致它只列出與模式匹配的檔案的檔名。

$ cpio -ov < file-list.txt > archive.cpio

使用現有的檔案列表

$ cat files1 files2 files3 | sort | uniq | cpio -ov > myfiles.cpio

要新增更多檔案,請使用追加選項 (-A)。使用檔案選項 (-F) 指定檔案。

$ cat files4 | cpio -ovA -F myfiles.cpio

要提取檔案(詳細模式)

$ cpio -iv < myfiles.cpio

cpio 預設情況下不會建立目錄,因此請使用選項 -d 來建立目錄。

要提取檔案,並在需要時建立目錄

$ cpio -ivd < myfiles.cpio

要列出存檔的內容,簡短列出

$ cpio -t < myfiles.cpio

要列出存檔的內容,長列表

$ cpio -tv < myfiles.cpio

連結

提供類似於tar的歸檔服務,但具有不同的命令列語法;提供比tar更多的存檔格式。由於pax不假設磁帶裝置,因此有些人更喜歡它而不是tar

根據 POSIX 標準,至少要支援的存檔格式為 cpio、pax 和 ustar。FreeBSD pax 工具不支援pax 存檔格式;pax 格式由 AIX 和 Solaris 支援。

雖然 POSIX 中有介紹,但pax 通常不會在 Linux 發行版中預設安裝;tar 仍在繼續使用。即使作為附加包安裝,Linux 版pax 也不支援 POSIX 要求的pax 存檔格式。

連結

bzip2

[edit | edit source]

bzip2bunzip2 類似於“gzip”/“gunzip”,但使用不同的壓縮方法。壓縮通常比“gzip”更好,但速度更慢。解壓縮速度相當快。

可以使用選項-1-9來指定bzip2應該壓縮的程度。數字表示以 100kB 為單位的“塊”應該一次壓縮多大,因此使用bzip2 -5 foo.bar 將以 500kB 的塊大小壓縮 foo.bar。通常,更大的塊意味著更好的壓縮(但可能速度更慢)。只有未損壞的“塊”才能使用bzip2recover 從損壞的 bzip2 檔案中恢復,因此,如果您壓縮了 900kB 的塊,則如果一個塊損壞,您將丟失 900kB 的檔案 - 但如果您使用的是 100kB 的塊,則只會丟失 100kB(bzip2 -1)。預設情況下,bzip2 使用 900kB 的塊來獲得最佳壓縮效果。

bzcatbunzip2 -c 相同,即bzip2 -dc

連結

將檔案新增到壓縮的 zip 存檔中。您可以使用 unzip 從 zip 存檔中提取檔案。zip 格式是 Microsoft Windows 個人電腦上使用的常見歸檔檔案格式。zip 存檔包含單獨壓縮的成員;想象一下先對每個檔案進行 gzip 壓縮,然後將它們 tar 起來,但使用不同的格式。

gzip 類似,可以透過提供介於 1 和 9 之間的數字作為選項來指定壓縮質量(例如zip -5)。1 最快,但壓縮質量很低。9 壓縮質量最高,但速度很慢。此外,可以使用 0(即zip -0)來指定檔案只應“儲存”,而進行壓縮(壓縮率為 0%),從而使 zip 能夠建立未壓縮的存檔。

請注意,zip 存檔包含單獨壓縮的檔案,這些檔案收集到單個檔案中。這與大多數其他壓縮的Unix 存檔(例如tar.gzfrom-stufftar.bz2) 不同,在其他壓縮的Unix 存檔中,檔案/目錄首先被收集到單個檔案中 - 一個存檔(例如cpiotar),然後這個單個檔案被壓縮(例如使用gzipbzip2)。

示例

  • zip archive.zip file.txt
    • 將檔案新增到存檔中。如果存檔不存在,則建立它。
  • zip archive file.txt
    • 如上所述;自動新增 .zip 副檔名,建立 archive.zip。
  • cat filelist.txt | zip archive.zip -@
    • 將 filelist.txt 中列出的檔案新增到存檔中。
  • zip -0 archive.zip file.txt
    • 將檔案新增到存檔中,不進行任何壓縮,只是儲存檔案。
  • zip archive.zip file1.txt file2.txt file3.txt
    • 將多個檔案新增到存檔中。
  • zip -r archive.zip .
    • 將當前目錄和子目錄中的所有檔案新增到存檔中(除了存檔本身),保留目錄巢狀資訊。
  • zip -r -j archive.zip .
    • 如上所述,但沒有目錄巢狀資訊。因此,每個檔案只在其檔名下在存檔中跟蹤。
  • zip -h2
    • 輸出擴充套件幫助,比 -h 更長。

連結

unzip

[edit | edit source]

從 zip 存檔中提取檔案。另見 zip。您可以從 GnuWin32 獲取 Info-ZIP unzip 的 Windows 版本。FreeBSD 似乎使用的是自定義版本的 unzip,它與 Info-ZIP 不同,但基本相容。

示例

  • unzip archive.zip
    • 從存檔中提取所有檔案。
  • unzip archive.zip file.txt
    • 從存檔中提取特定檔案。
  • unzip -l archive.zip
    • 列出存檔中包含的檔案,而不提取它們。

連結

compress

[edit | edit source]

compress 是一種在 UNIX 系統上流行的壓縮檔案格式。使用 compress 壓縮的檔案將在其名稱後附加“.Z”副檔名。

連結

uncompress

[edit | edit source]

compress 建立的存檔中提取檔案。

連結

從各種壓縮格式中提取檔案,包括 7z (7-zip) 和 RAR。許可證:LGPL。顯示存檔檔案列表的配套實用程式是lsar

連結

一種遺留工具和一種檔案格式,用於建立自解壓縮檔案存檔,不受 POSIX 標準的約束。自解壓縮存檔是 shell 指令碼。

連結

華夏公益教科書