分类: LINUX
2009-02-13 14:46:43
*.Z compress 程式壓縮的檔案; *.gz gzip 程式壓縮的檔案; *.bz2 bzip2 程式壓縮的檔案; *.tar tar 程式打包的資料,並沒有壓縮過; *.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮 *.tar.bz2 tar 程式打包的檔案,其中並且經過 bzip2 的壓縮
[root@www ~]# gzip [-cdtv#] 檔名
[root@www ~]# zcat 檔名.gz
選項與參數:
-c :將壓縮的資料輸出到螢幕上,可透過資料流重導向來處理;
-d :解壓縮的參數;
-t :可以用來檢驗一個壓縮檔的一致性~看看檔案有無錯誤;
-v :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
-# :壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6
範例一:將 /etc/man.config 複製到 /tmp ,並且以 gzip 壓縮
[root@www ~]# bzip2 [-cdkzv#] 檔名 [root@www ~]# bzcat 檔名.bz2 選項與參數: -c :將壓縮的過程產生的資料輸出到螢幕上! -d :解壓縮的參數 -k :保留原始檔案,而不會刪除原始的檔案喔! -z :壓縮的參數 -v :可以顯示出原檔案/壓縮檔案的壓縮比等資訊; -# :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快! 範例一:將剛剛的 /tmp/man.config 以 bzip2 壓縮 [root@www tmp]# bzip2 -z man.config # 此時 man.config 會變成 man.config.bz2 ! 範例二:將範例一的檔案內容讀出來! [root@www tmp]# bzcat man.config.bz2 # 此時螢幕上會顯示 man.config.bz2 解壓縮之後的檔案內容!! 範例三:將範例一的檔案解壓縮 [root@www tmp]# bzip2 -d man.config.bz2 範例四:將範例三解開的 man.config 用最佳的壓縮比壓縮,並保留原本的檔案 [root@www tmp]# bzip2 -9 -c man.config > man.config.bz2
tar:
[root@www ~]# tar [-j|-z] [cv] [-f 建立的檔名] filename... <==打包與壓縮 [root@www ~]# tar [-j|-z] [tv] [-f 建立的檔名] <==察看檔名 [root@www ~]# tar [-j|-z] [xv] [-f 建立的檔名] [-C 目錄] <==解壓縮 選項與參數: -c :建立打包檔案,可搭配 -v 來察看過程中被打包的檔名(filename) -t :察看打包檔案的內容含有哪些檔名,重點在察看『檔名』就是了; -x :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開 特別留意的是, -c, -t, -x 不可同時出現在一串指令列中。 -j :透過 bzip2 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.bz2 -z :透過 gzip 的支援進行壓縮/解壓縮:此時檔名最好為 *.tar.gz -v :在壓縮/解壓縮的過程中,將正在處理的檔名顯示出來! -f filename:-f 後面要立刻接要被處理的檔名!建議 -f 單獨寫一個選項囉! -C 目錄 :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
([root@www ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp [root@www ~]# ll /tmp ....(前面省略).... drwxr-xr-x 105 root root 12288 Nov 11 04:02 etc ....(後面省略)....) 其他後續練習會使用到的選項介紹: -p :保留備份資料的原本權限與屬性,常用於備份(-c)重要的設定檔 -P :保留絕對路徑,亦即允許備份資料中含有根目錄存在之意; --exclude=FILE:在壓縮的過程中,不要將 FILE 打包!
如果你確定你就是需要備份根目錄到 tar 的檔案中,那可以使用 -P (大寫) 這個選項,請看底下的例子分析:
範例:將檔名中的(根)目錄也備份下來,並察看一下備份檔的內容檔名 [root@www ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc ....中間過程省略.... [root@www ~]# tar -jtf /root/etc.and.root.tar.bz2 /etc/dbus-1/session.conf /etc/esd.conf /etc/crontab # 這次查閱檔名不含 -v 選項,所以僅有檔名而已!沒有詳細屬性/權限等參數。
建議,還是不要加上 -P 這個選項來備份!
剛上頭我們解壓縮都是將整個打包檔案的內容全部解開!想像一個情況,如果我只想要解開打包檔案內的其中一個檔案而已, 那該如何做呢?很簡單的,你只要使用 -jtv 找到你要的檔名,然後將該檔名解開即可。 我們用底下的例子來說明一下:
# 1. 先找到我們要的檔名,假設解開 shadow 檔案好了: [root@www ~]# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow' -r-------- root/root 1230 2008-09-29 02:21:20 etc/shadow- -r-------- root/root 622 2008-09-29 02:21:20 etc/gshadow- -r-------- root/root 636 2008-09-29 02:21:25 etc/gshadow -r-------- root/root 1257 2008-09-29 02:21:25 etc/shadow <==這是我們要的! # 先搜尋重要的檔名!其中那個 grep 是『擷取』關鍵字的功能!我們會在第三篇說明! # 這裡您先有個概念即可!那個管線 | 配合 grep 可以擷取關鍵字的意思! # 2. 將該檔案解開!語法與實際作法如下: [root@www ~]# tar -jxv -f 打包檔.tar.bz2 待解開檔名 [root@www ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow etc/shadow [root@www ~]# ll etc total 8 -r-------- 1 root root 1257 Sep 29 02:21 shadow <==呦喝!只有一個檔案啦! # 很有趣!此時只會解開一個檔案而已!不過,重點是那個檔名!你要找到正確的檔名。 # 在本例中,你不能寫成 /etc/shadow !因為記錄在 etc.tar.bz2 內的檔名之故!
打包某目錄,但不含該目錄下的某些檔案之作法
root@www ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \
> --exclude=/root/system.tar.bz2 /etc /root 新版tar指令 --exclude=/***/*** 不在是--exclude ***