cpio

用來建立、還原備份檔的工具程序

補充說明

cpio命令 主要是用來建立或者還原備份檔的工具程序,cpio命令可以複製文件到歸檔包中,或者從歸檔包中複製文件。

語法

1cpio(選項)

選項

 1-0或--null:接受新增列控制字符,通常配合find指令的“-print0”參數使用;
 2-a或--rest-access-time:重新設置文件的存取時間;
 3-A或--append:附加到已存在的備份文檔中,且這個備份文檔必須存放在磁盤上,而不能放置於磁帶機裏;
 4-b或--awap:此參數的效果和同時指定“-ss”參數相同;
 5-B:將輸入/輸出的區塊大小改成5210Bytes;
 6-c:使用舊ASCII備份格式;
 7-C<區塊大小>或--io-size=<區塊大小>:設置輸入/輸出的區塊大小,單位是Byte;
 8-d或--make-directories:如有需要cpio會自行建立目錄;
 9-E<範本文件>或--pattern-file=<範本文件>:指定範本文件,其內含有一個或多個範本樣式,讓cpio解開符合範本條件的文件,格式爲每列一個範本樣式;
10-f或--nonmatching:讓cpio解開所有不符合範本條件的文件;
11-F<備份檔>或--file=<備份檔>:指定備份檔的名稱,用來取代標準輸入或輸出,也能借此通過網絡使用另一臺主機的保存設備存取備份檔;
12-H<備份格式>:指定備份時欲使用的文件格式;
13-i或--extract:執行copy-in模式,還原備份檔;
14-l<備份檔>:指定備份檔的名稱,用來取代標準輸入,也能借此通過網絡使用另一臺主機的保存設備讀取備份檔;
15-k:此參數將忽略不予處理,僅負責解決cpio不同版本間的兼容性問題;
16-l或--link:以硬連接的方式取代複製文件,可在copy-pass模式下運用;
17-L或--dereference:不建立符號連接,直接複製該連接所指向的原始文件;
18-m或preserve-modification-time:不去更改文件的更改時間;
19-M<回傳信息>或--message=<回傳信息>:設置更換保存媒體的信息;
20-n或--numeric-uid-gid:使用“-tv”參數列出備份檔的內容時,若再加上參數“-n”,則會以用戶識別和羣組識別碼替代擁有者和羣組名稱列出文件清單;
21-o或--create:執行copy-out模式,建立備份檔;
22-O<備份檔>:指定備份檔的名稱,用來取代標準輸出,也能借此通過網絡使用另一臺主機的保存設備存放備份檔;
23-p或--pass-through:執行copy-pass模式,略過備份步驟,直接將文件複製到目的目錄;
24-r或--rename:當有文件名稱需要更改時,採用互動模式;
25-R<擁有者><:/.><所屬羣組>或----owner<擁有者><:/.><所屬羣組>   在copy-in模式還原備份檔,或copy-pass模式複製文件時,可指定這些備份,複製的文件的擁有者與所屬羣組;
26-s或--swap-bytes:交換每隊字節的內容;
27-S或--swap-halfwords:交換每半個字節的內容;
28-t或--list:將輸入的內容呈現出來;
29-u或--unconditional:置換所有文件,不論日期時間的新舊與否,皆不予詢問而直接覆蓋;
30-v或--verbose:詳細顯示指令的執行過程;
31-V或--dot:執行指令時。在每個文件的執行程序前面加上“.”號;
32--block-size=<區塊大小>:設置輸入/輸出的區塊大小,假如設置數值爲5,則區塊大小爲2500,若設置成10,則區塊大小爲5120,以此類推;
33--force-local:強制將備份檔存放在本地主機;
34--help:在線幫助;
35--no-absolute-filenames:使用相對路徑建立文件名稱;
36--no-preserve-owner:不保留文件的擁有者,誰解開了備份檔,那些文件就歸誰所有;
37-only-verify-crc:當備份檔採用CRC備份格式時,可使用這項參數檢查備份檔內的每個文件是否正確無誤;
38--quiet:不顯示覆制了多少區塊;
39--sparse:倘若一個文件內含有大量的連續0字節,則將此文件存在稀疏文件;
40--version:顯示版本信息。

實例

/etc下的所有普通文件都備份到/opt/etc.cpio,使用以下命令:

1find /etc –type f | cpio –ocvB >/opt/etc.cpio

將系統上所有資料備份到磁帶機內,使用以下命令:

1find / -print | cpio -covB > /dev/st0

這裏的/dev/st0是磁帶的設備名,代表SCSI磁帶機。

查看上例磁帶機上備份的文件,使用以下命令:

1cpio  -icdvt < /dev/st0 > /tmp/st_content

有時可能因爲備份的文件過多,一個屏幕無法顯示完畢,此時我們利用下面命令,讓磁帶機的文件信息輸出到文件。

將示例1中的備份包還原到相應的位置,如果有相同文件進行覆蓋,使用以下命令:

1cpio –icduv < /opt/etc.cpio

注意,cpio恢復的路徑,如果cpio在打包備份的時候用的是絕對路徑,那麼在恢復的時候會自動恢復到這些絕對路徑下,本例就會將備份文件全部還原到/etc路徑下對應的目錄中。同理,如果在打包備份用的是相對路徑,還原時也將恢復到相對路徑下。

通過上面的示例,可以看出,cpio無法直接讀取文件,它需要每個文件或者目錄的完整路徑名才能識別讀取,而find命令的輸出剛好做到了這點,因此,cpio命令一般和find命令配合使用。其實,上面的示例我們已經看到了它們的組合用法。

來源:https://github.com/jaywcjlove/linux-command

最後修改於: Wednesday, January 31, 2024

相關文章:

翻譯: