Linux學習之CentOS(十九)–Linux下檔案的壓縮與打包

來源:互聯網
上載者:User

在Linux中,有很多的壓縮命令。利用這些壓縮命令,可以方便的從網路上下載大型的檔案。同時,我們知道,Linux檔案的副檔名是沒有特殊意義的,不過,因為Linux下存在著許多壓縮命令,所以為了方便記憶,會對這些命令所壓縮的檔案進行一些特殊的命名方式。本篇隨筆將主要記錄一下Linux系統常見的壓縮命令。

一、壓縮檔的原理

壓縮技術,簡而言之,我們可以將其想象成:其實檔案裡面有很多的"空間"存在,並不是完全填滿的,而"壓縮"技術就是將這些"空間"填滿,從而使得整個檔案佔用量下降。

目前我們的作業系統資料中,都是使用位元組(byte)單位來計量,不過事實上,電腦中最小的計量單位應該是位(bit),我們知道 1 byte = 8 bit。那麼我們是怎麼樣對一些資料進行記錄的呢?

例如我們只是需要記憶一個數字,即1這個數字,考慮到電腦所謂的二進位,如此一來, 1 會在最右邊佔據 1 個 bit ,而其他的 7 個 bits 將會自動的被填上 0 !其實在這樣的例子中,那 7 個 bits 應該是 【空的】 才對!不過,為了要滿足目前我們的作業系統資料的存取,所以就會將該資料轉為 byte 的型態來記錄。而壓縮技術就是將這些沒有使用到的空間"丟"出來。

檔案壓縮以後可以降低磁碟的使用量,減少檔案的大小。不過這些"壓縮過的檔案"無法直接被作業系統所使用,因此,若要使用這些被壓縮過的檔案資料,則必須將它"還原"成未被壓縮的樣子,這就是"解壓縮"。

二、Linux系統常見的壓縮命令

在Linux的環境中,壓縮檔的副檔名大多是:【*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2】,為什麼會有這麼多種的副檔名呢?

這是因為 Linux 支援的壓縮命令非常多,且不同的命令所用的壓縮技術並不相同,當然彼此之間可能就無法互相壓縮/解壓縮檔案。 所以,當你下載到某個壓縮檔時,自然就需要知道該檔案是由哪種壓縮命令所製作出來的,這樣才可以使用對應的壓縮命令對其進行解壓縮。 雖然 Linux 檔案的屬性基本上是與檔案名稱沒有絕對關係的, 但是為了協助我們進行識別,所以適當的副檔名還是必要。目前Linux系統中一些常用的壓縮檔的副檔名如下大致有以下幾種:

*.Z         compress 程式壓縮的檔案;  //在當前的Linux主流版本中都已經預設沒有支援該壓縮命令了,因為gzip命令已經取代了compress命令了 
*.gz gzip 程式壓縮的檔案;*.bz2 bzip2 程式壓縮的檔案;*.tar tar 程式打包的資料,並沒有壓縮過;*.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮*.tar.bz2 tar 程式打包的檔案,其中並且經過 bzip2 的壓縮

接下來我們來看一下Linux系統下常見的一些壓縮命令。

1.gzip、zcat

gzip 可以說是使用最廣的壓縮命令了!目前 gzip 可以解壓 compress, zip 與 gzip 等軟體所壓縮的檔案。 通過gzip命令所建立的壓縮檔為 *.gz 的檔案名稱。

[root@xiaoluo ~]# gzip [-cdtv#] 檔案名稱[root@xiaoluo ~]# zcat 檔案名稱.gz選項與參數:-c  :將壓縮的資料輸出到螢幕上,可通過過資料流重導向來處理;-d  :解壓縮的參數;-t  :可以用來檢驗一個壓縮檔的一致性,看看檔案有無錯誤;-v  :可以顯示出原檔案/壓縮檔的壓縮比等資訊;-#  :壓縮等級(1~9),-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6  執行個體一:將 /etc/passwd 複製到 /home 目錄下,並且以gzip進行壓縮[root@xiaoluo home]# cp /etc/passwd passwd [root@xiaoluo home]# ls -l -rw-r--r--.  1 root    root         2679 4月  26 19:37 passwd[root@xiaoluo home]# gzip passwd [root@xiaoluo home]# ls -l
-rw-r--r--.  1 root    root         1066 4月  26 19:37 passwd.gz
# 此時我們會發現我們剛才複製過來的 passwd 這個檔案已經變成了 passwd.gz 這個壓縮檔了

執行個體二:將執行個體一的檔案內容讀出來
[root@xiaoluo home]# zcat passwd.gz
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
....................................此處省略N個字......................................
#此時我們可以看到 passwd.gz 解壓縮之後的檔案內容

執行個體三:將執行個體一的檔案進行解壓縮
[root@xiaoluo home]# gzip -d passwd.gz
[root@xiaoluo home]# ls -l
-rw-r--r--.  1 root    root         2679 4月  26 19:37 passwd
#此時我們可以看到,剛才的passwd.gz 檔案又被解壓縮成了passwd這個檔案了

執行個體四:將執行個體三解壓縮的passwd檔案用最佳壓縮包進行壓縮,並保留原來的檔案
[root@xiaoluo home]# gzip -c9 passwd > passwd.gz
[root@xiaoluo home]# ls -l passwd*
-rw-r--r--. 1 root root 2679 4月  26 19:37 passwd
-rw-r--r--. 1 root root 1066 4月  26 19:52 passwd.gz

注意:當你使用 gzip 進行壓縮時,在預設的狀態下原本的檔案會被壓縮成為 .gz 的檔案名稱, 原始檔案就不再存在了。所以如果要保留原來的檔案,可以使用執行個體四的方法來進行壓縮

我們知道,cat命令可以用來讀取一個文字檔的內容,那麼我們如果要來讀取壓縮檔資料內容要使用什麼命令呢?就是上面執行個體的 zcat 命令了。

2.bzip2、bzcat

如果說gzip是為了取代compress命令,那麼bzip2這個命令就是gzip的另一個升級版本

[root@xiaoluo ~]# bzip2 [-cdkzv#] 檔案名稱[root@xiaoluo ~]# bzcat 檔案名稱.bz2選項與參數:-c  :將壓縮的過程產生的資料輸出到螢幕上-d  :解壓縮的參數-k  :保留原始檔案,而不會刪除原始的檔案-z  :壓縮的參數-v  :可以顯示出原檔案/壓縮檔的壓縮比等資訊;-#  :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快!

執行個體一:將剛才的passwd進行壓縮
[root@xiaoluo home]# bzip2 -z passwd
[root@xiaoluo home]# ls -l passwd*
-rw-r--r--. 1 root root 1102 4月  26 19:37 passwd.bz2
# 此時passwd已經變成了passwd.bz2檔案了

執行個體二:將執行個體一的檔案進行解壓縮
[root@xiaoluo home]# bzip2 -d passwd.bz2
[root@xiaoluo home]# ls -l passwd*
-rw-r--r--. 1 root root 2679 4月  26 19:37 passwd

執行個體三:將執行個體二的檔案進行壓縮,並保留原來的檔案
[root@xiaoluo home]# bzip2 -zk passwd
[root@xiaoluo home]# ls -l passwd*
-rw-r--r--. 1 root root 2679 4月  26 19:37 passwd
-rw-r--r--. 1 root root 1102 4月  26 19:37 passwd.bz2
# -k這個參數就可以保留原檔案  或者使用 bzip2 -c passwd > passwd.bz2 這個命令也可以

使用gzip,副檔名自動為.gz。使用bzip2的話,副檔名就自動變成了.bz2.同樣,如果我們需要讀取bzip2壓縮檔的資料內容時,使用bzcat命令即可

3.tar

這個命令我們應該見得挺多的,之前在進行解壓縮時,通常都是使用這個命令

上面提到的幾個命令大多僅能針對單一檔案來進行壓縮,雖然 gzip 與 bzip2 也能夠針對目錄來進行壓縮, 不過,這兩個命令對目錄的壓縮指的是【將目錄內的所有檔案 "分別" 進行壓縮】的動作! 而不像在 Windows 的系統,可以使用類似 WinRAR這一類的壓縮軟體來將好多資料【打包成一個檔案】的樣式。

這種將多個檔案或目錄包成一個大檔案的命令功能,我們將其稱為 打包命令! 那麼Linux系統下有沒有這樣的命令呢?當然是有點,tar命令就是咱們需要的打包命令。 tar 可以將多個目錄或檔案打包成一個大檔案,同時還可以透過 gzip/bzip2 的支援,將該檔案同時進行壓縮。

[root@xiaoluo ~]# tar [-j|-z] [cv] [-f 建立的檔案名稱] filename... <==打包與壓縮[root@xiaoluo ~]# tar [-j|-z] [tv] [-f 建立的檔案名稱]             <==查看檔案名稱[root@xiaoluo ~]# tar [-j|-z] [xv] [-f 建立的檔案名稱] [-C 目錄]   <==解壓縮選項與參數:-c  :建立打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename)-t  :查看tarfile裡的檔案
-x :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開 特別留意的是, -c, -t, -x 不可同時出現在一串命令列中。-j :通過 bzip2 的支援進行壓縮/解壓縮:此時檔案名稱最好為 *.tar.bz2-z :通過 gzip 的支援進行壓縮/解壓縮:此時檔案名稱最好為 *.tar.gz-v :在壓縮/解壓縮的過程中,將正在處理的檔案名稱顯示出來
-f filename:-f 後面要立刻接要被處理的檔案名稱!建議 -f 單獨寫一個選項-C 目錄 :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。-p :保留備份資料的原本許可權與屬性,常用於備份(-c)重要的設定檔
-P :保留絕對路徑,亦即允許備份資料中含有根目錄存在之意;--exclude=FILE:在壓縮的過程中,不要將 FILE 打包

執行個體一:將這個/etc目錄下的檔案全部打包成 /home/etc.tar
[root@xiaoluo home]# tar -cvf etc.tar /etc     -->> 這個命令只是用來打包,不進行壓縮

[root@xiaoluo home]# tar -zcvf etc.tar /etc    -->> 打包以後,使用gzip 對其進行壓縮
[root@xiaoluo home]# tar -jcvf etc.tar /etc    -->> 打包以後,使用bzip2 對其進行壓縮
# 特別注意,在參數 f 之後的檔案檔名是自己取的,我們習慣上都用 .tar 來作為標識。
# 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file
# 如果加 j 參數,則以 .tar.bz2 來作為副檔名

執行個體二:查看上述etc.tar 檔案裡有哪些內容
[root@xiaoluo ~]# tar -ztvf etc.tar
# 由於我們使用 gzip 壓縮,所以要查閱該 tarfile 內的檔案時,
# 就得要加上 z 這個參數

執行個體三:將etc.tar 檔案解壓縮到目前的目錄下
[root@xiaoluo home]# tar -zxvf etc.tar
# 此時我們可以發現目前的目錄下已經有了一個etc的檔案夾,裡面就是我們解壓縮出來的檔案

執行個體四:如果我只是希望將 etc.tar 中的 etc/passwd 解壓出來
[root@xiaoluo home]# tar -zxvf etc.tar etc/passwd
# 我可以通過 tar -ztvf 來查閱 tarfile 內的檔案名稱,如果單只要一個檔案,
# 就可以通過這個方式來完成。注意到! etc.tar.gz 內的根目錄 / 不見了

執行個體五:備份/etc 內的所有檔案,並且儲存其許可權
[root@xiaoluo home]# tar -zxvpf etc.tar.gz /etc/
# 這個 -p 的屬性是很重要的,尤其是當您要保留原本檔案的屬性時

執行個體六:在/home 中,比2013/04/01 新的檔案就進行備份
[root@xiaoluo home]# tar -N '2013/04/01' -zcvf home.tar /home

執行個體七:我要備份/home,/etc的所有檔案,但是不要備份/home/xiaoluo 這個目錄下的檔案
[root@xiaoluo home]# tar --exclude /home/xiaoluo -zcvf myfile.tar.gz /home/* /etc

通過上面的一些執行個體,可以看到tar這個命令是一個多用途的壓縮命令。我們通過tar命令可以完成備份的功能。由於tar整合過後的檔案我們通常取名為 *.tar,如果在打包過程中還是用了gzip的壓縮屬性,則將檔案取名為*.tar.gz。

本篇隨筆主要記錄了Linux系統下常用的檔案壓縮命令,在後續的學習中將繼續記錄學習Linux的點點滴滴!!!

 

您可以通過點擊 右下角 的按鈕 來對文章內容作出評價, 也可以通過左下方的 關注按鈕 來關注我的部落格的最新動向。 如果文章內容對您有協助, 不要忘記點擊右下角的 推薦按鈕 來支援一下哦   如果您對文章內容有任何疑問, 可以通過評論或發郵件的方式聯絡我: 501395377@qq.com  / lzp501395377@gmail.com

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.