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
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。