Linux下的檔案壓縮與解壓

2022-09-12 22:36:30 字數 2812 閱讀 9054

場景描述:為了節省磁碟空間,提高磁碟空間的使用效率,方便對批量檔案的傳輸和管理,引入了檔案壓縮技術。其原理簡單來說就是將原先未被資料占用的空間(每位元組下未被使用的bit)進行重新規劃和分配,以達到在有限的空間內盡可能多的儲存資料的目的。具體方法如下:

一、對於單個檔案而言,常用的壓縮命令:compress(已淘汰)、gzip(速度最快/但壓縮比最低)、bzip2(速度稍慢/但壓縮比提公升/比較常見)、xz(速度最慢/但壓縮比最高)

在linux系統下,gzip/bzip2/xz的用法為:

1)gzip -c/d/t//v/# 檔名     |注意,對windows下的可執行的二進位制檔案*.exe進行壓縮時,一定不能使用選項,否則會導致終端崩潰!

-c 將要壓縮的文字的資料以文字型別輸出到螢幕上,可用於輸出重定向

-d 解壓縮

-t 檢驗乙個壓縮檔案的一致性

-v 顯示壓縮比

-# #代表數字,1-9,9等級最高,壓縮比最大,但速度最慢

注意,gzip工具壓縮後直接刪除了原檔案,解壓縮後同樣刪除了壓縮檔案。當原檔案本身是純文字時,可以嘗試用zcat 檔名.gz讀取解壓後的文字內容!zgrep -n '關鍵字' 檔名.gz 過濾出包含關鍵字資訊的行!特別地,當有需求在壓縮時必須保留原文字檔案,則用 gzip -c 檔名 > 檔名.gz 進行保留!

2)bzip2 -c/d/k/z/t/v# 檔名   |bizp2的用法與gzip較為相像,但多了一些額外選項:

-k 保留原檔案,壓縮或解壓縮時不對原檔案進行刪除(預設同gzip一樣,自動刪除原檔案)

-z 以預設等級進行壓縮,此項可忽略

同樣的,bzcat 檔名.bz2  bzgrep -n '關鍵字' 檔名.bz2 用法通gzip類似

3)xz -d/t/l/k/c/# 檔名    |xz 用法與bzip2較為相像,但多了乙個額外選項:

-l 列出壓縮檔案的相關資訊

同樣的,xzcat 檔名.xz xzgrep -n '關鍵字' 檔名.xz 用法同bzip2類似

總結:從gzip到bzip2再到xz 壓縮比逐步提公升,相應地,壓縮速度逐步減慢。相比於gzip,後兩者均提供了保留原檔案的選項-k,xz還提供了-l 檔名.xz功能。至於三個工具的-t(測試壓縮檔案完整性,以避免出錯)功能則鮮有用到。

二、對於多個檔案而言,用功能強大的tar命令進行處理!類似於windows下的winrar。

tar 命令選項及引數甚多,以下僅列出常用的:

-c:建立打包檔案,可搭配-v 顯示過程

-t:檢視打包檔案的檔名(哪些檔案被打包)

-x:解打包或解壓縮,可搭配-c 指定解打包或解壓縮後檔案儲存目錄  

注意,以上三個選項無法同時出現!

-z:通過gzip支援壓縮/解壓縮,此時的檔名字尾最好是*.tar.gz

-j:通過bzip2支援壓縮/解壓縮,此時檔名字尾最好是*.tar.bz2

-j:通過xz支援壓縮/解壓縮,此時檔名字尾最好是*.tar.xz

注意,以上三個選項無法同時出現!

-v:顯示細節

-f filename:注意,-f後要緊接要處理的檔名

-c 目錄:配合x選項,將檔案解壓到指定目錄

-p:保留備份資料原文本的許可權及屬性,常用於備份重要的配置檔案

-p:保留絕對路徑,即允許備份資料中含有根目錄!

--exclude=file 在壓縮過程之中不將file打包

關於tar命令最最常用的無外乎以下三種格式:

format1    打包並壓縮  tar -jcvf filename.tar.bz2 要被壓縮的目錄或檔名稱

format2    查詢tar包內容  tar -jtvf filename.tar.bz2 

format3    解tar包  tar -jxvf filename.tar.bz2 [-c 目錄] 解開tar包 [到指定目錄]

下面給出幾個示例,看下tar命令的具體用法:

可見tar命令如此強大,借助於-j(呼叫bzip2)備份後只有9.1m,相比於41m的源,真是小了不少!另外我們使用了-p,這在備份中很常用!需要特別注意的是,在生成tar包過程中,自動去除「/」,為的是在做解包操作時,不覆蓋源!!!下面我們趕緊看下這個tar包的內容:

篇幅較大,僅擷取部分內容。注意!檢視tar包內容時無需加-z/j/j,tar命令會自動識別包型別,想顯示細節如屬性許可權等,可加-v

注意,此時在testdir下生成了乙個etc目錄,所有的源均放在了此目錄下!

例2.只解壓出例1的tar包中的etc/shadow這乙個檔案,其他不動

方法很簡單,執行命令:

發現,在生成的etc目錄下,僅有shadow這乙個檔案!

處理過程也很簡單,呼叫--newer-mtime="2018/08/24"選項即可:(已通過stat檢視了/etc/passwd檔案的mtime)

補充說明:

如果單純對多個檔案進行打包(僅打包,生成*.tar檔案,不呼叫gzip/bzip2/xz等工具)那麼最終的檔案,我們稱為tarfile

如果呼叫了壓縮工具(-z/j/j)最終生成的*.tar.gz/bz2/xz,我們稱之為tarball

linux下的檔案壓縮與解壓

檔案壓縮是通過一定的演算法將檔案大小變小。在linux裡主要有如下的副檔名 gz gzip壓縮 bz2 bzip2壓縮 xz xz壓縮 tar.gz tar.bz2 tar.xz gzip使用格式如下 gzip cvd 檔名 c d 解壓縮 v 可以顯示原檔案和壓縮比 數字,1代表最快,9代表壓縮比...

Linux下的Zip檔案壓縮與解壓

試驗環境lsb version core 4.1 amd64 core 4.1 noarch distributor id centos description centos linux release 7.7.1908 core release 7.7.1908 codename core 安裝z...

linux下的壓縮與解壓

解壓tar gz bz2 tgz zip等linux下的各種壓縮檔案 2009 05 12 11 00 對於剛剛接觸linux的人來說,一定會給linux下一大堆各式各樣的檔名給搞暈。別 個不說,單單就壓縮檔案為例,我們知道在windows下最常見的壓縮檔案就只有兩種 一是,zip,另乙個是.rar...