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
連結
- GNU Gzip,手冊,gnu.org
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.
連結
- GNU Gzip,手冊,gnu.org
的簡寫
zcat[編輯 | 編輯原始碼]zcat 與uncompress -c相同,雖然在許多系統上它實際上與 "gzcat" 和.
連結
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
cpiocpio 用於建立歸檔。建立歸檔時,會將檔案列表饋送到其標準輸入(而不是在命令列上指定檔案)。該檔案列表通常由 ls、find 或 locate 建立,然後直接透過管道傳輸到 cpio;但它也可以先用 *grep、sed、sort 等命令進行過濾/編輯。儲存為檔案的(預先編輯過的)列表也可以使用,方法是使用 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
使用 find 和 fgrep 建立僅包含單詞 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
連結
- cpio,單一...規範,版本 2,1997 年,opengroup.org
- C.4 實用程式,opengroup.org
- cpio 手冊頁,man.cat-v.org
- GNU CPIO,手冊,gnu.org
pax
[edit | edit source]提供類似於tar的歸檔服務,但具有不同的命令列語法;提供比tar更多的存檔格式。由於pax不假設磁帶裝置,因此有些人更喜歡它而不是tar。
根據 POSIX 標準,至少要支援的存檔格式為 cpio、pax 和 ustar。FreeBSD pax 工具不支援pax 存檔格式;pax 格式由 AIX 和 Solaris 支援。
雖然 POSIX 中有介紹,但pax 通常不會在 Linux 發行版中預設安裝;tar 仍在繼續使用。即使作為附加包安裝,Linux 版pax 也不支援 POSIX 要求的pax 存檔格式。
連結
- pax,opengroup.org
- pax,單一 UNIX® 規範,版本 2,1997 年,opengroup.org
- pax,freebsd.org
- pax(1p),man7.org - 來自 POSIX 程式設計師手冊,而不是來自實際的 Linux
- pax,opensource.apple.com
- pax,適用於 AIX 7.3,ibm.com
- pax,適用於 Solaris 11.1,docs.oracle.com
- pax,heirloom.sourceforge.net
- paxutils,savannah.gnu.org - 沒有釋出版本;有一個 git 倉庫
- pax (命令),wikipedia.org
- 軟體包:pax,packages.ubuntu.com
- 軟體包:pax,packages.debian.org
- pax,pkgs.org
- Pax-20201030,linuxfromscratch.org
- pax 不支援“pax”格式導致 LSB 失敗,2009 年,bugs.launchpad.net/paxmirabilis
- pax 尚未符合最新版本的 POSIX 標準,2014 年,bugs.launchpad.net/ubuntu
- mircpio,位於 MirBSD 中,github.com
bzip2
[edit | edit source]bzip2 和 bunzip2 類似於“gzip”/“gunzip”,但使用不同的壓縮方法。壓縮通常比“gzip”更好,但速度更慢。解壓縮速度相當快。
可以使用選項-1到-9來指定bzip2應該壓縮的程度。數字表示以 100kB 為單位的“塊”應該一次壓縮多大,因此使用bzip2 -5 foo.bar 將以 500kB 的塊大小壓縮 foo.bar。通常,更大的塊意味著更好的壓縮(但可能速度更慢)。只有未損壞的“塊”才能使用bzip2recover 從損壞的 bzip2 檔案中恢復,因此,如果您壓縮了 900kB 的塊,則如果一個塊損壞,您將丟失 900kB 的檔案 - 但如果您使用的是 100kB 的塊,則只會丟失 100kB(bzip2 -1)。預設情況下,bzip2 使用 900kB 的塊來獲得最佳壓縮效果。
bzcat 與bunzip2 -c 相同,即bzip2 -dc。
連結
- bzip2,freebsd.org
zip
[edit | edit source]將檔案新增到壓縮的 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 存檔中,檔案/目錄首先被收集到單個檔案中 - 一個存檔(例如cpio 或tar),然後這個單個檔案被壓縮(例如使用gzip 或bzip2)。
示例
- 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 更長。
連結
- zip,freebsd.org
- Info-ZIP,wikipedia.org
- Zip (檔案格式),wikipedia.org
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”副檔名。
連結
- compress,opengroup.org
- compress 手冊頁,man.cat-v.org
- W:compress
uncompress
[edit | edit source]從 compress 建立的存檔中提取檔案。
連結
- uncompress,opengroup.org
- compress、uncompress、zcat,man.cat-v.org
- uncompress,freebsd.org
- W:compress
unar
[edit | edit source]從各種壓縮格式中提取檔案,包括 7z (7-zip) 和 RAR。許可證:LGPL。顯示存檔檔案列表的配套實用程式是lsar。
連結
shar
[edit | edit source]一種遺留工具和一種檔案格式,用於建立自解壓縮檔案存檔,不受 POSIX 標準的約束。自解壓縮存檔是 shell 指令碼。
連結
- shar,freebsd.org
- GNU shar 實用程式,gnu.org
- shar,manpages.ubuntu.com
- shar,wikipedia.org