档案与档案系统的压缩与打包

本文介绍Linux环境下常用的压缩命令,如gzip、bzip2及tar的使用方法,并详细讲解了dump和restore工具在系统备份和还原方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

简要知识点:

1. Linux的環境中,壓縮檔案的副檔名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2

*.Z         compress 程式壓縮的檔案;(compress压缩已经过时了)
*.gz        gzip 程式壓縮的檔案;
*.bz2       bzip2 程式壓縮的檔案;
*.tar       tar 程式打包的資料,並沒有壓縮過;
*.tar.gz    tar 程式打包的檔案,其中並且經過 gzip 的壓縮
*.tar.bz2   tar 程式打包的檔案,其中並且經過 bzip2 的壓縮

 

gzipbzip2命令僅能針對一個檔案來壓縮與解壓縮。如果要对目录进行压缩,就要使用『打包軟體, tar』先把目录打包成tar文件,再进行压缩

 

2. 單純的 tar 功能僅是『打包』而已,亦即是將很多檔案集結成為一個檔案,他並沒有提供壓縮的功能。不过tar 可以与壓縮功能結合在一起,为使用者提供更方便並且更強大的壓縮與打包功能,即使用tar命令可以同时打包兼压缩,也可以同时解压缩兼散包。

 

 

3. 主要压缩/解压缩命令例子

使用gzip来压缩文件

gzip -v man.config  <==生成.gz文件

 

使用gzip来解压缩.gz文件

gzip -d man.config.gz
# 也可以使用 gunzip来替代gzip -d 來進行解壓縮!
注意:gzip -d 解压缩后會將原本的 .gz file刪除,如果想保留.gz file,则要加上-c参数
gzip -c man.config > man.config.gz

 

使用bzip2来压缩文件

bzip2 -z man.config  <==生成.bz2文件

 

使用bzip2来解压缩.bz2文件

bzip2 -d man.config.bz2

 

注意:-c, -t, -x参数不可同時出現在tar命令的

使用tar来把整个/etc目录打包成.tar file,然后再压缩成.tar.gz file

tar -zcv -f /root/etc.tar.gz /etc
 

使用tar来把整个/etc目录打包成.tar file,然后再压缩成.tar.bz2 file

tar -jcv -f /root/etc.tar.bz2 /etc
 
同时把多个文件or目录(/etc and /home目录)打包到一个压缩文件内
tar -jcv -f /root/etc_root.tar.bz2 /etc /home
 
ect.tar.gz file解压成etc.tar file,然后再在当前目录将其散包(散包后为etc目录)
tar -zxv -f /root/etc.tar.gz

 

 

ect.tar.bz2 file解压成etc.tar file,然后再在当前目录将其散包(散包后为etc目录)
tar -jxv -f /root/etc.tar.bz2

 

将压缩打包文件解压缩到指定目录,而不是当前目录

tar -jxv -f /root/etc.tar.bz2 -C /tmp <--通过-C参数
tar -zxv -f /root/etc.tar.gz -C /tmp  <--通过-C参数

 

查閱 tar 檔案的資料內容

tar -jtv -f /root/etc.tar.bz2

 

For more details, read following sections.

 

gzip语法

[root@www ~]# gzip [-cdtv#] 檔名
[root@www ~]# zcat 檔名.gz
選項與參數:
-c  :將壓縮的資料輸出到螢幕上,可透過資料流重導向來處理;
-d  :解壓縮的參數;
-t  :可以用來檢驗一個壓縮檔的一致性~看看檔案有無錯誤;
-v  :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
-#  :壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6
 
範例一:將 /etc/man.config 複製到 /tmp ,並且以 gzip 壓縮
 [root@www tmp]# gzip -v man.config

 

範例二:將範例一的檔案解壓縮
[root@www tmp]# gzip -d man.config.gz
# 也可以使用 gunzip来替代gzip -d 來進行解壓縮!
#  gzip 相反,gzip -d 將原本的.gz刪除,產生原本的 man.config 檔案。
 
範例三:將範例三解開的 man.config 用最佳的壓縮比壓縮,並保留原本的檔案
[root@www tmp]# gzip -9 -c man.config > man.config.gz

 

zcat命令查看.gz file里的档案内容

zcat man.config.gz

 

 

bzip2语法

[root@www ~]# bzip2 [-cdkzv#] 檔名
選項與參數:
-c  :將壓縮的過程產生的資料輸出到螢幕上!
-d  :解壓縮的參數
-k  :保留原始檔案,而不會刪除原始的檔案喔!
-z  :壓縮的參數
-v  :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
-#  :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快!
 
範例一:將剛剛的 /tmp/man.config  bzip2 壓縮,生成.bz2 file
[root@www tmp]# bzip2 -z man.config 
 
範例二:將範例一的檔案解壓縮
[root@www tmp]# bzip2 -d man.config.bz2
 
範例三:將範例三解開的 man.config 用最佳的壓縮比壓縮,並保留原本的檔案
[root@www tmp]# bzip2 -9 -c man.config > man.config.bz2

 

 

bzcat命令查看.bz2 file里的档案内容

[root@www tmp]# bzcat man.config.bz2
# 此時螢幕上會顯示 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 目錄    :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
 
其他参数:
-p  保留備份資料的原本權限與屬性,常用於備份(-c)重要的設定檔
-P  保留絕對路徑,亦即允許備份資料中含有根目錄存在之意
--exclude=FILE在壓縮的過程中,不要將 FILE 打包 

 

其實最簡單的使用 tar 就只要記憶底下的方式即可:

  • 壓 縮tar -jcv -f filename.tar.bz2 要被壓縮的檔案或目錄名稱
  • 查 詢tar -jtv -f filename.tar.bz2
  • 解壓縮tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄

由於『 -f filename 』是緊接在一起的,過去很多文章常會寫成『-jcvf filename』,這樣是對的, 但由於選項的順序理論上是可以變換的,所以很多讀者會誤認為『-jvfc filename』也可以~事實上這樣會導致產生的檔名變成 c 因為 -fc 嘛!所以囉,建議您在學習 tar 時,將『 -f filename 』與其他選項獨立出來,會比較不容易發生問題。

 

 

对于查看命令
tar -jtv -f /root/etc.tar.bz2

如果加上 -v 這個選項時,詳細的檔案權限/屬性都會被列出來!如果只是想要知道檔名而已, 那麼就將 -v 拿掉即可

 

另外上述命令的输出中我們可以發現一件很有趣的事情,那就是每個檔名都沒了根目錄了!這也是上一個練習中出現的那個警告訊息『tar: Removing leading `/' from member names(移除了檔名開頭的 `/' )』所告知的情況。

 

為什麼要拿掉根目錄呢?主要是為了安全!我們使用 tar 備份的資料可能會需要解壓縮回來使用, tar 所記錄的檔名 (就是我們剛剛使用 tar -jtvf 所察看到的檔名) 那就是解壓縮後的實際檔名。 如果拿掉了根目錄,假設你將備份資料在 /tmp 解開,那麼解壓縮的檔名就會變成『/tmp/etc/xxx』。 但『如果沒有拿掉根目錄,解壓縮後的檔名就會是絕對路徑, 亦即解壓縮後的資料一定會被放置到 /etc/xxx 去!』如此一來,你的原本的 /etc/ 底下的資料, 就會被備份資料所覆蓋過去了

 

By default,进行压缩时会去掉根目录的。如果你希望保留根目录,则在压缩时添加-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

 

 

僅解開压缩文件内單一檔案的方法

很簡單的,你只要使用 -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
# 在本例中,你不能寫成 /etc/shadow!因為記錄在 etc.tar.bz2 內的檔名!

 

打包某目錄,但不含該目錄下的某些檔案之作法

透過 –exclude参数

tar -jcv  -f /root/system.tar.bz2 --exclude=/root/etc* /
> --exclude=/root/system.tar.bz2  /etc /root

#若命令想要分兩行輸入時,加上反斜線 (/) 並按下 [enter] 就能夠到第二行繼續輸入了

 

僅備份比某個時刻還要新的檔案

使用--newer-mtime参数。其實有兩個選項啦,一個是『 --newer 』另一個就是『 --newer-mtime 』。當使用 --newer 時,表示後續的日期包含『 mtime ctime 』,而 --newer-mtime 則僅是 mtime 而已。

 

范例

# 1. 先由 find找出比 /etc/passwd 還要新的檔案
[root@www ~]# find /etc -newer /etc/passwd
# 此時會顯示出比 /etc/passwd 這個檔案的 mtime 還要新的檔名,
[root@www ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd
 
# 2. 好了,那麼使用 tar 來進行打包吧!日期為上面看到的 2008/09/29
[root@www ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 /
> --newer-mtime="2008/09/29" /etc/*
....(中間省略)....
/etc/smartd.conf    <==真的有備份的檔案
....(中間省略)....
/etc/yum.repos.d/   <==目錄都會被記錄下來!
tar: /etc/yum.repos.d/CentOS-Base.repo: file is unchanged; not dumped
# 最後行顯示的是『沒有被備份的』,亦即 not dumped 的意思!
 
# 3. 顯示出檔案即可
[root@www ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | /
> grep -v '/$' 
# 透過這個指令可以呼叫出 tar.bz2 內的結尾非 / 的檔名!就是我們要的啦!

 

 

系統備份範例

系統上有非常多的重要目錄需要進行備份,而且其實我們也不建議你將備份資料放置到 /root 目錄下! 假設目前你已經知道重要的目錄有底下這幾個:

  • /etc/ (設定檔)
  • /home/ (使用者的家目錄)
  • /var/spool/mail/ (系統中,所有帳號的郵件信箱)
  • /var/spool/cron/ (所有帳號的工作排成設定檔)
  • /root (系統管理員的家目錄)

然後我們也知道,/home/loop* 不需要備份,而且 /root 底下的壓縮檔也不需要備份,另外假設你要將備份的資料放置到 /backups ,並且該目錄僅有 root 有權限進入此外,每次備份的檔名都希望不相同,例如使用:backup-system-20091130.tar.bz2 之類的檔名來處理那你該如何處理這個備份資料呢?

# 1. 先處理要放置備份資料的目錄與權限:
[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. 假設今天是 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

針對檔案系統進行備份或者是儲存的功能時,使用dump 指令!這個指令除了能夠針對整個 filesystem 備份之外,也能夠僅針對目錄來備份

 

dump 的功能頗強,他除了可以備份整個檔案系統之外,還可以制定等級喔!什麼意思啊! 假設你的 /home 是獨立的一個檔案系統,那你第一次進行過 dump 後,再進行第二次 dump 時, 你可以指定不同的備份等級,假如指定等級為 1 時,此時新備份的資料只會記錄與第一次備份所有差異的檔案而已。例如在 /home 裡面的檔案資料會一直變化一樣。 而底下的方塊則是 dump 備份起來的資料,第一次備份時使用的是 level 0 ,這個等級也是完整的備份啦 等到第二次備份時,即時檔案系統內的資料已經與 level 0 不一樣了,而 level 1 僅只是比較目前的檔案系統與 level 0 之間的差異後,備份有變化過的檔案而已至於 level 2 則是與 level 1 進行比較啦

 

dump對於目錄的支援是比較不足的,這也是 dump 的限制所在。

  • 當待備份的資料為單一檔案系統
    如果是單一檔案系統 (filesystem) ,那麼該檔案系統可以使用完整的 dump 功能,包括利用 0~9 的數個 level 來備份, 同時,備份時可以使用掛載點或者是裝置檔名 (例如 /dev/sda5 之類的裝置檔名) 來進行備份!
  • 待備份的資料只是目錄,並非單一檔案系統:
    例如你僅想要備份 /home/someone/ ,但是該目錄並非獨立的檔案系統時。此時備份就有限制啦!包括:
    • 所有的備份資料都必須要在該目錄 (本例為:/home/someone/) 底下;
    • 且僅能使用 level 0 ,亦即僅支援完整備份而已
    • 不支援 -u 選項,亦即無法建立 /etc/dumpdates 這個各別 level 備份的時間記錄檔

dump 的選項雖然非常的繁複,不過如果只是想要簡單的操作時,您只要記得底下的幾個選項就很夠用了!

[root@www ~]# dump [-Suvj] [-level] [-f 備份檔] 待備份資料
[root@www ~]# dump -W
選項與參數:
-S    :僅列出後面的待備份資料需要多少磁碟空間才能夠備份完畢;
-u    :將這次 dump 的時間記錄到 /etc/dumpdates 檔案中;
-v    :將 dump 的檔案過程顯示出來;
-j    :加入 bzip2 的支援!將資料進行壓縮,預設 bzip2 壓縮等級為 2
-level:就是我們談到的等級,從 -0 ~ -9 共十個等級;
-f :有點類似 tar 啦!後面接產生的檔案,亦可接例如 /dev/st0 裝置檔名等
-W :列出在 /etc/fstab 裡面的具有 dump 設定的 partition 是否有備份過?

 

 

范例:用 dump 備份完整的檔案系統:將系統的最小的檔案系統捉出來進行備份

# 1. 先找出系統中最小的那個檔案系統,如下所示:
[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. 先測試一下,如果要備份此檔案系統,需多少容量?
[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 2008 <==記錄等級與備份時間
DUMP: Dumping /dev/hdc1 (/boot) to /root/boot.dump<==dump的來源與目標
DUMP: Label: /boot                                <==檔案系統的 label
。。。
 
# 在指令的下達方面,dump 後面接 /boot  /dev/hdc1 都可以的!
 
[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 該檔案的內容會被更新注意,
# 這個檔案僅有在 dump 完整的檔案系統時才有支援主動更新的功能
 
# 4. 觀察一下系統主動建立的記錄檔:
[root@www ~]# cat /etc/dumpdates
/dev/hdc1     0   Tue Dec  2 02:53:47 2008 +0800
[檔案系統] [等級] [       ctime 的時間         ]

 

上面的命令建立 /root/boot.dump 檔案,該檔案將整個 /boot/ 檔案系統都備份下來了! 並且將備份的時間寫入 /etc/dumpdates 檔案中,準備讓下次備份時可以作為一個參考依據。 現在讓我們來進行一個測試,檢查看看能否真的建立 level 1 的備份呢?

 

# 0. 看一下有沒有任何檔案系統被 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
 
# 1. 先惡搞一下,建立一個大約 10 MB 的檔案在 /boot 內:
[root@www ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10
 
# 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 備份非檔案系統,亦即單一目錄的方法

备份目录时,依據限制的說明, -u, level 1~9 都是不適用的。我們只能夠使用 level 0 的完整備份將 /etc 給他 dump 下來

#  /etc 整個目錄透過 dump 進行備份,且含壓縮功能
[root@www ~]# dump -0j -f /root/etc.dump.bz2 /etc

 

 

restore 还原dump备份

[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]             <==還原整個檔案系統
選項與參數:
相關的各種模式,各種模式無法混用喔!例如不可以寫 -tC 啦!
-t  :此模式用在察看 dump 起來的備份檔中含有什麼重要資料!類似 tar -t 功能;
-C  :此模式可以將 dump 內的資料拿出來跟實際的檔案系統做比較,
      最終會列出『在 dump 檔案內有記錄的,且目前檔案系統不一樣』的檔案;
-i  :進入互動模式,可以僅還原部分檔案,用在 dump 目錄時的還原!
-r  :將整個 filesystem 還原的一種模式,用在還原針對檔案系統的 dump 備份;
其他較常用到的選項功能:
-h  :察看完整備份資料中的 inode 與檔案系統 label 等資訊
-f  :後面就接你要處理的那個 dump 檔案囉!
-D  :與 -C 進行搭配,可以查出後面接的掛載點與 dump 內有不同的檔案!

 

* restore 觀察 dump 後的備份資料內容

[root@www ~]# restore -t -f /root/boot.dump 
Dump   date: Tue Dec  2 02:53:45 2008              <==說明備份的日期
Level 0 dump of /boot on www.vbird.tsai:/dev/hdc1  <==說明 level 狀態
....底下省略....
 

* 比較dump备份文件与它所备份的整個檔案系統的差異

# 0. 先嘗試變更檔案系統的內容:
[root@www ~]# cd /boot
[root@www boot]# mv config-2.6.18-128.el5 config-2.6.18-128.el5-back
 
# 1. 看使進行檔案系統與備份檔案之間的差異!
[root@www boot]# restore -C -f /root/boot.dump
Dump   date: Tue Dec  2 02:53:45 2008
Level 0 dump of /boot on www.vbird.tsai:/dev/hdc1
。。。
restore: unable to stat ./config-2.6.18-128.el5: No such file or directory
Some files were modified!  1 compare errors
# 看到上面的特殊字體了吧!那就是有差異的部分!總共有一個檔案被變更!
# 我們剛剛確實有更動過該檔案,嘿嘿!
 

* 還原整個檔案系統

由於 dump 是記錄整個檔案系統的,因此還原時你也應該要給予一個全新的檔案系統才行。 因此底下我們先建立一個檔案系統,然後再來還原吧!(??重建一个filesystem,它是tmp的吗?还原之后需不需要remove it?

 
# 1. 先建立一個新的 partition 來使用,假設我們需要的是 150M 的容量
[root@www ~]# fdisk /dev/hdc
Command (m for help): n
First cylinder (2335-5005, default 2335): <==這裡按 Enter
Using default value 2335
Last cylinder or +size or or +sizeK (2335-5005, default 5005): +150M
Command (m for help): p
....中間省略....
/dev/hdc8            2335        2353      152586   83  Linux
 
Command (m for help): w
 
[root@www ~]# partprobe   <==很重要的動作!別忘記!
# 這樣就能夠建立一個 /dev/hdc8  partition ,然後繼續格式化吧!
 
[root@www ~]# mkfs -t ext3 /dev/hdc8
[root@www ~]# mount /dev/hdc8 /mnt
 
# 2. 開始進行還原的動作!請您務必到新檔案系統的掛載點底下去!
[root@www ~]# cd /mnt
[root@www mnt]# restore -r -f /root/boot.dump
restore: ./lost+found: File exists

 

 

由於我們是備份整個檔案系統,因此你也可以建置一個全新的檔案系統 (partition) 來進行還原的動作! 整個還原的動作也不難,如上表最後一個指令,就是備份檔案中的資料還原到本目錄下 你必須要變更目錄到掛載點所在的那個目錄才行啊!這樣還原的檔案才不會跑錯地方!如果你還想要將 level 1 /root/boot.dump.1 那個檔案的內容也還原的話,那就繼續使用『restore -r -f /root/boot.dump.1』去還原吧

 

 

僅還原部分檔案的 restore 互動模式

假如你要將 etc.dump 內的 passwd shadow 捉出來而已,該如何進行呢?

[root@www ~]# cd /mnt
[root@www mnt]# restore -i -f /root/etc.dump
restore > 
# 此時你就已經進入 restore 的互動模式畫面中!要注意的是:
# 你目前已經在 etc.dump 這個檔案內了!所有的動作都是在 etc.dump 內!
 
restore > help
Available commands are:
        ls [arg] - list directory     <==列出 etc.dump 內的檔案或目錄
        cd arg - change directory     <== etc.dump 內變更目錄
        pwd - print current directory  <==列出在 etc.dump 內的路徑檔名
        add [arg] - add `arg' to list of files to be extracted 
        delete [arg] - delete `arg' from list of files to be extracted
        extract - extract requested files
# 上面三個指令是重點!各指令的功能為:
# add file    :將 file 加入等一下要解壓縮的檔案列表中
# delete file :將 file 移除出解壓縮的列表,並非刪除 etc.dump 內的檔案!
# extract     :開始將剛剛選擇的檔案列表解壓縮了去!
        setmodes - set modes of requested directories
        quit - immediately exit program
        what - list dump header information
        verbose - toggle verbose flag (useful with ``ls'')
        prompt - toggle the prompt display
        help or `?' - print this list
 
restore > ls
.:
etc/  <==會顯示出在 etc.dump 內主要的目錄,因為我們備份 /etc ,所以檔名為此!
 
restore > cd etc      <== etc.dump 內變換路徑到 etc 目錄下
restore > pwd         <==列出本目錄的檔名為?
/etc
restore > ls passwd shadow group  <==看看,真的有這三個檔案喔!
passwd
shadow
group
restore > add passwd shadow group <==加入解壓縮列表
restore > delete group            <==加錯了!將 group 移除解壓縮列表
restore > ls passwd shadow group
*passwd  <==有要被解壓縮的,檔名之前會出現 * 的符號呢!
*shadow
group
restore > extract                 <==開始進行解壓縮去!
You have not read any volumes yet.   <==這裡會詢問你需要的volume
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1 <==只有一個 volume
set owner/mode for '.'? [yn] n <==不需要修改權限
 
restore > quit                    <==離開 restore 的功能
 
[root@www ~]# ll -d etc
drwxr-xr-x 2 root root  17:49 etc  <==解壓縮後,所建立出來的目錄啦!
[root@www ~]# ll etc
total 6
-rw-r--r-- 1 root root 1945 Sep 29 02:21 passwd
-r-------- 1 root root 1257 Sep 29 02:21 shadow

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值