Linux下文件的壓縮與打包詳解?在Linux中,有很多的壓縮命令利用這些壓縮命令,可以方便的從網絡上下載大型的文件同時,我們知道,Linux文件的擴展名是沒有特殊意義的,不過,因為Linux下存在着許多壓縮命令,所以為了方便記憶,會對這些命令所壓縮的文件進行一些特殊的命名方式本篇随筆将主要記錄一下Linux系統常見的壓縮命令,今天小編就來聊一聊關于Linux下文件的壓縮與打包詳解?接下來我們就一起去研究一下吧!
在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@localhost ~]# gzip [-cdtv#] 文件名
[root@localhost ~]# zcat 文件名.gz
選項與參數:
-c :将壓縮的數據輸出到屏幕上,可通過過數據流重導向來處理;
-d :解壓縮的參數;
-t :可以用來檢驗一個壓縮文件的一緻性,看看文件有無錯誤;
-v :可以顯示出原文件/壓縮文件的壓縮比等信息;
-# :壓縮等級(1~9),-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!默認是 -6
實例一:将 /etc/passwd 複制到 /home 目錄下,并且以gzip進行壓縮
[root@localhost home]# cp /etc/passwd passwd
[root@localhost home]# ls -l
-rw-r--r--. 1 root root 2679 4月 26 19:37 passwd
[root@localhost home]# gzip passwd
[root@localhost home]# ls -l
-rw-r--r--. 1 root root 1066 4月 26 19:37 passwd.gz
# 此時我們會發現我們剛才複制過來的 passwd 這個文件已經變成了 passwd.gz 這個壓縮文件了
實例二:将實例一的文件内容讀出來
[root@localhost 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@localhost home]# gzip -d passwd.gz
[root@localhost home]# ls -l
-rw-r--r--. 1 root root 2679 4月 26 19:37 passwd
#此時我們可以看到,剛才的passwd.gz 文件又被解壓縮成了passwd這個文件了
實例四:将實例三解壓縮的passwd文件用最佳壓縮包進行壓縮,并保留原來的文件
[root@localhost home]# gzip -c9 passwd > passwd.gz
[root@localhost 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@localhost ~]# bzip2 [-cdkzv#] 文件名
[root@localhost ~]# bzcat 文件名.bz2
選項與參數:
-c :将壓縮的過程産生的數據輸出到屏幕上
-d :解壓縮的參數
-k :保留原始文件,而不會删除原始的文件
-z :壓縮的參數
-v :可以顯示出原文件/壓縮文件的壓縮比等信息;
-# :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快!
實例一:将剛才的passwd進行壓縮
[root@localhost home]# bzip2 -z passwd
[root@localhost home]# ls -l passwd*
-rw-r--r--. 1 root root 1102 4月 26 19:37 passwd.bz2
# 此時passwd已經變成了passwd.bz2文件了
實例二:将實例一的文件進行解壓縮
[root@localhost home]# bzip2 -d passwd.bz2
[root@localhost home]# ls -l passwd*
-rw-r--r--. 1 root root 2679 4月 26 19:37 passwd
實例三:将實例二的文件進行壓縮,并保留原來的文件
[root@localhost home]# bzip2 -zk passwd
[root@localhost 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@localhost ~]# tar [-j|-z] [cv] [-f 創建的文件名] FILEname... <==打包與壓縮
[root@localhost ~]# tar [-j|-z] [tv] [-f 創建的文件名] <==查看文件名
[root@localhost ~]# 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@localhost home]# tar -cvf etc.tar /etc -->> 這個命令隻是用來打包,不進行壓縮
[root@localhost home]# tar -zcvf etc.tar /etc -->> 打包以後,使用gzip 對其進行壓縮
[root@localhost home]# tar -jcvf etc.tar /etc -->> 打包以後,使用bzip2 對其進行壓縮
# 特别注意,在參數 f 之後的檔案檔名是自己取的,我們習慣上都用 .tar 來作為标識。
# 如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file
# 如果加 j 參數,則以 .tar.bz2 來作為擴展名
實例二:查看上述etc.tar 文件裡有哪些内容
[root@localhost ~]# tar -ztvf etc.tar
# 由于我們使用 gzip 壓縮,所以要查閱該 tarfile 内的文件時,
# 就得要加上 z 這個參數
實例三:将etc.tar 文件解壓縮到當前目錄下
[root@localhost home]# tar -zxvf etc.tar
# 此時我們可以發現當前目錄下已經有了一個etc的文件夾,裡面就是我們解壓縮出來的文件
實例四:如果我隻是希望将 etc.tar 中的 etc/passwd 解壓出來
[root@localhost home]# tar -zxvf etc.tar etc/passwd
# 我可以通過 tar -ztvf 來查閱 tarfile 内的文件名,如果單隻要一個文件,
# 就可以通過這個方式來完成。注意到! etc.tar.gz 内的根目錄 / 不見了
實例五:備份/etc 内的所有文件,并且保存其權限
[root@localhost home]# tar -zxvpf etc.tar.gz /etc/
# 這個 -p 的屬性是很重要的,尤其是當您要保留原本文件的屬性時
實例六:在/home 中,比2013/04/01 新的文件就進行備份
[root@localhost home]# tar -N '2013/04/01' -zcvf home.tar /home
實例七:我要備份/home,/etc的所有文件,但是不要備份/home/localhost 這個目錄下的文件
[root@localhost home]# tar --exclude /home/localhost -zcvf myfile.tar.gz /home/* /etc
通過上面的一些實例,可以看到tar這個命令是一個多用途的壓縮命令。我們通過tar命令可以完成備份的功能。由于tar整合過後的文件我們通常取名為 *.tar,如果在打包過程中還是用了gzip的壓縮屬性,則将文件取名為*.tar.gz。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!