cpio命令主要是用來建立或者還原備份檔的工具程序,cpio命令可以復制文件到歸檔包中,或者從歸檔包中復制文件。
語法
cpio(選項)
選項
-0或--null:接受新增列控制字符,通常配合find指令的“-print0”參數使用;
-a或--rest-access-time:重新設置文件的存取時間; -A或--append:附加到已存在的備份文檔中,且這個備份文檔必須存放在磁盤上,而不能放置於磁帶機里; -b或--awap:此參數的效果和同時指定“-ss”參數相同; -B:將輸入/輸出的區塊大小改成5210Bytes; -c:使用舊ASCII備份格式; -C<區塊大小>或--io-size=<區塊大小>:設置輸入/輸出的區塊大小,單位是Byte; -d或--make-directories:如有需要cpio會自行建立目錄; -E<范本文件>或--pattern-file=<范本文件>:指定范本文件,其內含有一個或多個范本樣式,讓cpio解開符合范本條件的文件,格式為每列一個范本樣式; -f或--nonmatching:讓cpio解開所有不符合范本條件的文件; -F<備份檔>或--file=<備份檔>:指定備份檔的名稱,用來取代標准輸入或輸出,也能借此通過網絡使用另一台主機的保存設備存取備份檔; -H<備份格式>:指定備份時欲使用的文件格式; -i或--extract:執行copy-in模式,還原備份檔; -l<備份檔>:指定備份檔的名稱,用來取代標准輸入,也能借此通過網絡使用另一台主機的保存設備讀取備份檔; -k:此參數將忽略不予處理,僅負責解決cpio不同版本間的兼容性問題; -l或--link:以硬連接的方式取代復制文件,可在copy-pass模式下運用; -L或--dereference:不建立符號連接,直接復制該連接所指向的原始文件; -m或preserve-modification-time:不去更改文件的更改時間; -M<回傳信息>或--message=<回傳信息>:設置更換保存媒體的信息; -n或--numeric-uid-gid:使用“-tv”參數列出備份檔的內容時,若再加上參數“-n”,則會以用戶識別和群組識別碼替代擁有者和群組名稱列出文件清單; -o或--create:執行copy-out模式,建立備份檔; -O<備份檔>:指定備份檔的名稱,用來取代標准輸出,也能借此通過網絡使用另一台主機的保存設備存放備份檔; -p或--pass-through:執行copy-pass模式,略過備份步驟,直接將文件復制到目的目錄; -r或--rename:當有文件名稱需要更改時,采用互動模式; -R<擁有者><:/.><所屬群組>或----owner<擁有者><:/.><所屬群組> 在copy-in模式還原備份檔,或copy-pass模式復制文件時,可指定這些備份,復制的文件的擁有者與所屬群組; -s或--swap-bytes:交換每隊字節的內容; -S或--swap-halfwords:交換每半個字節的內容; -t或--list:將輸入的內容呈現出來; -u或--unconditional:置換所有文件,不論日期時間的新舊與否,皆不予詢問而直接覆蓋; -v或--verbose:詳細顯示指令的執行過程; -V或--dot:執行指令時。在每個文件的執行程序前面加上“.”號; --block-size=<區塊大小>:設置輸入/輸出的區塊大小,假如設置數值為5,則區塊大小為2500,若設置成10,則區塊大小為5120,以此類推; --force-local:強制將備份檔存放在本地主機; --help:在線幫助; --no-absolute-filenames:使用相對路徑建立文件名稱; --no-preserve-owner:不保留文件的擁有者,誰解開了備份檔,那些文件就歸誰所有; -only-verify-crc:當備份檔采用CRC備份格式時,可使用這項參數檢查備份檔內的每個文件是否正確無誤; --quiet:不顯示復制了多少區塊; --sparse:倘若一個文件內含有大量的連續0字節,則將此文件存在稀疏文件; --version:顯示版本信息。
實例
將/etc
下的所有普通文件都備份到/opt/etc.cpio
,使用以下命令:
find /etc –type f | cpio –ocvB >/opt/etc.cpio
將系統上所有資料備份到磁帶機內,使用以下命令:
find / -print | cpio -covB > /dev/st0
這里的/dev/st0
是磁帶的設備名,代表SCSI磁帶機。
查看上例磁帶機上備份的文件,使用以下命令:
cpio -icdvt < /dev/st0 > /tmp/st_content
有時可能因為備份的文件過多,一個屏幕無法顯示完畢,此時我們利用下面命令,讓磁帶機的文件信息輸出到文件。
將示例1中的備份包還原到相應的位置,如果有相同文件進行覆蓋,使用以下命令:
cpio –icduv < /opt/etc.cpio
注意,cpio恢復的路徑,如果cpio在打包備份的時候用的是絕對路徑,那么在恢復的時候會自動恢復到這些絕對路徑下,本例就會將備份文件全部還原到/etc路徑下對應的目錄中。同理,如果在打包備份用的是相對路徑,還原時也將恢復到相對路徑下。
通過上面的示例,可以看出,cpio無法直接讀取文件,它需要每個文件或者目錄的完整路徑名才能識別讀取,而find命令的輸出剛好做到了這點,因此,cpio命令一般和find命令配合使用。其實,上面的示例我們已經看到了它們的組合用法。