重要提醒:系統(tǒng)檢測到您的賬號可能存在被盜風險,,請盡快查看風險提示,,并立即修改密碼。 | 關(guān)閉 網(wǎng)易博客安全提醒:系統(tǒng)檢測到您當前密碼的安全性較低,為了您的賬號安全,,建議您適時修改密碼 立即修改 | 關(guān)閉 dragonflover的博客 財富的天下,,天下的財富,我保留,,你拿走,! 在Linux的環(huán)境中,壓縮文件案的擴展名大多是: *.Z compress 程序壓縮的文件,; *.gz gzip 程序壓縮的文件,; *.bz2 bzip2 程序壓縮的文件; *.tar tar 程序打包的數(shù)據(jù),,并沒有壓縮過,; *.tar.gz tar 程序打包的文件,其中并且經(jīng)過 gzip 的壓縮 *.tar.bz2 tar 程序打包的文件,,其中并且經(jīng)過 bzip2 的壓縮 Linux上常見的壓縮指令就是 gzip 與 bzip2 ,,至于 compress 已經(jīng)退流行了。 gzip, zcat gzip 可以說是應用度最廣的壓縮指令了,!目前 gzip 可以解開 compress, zip 與 gzip 等軟件所壓縮的文件,。 至于 gzip 所建立的壓縮文件為 *.gz 的檔名喔!讓我們來看看這個指令的語法吧: [root@www ~]# gzip [-cdtv#] 檔名 [root@www ~]# zcat 檔名.gz 選項與參數(shù): -c :將壓縮的數(shù)據(jù)輸出到屏幕上,,可透過數(shù)據(jù)流重導向來處理,; -d :解壓縮的參數(shù); -t :可以用來檢驗一個壓縮文件的一致性~看看文件有無錯誤,; -v :可以顯示出原文件/壓縮文件案的壓縮比等信息,; -# :壓縮等級,-1 最快,,但是壓縮比最差,、-9 最慢,但是壓縮比最好,!預設(shè)是 -6 范例一:將 /etc/man.config 復制到 /tmp ,,并且以 gzip 壓縮 [root@www ~]# cd /tmp [root@www tmp]# cp /etc/man.config . [root@www tmp]# gzip -v man.config man.config: 56.1% -- replaced with man.config.gz [root@www tmp]# ll /etc/man.config /tmp/man* -rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config -rw-r--r-- 1 root root 2684 Nov 10 17:24 /tmp/man.config.back.Z -rw-r--r-- 1 root root 2057 Nov 10 17:14 /tmp/man.config.gz <==gzip壓縮比較佳 范例二:由于 man.config 是文本文件,請將范例一的壓縮文件的內(nèi)容讀出來,! [root@www tmp]# zcat man.config.gz # 由于 man.config 這個原本的文件是是文本文件,,因此我們可以嘗試使用 zcat 去讀取,! # 此時屏幕上會顯示 man.config.gz 解壓縮之后的文件內(nèi)容,! 范例三:將范例一的文件解壓縮 [root@www tmp]# gzip -d man.config.gz # 不要使用 gunzip 這個指令,不好背,!使用 gzip -d 來進行解壓縮,! # 與 gzip 相反,, gzip -d 會將原本的 .gz 刪除,產(chǎn)生原本的 man.config 文件,。 范例四:將范例三解開的 man.config 用最佳的壓縮比壓縮,,并保留原本的文件 [root@www tmp]# gzip -9 -c man.config > man.config.gz bzip2, bzcat 若說 gzip 是為了取代 compress 并提供更好的壓縮比而成立的,那么 bzip2 則是為了取代 gzip 并提供更佳的壓縮比而來的,。 bzip2 真是很不錯用的東西~這玩意的壓縮比竟然比 gzip 還要好~至于 bzip2 的用法幾乎與 gzip 相同,! 看看底下的用法吧! [root@www ~]# bzip2 [-cdkzv#] 檔名 [root@www ~]# bzcat 檔名.bz2 選項與參數(shù): -c :將壓縮的過程產(chǎn)生的數(shù)據(jù)輸出到屏幕上,! -d :解壓縮的參數(shù) -k :保留源文件,,而不會刪除原始的文件喔! -z :壓縮的參數(shù) -v :可以顯示出原文件/壓縮文件案的壓縮比等信息,; -# :與 gzip 同樣的,,都是在計算壓縮比的參數(shù), -9 最佳,, -1 最快! 范例一:將剛剛的 /tmp/man.config 以 bzip2 壓縮 [root@www tmp]# bzip2 -z man.config # 此時 man.config 會變成 man.config.bz2 ,! 范例二:將范例一的文件內(nèi)容讀出來,! [root@www tmp]# bzcat man.config.bz2 # 此時屏幕上會顯示 man.config.bz2 解壓縮之后的文件內(nèi)容!,! 范例三:將范例一的文件解壓縮 [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 目錄] <==解壓縮 選項與參數(shù): -c :建立打包文件,可搭配 -v 來察看過程中被打包的文件名(filename) -t :察看打包文件的內(nèi)容含有哪些文件名,,重點在察看『文件名』就是了,; -x :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開 特別留意的是,, -c, -t, -x 不可同時出現(xiàn)在一串指令列中,。 -j :透過 bzip2 的支持進行壓縮/解壓縮:此時文件名最好為 *.tar.bz2 -z :透過 gzip 的支持進行壓縮/解壓縮:此時文件名最好為 *.tar.gz -v :在壓縮/解壓縮的過程中,將正在處理的文件名顯示出來,! -f filename:-f 后面要立刻接要被處理的文件名,!建議 -f 單獨寫一個選項啰! -C 目錄 :這個選項用在解壓縮,,若要在特定目錄解壓縮,,可以使用這個選項。 其他后續(xù)練習會使用到的選項介紹: -p :保留備份數(shù)據(jù)的原本權(quán)限與屬性,,常用于備份(-c)重要的配置文件 -P :保留絕對路徑,亦即允許備份數(shù)據(jù)中含有根目錄存在之意,; --exclude=FILE:在壓縮的過程中,,不要將 FILE 打包! 其實最簡單的使用 tar 就只要記憶底下的方式即可: 壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱 查 詢:tar -jtv -f filename.tar.bz2 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄 使用 tar 加入 -j 或 -z 的參數(shù)備份 /etc/ 目錄 有事沒事備份一下 /etc 這個目錄是件好事!備份 /etc 最簡單的方法就是使用 tar 啰,!讓我們來玩玩先: [root@www ~]# tar -zpcv -f /root/etc.tar.gz /etc tar: Removing leading `/' from member names <==注意這個警告訊息 /etc/ ....中間省略.... /etc/esd.conf /etc/crontab # 由于加上 -v 這個選項,,因此正在作用中的文件名就會顯示在屏幕上。 # 如果你可以翻到第一頁,,會發(fā)現(xiàn)出現(xiàn)上面的錯誤訊息,!底下會講解。 # 至于 -p 的選項,,重點在于『保留原本文件的權(quán)限與屬性』之意,。 [root@www ~]# tar -jpcv -f /root/etc.tar.bz2 /etc # 顯示的訊息會跟上面一模一樣啰! [root@www ~]# ll /root/etc* -rw-r--r-- 1 root root 8740252 Nov 15 23:07 /root/etc.tar.bz2 -rw-r--r-- 1 root root 13010999 Nov 15 23:01 /root/etc.tar.gz [root@www ~]# du -sm /etc 118 /etc # 為什么建議您使用 -j 這個選項,?從上面的數(shù)值你可以知道了吧,?^_^ 查閱 tar 文件的數(shù)據(jù)內(nèi)容(可察看文件名),與備份文件名有否根目錄的意義 [root@www ~]# tar -jtv -f /root/etc.tar.bz2 如果你確定你就是需要備份根目錄到 tar 的文件中,,那可以使用 -P (大寫) 這個選項,,請看底下的例子分析: 范例:將文件名中的(根)目錄也備份下來,并察看一下備份檔的內(nèi)容文件名 [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 選項,,所以僅有文件名而已,!沒有詳細屬性/權(quán)限等參數(shù)。 例題:系統(tǒng)備份范例 系統(tǒng)上有非常多的重要目錄需要進行備份,,而且其實我們也不建議你將備份數(shù)據(jù)放置到 /root 目錄下,! 假設(shè)目前你已經(jīng)知道重要的目錄有底下這幾個: /etc/ (配置文件) /home/ (用戶的家目錄) /var/spool/mail/ (系統(tǒng)中,所有賬號的郵件信箱) /var/spool/cron/ (所有賬號的工作排成配置文件) /root (系統(tǒng)管理員的家目錄) 然后我們也知道,,/home/loop* 不需要備份,,而且 /root 底下的壓縮文件也不需要備份,另外假設(shè)你要將備份的數(shù)據(jù)放置到 /backups ,,并且該目錄僅有 root 有權(quán)限進入,! 此外,每次備份的文件名都希望不相同,,例如使用:backup-system-20091130.tar.bz2 之類的文件名來處理,。 那你該如何處理這個備份數(shù)據(jù)呢? # 1. 先處理要放置備份數(shù)據(jù)的目錄與權(quán)限: [root@www ~]# mkdir /backups [root@www ~]# chmod 700 /backups [root@www ~]# ll -d /backups drwx------ 2 root root 4096 Nov 30 16:35 /backups # 2. 假設(shè)今天是 2009/11/30 ,,則建立備份的方式如下: [root@www ~]# tar -jcv -f /backups/backup-system-20091130.tar.bz2 \ > --exclude=/root/*.bz2 --exclude=/root/*.gz --exclude=/home/loop* \ > /etc /home /var/spool/mail /var/spool/cron /root ....(過程省略).... [root@www ~]# ll -h /backups/ -rw-r--r-- 1 root root 8.4M Nov 30 16:43 backup-system-20091130.tar.bz2 dump-完整備份工具: 某些時刻你想要針對文件系統(tǒng)進行備份或者是儲存的功能時,,不能不談到這個 dump 指令! 用 dump 備份完整的文件系統(tǒng) [root@www ~]# dump [-Suvj] [-level] [-f 備份檔] 待備份資料 [root@www ~]# dump -W 選項與參數(shù): -S :僅列出后面的待備份數(shù)據(jù)需要多少磁盤空間才能夠備份完畢,; -u :將這次 dump 的時間記錄到 /etc/dumpdates 文件中,; -v :將 dump 的文件過程顯示出來; -j :加入 bzip2 的支持,!將數(shù)據(jù)進行壓縮,,默認 bzip2 壓縮等級為 2 -level:就是我們談到的等級,,從 -0 ~ -9 共十個等級; -f :有點類似 tar 啦,!后面接產(chǎn)生的文件,,亦可接例如 /dev/st0 裝置文件名等 -W :列出在 /etc/fstab 里面的具有 dump 設(shè)定的 partition 是否有備份過? 現(xiàn)在就讓我們來做幾個范例吧,!假如你要將系統(tǒng)的最小的文件系統(tǒng)捉出來進行備份,,那該如何進行呢? # 1. 先找出系統(tǒng)中最小的那個文件系統(tǒng),,如下所示: [root@www ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 9.5G 3.7G 5.3G 42% /dev/hdc3 4.8G 651M 3.9G 15% /home /dev/hdc1 99M 11M 83M 12% /boot <==看起來最小的就是他啦,! tmpfs 363M 0 363M 0% /dev/shm # 2. 先測試一下,如果要備份此文件系統(tǒng),,需多少容量,? [root@www ~]# dump -S /dev/hdc1 5630976 <==注意一下,這個單位是 bytes ,,所以差不多是 5.6MBytes,。 # 3. 將完整備份的文件名記錄成為 /root/boot.dump ,同時更新記錄文件: [root@www ~]# dump -0u -f /root/boot.dump /boot DUMP: Date of this level 0 dump: Tue Dec 2 02:53:45 2008 <==記錄等級與備份時間 DUMP: Dumping /dev/hdc1 (/boot) to /root/boot.dump <==dump的來源與目標 DUMP: Label: /boot <==文件系統(tǒng)的 label DUMP: Writing 10 Kilobyte records DUMP: mapping (Pass I) [regular files] <==開始進行文件對應 DUMP: mapping (Pass II) [directories] DUMP: estimated 5499 blocks. <==評估整體block數(shù)量 DUMP: Volume 1 started with block 1 at: Tue Dec 2 02:53:46 2008 DUMP: dumping (Pass III) [directories] <==開始 dump 工作 DUMP: dumping (Pass IV) [regular files] DUMP: Closing /root/boot.dump <==結(jié)束寫入備份檔 DUMP: Volume 1 completed at: Tue Dec 2 02:53:47 2008 DUMP: Volume 1 5550 blocks (5.42MB) <==最終備份數(shù)據(jù)容量 DUMP: Volume 1 took 0:00:01 DUMP: Volume 1 transfer rate: 5550 kB/s DUMP: 5550 blocks (5.42MB) on 1 volume(s) DUMP: finished in 1 seconds, throughput 5550 kBytes/sec DUMP: Date of this level 0 dump: Tue Dec 2 02:53:45 2008 DUMP: Date this dump completed: Tue Dec 2 02:53:47 2008 DUMP: Average transfer rate: 5550 kB/s DUMP: DUMP IS DONE # 在指令的下達方面,,dump 后面接 /boot 或 /dev/hdc1 都可以的,! # 而執(zhí)行 dump 的過程中會出現(xiàn)如上的一些訊息,您可以自行仔細的觀察,! [root@www ~]# ll /root/boot.dump /etc/dumpdates -rw-rw-r-- 1 root disk 43 Dec 2 02:53 /etc/dumpdates -rw-r--r-- 1 root root 5683200 Dec 2 02:53 /root/boot.dump # 由于加上 -u 的選項,因此 /etc/dumpdates 該文件的內(nèi)容會被更新,!注意,, # 這個文件僅有在 dump 完整的文件系統(tǒng)時才有支持主動更新的功能。 # 4. 觀察一下系統(tǒng)主動建立的記錄文件: [root@www ~]# cat /etc/dumpdates /dev/hdc1 0 Tue Dec 2 02:53:47 2008 +0800 [文件系統(tǒng)] [等級] [ ctime 的時間 ] # 0. 看一下有沒有任何文件系統(tǒng)被 dump 過的資料,? [root@www ~]# dump -W Last dump(s) done (Dump '>' file systems): > /dev/hdc2 ( /) Last dump: never > /dev/hdc3 ( /home) Last dump: never /dev/hdc1 ( /boot) Last dump: Level 0, Date Tue Dec 2 02:53:47 2008 # 如上列的結(jié)果,,該結(jié)果會捉出 /etc/fstab 里面第五字段設(shè)定有需要 dump 的 # partition,然后與 /etc/dumpdates 進行比對,,可以得到上面的結(jié)果啦,! # 尤其是第三行,可以顯示我們曾經(jīng)對 /dev/hdc1 進行過 dump 的備份動作喔,! 這樣很簡單的就建立起來 /root/boot.dump 文件,,該文件將整個 /boot/ 文件系統(tǒng)都備份下來了! 并且將備份的時間寫入 /etc/dumpdates 文件中,,準備讓下次備份時可以作為一個參考依據(jù),。 現(xiàn)在讓我們來進行一個測試,檢查看看能否真的建立 level 1 的備份呢,? # 1. 先惡搞一下,,建立一個大約 10 MB 的文件在 /boot 內(nèi): [root@www ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.166128 seconds, 63.1 MB/s # 2. 開始建立差異備份檔,,此時我們使用 level 1 吧: [root@www ~]# dump -1u -f /root/boot.dump.1 /boot ....(中間省略).... [root@www ~]# ll /root/boot* -rw-r--r-- 1 root root 5683200 Dec 2 02:53 /root/boot.dump -rw-r--r-- 1 root root 10547200 Dec 2 02:56 /root/boot.dump.1 # 看看文件大小,豈不是就是剛剛我們所建立的那個大文件的容量嗎,? ^_^ # 3. 最后再看一下是否有記錄 level 1 備份的時間點呢,? [root@www ~]# dump -W Last dump(s) done (Dump '>' file systems): > /dev/hdc2 ( /) Last dump: never > /dev/hdc3 ( /home) Last dump: never > /dev/hdc1 ( /boot) Last dump: Level 1, Date Tue Dec 2 02:56:33 2008 ....(中間省略).... 用 dump 備份非文件系統(tǒng),亦即單一目錄的方法 現(xiàn)在讓我們來處理一下 /etc 的 dump 備份吧,!因為 /etc 并非單一文件系統(tǒng),,他只是個目錄而已。 所以依據(jù)限制的說明,, -u, level 1~9 都是不適用的,。我們只能夠使用 level 0 的完整備份將 /etc 給他 dump 下來。因此作法就變的很簡單了,! # 讓我們將 /etc 整個目錄透過 dump 進行備份,,且含壓縮功能 [root@www ~]# dump -0j -f /root/etc.dump.bz2 /etc DUMP: Date of this level 0 dump: Tue Dec 2 12:08:22 2008 DUMP: Dumping /dev/hdc2 (/ (dir etc)) to /root/etc.dump.bz2 DUMP: Label: /1 DUMP: Writing 10 Kilobyte records DUMP: Compressing output at compression level 2 (bzlib) DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 115343 blocks. DUMP: Volume 1 started with block 1 at: Tue Dec 2 12:08:23 2008 DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: Closing /root/etc.dump.bz2 DUMP: Volume 1 completed at: Tue Dec 2 12:09:49 2008 DUMP: Volume 1 took 0:01:26 DUMP: Volume 1 transfer rate: 218 kB/s DUMP: Volume 1 124680kB uncompressed, 18752kB compressed, 6.649:1 DUMP: 124680 blocks (121.76MB) on 1 volume(s) DUMP: finished in 86 seconds, throughput 1449 kBytes/sec DUMP: Date of this level 0 dump: Tue Dec 2 12:08:22 2008 DUMP: Date this dump completed: Tue Dec 2 12:09:49 2008 DUMP: Average transfer rate: 218 kB/s DUMP: Wrote 124680kB uncompressed, 18752kB compressed, 6.649:1 DUMP: DUMP IS DONE # 上面特殊字體的部分顯示:原本有 124680kb 的容量,被壓縮成為 18752kb,, # 整個壓縮比為 6.649:1 ,,還可以的壓縮情況啦! restore 備份檔就是在急用時可以回復系統(tǒng)的重要數(shù)據(jù),,所以有備份當然就得要學學如何復原了,! dump 的復原使用的是 restore 這個指令! [root@www ~]# restore -t [-f dumpfile] [-h] <==用來察看 dump 檔 [root@www ~]# restore -C [-f dumpfile] [-D 掛載點] <==比較dump與實際文件 [root@www ~]# restore -i [-f dumpfile] <==進入互動模式 [root@www ~]# restore -r [-f dumpfile] <==還原整個文件系統(tǒng) 選項與參數(shù): 相關(guān)的各種模式,,各種模式無法混用喔,!例如不可以寫 -tC 啦! -t :此模式用在察看 dump 起來的備份文件中含有什么重要數(shù)據(jù),!類似 tar -t 功能,; -C :此模式可以將 dump 內(nèi)的數(shù)據(jù)拿出來跟實際的文件系統(tǒng)做比較, 最終會列出『在 dump 文件內(nèi)有記錄的,,且目前文件系統(tǒng)不一樣』的文件,; -i :進入互動模式,可以僅還原部分文件,,用在 dump 目錄時的還原,! -r :將整個 filesystem 還原的一種模式,用在還原針對文件系統(tǒng)的 dump 備份,; 其他較常用到的選項功能: -h :察看完整備份數(shù)據(jù)中的 inode 與文件系統(tǒng) label 等信息 -f :后面就接你要處理的那個 dump 文件啰,! -D :與 -C 進行搭配,可以查出后面接的掛載點與 dump 內(nèi)有不同的文件,! --------轉(zhuǎn)載
|
|