一、cpio简介
cpio是常用的Linux系统文件打包命令,用于将文件和文件夹打包/复制到一个单独的归档文件中。使用cpio进行文件备份具有封装性、压缩性和安全性等优点。
与tar命令相比,cpio不需要事先知道要打包的文件数量,也不需要在卷更换时手动输入;此外,cpio命令的安全性更高,因为它不允许来自标准输入的任何文件名,这有助于防止一些复杂的攻击。
二、cpio常用选项
$ cpio [选项] < 文件名
常用选项如下:
- -i或--extract:将文件从归档文件中还原出来;
- -o或--create:将文件打包到归档文件中;
- -t或--list:列出归档文件中包含的文件;
- -v或--verbose:显示正在处理的文件名;
- -z或--gzip:通过gzip压缩来加压缩/解压缩文档;
- -c或--io-size:设置缓存大小;
- -F或--file-format:设置输出文件的格式;
- -B或--format:设置输入文件的格式;
- -M或--multi-volume:多卷归档模式;
- -C或--directory:指定处理文件的目录;
- --no-preserve-owner:不保留原文件所有者和属性;
- --no-absolute-filenames:不使用绝对路径名。
三、cpio备份文件和目录
1. 备份文件
使用下面的命令将文件打包到归档文件中:
$ echo "hello world" > test.txt $ cpio -I < test.txt.cpio $ cpio -it < test.txt.cpio
解释如下:
- echo "hello world" > test.txt:创建一个包含文本“hello world”的文件test.txt;
- cpio -I < test.txt.cpio:将test.txt.cpio文件中的文件还原出来;
- -i选项表示提取文件,-t选项表示列出归档文件中包含的文件;
- <符号表示将归档文件定向到标准输入流。
2. 备份目录
使用下面的命令将目录打包到归档文件中:
$ mkdir testdir $ echo "hello dir" > testdir/test.txt $ find testdir | cpio -ov > testdir.cpio
解释如下:
- mkdir testdir:创建一个名为testdir的目录;
- echo "hello dir" > testdir/test.txt:在testdir目录下创建一个包含文本“hello dir”的文件test.txt;
- find testdir | cpio -ov > testdir.cpio:将testdir目录归档并保存到testdir.cpio文件。
- -o选项表示创建归档文件,-v表示输出详细信息。
四、cpio命令的其他用途
1. 备份整个系统
使用下面的命令备份整个系统(需要root权限):
$ find / | cpio -ov -H tar > backup.cpio
解释如下:
- find /:搜索整个文件系统;
- -H tar选项表示使用tar格式;
- 通过“>”符号将归档文件输出到backup.cpio文件。
2. 数据传输
您可以使用cpio命令传输数据。例如,将文件从一台计算机复制到另一台计算机:
$ cpio -o < file.tar | ssh user@remote_host 'cpio -i'
解释如下:
- 将归档文件输出到标准输出;
- 将输出的数据流传输到远程计算机的cpio命令中;
- 解压缩并提取文件。
3. 使用cpio命令进行其他操作
cpio命令不仅可以用于打包备份,还可以用于其他操作,例如查找文件:
$ find / | cpio -pvmd \n /mnt/backup
解释如下:
- -p选项表示复制文件到/mnt/backup目录中;
- -v显示处理的文件名;
- -m尝试创建目录,如果不存在则会创建;
- -d将归档文件中的目录链接应用于文件系统上的实际目录。
五、总结
cpio命令是Linux系统中用于文件/目录打包和备份的常用命令之一。在实际使用中,我们可以根据自己的需求选择合适的选项和格式。此外,cpio命令不仅可以用于文件备份,还可以用于其他操作,例如文件传输和文件查找等。掌握cpio命令的使用,在实际工作中将会提高效率,缩短备份时间。