linux環境下常用的打包、壓縮、解壓命令(tar、gzip、bzip2、zip)

前言

經常使用電腦的人常常會接觸到壓縮文件,不管是軟件、數據還是資料,下載之後通常就是一個壓縮包,在Windows平臺上如果安裝了WinRAR或者360壓縮,不管是什麼格式的壓縮文件,一般點擊壓縮文件右鍵選擇解壓選項即可,非常地方便。正因爲長時間在Windows平臺上方便的解壓文件,導致我對打包、壓縮的概念理解錯誤,結果在linux操作壓縮文件時有很多疑問,今天終於明白了一點,專門總結一下,同時列舉常用的壓縮、解壓命令,方便日後查找使用。

linux上操作壓縮文件也是通過命令實現的,但是壓縮文件的後綴有很多,比如.tar.gz.tar.bz2.gz.zip.Z等等,而生成和解壓這些文件的命令同樣很多,比如targzipbzip2zipunzip等,看得人眼花繚亂,記憶的過程中也常常出現偏差,不是命令不對應就是參數錯誤,特別是一些不常用的壓縮格式,經常需要查詢嘗試,浪費了不少時間,其實造成這些問題的原因還是由於對打包壓縮的概念不太清楚,接下來先了解一下這些概念。

基礎概念

在Windows上經常直接在圖形化界面上操作壓縮和解壓文件,導致我將這種操作行爲帶到了linux上,而實際上在linux上壓縮和解壓文件之外還有一個操作就是“打包”,原因就是linux的壓縮和解壓通常作用在一個文件上,如果想將一大堆文件壓縮最終成爲一個文件,需要先打成一個包,然後對這個包文件進行壓縮。

打包/歸檔

打包或者叫歸檔,就是將多個文件和目錄(也可以是一個文件)就變成了一個總的文件,但不是將所有文件進行融合,使用tar命令。

壓縮

壓縮是將一個大的文件通過特定的壓縮算法儘可能變成一個小文件,可以減少存儲空間,加快網絡傳輸效率,使用gzipbzip2zip等命令。

解壓

解壓是將壓縮生成的最終的小文件還原爲壓縮之前的大文件,可以使用gzipgunzipbunzip2unzip等命令。

打包壓縮

通過上面的概念解析我們可以知道,我們之前所說的壓縮操作通常是指打包和壓縮兩個步驟,由於linux大部分的壓縮命令都是隻能壓縮一個文件,所以在壓縮之前需要將待壓縮的所有文件先進行打包,生成一個文件後再進行壓縮操作。

明白了打包和壓縮操作的含義,我們可以通過一些約定俗成的命名規則,選擇合適的壓縮和解壓方法,比如下面這些文件:

  • xxx.tar:這是一個歸檔文件,也就是隻通過tar進行了打包操作
  • xxx.tar.gz:這是一個壓縮文件,打包之後,以gzip方式進行了壓縮
  • xxx.tar.bz2:這是一個壓縮文件,打包之後,以bzip2方式進行了壓縮
  • xxx.gz:這是一個壓縮文件,沒有經過打包操作,只是gzip方式進行了壓縮

如果能按照這些命名規則生成壓縮文件,那麼解壓文件的時候會方便很多,但有時壓縮文件的擴展名是不標準的,可以通過file命令查看文件實際的格式,使用方法如下:

[albert@localhost#15:03:05#/home/albert/compress]$file test.tar.bz2
test.tar.bz2: bzip2 compressed data, block size = 900k

[albert@localhost#15:03:24#/home/albert/compress]$file test.tar.gz
test.tar.gz: gzip compressed data, from Unix, last modified: Wed Nov  6 12:02:05 2019

壓縮解壓命令

壓縮文件的格式和命令真的是太多,所以在此總結一份常用命令表格,方便日後需要的時候直接拿來就用,加快解決問題的速度。假設原始文件是a.log和b.txt,當前目錄下還有一個output目錄,可以作爲解壓後存放文件的目錄,那麼常用壓縮和解壓命令如下:

文件格式 壓縮命令 命令備註 解壓命令 命令備註
xxx.tar tar -cvf test.tar a.log b.txt - tar -xvf test.tar -C ./output 不使用-C則解包在當前目錄
xxx.tar.gz tar -zcvf test.tar.gz a.log b.txt - tar -zxvf test.tar.gz -C ./output 不使用-C則解壓在當前目錄
xxx.tar.bz2 tar -jcvf test.tar.bz2 a.log b.txt - tar -jxvf test.tar.bz2 -C ./output 不使用-C則解壓在當前目錄
xxx.tar.Z tar -Zcvf test.tar.Z a.log b.txt - tar -Zxvf test.tar.Z -C ./output 不使用-C則解壓在當前目錄
xxx.gz gzip -c a.log > test.gzgzip a.log 前者保留a.log,後者直接刪除a.log gzip -d test.gzgunzip test.gz 不能指定解壓文件存儲目錄
xxx.bz2 bzip2 -c a.log > test.bz2bzip2 a.log 前者保留a.log,後者直接刪除a.log bzip2 -d test.bz2bunzip2 test.bz2 不能指定解壓文件存儲目錄
xxx.Z compress -c a.log > test.Zcompress a.log 前者保留a.log,後者直接刪除a.log compress -d test.Zuncompress test.Z 不能指定解壓文件存儲目錄
xxx.rar rar a test.rar a.log - unrar e test.rar e選項換成x可以指定目錄
xxx.zip zip test.zip a.log b.txt - unzip test.zip -d ./output 不使用-d則解壓在當前目錄

分析對比上面的壓縮也解壓命令可以發現,tar這個命令可以將打包和壓縮合併到一起,也可以將解壓和解包合併到一起,只需要修改選項中的參數就可以調用不同的程序壓縮或者解壓,比如-cvf表示只打包不壓縮,而-zcvf表示打包後使用gzip壓縮,改爲-jcvf表示打包後使用bzip2壓縮,其實還有很多的壓縮方式,可以參考一下tar命令的幫助文檔,具體壓縮選項如下。

壓縮選項:
-a, --auto-compress 使用歸檔後綴名來決定壓縮程序
-I, --use-compress-program=PROG 通過 PROG 過濾(必須是能接受 -d 選項的程序)
-j, --bzip2 通過 bzip2 過濾歸檔
-J, --xz 通過 xz 過濾歸檔
–lzip 通過 lzip 過濾歸檔
–lzma 通過 lzma 過濾歸檔
–lzop
–no-auto-compress 不使用歸檔後綴名來決定壓縮程序
-z, --gzip, --gunzip, --ungzip 通過 gzip 過濾歸檔
-Z, --compress, --uncompress 通過 compress 過濾歸檔

總結

  • 上述這些命令只是基礎用法,還有很多參數選型沒有提到,比如tar -tf test.tar可以不解壓直接查看歸檔文件中的內容。
  • gzip命令只能壓縮一個文件,如果在命令後面添加多個文件,則會分別壓縮生成多個文件。
  • 據說compress命令是一個相當古老的 unix 檔案壓縮指令,現在基本被gzip命令取代了。
  • 由於文中涉及的命令較多,難免有些筆誤,爲了不傳播錯誤用法,我也進行了多次檢查,如果大家還發現其他錯誤,歡迎批評指正。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章