在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