如何从RPM包存档中提取文件

这篇短文将向您展示如何从RPM包存档中提取单个或者多个文件。首先,我们下载一个示例包“hello”。

$ wget ftp://rpmfind.net/linux/opensuse/factory/repo/oss/suse/x86_64/hello-2.9-4.3.x86_64.rpm
$ ls
hello-2.9-4.3.x86_64.rpm

现在我们有一个选项,可以从上面的RPM包存档中提取全部或者单个文件。以下linux命令将所有文件提取到当前工作目录中:

$ rpm2cpio hello-2.9-4.3.x86_64.rpm | cpio -id
525 blocks
$ ls
hello-2.9-4.3.x86_64.rpm  usr

上面的“rpm2cpio”首先将RPM转换为CPIO存档。然后我们将其STDOUT传递给一个'cpio'命令,该命令将其作为输入,并将其内容'-i提取到相应的目录'-d。因此,“usr”目录现在包含了“hello-2.9-4.3.x86_64.rpm”rpm包存档中的所有提取文件。

或者,我们可以从RPM包存档中提取单个/选定的文件。为此,我们首先需要列出RPM包的内容,而不提取其内容。

下面命令只会简单地列出RPM包“hello-2.9-4.3.x86_64.RPM”的内容`

$ rpm -lqp hello-2.9-4.3.x86_64.rpm
warning: hello-2.9-4.3.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 3dbdc284: NOKEY
/usr/bin/hello
/usr/share/doc/packages/hello
/usr/share/doc/packages/hello/ABOUT-NLS

使用以下linux命令从RPM包中提取单个文件“/usr/bin/hello”,并将其保存到/tmp/目录:

$ rpm2cpio hello-2.9-4.3.x86_64.rpm | cpio -iv --to-stdout ./usr/bin/hello > /tmp/hello

完成后,“hello”二进制可执行文件现在已保存到“/tmp/”目录中:

$ chmod +x /tmp/hello
$ /tmp/hello 
Hello, world!
日期:2020-07-07 20:54:39 来源:oir作者:oir