linux cpio命令的使用

lpwebnet發表於2014-02-08
linux cpio命令的使用

cpio -o  > [file|device] <==備份 
cpio -i  < [file|device] <==還原 

-o :將資料 copy 輸出到檔案或裝置上  
-i :將資料自檔案或裝置 copy 出來系統當中  
-t :檢視 cpio 建立的檔案或裝置的內容  
-c :一種較新的 portable format 方式儲存  
-v :讓儲存的過程中檔名稱可以在螢幕上顯示  
-B :讓預設的 Blocks 可以增加至 5120 bytes ,預設是 512 bytes !  
   這樣的好處是可以讓大檔案的儲存速度加快(請參考 i-nodes 的觀念)  
-d :自動建立目錄!由於 cpio 的內容可能不是在同一個目錄內, 
     如此的話在反備份的過程會有問題! 這個時候加上 -d 的話, 
     就可以自動的將需要的目錄建立起來了!  
-u :自動的將較新的檔案覆蓋較舊的檔案! 

準備資料
[root@node1 tmp]# ll
total 104
-rw-r--r-- 1 root root     8 Jan 13 12:35 test
-rw-r--r-- 1 root root  3071 Jan 13 12:13 top.bak
-rw-r--r-- 1 root root 21473 Jan 13 12:22 top.bak1
-rw-r--r-- 1 root root 21473 Jan 13 12:22 top.bak2
-rw-r--r-- 1 root root 21473 Jan 13 12:02 top.bak3
-rw-r--r-- 1 root root 21473 Jan 13 12:34 top.txt
[root@node1 tmp]# mkdir abc
[root@node1 tmp]# ll
total 108
drwxr-xr-x 2 root root  4096 Jan 13 12:35 abc
-rw-r--r-- 1 root root     8 Jan 13 12:35 test
-rw-r--r-- 1 root root  3071 Jan 13 12:13 top.bak
-rw-r--r-- 1 root root 21473 Jan 13 12:22 top.bak1
-rw-r--r-- 1 root root 21473 Jan 13 12:22 top.bak2
-rw-r--r-- 1 root root 21473 Jan 13 12:02 top.bak3
-rw-r--r-- 1 root root 21473 Jan 13 12:34 top.txt
[root@node1 tmp]# cd abc
[root@node1 abc]# echo "hello cpio" > abc1.txt
[root@node1 abc]# ll
total 4
-rw-r--r-- 1 root root 11 Jan 13 12:35 abc1.txt

[root@node1 tmp]# pwd
/tmp
[root@node1 tmp]# ll
total 108
drwxr-xr-x 2 root root  4096 Jan 13 12:35 abc
-rw-r--r-- 1 root root     8 Jan 13 12:35 test
-rw-r--r-- 1 root root  3071 Jan 13 12:13 top.bak
-rw-r--r-- 1 root root 21473 Jan 13 12:22 top.bak1
-rw-r--r-- 1 root root 21473 Jan 13 12:22 top.bak2
-rw-r--r-- 1 root root 21473 Jan 13 12:02 top.bak3
-rw-r--r-- 1 root root 21473 Jan 13 12:34 top.txt

1、使用cpio備份
[root@node1 tmp]# cpio -ov top.bak > top.bak.cpio  --cpio不支援直接寫入檔名,需要使用ls或echo或find或 cpio: Too many arguments

1)使用ls
[root@node1 tmp]# ls top.bak1 top.bak2
top.bak1  top.bak2
[root@node1 tmp]# ls top.bak1 top.bak2 | cpio -ov > top.bak12.cpio
top.bak1
top.bak2
85 blocks
[root@node1 tmp]# cpio -tv < top.bak12.cpio  --檢視 cpio 建立的檔案或裝置的內容
-rw-r--r--   1 root     root        21473 Jan 13 12:22 top.bak1
-rw-r--r--   1 root     root        21473 Jan 13 12:22 top.bak2
85 blocks

2)使用echo
[root@node1 tmp]# echo top.bak | cpio -ov > top.bak.rel.cpio  --相對路徑的備份
top.bak
7 blocks
[root@node1 tmp]# echo /tmp/top.bak | cpio -ov > top.bak.abs.cpio --絕對路徑的備份
/tmp/top.bak
7 blocks
[root@node1 tmp]# cpio -tv < top.bak.rel.cpio
-rw-r--r--   1 root     root         3071 Jan 13 12:13 top.bak
7 blocks
[root@node1 tmp]# cpio -tv < top.bak.abs.cpio
cpio: Removing leading `/' from member names
-rw-r--r--   1 root     root         3071 Jan 13 12:13 tmp/top.bak
7 blocks

3)使用find
[root@node1 tmp]# find /tmp -name abc1.txt
/tmp/abc/abc1.txt
[root@node1 tmp]# find /tmp -name abc1.txt -print
/tmp/abc/abc1.txt
[root@node1 tmp]# find /tmp -name abc1.txt | cpio -ov > abc1.txt.cpio
/tmp/abc/abc1.txt
1 block

4)使用 [root@node1 tmp]# cat test
top.txt
[root@node1 tmp]# cpio -ov < test > top.txt.cpio
top.txt
43 blocks
[root@node1 tmp]# cpio -tv <  top.txt.cpio
-rw-r--r--   1 root     root        21473 Jan 13 12:34 top.txt
43 blocks

2、使用cpio恢復
[root@node1 dev]# cd /tmp
[root@node1 tmp]# ll
total 164
drwxr-xr-x 2 root root  4096 Jan 13 12:35 abc
-rw-r--r-- 1 root root   512 Jan 13 12:37 abc1.txt.cpio
-rw-r--r-- 1 root root     8 Jan 13 12:35 test
-rw-r--r-- 1 root root  3071 Jan 13 12:13 top.bak
-rw-r--r-- 1 root root  3584 Jan 13 12:36 top.bak.abs.cpio
-rw-r--r-- 1 root root     0 Jan 13 12:36 top.bak.cpio
-rw-r--r-- 1 root root  3584 Jan 13 12:36 top.bak.rel.cpio
-rw-r--r-- 1 root root 21473 Jan 13 12:22 top.bak1
-rw-r--r-- 1 root root 43520 Jan 13 12:36 top.bak12.cpio
-rw-r--r-- 1 root root 21473 Jan 13 12:22 top.bak2
-rw-r--r-- 1 root root 21473 Jan 13 12:02 top.bak3
-rw-r--r-- 1 root root 21473 Jan 13 12:34 top.txt
[root@node1 /]# pwd
/
[root@node1 /]# mkdir tmp2
[root@node1 /]# cd /tmp2
[root@node1 tmp2]# cpio -iv < /tmp/top.bak.rel.cpio 
top.bak
7 blocks
[root@node1 tmp2]# ll
total 4
-rw-r--r-- 1 root root 3071 Jan 13 12:38 top.bak

[root@node1 tmp2]# cpio -iv < /tmp/top.bak.abs.cpio 
cpio: Removing leading `/' from member names ---------------------注意這裡,不使用絕對路徑
cpio: tmp/top.bak: No such file or directory
tmp/top.bak
7 blocks
[root@node1 tmp2]# ll
total 4
-rw-r--r-- 1 root root 3071 Jan 13 12:38 top.bak
--由於/tmp2下沒有tmp目錄,所以報錯,未恢復成功

[root@node1 tmp2]# cpio -idv < /tmp/top.bak.abs.cpio   --加上-d自動建立目錄
cpio: Removing leading `/' from member names
tmp/top.bak
7 blocks
[root@node1 tmp2]# ll
total 8
drwxr-xr-x 2 root root 4096 Jan 13 12:39 tmp
-rw-r--r-- 1 root root 3071 Jan 13 12:38 top.bak

[root@node1 tmp2]# cpio -iv < /tmp/abc1.txt.cpio 
cpio: Removing leading `/' from member names
cpio: tmp/abc/abc1.txt: No such file or directory
tmp/abc/abc1.txt
1 block
[root@node1 tmp2]# cpio -idv < /tmp/abc1.txt.cpio 
cpio: Removing leading `/' from member names
tmp/abc/abc1.txt
1 block

加上--absolute-filenames引數使用絕對路徑來恢復
[root@node1 tmp]# pwd
/tmp
[root@node1 tmp]# rm -f top.bak

[root@node1 tmp2]# pwd
/tmp2
[root@node1 tmp2]# cpio -iv --absolute-filenames < /tmp/top.bak.abs.cpio
/tmp/top.bak
7 blocks
[root@node1 tmp2]# cpio -iv --absolute-filenames < /tmp/top.bak.abs.cpio
cpio: /tmp/top.bak not created: newer or same age version exists
/tmp/top.bak
7 blocks
[root@node1 tmp2]# cpio -uiv --absolute-filenames < /tmp/top.bak.abs.cpio  --加上-u引數自動的將較新的檔案覆蓋較舊的檔案
/tmp/top.bak
7 blocks

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17172228/viewspace-1077961/,如需轉載,請註明出處,否則將追究法律責任。

相關文章