Linux檔案打包與解壓縮

2021-10-24 11:03:47 字數 4497 閱讀 2761

在講 linux 上的壓縮工具之前,有必要先了解一下常見常用的壓縮包檔案格式。在 windows 上最常見的不外乎這兩種 .zip,.7z 字尾的壓縮檔案。而在 linux 上面常見的格式除了以上兩種外,還有 .rar,.gz,.xz,.bz2,.tar,.tar.gz,.tar.xz,*.tar.bz2,簡單介紹如下:

檔案字尾名 說明

*.zip	zip 程式打包壓縮的檔案

*.rar rar 程式壓縮的檔案

*.7z 7zip 程式壓縮的檔案

*.tar tar 程式打包,未壓縮的檔案

*.gz gzip 程式(gnu zip)壓縮的檔案

*.xz xz 程式壓縮的檔案

*.bz2 bzip2 程式壓縮的檔案

*.tar.gz tar 打包,gzip 程式壓縮的檔案

*.tar.xz tar 打包,xz 程式壓縮的檔案

*tar.bz2 tar 打包,bzip2 程式壓縮的檔案

*.tar.7z tar 打包,7z 程式壓縮的檔案

講了這麼多種壓縮檔案,這麼多個命令,不過我們一般只需要掌握幾個命令即可,包括 zip,tar。下面會依次介紹這幾個命令及對應的解壓命令。

$ cd /home/shiyanlou

$ zip -r -q -o shiyanlou.zip /home/shiyanlou/desktop

$ du -h shiyanlou.zip

$ file shiyanlou.zip

上面命令將目錄 /home/shiyanlou/desktop 打包成乙個檔案,並檢視了打包後檔案的大小和型別。第一行命令中,-r 引數表示遞迴打包包含子目錄的全部內容,-q 引數表示為安靜模式,即不向螢幕輸出資訊,-o,表示輸出檔案,需在其後緊跟打包輸出檔名。後面使用 du 命令檢視打包後檔案的大小(後面會具體說明該命令)。

設定壓縮級別為 9 和 1(9 最大,1 最小),重新打包:

$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou/desktop -x ~/*.zip

$ zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou/desktop -x ~/*.zip

這裡新增了乙個引數用於設定壓縮級別 -[1-9],1 表示最快壓縮但體積大,9 表示體積最小但耗時最久。最後那個 -x 是為了排除我們上一次建立的 zip 檔案,否則又會被打包進這一次的壓縮檔案中,注意:這裡只能使用絕對路徑,否則不起作用。

我們再用 du 命令分別檢視預設壓縮級別、最低、最高壓縮級別及未壓縮的檔案的大小:

$ du -h -d 0 *.zip ~ | sort
通過 man 手冊可知:

h, --human-readable(顧名思義,你可以試試不加的情況)

d, --max-depth(所檢視檔案的深度)

這樣一目了然,理論上來說預設壓縮級別應該是最高的,但是由於檔案不大,這裡的差異不明顯(幾乎看不出差別),不過你在環境中操作之後看到的壓縮檔案大小可能跟圖上的有些不同,因為系統在使用過程中,會隨時生成一些快取檔案在當前使用者的家目錄中,這對於我們學習命令使用來說,是無關緊要的,可以忽略這些不同。

建立加密 zip 包

使用 -e 引數可以建立加密壓縮包:

$ zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou/desktop
copy

注意: 關於 zip 命令,因為 windows 系統與 linux/unix 在文字檔案格式上的一些相容問題,比如換行符(為不可見字元),在 windows 為 cr+lf(carriage-return+line-feed:回車加換行),而在 linux/unix 上為 lf(換行),所以如果在不加處理的情況下,在 linux 上編輯的文字,在 windows 系統上開啟可能看起來是沒有換行的。如果你想讓你在 linux 建立的 zip 壓縮檔案在 windows 上解壓後沒有任何問題,那麼你還需要對命令做一些修改:

$ zip -r -l -o shiyanlou.zip /home/shiyanlou/desktop
需要加上 -l 引數將 lf 轉換為 cr+lf 來達到以上目的。

將 shiyanlou.zip 解壓到當前目錄:

$ unzip shiyanlou.zip
copy

使用安靜模式,將檔案解壓到指定目錄:

$ unzip -q shiyanlou.zip -d ziptest
上述指定目錄不存在,將會自動建立。如果你不想解壓只想檢視壓縮包的內容你可以使用 -l 引數:

$ unzip -l shiyanlou.zip
注意: 使用 unzip 解壓檔案時我們同樣應該注意相容問題,不過這裡我們關心的不再是上面的問題,而是中文編碼的問題,通常 windows 系統上面建立的壓縮檔案,如果有有包含中文的文件或以中文作為檔名的檔案時缺省會採用 gbk 或其它編碼,而 linux 上面預設使用的是 utf-8 編碼,如果不加任何處理,直接解壓的話可能會出現中文亂碼的問題(有時候它會自動幫你處理),為了解決這個問題,我們可以在解壓時指定編碼型別。

使用 -o(英文本母,大寫 o)引數指定編碼型別:

unzip -o gbk 中文壓縮檔案.zip
在 linux 上面更常用的是 tar 工具,tar 原本只是乙個打包工具,只是同時還是實現了對 7z、gzip、xz、bzip2 等工具的支援,這些壓縮工具本身只能實現對檔案或目錄(單獨壓縮目錄中的檔案)的壓縮,沒有實現對檔案的打包壓縮,所以我們也無需再單獨去學習其他幾個工具,tar 的解壓和壓縮都是同乙個命令,只需引數不同,使用比較方便。

下面先掌握 tar 命令一些基本的使用方式,即不進行壓縮只是進行打包(建立歸檔檔案)和解包的操作。

建立乙個 tar 包:

$ cd /home/shiyanlou

$ tar -p -cf shiyanlou.tar /home/shiyanlou/desktop

上面命令中,-p 保留絕對路徑符,-c 表示建立乙個 tar 包檔案,-f 用於指定建立的檔名,注意檔名必須緊跟在 -f 引數之後,比如不能寫成 tar -fc shiyanlou.tar,可以寫成 tar -f shiyanlou.tar -c ~。你還可以加上 -v 引數以可視的的方式輸出打包的檔案。

解包乙個檔案(-x 引數)到指定路徑的已存在目錄(-c 引數):

$ mkdir tardir

$ tar -xf shiyanlou.tar -c tardir

只檢視不解包檔案 -t 引數:

$ tar -tf shiyanlou.tar
$ tar -cphf etc.tar /etc
對於建立不同的壓縮格式的檔案,對於 tar 來說是相當簡單的,需要的只是換乙個引數,這裡我們就以使用 gzip 工具建立 *.tar.gz 檔案為例來說明。

我們只需要在建立 tar 檔案的基礎上新增 -z 引數,使用 gzip 來壓縮檔案:

$ tar -czf shiyanlou.tar.gz /home/shiyanlou/desktop
解壓 *.tar.gz 檔案:

$ tar -xzf shiyanlou.tar.gz
此處輸入的描述

現在我們要使用其它的壓縮工具建立或解壓相應檔案只需要更改乙個引數即可:

壓縮檔案格式

引數*.tar.gz

說了這麼多,其實平常使用的引數並沒有那麼複雜,只需要記住常用的組合就可以了。 常用命令:

zip:

打包 :zip something.zip something (目錄** -r 引數)

解包:unzip something.zip

指定路徑:-d 引數

tar:

打包:tar -cf something.tar something

解包:tar -xf something.tar

指定路徑:-c 引數

$ sudo apt-get install libaa-bin

# 提示 command not found ,請自行解決

$ aafire

Linux 檔案打包與解壓縮

zip zip 程式打包壓縮的檔案 rar rar 程式壓縮的檔案 7z 7zip 程式壓縮的檔案 tar tar 程式打包,未壓縮的檔案 gz gzip 程式 gnu zip 壓縮的檔案 xz xz 程式壓縮的檔案 bz2 bzip2 程式壓縮的檔案 tar.gz tar 打包,gzip 程式壓縮...

檔案打包與解壓縮

在windows上壓縮包不過兩種格式 zip 7z,而在linux上壓縮包有 rar gz xz bz2 tar tar.gz tar.xz tar.bz2 檔名字尾 說明zip zip程式打包壓縮的檔案 rarrar程式打包壓縮的檔案 7z7zip程式打包的壓縮檔案 tartar程式打包,未壓縮的...

Linux 壓縮 解壓縮 檔案打包

軟體的分類 兩類 原始碼包 源 公開 基本都是 c語言寫的 來自 gun社群 特點 壓縮包的形式提供 gzip bzip2 tar 學習壓縮工具使用 dd if dev zero of tmp bigfile bs 1m count 100 建立乙個練習檔案大小是100m dd 磁碟對拷用的 if ...