對於本文,您在 Linux 中最有可能使用的三個存檔工具是 GNU tar、GNU cpio 和 rpm(Red Hat Packet Manager)。"Tar" 是 't'ape 'ar'chiver(磁帶存檔程序)的縮寫;它最初用於進行磁帶備份。Cpio 得名於 "copy input and output"(拷貝輸入和輸出) ,與 tar 相類似。rpm 最初由 Red Hat 開發,並向開放源代碼團體發佈,它是專用的 存檔工具,用於打包應用程序軟件。
爲便於介紹這些工具,本文重點討論在單用戶系統中存檔文件。這就意味着備份您的 /home 目錄,也可能要備份 /etc 目錄中的某些配置文件,這些目錄定期更改,如果遇 到問題,它們最難替換。
雖然可以利用 tar 等工具來運行系統備份或數據文件備份,但 在這裏不會討論這些過程,只是如果您使用 Oracle 集羣文件系統 (OCFS) 進行備份, 則需要到 oss.oracle.com 下載最新的工具,以便能夠使用 tar 備份您的 Oracle 數據庫文件。如果您使用第三方工具進行數據庫備份,可能仍然需要這樣做,因爲某些第三 方數據庫備份程序使用 tar。
使用 tar 存檔實用程序(如 tar 和 cpio)以其能夠保持關聯文件信息而爲衆人所知:目錄結構、文件內容、所有權和模式(權限)設置。(參見我以前的文章“Linux 文件命令精通指南”,獲得關於文件訪問權限的解釋。)這樣允許您存儲一個文件系統,並按照您對 其進行存檔時的情況確切地重建該文件系統。
對於用戶控制的備份或單用戶系統,tar 應該是最佳的備份工具。其基本的命令語法是 :
tar mandatory_operation [options] nameoftarfile.tar file(s)_to_archive mandatory_operation
是在 tar 手冊頁上列出的八項“功能字母”之一。當您調用 tar 時,首先必須確切唯一指定這些“操作”中的一個。這些操作中最常見的是
--create(-c)、--list (-t) 和 --extract (-x)。
兩個常用“選項”是 --verbose (-v) — 在 tar 處理文件時,它打印這些文件的列 表,以及 --file (-f) — 它指定存檔文件的名稱。雖然這些選項不是必需的,但它 們對於消除混亂而言極爲重要。
tar 選項和操作可接受三種格式:短格式、助記格式和舊格式。短格式使用單個字母,
如下所示:
$ tar -cvf document.tar document
document/
document/zz/
document/zz/new_file.out
document/samplesql/
document/samplesql/mksample8.sql
document/samplesql/oe8_cre.sql
document/samplesql/oe8_drop.sql
document/samplesql/hr8_cre.sql
助記格式使用長的名稱,如
$ tar --create --verbose --file document.tar document
來完成同樣的工作。舊格式類似於短格式,但不使用前導破折號:
$ tar cvf document.tar document
上述命令均執行相同的兩個任務:
它們爲目錄 document 創建一個 tar 文件,該目錄包含兩個子目錄 在將文件添加到存檔 document.tar 時,這些命令打印每個文件的名稱 一個重要卻經常混淆的概念是,如果沒有使用 -C --directory=DIR 選項進行指定,tar
存檔將在調用 tar 的目錄(即工作目錄)中創建的,而不是被存檔的文件所在的目錄。
格式可以混合,例如
$ tar cv --file document.tar document
在 tar 命令中的選項順序對於清晰性而言很重要。以下命令將創建一個名爲“v”的存 檔。
$ tar -cfv archive.tar document
使用助記格式可以減輕這種混淆。
存檔的命名沒有要求,但是按照慣例,命名 tar 文件要帶有 *.tar 擴展名。後面討論 的 gzip 存檔通常命名爲 *.tar.gz 或 *.tgz。
存檔內部一瞥
那麼,現在事情變得很有趣。在您創建一個 tar 文件之後,您就可以使用 -t,--list
選項瞭解其內部情況:
$ tar -tf document.tar
此命令將輸出一個列表,它與您運行 tar -cv 時所輸出的列表類似。在解壓縮下載的 tar 文件之前,最好先獲取其列表,以確保文件不會以“/”開始,而表示絕對的路徑名 。
您可以使用 tar -t 來查找單獨的文件。
$ tar -tf document.tar document/samplesql/mk*.sql
IXDBA.NET社區論壇
document/samplesql/mksample8.sql
這個方法也適用於目錄。
$ tar -tf document.tar document/samplesql
document/samplesql/
document/samplesql/mksample8.sql
document/samplesql/oe8_cre.sql
document/samplesql/oe8_drop.sql
.
結合使用 -v 選項與 --list,可以生成您的 tar 組件的長文件列表。
$tar -tvf document.tar document/samplesql
列出 tar 內容便於你查找您要解壓縮的單個文件的確切名稱。您還可以看到 tar 自動 保留了更改日期和其他文件信息。
要找出文件系統與現有 tar 文件之間的區別,請調用 tar是使用 -d, --diff 選項。
$ tar -dvf document.tar
document/samplesql/
document/samplesql/mksample8.sql
tar:document/samplesql/oe8_views.sql:Warning:Cannot stat:No such file or
directory
document/samplesql/hr8_analz.sql:Mod time differs
document/samplesql/hr8_analz.sql:Size differs
document/samplesql/getdate.sql
tar:document/samplesql/getdate.sql:Warning:Cannot stat:No such file or
directory
.
在這個示例中,tar 報告在存檔中有一個文件 hr8_analz.sql 與文件系統版本不同,有兩個文件 oe8_views.sql 和 getdate.sql 存在於 tar 存檔中,但不存在於文件系統中 。
Tar 將忽略目錄中上次創建存檔以後所創建的文件。但是,更新存檔的方法很簡單,您 將在下一章節中瞭解這種方法。
向存檔添加文件
您可以利用 -r, --append 選項將新文件添加到現有存檔。
$ tar -rvf document.tar document/samplesql
此命令將把整個目錄添加到存檔中。可以使用以下命令將單個文件添加到存檔中:
$ tar -rvf document.tar document/samplesql/getdate.sql
document/samplesql/getdate.sql
由於 tar 最初是磁帶存檔工具,利用 --append 或 --update 來更新存檔只是將被更改的文件添加到現有存檔,而不會刪除舊的文件。-N, --newer 選項可用於創建新文件和被更改文件的增量存檔。基本上,在規則基礎上重新創建存檔可能是維護最新存檔的最 簡易方法。
備份大量數據
對於大量數據,您可以使用 -M (--multivolume) 選項將 tar 輸出發送到其他介質,如磁帶、CD-ROM 或軟盤,或者使用 tar 所提供的壓縮工具進行壓縮。但是,您不能兩種 方法一起使用;這樣做會使您的存檔毫無用處。
tar 的傳統 UNIX 版本不支持 zip 壓縮,儘管所存檔的文件可以(並且現在仍然可以) 利用管道傳輸到壓縮工具。利用 GNU tar,在調用 tar 時加上選項可以指定壓縮方法。
Tar 支持三種可選的壓縮方法:
compress/uncompress (-Z, --compress/--uncompress)
gzip/gunzip (-z, --gzip/--gunzip)
bzip2/bunzip2 (-j, --bzip2/--bunzip2).
根據 GNU 項目,compress 是在商業 UNIX 發佈版本中一種較老的專用壓縮實用工具, 是出於兼容的目的而在 Linux 中提供的。Gzip 從 1997 年初開始在 tar 的 GNU 版本 中提供;它可以解壓縮那些使用 compress 壓縮的文件,並且被認爲一種較好的選擇,
原因如下:
它結合了 UNIX tar 和 compress 命令
使用它不會侵犯可能的專利權
它比 compress/uncompress 更高效。
Bzip2/bunzip2 是另一個可選實用工具,它提供比 gzip 更高效(雖然較慢)的壓縮。
一旦利用壓縮過濾器創建了一個存檔:
$ tar -czvf document.tar.gz
以後對該存檔操作時,都必須通過該過濾器。要列出存檔的內容,需執行:
$ tar -tzvf document.tar.gz
要在存檔上獲取 --diff,需執行
$ tar -dzvf document.tar.gz
或者,要對存檔進行 --extract 操作,我們將在稍後討論。
解壓縮 tar 存檔
通過運行帶有 --extract (-x) 操作的 tar,您可以解壓縮整個目錄或單個的文件。
$ tar -xvf Samplesql.tar getdate.sql
或
$ tar -xvf document.tar document/samplesql
這些解壓縮操作在工作目錄中創建文件。如果您正在處理 gzip 存檔,切記在運行解壓縮操作時指定 z。
$ tar -xzvf articles.tar.gz
$ tar -xzvf articles.tar.gz *.doc
警告:當您執行 extract 時要驗證您正處在哪個目錄中。您需要轉至目標目錄 (cd) 或 利用 -C 選項來指定它。
使用 Cpio
在 UNIX 世界中,Cpio 在 tar 前出現。與 tar 相似,它將文件存檔到硬盤、軟盤、 CD-ROM 或磁帶中。在所處理的文件類型方面,它比 tar 更全面。cpio 的 GNU 版本將 文件拷貝到 cpio 或 tar 存檔中,或將文件從中拷貝出來。它識別和處理特殊的格式, 如 HPUX 二進制、舊的 ACSII、新的 ASCII 以及一些其他的格式。它還可用於移動整個 目錄樹。爲了與較老的 cpio 程序兼容,cpio 以二進制格式存儲其存檔文件。
該命令的一般格式爲:
cpio -mode[other_options] [redirection_symbol] filename
它接受來自標準輸入的顯式文件列表,因此通常用在以 ls 或 find 開始的管道末端。
您可以三種基本模式使用 cpio:
拷貝輸出模式,使用 -o 選項,將文件拷貝到存檔
拷貝輸入模式,使用 -i 選項,從存檔中解壓縮文件
拷貝傳遞模式,使用 -p 選項,將文件從一個目錄樹拷貝傳遞到另一個目錄樹。
根據您所運行的模式,可以使用不同的 cpio 選項。每種模式所允許使用的選項的完整列表可參考 cpio 手冊頁的“綱要”部分。
拷貝輸出模式
與 tar 不同,cpio 需要顯式的指令:哪些文件要利用標準輸出進行存檔,將存檔重定 向到哪裏,是否應該保留關聯文件信息等等。拷貝輸出模式可以利用以下命令來存檔一 個目錄的內容
$ ls | cpio -ov > samplesql.cpio
其中 ls 爲 cpio 生成標準輸出,用於拷貝輸出到存檔。-o, --create 選項指示 cpio
將輸出進行存檔,而 -v, --verbose 選項提供一個與 tar 相類似的列表。
您還可以使用 find 命令將文件送到 cpio。
$ find .-print -depth | cpio -ov > document.cpio
爲了儘量減少目錄權限問題,可使用 find 的 -depth 選項。該選項在目錄本身處理內 容之前先處理該目錄的內容,允許在恢復目錄權限之前,在沒有所有者寫權限的情況下 恢復目錄的內容。
-t, --list 工具也可用於 cpio,甚至可以在 tar 存檔上運行。
$ cpio -tv < Samplesql.tar
拷貝輸入模式
使用拷貝輸入模式來解壓縮存檔的內容。在本模式中,cpio 自動識別它正在讀取哪種存檔。這意味着它能夠讀取在具有不同字節順序的機器上所創建的存檔。
$ cpio -idv < /samplesql.cpio
此外,cpio 與 tar 的不同之處在於,它將不恢復文件的最初更改時間,除非您指定 -m, --preserve-modification-time 選項:
$ cpio -idvm < samplesql.cpio
我們已經提到過,cpio 也可以從 tar 存檔進行解壓縮。
$ cpio -idv < Samplesql.tar
雖然 cpio 不能處理 zip 壓縮文件,但您可以在通過管道將文件送到 cpio 之前完成 zip 文件的解壓縮。
拷貝傳遞模式
本模式是拷貝輸出與拷貝輸入模式的組合。主要的不同之處是它繞過了存檔。它可以將 整個目錄從一個位置移動到另一個位置,用法如下:
$ find .-depth -print0 | cpio --null -pvda testdir
注意 find 使用了 -print0 選項而不是在拷貝輸出模式中使用 -print。GNU cpio 的拷 貝傳遞模式需要以 null 結束的文件,這是由 -print0 選項提供的服務。這種方法允許 cpio 處理那些包含換行符的文件名,並且在上面的 cpio 命令中加入 --null 選項。
-d, --make-directories 選項指示 cpio 創建目錄 testdir。
Tar 可以完成相同的工作。但是,在本示例中,必須首先創建目錄 testdir。
$ tar -cvf - samplesql | (cd testdir; tar -xf -)
在這裏,tar 將存檔送到標準輸出,由第一個 tar 命令中的“-”指示。第二個 tar 命 令從標準輸入中獲取存檔,以第二個 tar 命令中的“-”表示。在傳遞文件時,它們被 拷貝到 testdir,保留用戶、權限和日期信息。
Rpm
Red Hat 和 SuSE Linux 分發版本都使用 rpm 來安裝 Linux 操作系統和應用軟件。它 可用於:
利用一個命令安裝所有應用程序文件
管理已安裝的程序包
更新程序包
利用一個命令卸載程序包
將軟件程序包從源代碼形式轉換爲源和二進制形式。
介紹如何有效使用tar、cpio和rpm工具,對文件進行存檔和恢復
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.