在网上看到linux的备份命令“cpio”觉得蛮不错的,摘录下来与初学者分享一下
 
 
 
cpio 命令
cpio -covB > [file|device] --------备份
cpio -icduv < [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@linux ~]# find / -print | cpio -covB > /dev/st0
#
一般来说,使用 SCSI 介面的磁带机,代号是 /dev/st0 喔!

范例二:检查磁带机上面有什么文件?
[root@linux ~]# cpio -icdvt < /dev/st0
[root@linux ~]# cpio -icdvt < /dev/st0 > /tmp/content http://www.zuowangye.net/
#
第一个动作当中,会将磁带机内的档名列出到萤幕上面,而我们可以透过第二个动作,
#
将所有的档名通通纪录到 /tmp/content 文件去!

范例三:将磁带上的资料还原回来~
[root@linux ~]# cpio -icduv < /dev/st0
#
一般来说,使用 SCSI 介面的磁带机,代号是 /dev/st0 喔!

范例四:将 /etc 底下的所有『文件』都备份到 /root/etc.cpio 中!
find /etc -type f | cpio -o > /root/etc.cpio
#
这样就能够备份啰~您也可以将资料以 cpio -i < /root/etc.cpio
#
来将资料捉出来!
 
系统备份命令 cpio
另外一个复杂的备份命令,

cpio
命令有三种模式:
copy-out
将系统的文件生成一个cpio格式的包
copy-in
将一个cpio格式的包解开
copy-pass
相当于一个cp命令,不进行任何的压包和解包的工作,经常用来复
制文件分别对应的参数是-o,-i,-p这样记忆就比较方便了,linux命令的参数虽然很
多,但是还是有规律可以寻找的。
创建:
原始形态:

[root@laptop tmp]# cpio -o
O photo.cpio
按回车以后要手工输入你所需要打包的文件名。以Ctrl D组合键结束。

[root@laptop tmp]# ls
Dcp_0803.jpg Dcp_0810.jpg Dcp_0815.jpg Dcp_0820.jpg Dcp_0827.jpg
Dcp_0804.jpg Dcp_0811.jpg Dcp_0816.jpg Dcp_0821.jpg Dcp_0828.jpg
Dcp_0805.jpg Dcp_0812.jpg Dcp_0817.jpg Dcp_0822.jpg
Dcp_0808.jpg Dcp_0813.jpg Dcp_0818.jpg Dcp_0825.jpg
Dcp_0809.jpg Dcp_0814.jpg Dcp_0819.jpg Dcp_0826.jpg
[root@laptop tmp]# ls | cpio -o > photo.cpio
cpio: Dcp_0803.jpg: truncating inode number
cpio: Dcp_0804.jpg: truncating inode number
cpio: Dcp_0805.jpg: truncating inode number
cpio: Dcp_0808.jpg: truncating inode number
cpio: Dcp_0809.jpg: truncating inode number
cpio: Dcp_0810.jpg: truncating inode number
cpio: Dcp_0811.jpg: truncating inode number
cpio: Dcp_0812.jpg: truncating inode number
cpio: Dcp_0813.jpg: truncating inode number
cpio: Dcp_0814.jpg: truncating inode number
cpio: Dcp_0815.jpg: truncating inode number
cpio: Dcp_0816.jpg: truncating inode number
cpio: Dcp_0817.jpg: truncating inode number
cpio: Dcp_0818.jpg: truncating inode number
cpio: Dcp_0819.jpg: truncating inode number
cpio: Dcp_0820.jpg: truncating inode number
cpio: Dcp_0821.jpg: truncating inode number
cpio: Dcp_0822.jpg: truncating inode number
cpio: Dcp_0825.jpg: truncating inode number
cpio: Dcp_0826.jpg: truncating inode number
cpio: Dcp_0827.jpg: truncating inode number
cpio: Dcp_0828.jpg: truncating inode number
2792 blocks
注:-o 参数也可义用 --create替代,表示正在使用copy-out模式,
-O
参数只能和-o一起使用,表示出于out模式时,指定生成的文件。
root@laptop tmp]# ls | cpio -o
O photo.cpio
这个命令,是等效的,只不过前者用重定向符号实现的而已。由此可以体现Linux命令

的复杂还有变化多样,所以要多思考。
查看,解包:
解包
[root@laptop tmp]# cpio -i -I photo.cpio
2792 blocks
注:-i 参数是表示使用copy-in模式
查看一个cpio包里的文件列表的参数和tar的参数有点相像,都是用-t参数,
也可以用--list替代。
-I
参数只和-t , -i 两个参数连用,表示在copy-in模式时指定一个cpio包。
有点像tar包里的-f参数,无论是打tar包还是解tar包或者是查看tar的内容
,
都要加-f参数一样的道理,在这里,cpio只不过分成了copy-incopy-out
两个部分而已。

[root@laptop tmp]# cpio -t -I photo.cpio
Dcp_0803.jpg
Dcp_0804.jpg
Dcp_0805.jpg
Dcp_0808.jpg
Dcp_0809.jpg
Dcp_0810.jpg
Dcp_0811.jpg
Dcp_0812.jpg
Dcp_0813.jpg
Dcp_0814.jpg
Dcp_0815.jpg
Dcp_0816.jpg
Dcp_0817.jpg
Dcp_0818.jpg
Dcp_0819.jpg
Dcp_0820.jpg
Dcp_0821.jpg
Dcp_0822.jpg
Dcp_0825.jpg
Dcp_0826.jpg
Dcp_0827.jpg
Dcp_0828.jpg
2792 blocks
查看一个cpio包里的文件列表的参数和tar的参数有点相像,都是用-t参数,这里可以
--list替代。
还有一些高级的应用参数:
-u
解包时如果文件已经在也强行覆盖
[root@laptop tmp]# cpio -i -I test.cpio -u
[root@laptop tmp]# cpio -i -u -I test.cpio
-f
文件匹配参数,但是是一个反向的,就是符合这个指定的文件不解包
[root@laptop tmp]# cpio -i -I test.cpio -f *.rpm
这条命令的结果是test.cpio里除了*.rpm文件都会解包出来。
-L
这个参数是在打包的时候用的,如果被打包的文件中有符号连接的话,这个参数将会把连接的目标文件打入包中,而不是仅仅把符号连接打包。
[root@laptop tmp]# ls | cpio -o -O newtest.cpio -L
-R
这个参数只用在解包的时候,是用来给解包出来的文件设置所有者和所属组的。但是用户和组的关系必须已经在passwd,group两个文件中存在!!!
[root@laptop tmp]# cpio -i -I test.cpio -R yue.pye
[root@laptop tmp]# cpio -i -I test.cpio -R yue
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www.blogcn.com/p_w_picpaths/tongue.gif');}" imgzoom(this);" alt="" />
ye
这里是两种表示用户组之间关系的方式一个是.还有一个是:
-r
这个参数只在解包是有用,而且不能和-u参数同时使用,否则失效,他的作用是当包中的文件和解包所在目录下的某个文件重名的时候自动提示是否需要更名。

[root@laptop tmp]# cpio -i -I test.cpio -r
rename 12.1 -> a
rename backgroud -> c
rename bin -> bindir
rename crystal ->
-A
这个参数只用在压包的时候,用来向已经存在的cpio包添加文件的
[root@laptop tmp]# cpio -o -O test.cpio -A
[root@laptop tmp]# cpio -o -A -O test.cpio