侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux cpio命令教程:如何创建和提取cpio归档文件(附实例及用法详解)

Linux cpio命令介绍

cpio命令是Linux中用于处理归档文件(例如,.cpio或.tar文件)的工具。cpio的含义是“copy in, copy out”,即从一个地方复制文件到另一个地方,同时保留文件的属性,如所有权、权限和时间戳。cpio命令可以执行以下三种操作:

  • 将文件复制到归档文件中(copy-out模式)
  • 从归档文件中提取文件(copy-in模式)
  • 将文件从一个目录树复制到另一个目录树(copy-pass模式)

cpio命令支持多种cpio格式,以及读写tar文件。支持的归档格式有:binary, old ASCII, new ASCII, CRC, HP-UX binary, HP-UX old ASCII, old tar, 和 POSIX .1 tar。tar格式是为了与tar程序兼容而提供的。默认情况下,cpio命令创建binary格式的归档文件,以便与旧版本的cpio程序兼容。在从归档文件中提取文件时,cpio命令会自动识别归档文件的类型,并且可以读取在不同字节顺序的机器上创建的归档文件。

Linux cpio命令适用的Linux版本

cpio命令是GNU项目的一部分,因此它适用于大多数Linux发行版,如Ubuntu, Debian, Fedora, CentOS等。如果你的Linux系统没有预装cpio命令,你可以使用以下命令来安装它:

  • 对于基于Debian的系统,如Ubuntu,使用apt-get install cpio命令。
  • 对于基于Red Hat的系统,如CentOS,使用yum install cpio命令。
  • 对于其他Linux系统,你可以从[GNU cpio官网]下载源代码并编译安装。

注意,CentOS 7和CentOS 8的安装工具不太一样,CentOS 8使用dnf代替了yum。因此,如果你使用的是CentOS 8,你需要使用dnf install cpio命令来安装cpio。

Linux cpio命令的基本语法

cpio命令的基本语法如下:

cpio [选项] [参数]

cpio命令的选项和参数取决于它运行的模式,即copy-out, copy-in或copy-pass模式。下面是各种模式的语法:

  • copy-out模式语法:

    在copy-out模式下,cpio命令将文件复制到归档文件中。它从标准输入读取文件名列表,每行一个,然后将归档文件写入标准输出。生成文件名列表的典型方法是使用find命令;给find命令加上-depth选项,以最小化不可读目录的权限问题。

    cpio {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message] [-O [[user@]host:]archive] [-F [[user@]host:]archive] [--file=[[user@]host:]archive] [--format=format] [--message=message] [--null] [--reset-access-time] [--verbose] [--dot] [--append] [--block-size=blocks] [--dereference] [--io-size=bytes] [--rsh-command=command] [--help] [--version] < name-list [> archive]
    
  • copy-in模式语法:

    在copy-in模式下,cpio命令从归档文件中提取文件或列出归档文件的内容。它从标准输入读取归档文件。任何非选项的命令行参数都是shell通配符模式;只有归档文件中名称与一个或多个模式匹配的文件才会从归档文件中提取。与shell不同的是,文件名中的初始'.'可以匹配模式开头的通配符,而文件名中的'/'也可以匹配通配符。如果没有给出模式,所有文件都会被提取。

    cpio {-i|--extract} [-bcdfmnrtsuvBSV] [-C bytes] [-E file] [-H format] [-M message] [-R [user][:.][group]] [-I [[user@]host:]archive] [-F [[user@]host:]archive] [--file=[[user@]host:]archive] [--make-directories] [--nonmatching] [--preserve-modification-time] [--numeric-uid-gid] [--rename] [-t|--list] [--swap-bytes] [--swap] [--dot] [--unconditional] [--verbose] [--block-size=blocks] [--swap-halfwords] [--io-size=bytes] [--pattern-file=file] [--format=format] [--owner=[user][:.][group]] [--no-preserve-owner] [--message=message] [--force-local] [--no-absolute-filenames] [--absolute-filenames] [--sparse] [--only-verify-crc] [--to-stdout] [--quiet] [--rsh-command=command] [--help] [--version] [pattern...] [< archive]
    
  • copy-pass模式语法:

    在copy-pass模式下,cpio命令将文件从一个目录树复制到另一个目录树,将copy-out和copy-in步骤结合在一起,而不实际使用归档文件。

    cpio {-p|--pass-through} [-0adlmuvLV] [-R [user][:.][group]] [--null] [--make-directories] [--link] [--preserve-modification-time] [--unconditional] [--verbose] [--dot] [--dereference] [--owner=[user][:.][group]] [--no-preserve-owner] [--sparse] [--help] [--version] destination-directory < name-list
    

Linux cpio命令的常用选项说明

cpio命令的选项有很多,这里只列出一些常用的选项,如果想了解更多的选项,可以使用man cpiocpio --help命令查看帮助文档。下面是一些常用选项的说明:

选项说明
-o, --create创建归档文件,只能在copy-out模式下使用
-i, --extract从归档文件中提取文件,只能在copy-in模式下使用
-p, --pass-through在copy-pass模式下运行
-t, --list打印所有输入文件的目录表
-v, --verbose列出处理的每个文件
-V, --dot为处理的每个文件打印一个"."
-B将I/O块大小改为5120字节
-c使用旧的便携式(ASCII)归档格式
-C, --io-size=NUMBER将I/O块大小设置为指定的NUMBER字节
-D, --directory=DIR切换到DIR目录
-H, --format=FORMAT使用指定的归档格式
-M, --message=MESSAGE在处理归档文件的边界时打印MESSAGE
-O, --file=ARCHIVE将归档文件写入ARCHIVE文件,而不是标准输出
-I, --file=ARCHIVE从ARCHIVE文件读取归档文件,而不是标准输入
-F, --file=ARCHIVE等同于-O或-I选项,取决于cpio的模式
-R, --owner=OWNER将提取的文件的所有权设置为OWNER,OWNER可以是[user][:.][group]的形

Linux cpio命令的实例

下面是一些使用cpio命令的实例,你可以通过这些实例来学习和练习cpio命令的用法。

创建一个cpio归档文件

我们可以使用cpio命令的-o选项来创建一个cpio归档文件,包含指定的文件和目录。例如,我们可以使用find命令来查找/home/golinux/complex目录下的所有文件和目录,并将它们复制到一个名为complex.cpio的归档文件中。我们还可以使用-v选项来显示处理的每个文件。

[linux@bashcommandnotfound.cn ~]$ find /home/golinux/complex | cpio -ov > complex.cpio
/home/golinux/complex
/home/golinux/complex/file1.txt
/home/golinux/complex/file2.txt
/home/golinux/complex/file3.txt
/home/golinux/complex/subdir
/home/golinux/complex/subdir/file4.txt
/home/golinux/complex/subdir/file5.txt
7 blocks

列出cpio归档文件的内容

我们可以使用cpio命令的-t选项来列出cpio归档文件的内容,而不提取任何文件。例如,我们可以使用以下命令来查看上面创建的complex.cpio归档文件的内容。

[linux@bashcommandnotfound.cn ~]$ cpio -t < complex.cpio
/home/golinux/complex
/home/golinux/complex/file1.txt
/home/golinux/complex/file2.txt
/home/golinux/complex/file3.txt
/home/golinux/complex/subdir
/home/golinux/complex/subdir/file4.txt
/home/golinux/complex/subdir/file5.txt
7 blocks

创建一个包含特定文件的cpio归档文件

我们可以使用cpio命令来创建一个包含特定文件的cpio归档文件,而不是整个目录。例如,我们可以使用find命令来查找/home/golinux/complex目录下的所有.txt文件,并将它们复制到一个名为textfiles.cpio的归档文件中。

[linux@bashcommandnotfound.cn ~]$ find /home/golinux/complex -iname "*.txt" | cpio -ov > textfiles.cpio
/home/golinux/complex/file1.txt
/home/golinux/complex/file2.txt
/home/golinux/complex/file3.txt
/home/golinux/complex/subdir/file4.txt
/home/golinux/complex/subdir/file5.txt
5 blocks

使用cpio命令提取cpio归档文件

我们可以使用cpio命令的-i选项来从cpio归档文件中提取文件。例如,我们可以使用以下命令来从textfiles.cpio归档文件中提取所有文件,并将它们复制到当前目录。

[linux@bashcommandnotfound.cn ~]$ cpio -iv < textfiles.cpio
/home/golinux/complex/file1.txt
/home/golinux/complex/file2.txt
/home/golinux/complex/file3.txt
/home/golinux/complex/subdir/file4.txt
/home/golinux/complex/subdir/file5.txt
5 blocks

在指定的目录中提取cpio归档文件

我们可以使用cpio命令的-D选项来在指定的目录中提取cpio归档文件,而不是当前目录。例如,我们可以使用以下命令来在/home/golinux/backup目录中提取textfiles.cpio归档文件的内容。

[linux@bashcommandnotfound.cn ~]$ cpio -iv -D /home/golinux/backup < textfiles.cpio
/home/golinux/complex/file1.txt
/home/golinux/complex/file2.txt
/home/golinux/complex/file3.txt
/home/golinux/complex/subdir/file4.txt
/home/golinux/complex/subdir/file5.txt
5 blocks

使用cpio命令创建tar归档文件

cpio命令可以使用-H选项来指定归档文件的格式,包括tar格式。这样,我们可以使用cpio命令来创建和读写tar归档文件。例如,我们可以使用以下命令来创建一个名为complex.tar的tar归档文件,包含/home/golinux/complex目录下的所有文件和目录。

[linux@bashcommandnotfound.cn ~]$ find /home/golinux/complex | cpio -ov -H tar > complex.tar
/home/golinux/complex
/home/golinux/complex/file1.txt
/home/golinux/complex/file2.txt
/home/golinux/complex/file3.txt
/home/golinux/complex/subdir
/home/golinux/complex/subdir/file4.txt
/home/golinux/complex/subdir/file5.txt
7 blocks
0

评论区