檔案與檔案系統壓縮

2021-09-29 23:43:53 字數 4817 閱讀 9421

目錄

打包命令

什麼是檔案壓縮呢?我們稍微談一談它的原理,目前我們使用的計算機系統中都是使用所謂的位元組單位來計量。不過,事實上,計算機最小的計量單位應該是bit才對,此外,我們也知道 1位元=8位元組(1byte=8bit),但是如果今天我們只是記錄乙個數字,即1這個數字,它會如何記錄?假設乙個位元組可以看成下面的模樣:

由於 1byte=8bit,所以每個位元組當中會有8個空格,而每個空格只可以是0、1

由於我們記錄的數字是1,考慮計算機所謂的二進位制,如此一來,1會在最右邊佔據1個位,而其他的7個位將會自動地被填上0.如下圖所示

你看看,其實在這樣的例子中,那7個位應該是空的才對。不過,為了要滿足目前我們的作業系統資料的讀寫,所以就會將該資料轉為位元組的形式來記錄。而一些聰明的計算機工程師就利用一些複雜的計算方式,將這些沒有使用到的空間【丟】出來,以讓檔案占用的空間變小,這就是壓縮的技術。

另一種壓縮技術也很有趣,它是將重複的資料進行統計記錄。舉例來說,如果你的資料為【111······】公有100個1時,那麼壓縮技術會記錄為【100個1】而不是真的有100個1的位存在。這樣也能夠精簡檔案記錄的容量,非常有趣吧!

簡單地說,你可以將它想成,其實檔案裡面有相當多的空間存在,並不是完全填滿的,而壓縮技術就是將這些空間填滿,以讓整個檔案占用的容量下降。不過,這些壓縮過的檔案並無法直接被我們的作業系統所使用,因此,若要使用這些被壓縮過的檔案資料,則必須將它還原回未壓縮前的模樣,那就是所謂的解壓縮。而至於壓縮後與壓縮的檔案所占用的磁碟空間大小,就可以被稱為是壓縮比

這個壓縮與解壓縮的操作有什麼好處呢?

1.最大的好處就是壓縮過的檔案容量變小了,所以你的硬碟無形之中就可以容納更多的資料。

2.此外,在一些網路資料的傳輸中,也會由於資料量的降低,好讓網路頻寬可以用來做更多的工作,而不是老卡在一些大型檔案傳輸上面。

*.gz         gzip程式壓縮的檔案

*.bz2 bzip2程式壓縮的檔案

*.xz xz程式壓縮的檔案

*.zip zip程式壓縮的檔案

*.z compress程式壓縮的檔案

*.tar tar程式打包的檔案,並沒有壓縮過

*.tar.gz tar程式打包的檔案,並且經過gzip的壓縮

*.tar.bz2 tar程式打包的檔案,並且經過bzip2的壓縮

*.tar.xz tar程式打包的檔案,並且經過xz的壓縮

linux常見的壓縮命令就是gzip、bzip2以及最新的xz,至於compress已經不流行了。為了支援windows常見的zip,其實linux也早就有zip命令了。gzip是由gnu計畫所開發出來的壓縮命令,該命令支援已經替換了compress。後台gnu又開發出了bzip2及xz這幾個壓縮比更好的壓縮命令。不過,這些命令通常僅能針對乙個檔案來壓縮與解壓縮,如此一來,每次壓縮與解壓縮都要一大堆檔案,豈不煩人?此時,這個所謂的【打包軟體,tar】就顯得很重要。

這個tar可以將很多檔案打包成乙個檔案,甚至是目錄也可以這麼玩。不過,單純的tar功能僅僅是打包而已,即將很多檔案結合為乙個檔案,事實上,它並沒有提供壓縮的功能,後台,gnu計畫中,將整個tar與壓縮的功能結合在一起,如此一來,提供使用者更方便且更強大的壓縮與打包功能,下面我們就來談一談這些在linux下面基本的壓縮命令。

gzip可以說是應用最廣的壓縮命令了,目前gzip可以解開compress、zip和gzip等軟體所壓縮的檔案,至於gzip所建立的壓縮檔案為*.gz,讓我們來看看這個命令的語法:

gzip [-cdtvn] 檔名

選項與引數:

-c: 將壓縮的資料輸出到螢幕上,可通過資料流重定向來處理;

-d: 解壓縮的引數;

-t: 可以用來檢驗乙個壓縮檔案的一致性,看看檔案有無錯誤;

-v: 可以顯示出原檔案/壓縮檔案的壓縮比等資訊;

-n: n為數字的意思,代表壓縮等級,-1最快,但壓縮比最差,-9最慢,但是壓縮比最好,預設是-6

示例1:壓縮檔案(gzip -v 檔名)

示例2:解壓縮檔案(gzip -d 檔名)

示例3:按照指定壓縮比壓縮(gzip -9 檔名)

示例4:檢視壓縮檔案的內容(zcat 檔名)

示例5:壓縮為指定檔名(gzip -c 檔名 > 指定檔名)

當你使用gzip進行壓縮時,在預設的狀態下原本的檔案會被壓縮成為.gz字尾的檔案,原始檔就不存在了,這點與一般習慣使用windows做壓縮的朋友所熟悉的情況不同,要注意。cat/more/less可以使用不同的方式來讀取純文字檔案,那麼zcat/zmore/zless則可以對應於cat/more/less的方式來讀取純檔案檔案被壓縮後的壓縮檔案。

若說gzip是為了替換compress並提供更好的壓縮比而成立的,那麼bzip2則是為了替換gzip並提供更加的壓縮比而來。bzip2真是很不錯的東西,這玩意的壓縮比竟然比gzip還要好,至於bzip2的用法幾乎與gzip相同,看看下面的用法吧!

bzip2 [-cdkzvn] 檔名

選項與引數:

-c: 將壓縮的資料輸出到螢幕上,可通過資料流重定向來處理;

-d: 解壓縮的引數;

-k: 保留原始檔案,而不是刪除原始檔案;

-z: 壓縮的引數(預設值,可以不加);

-v: 可以顯示出原檔案/壓縮檔案的壓縮比等資訊;

-n: n為數字的意思,代表壓縮等級,-1最快,但壓縮比最差,-9最慢,但是壓縮比最好,預設是-6

示例:

bzip2 -v 待壓縮檔案名

bzip2 -d 壓縮後的檔名

bzip2 -9 -c 待壓縮的檔名 > 自定義壓縮檔案名

雖然bzip2已經具有很棒的壓縮比,不過顯然某些自由軟體開發者還不滿足,因此後來還推出了xz這個壓縮比更高的軟體。這個軟體的用法也跟gzip/bzip2幾乎一模一樣,那我們就來看一看。

xz [-cdtlkn] 檔名

選項與引數:

-c: 將壓縮的資料輸出到螢幕上,可通過資料流重定向來處理;

-d: 解壓縮的引數;

-k: 保留原始檔案,而不是刪除原始檔案;

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

-t: 測試壓縮檔案的完整性,看看有沒有錯誤;

-z: 壓縮的引數(預設值,可以不加);

-n: n為數字的意思,代表壓縮等級,-1最快,但壓縮比最差,-9最慢,但是壓縮比最好,預設是-6

示例:

xz -v 待壓縮的檔名

xz -l 壓縮後的檔名

xz -d 壓縮後的檔名

xz -k 待壓縮的檔名

前面談到的命令大多僅能針對單一檔案來進行壓縮,雖然gzip、bzip2、xz也能夠針對目錄來進行壓縮,不過,這幾個命令對目錄的壓縮指的是將目錄內的所有檔案【分別】進行壓縮的操作。而不像在windows的系統,可以使用類似winrar這一類的壓縮軟體來將好多資料報成乙個檔案的樣式。

這種將多個檔案或目錄包成乙個大檔案的命令功能,我們可以稱它是一種打包命令,那linux有沒有這種打包命令?有,那就是大名鼎鼎的tar,tar可以將多個目錄或檔案打包成乙個大檔案,同時還可以通過gzip、bzip2、xz的支援,將該檔案同時進行壓縮。更有趣的是,由於tar的使用太廣泛了,目前windows的winrar也支援.tar.gz檔名的解壓縮。

tar的選項與引數特別多,我們只講幾個常用的選項,更多選項您可以自行man tar查詢。

tar [-z|-j|-j] [cv] [-f 待建立的新檔名] filename... <== 打包與壓縮。

tar [-z|-j|-j] [cv] [-f 既有的tar檔名] <== 檢視檔名

tar [-z|-j|-j] [xv] [-f 既有的tar檔名] <== 解壓縮

選項與引數:

-c: 建立打包檔案,可搭配-v來檢視過程中被打包的檔名(filename);

-t: 檢視打包檔案的內容含有那些檔名,重點在檢視【檔名】;

-x: 解包或解壓縮功能,可以搭配-c(大寫)在特定目錄解壓,特別留意的是,-c、-t、-x不可同時出現在一串命令列中;

-z: 通過gzip的支援進行壓縮/解壓縮: 此時檔名最好為*.tar.gz;

-j: 通過bzip2的支援進行壓縮/解壓縮:此時檔名最好為*.tar.bz2;

-j: 通過xz的支援進行壓縮/解壓縮: 此時檔名最好為 *.tar.xz,特別留意,-z、-j、-j不可以同時出現在一串命令列中;

-v: 在壓縮/解壓縮的過程中,將正在處理的檔名顯示出來;

-f filename: -f後面要立刻接要被處理的檔名,建議-f單獨寫乙個選項(比較不會忘記)。

-c 目錄: 這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項

-p(小寫): 保留備份資料的原本許可權與屬性,常用於備份(-c)重要的配置檔案;

-p(大寫): 保留絕對路徑,亦即允許備份資料中含有根目錄存在之意

其實最簡單的使用tar就只要記住下面的命令即可:

示例:tar -zcvf 檔名.tar.gz 檔名(目錄)

tar -ztvf 檔名.tar.gz

tar -zxvf 檔名.tar.gz

資料:鳥哥的linux私房菜(第四版)

檔案與檔案系統的壓縮

首先我們看一下linux下面常見的壓縮檔案的拓展名。z compress程式壓縮的檔案 zip zip程式壓縮的檔案 gz gzip程式壓縮的檔案 bz2 bzip2程式壓縮的檔案 xz xz程式壓縮的檔案 tar tar程式打包的資料,並沒有壓縮 tar.gz tar程式打包的資料,並且經過gzi...

檔案與檔案系統的壓縮

由於我們記錄數字是 1 考慮計算機所謂的二進位制喔,如此一來,1 會在最右邊佔據 1 個 bit 而其他的 7 個 bits 將會自動的被填上 0 其實在這樣的例子中,那 7 個 bits 應該是 空的 才對!不過,為了要滿足目前我們的作業系統資料的訪問,所以就會將該資料轉為 byte 的型態來記錄...

檔案與檔案系統的壓縮打包

gzip cdtv 檔名 c 將壓縮的資料輸出到螢幕上,可以通過資料流重導向來處理 d 解壓縮 t 檢驗壓縮檔案的一致性 v 顯示壓縮比等資訊 壓縮等級,1最快但壓縮比最差,9最慢但壓縮比最好,預設是6 壓縮的結果是.gz檔名,同時原始檔會被替代,zcat可以讀取gzip壓縮的檔案 bzip2 cd...