通常情况下 RPM包的提取 并不常用,RPM 包是一个归档文件,里面包含有已经编译好了的文件,直观上确实可以提取包中的文件。
使用提取 RPM包 的情况可能是:在某些情况下需要最原始的文件,这就需要从包中去提取包中的文件。
1. 方式一
尝试使用了常见的解压软件来进行对 RPM 包的解压,这里我使用的是 360压缩(4.0.0.1500),提取的包是 tree-1.6.0-10.el7.x86_64.rpm 。
- 使用的程序:360压缩(4.0.0.1500)
- 提取的 RPM 包:tree-1.6.0-10.el7.x86_64.rpm
- 操作系统平台:22H2
通过最后的解压能得到
... ...\tree-1.6.0-10.el7.x86_64\tree-1.6.0-10.el7.x86_64>tree
卷 计算机 的文件夹 PATH 列表
卷序列号为 7C5F-0129
E:.
└─usr
├─bin
└─share
├─doc
│ └─tree-1.6.0
└─man
└─man1
最后可以看到能解压到一个名为 usr 的文件夹这个文件夹共有4个文件,7个文件夹。
2. 方式二
使用 rpm2cpio 和 cpio 来对 RPM 包进行提取,rpm2cpio 实用程序可以将 RPM 的内容传递给 cpio 的特殊归档工具,cpio 可以提取前者所有文件或单个文件。
一般情况下会相当于当前工作目录创建子目录树,当然也可以提取指定的文件。
- rpm2cpio:从 RPM 包管理器 (RPM)包中提取 cpio 存档
- cpio:一种数据备份与恢复的工具
- 提取的 RPM 包:tree-1.6.0-10.el7.x86_64.rpm 。
- 操作系统平台:CentOS Linux release 7.5.1804 (Core)
[root@localhost test]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm | cpio -idmv
./usr/bin/tree
./usr/share/doc/tree-1.6.0
./usr/share/doc/tree-1.6.0/LICENSE
./usr/share/doc/tree-1.6.0/README
./usr/share/man/man1/tree.1.gz
177 blocks
[root@localhost test]# du -h usr/
64K usr/bin
28K usr/share/doc/tree-1.6.0
28K usr/share/doc
8.0K usr/share/man/man1
8.0K usr/share/man
36K usr/share
100K usr/
[root@localhost test]# tree
.
├── tree-1.6.0-10.el7.x86_64.rpm
└── usr
├── bin
│ └── tree
└── share
├── doc
│ └── tree-1.6.0
│ ├── LICENSE
│ └── README
└── man
└── man1
└── tree.1.gz
7 directories, 5 files
看的出来除了tree-1.6.0-10.el7.x86_64.rpm,一共用7个文件夹,4个文件
3. 方式三
使用 alien 来进行,Linux发行版软件包格式中 转换的程序,这个软件也能进行文件的提取。
- alien: 在不同的 Linux发行版软件包格式中 转换的程序
- 提取的 RPM包:tree-1.6.0-10.el7.x86_64.rpm
- 操作系统:Fedora release 39 (Thirty Nine)
[root@192 tom]# alien --scripts --generate tree-1.6.0-10.el7.x86_64.rpm
warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
warning: tree-1.6.0-10.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
... ...
Directories tree-1.6.0 and tree-1.6.0.orig prepared.
[root@192 tom]# tree
.
├── tree-1.6.0
│ ├── debian
│ │ ├── changelog
│ │ ├── compat
│ │ ├── control
│ │ ├── copyright
│ │ └── rules
│ └── usr
│ ├── bin
│ │ └── tree
│ └── share
│ ├── doc
│ │ └── tree-1.6.0
│ │ ├── LICENSE
│ │ └── README
│ └── man
│ └── man1
│ └── tree.1.gz
├── tree-1.6.0-10.el7.x86_64.rpm
└── tree-1.6.0.orig
└── usr
├── bin
│ └── tree
└── share
├── doc
│ └── tree-1.6.0
│ ├── LICENSE
│ └── README
└── man
└── man1
└── tree.1.gz
18 directories, 14 files