Linux之檔案壓縮與打包詳解,linux打包詳解
在講解壓縮與打包之前說一下什麼是壓縮,簡單的說,就是經過壓縮軟體壓縮的檔案叫壓縮檔,壓縮的原理是把檔案的二進位代碼壓縮,把相鄰的0,1代碼減少,比如有000000,可以把它變成6個0 的寫法60,來減少該檔案的空間,電腦中都是以byte為單位的,其實bit才是計算的最小單位,比如對於一個8位的 0000 00001正好是一個byte,但是發現前7位都是0,因此可以“記錄”1,這樣就省下了 7 bits,實現檔案變小的功能。
Linux 系統常見的壓縮命令有以下幾個,這裡之所以有擴名,完全是為了我們解讀檔案的直觀性,看到就知道是什麼格式的壓縮檔,最主要的是不同的壓縮格式解壓縮的方式不同,所以通過尾碼名,可以使用正確的解壓縮方式進行解壓縮
1、gzip , zcap
gzip是應用最為廣泛的壓縮命令,gzip 可以解壓zip 和 gzip等軟體的壓縮檔
[root @localhost ~]#gzip [-cdtv#] filename[root @localhost ~]#zcap filename.gz參數解析:-c: 將壓縮的資料輸出到螢幕上,可通過資料流重新導向來處理-d:解壓縮參數-t: 用來檢查一個壓縮檔的一致性,查看檔案有無錯誤-v: 顯示源檔案和壓縮檔的壓縮比例-#:壓縮等級,-1,壓縮速度最快,壓縮比最差,-9最慢,壓縮比最好,預設是-6
注意:使用gzip進行壓縮時,預設下檔案被壓縮成.gz的形式,源檔案會被刪除
知道普通檔案的查看可以是 cat 命令,同樣,壓縮檔可以使用 zcat 進行查看 壓縮檔的內容
現在將上述壓縮檔解壓縮
[root@localhost tmp]# gzip -d man.config.gz
注意:gzip -d 解壓縮後,預設的將.gz的壓縮檔刪除,產生源檔案
利用重新導向保留源檔案和壓縮檔
[root@localhost tmp]# gzip -c man.config > man.config.gz
2、bzip2,bzcat
bzip2壓縮方式是為了取代gzip並提供最佳的壓縮比而產生的,其用法同gzip完全一樣,只是為了更好的壓縮比,同時為了查看壓縮檔的內容,使用bzcat進行查看,壓縮檔的尾碼是 .bz
[root @localhost ~]#bzip2 [-cdtv#] filename[root @localhost ~]#bzcap filename.bz2參數解析:-c: 將壓縮的資料輸出到螢幕上,可通過資料流重新導向來處理-d:解壓縮參數-t: 用來檢查一個壓縮檔的一致性,查看檔案有無錯誤-v: 顯示源檔案和壓縮檔的壓縮比例-#:壓縮等級,-1,壓縮速度最快,壓縮比最差,-9最慢,壓縮比最好,預設是-6
3、打包 tar
什麼是打包?就是將多個檔案或者目錄包成一個檔案的功能。
[root @localhost ~]#tar [-j|-z] [cv] [-f建立的檔案名稱] filename1,filenam2.... #打包與壓縮[root @localhost ~]#tar [-j|-z] [-tv] [-f 建立的檔案名稱] #查看檔案名稱[root @localhost ~]#tar [-j|-z] [xv] [-f建立的檔案名稱] [-C 目錄] #解壓縮參數參數解析:-c:建立打包檔案,可搭配 -v來查看過程中被打包的檔案名稱 filename1...-t:查看打包檔案的內容含有哪些檔案名稱,重點在查看檔案名稱-x: 解打包或者解壓縮,搭配 -C 在特定目錄解開,特別注意:-c,-t,-x不可同時出現在一串命令列中-j: 通過bzip2的支援進行壓縮/解壓縮,此時檔案名稱的尾碼建議為.tar.bz2-z: 通過gzip的支援進行壓縮/解壓縮,此時檔案名稱的尾碼建議為.tar.gz-v: 在壓縮/解壓縮的過程中,將正在處理的檔案名稱顯示處理-f filename: -f後面跟要被處理的檔案,建議 -f 單獨寫成一個參數-C 目錄: 這個參數在解壓縮時,若要在特定目錄解壓縮,可以使用這個參數
另外還有兩個參數:
-p: 保留備份資料的基本許可權與屬性,常用與備份(-c)重要的設定檔
-P:保留絕對路徑,即允許備份資料中含有根目錄存在之意
注意:之所以要將 -f filename單獨寫,如果 -jcvf filename也可以,但由於參數的順序是可以變更,這樣與 -jvfc filename 僅 僅是變更了參數順序,但是這樣是不行,因為 -f filename ,這樣導致產生了檔案名稱為 c 的檔案,因此建議-f單獨列出來
常見的使用tar如下幾條命令:
[root @localhost ~]#tar -jcv -f filename.tar.bz2 要被壓縮的檔案和目錄 #壓縮命令[root @localhost ~]#tar -jtv -f filename.tar.bz2 #查詢[root @localhost ~]#tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄 #解壓縮
將/etc目錄下的檔案打包並壓縮為etc.tar.gz的壓縮檔
[root @localhost ~]#tar -zpcv -f /root/etc.tar.gz /etc
由於指定了 -v 參數,因此會將打包壓縮過程中的檔案名稱顯示在螢幕上,對於 -p 參數,是為了保留源檔案的許可權和屬性
圖中,顯示了部分打包壓縮過程中的檔案名稱。解壓縮
[root @localhost ~]#tar -jpcv -f /root/etc.tar.gz /etc
[root @localhost ~]#tar -jxv -f /root/etc.tar.bz2 #將 tar 檔案解壓縮
注意:檔案的備份和複製過程中,檔案的許可權可能會發生變更,因此在備份重要的系統資料時,源檔案的許可權必須進行完整的備份
查看 tar 檔案的資料內容
[root @localhost ~]#tar -jtv -f /root/etc.tar.bi2
這裡給出整個過程:
[root @localhost ~]#tar -jpcv -f /root/etc.tar.bz2 /etc #將 /etc 目錄壓縮為etc.bta.bz2 的壓縮檔
[root @localhost ~]#tar -jtv -f /root/etc.tar.bz2 #查看 tar 檔案的資料內容
查看壓縮檔的內容時,使用 參數 -v 會將檔案許可權/屬性顯示出來
[root @localhost ~]#tar -jxv -f /root/etc.tar.bz2 #將 tar 檔案解壓縮
此時會看到解壓縮後的檔案 /etc 會在本目錄下產生
通常需要指定解壓縮的位置,將解壓縮後的檔案放在 /tmp 目錄下
[root @localhost ~]#tar -jxv -f /root/etc.tar.bz2 -C /tmp #指定 tar 檔案解壓縮的位置為 /tmp
a.那如果只是想解壓壓縮檔中的某一個檔案呢?
使用 -jtv 找到你要的檔案名稱
[root @localhost ~]#tar -jtv -f /root/etc.tar.bz2 | grep 'shadow' #找到需要解壓的檔案[root @localhost ~]#tar -jxv -f /root/etc.tar.bz2 /etc/shadow #解壓壓縮檔中的一個檔案
其中方法是,先通過 -jtv 找到需要解壓的檔案,然後使用 -jxv 進行解壓
[root @localhost ~]#tar -jxv -f 打包檔案.tar.bz2 待解壓的檔案名稱
b.打包某個目錄,但是不包含該目錄下的某些檔案