cpio(Copy In/Out)是 Unix 經典備份工具,透過標準輸入/輸出流處理檔案流,支援多種儲存格式(.cpio、.tar),常與 find 搭配實現精準備份。本文詳解四大模式、關鍵參數與四大實戰場景。
| 模式 | 參數 | 資料流向 | 典型用途 |
|---|---|---|---|
| 複製輸出 | -o | 檔案 → 封裝檔/裝置 | 備份 |
| 複製輸入 | -i | 封裝檔/裝置 → 檔案系統 | 還原 |
| 列表模式 | -t | 封裝檔/裝置 → 標準輸出 | 查看內容 |
| 複製傳遞 | -p | 來源目錄 → 目標目錄 | 目錄樹遷移 |
-v:顯示處理檔案名(Verbose)-c:使用新式可攜式 ASCII 頭格式(跨平台相容)-B:區塊大小 5120 bytes(預設 512),大幅提升磁帶/大檔案吞吐-d:還原時自動建立目錄層級-u:無條件覆蓋同名檔案/etc 所有一般檔案 → /opt/etc.cpiofind /etc -type f | cpio -ocvB > /opt/etc.cpio
find 輸出完整路徑,cpio 讀取標準輸入封裝。
find / -print | cpio -covB > /dev/st0
/dev/st0 為 SCSI 磁帶裝置。備份量大時輸出導向檔案:
cpio -icdvt < /dev/st0 > /tmp/st_content
cpio -icduv < /opt/etc.cpio
關鍵行為:若備份時用絕對路徑,還原會**強制覆蓋原路徑**;若用相對路徑,則還原至當前目錄下。生產環境建議統一使用相對路徑備份,還原時先 cd /target 再解包,避免誤覆蓋關鍵系統檔。
cd /source
find . -depth -print | cpio -pvd /destination
保留權限、時間戳、符號連結,比 cp -a 更穩健於海量小檔案場景。
cpio **不接受檔案名參數**,必須透過管道/重導向從 find、ls 等取得路徑流。cpio 版本支援 Large File(GNU cpio 2.11+ 已支援)。-B 並定期 mt -f /dev/st0 status 檢查磁帶健康度。cpio 以「做一件事做好」的 Unix 哲學,成為自動化備份腳本、嵌入式系統映像製作、容器映像匯出的底層引擎。掌握 find | cpio 管線模式,即掌握了 Linux 檔案流處理的核心范式。