28RPM包管理器
Posted GavenLee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了28RPM包管理器相关的知识,希望对你有一定的参考价值。
将源码文件,利用工具,如:rpmbuild,fpm等工具制作成rpm包文件
Centos系统中也可以使用rpm命令管理rpm程序包,如安装、维护、查询、卸载等
安装
格式 rpm -i | --install [install-option] packagefile
选项:
-v 版本
-h:以#显示安装进度
常用组合 rpm -ivh packagefile
rpm包安装选项
--test 测试安装
--nodeps:忽略依赖关系
--replacepkgs | replacefiles 覆盖安装
恢复方式一:使用rpm2cpio 方式将rpm解包,将可执行文件还原
[11:07:23root@LGW-Linux-7Packages]#tree
-bash: /usr/bin/tree: No such file or directory
[11:07:26root@LGW-Linux-7Packages]#rpm -ivh tr
trace-cmd-2.6.0-10.el7.x86_64.rpm tracker-1.10.5-6.el7.x86_64.rpm trousers-0.3.14-2.el7.x86_64.rpm
traceroute-2.0.22-2.el7.x86_64.rpm tree-1.6.0-10.el7.x86_64.rpm
[11:07:26root@LGW-Linux-7Packages]#rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
package tree-1.6.0-10.el7.x86_64 is already installed
[11:07:41root@LGW-Linux-7Packages]#rpm2cpio tree-1.6.0-10.el7.x86_64.rpm | cpio -t
./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
[11:10:27root@LGW-Linux-7Packages]#cd /data
[11:10:54root@LGW-Linux-7data]#rpm2cpio /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm | cpio -idv /usr/bin/tree
177 blocks
[11:11:11root@LGW-Linux-7data]#ll
total 116
-rw-r--r--. 1 root root 3816 Aug 9 10:40 a
-rw-r--r--. 1 root root 0 Aug 8 14:41 a b
-rw-r--r--. 1 root root 0 Aug 8 14:21 a.conf
-rw-r--r--. 1 root root 0 Aug 8 14:21 a.conf.bak
-rw-r--r--. 1 root root 24 Aug 3 09:47 args
-rw-r--r--. 1 root root 18 Aug 3 09:45 args1
-rwxr-xr-x. 1 root root 101 Aug 3 09:50 argsnum.sh
-rw-r--r--. 1 root root 0 Aug 4 14:06 b
-rwxr-xr-x. 1 root root 72 Jul 19 16:51 backup.sh
-rwxr-xr-x. 1 root root 318 Aug 3 10:27 checkdisk.sh
-rwxr-xr-x. 1 root root 281 Aug 4 16:47 createuser.sh
-rw-r--r--. 1 root root 6349 Aug 9 14:34 data2.zip
-rw-r--r--. 1 root root 3072 Aug 9 14:27 data_spite00
-rw-r--r--. 1 root root 3072 Aug 9 14:27 data_spite01
-rw-r--r--. 1 root root 205 Aug 9 14:27 data_spite02
-rw-r--r--. 1 root root 6349 Aug 9 10:39 data.zip
-rwxr-xr-x. 1 root root 286 Jul 19 17:09 disk.sh
-rwxr-xr-x. 1 root root 90 Aug 3 10:45 excute.sh
-rwxr-xr-x. 1 root root 63 Jul 21 10:34 file1.sh
-rwxr-xr-x. 1 root root 93 Jul 21 11:30 file.sh
-rwxr-xr-x. 1 root root 424 Aug 5 08:51 filetype.sh
-rwxr-xr-x. 1 root root 289 Aug 4 11:22 hostping_if.sh
-rwxr-xr-x. 1 root root 158 Aug 3 10:00 hostping.sh
-rwxr-xr-x. 1 root root 44 Jul 21 10:37 locat.sh
-rwxr-xr-x. 1 root root 365 Aug 5 09:20 reset.sh
-rwxr-xr-x. 1 root root 31 Jul 15 17:54 scripts.sh
-rwxr-xr-x. 1 root root 80 Jul 20 15:43 shell.sh
-rwxr-xr-x. 1 root root 86 Jul 20 15:43 shellson.sh
-rwxr-xr-x. 1 root root 744 Jul 21 15:17 systeminfo.sh
drwxr-xr-x. 2 root root 4096 Aug 11 17:32 test
-rwxr-xr-x. 1 root root 232 Aug 4 11:46 yn.sh
[11:11:17root@LGW-Linux-7data]#cp /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm .
[11:11:54root@LGW-Linux-7data]#ll
total 164
-rw-r--r--. 1 root root 3816 Aug 9 10:40 a
-rw-r--r--. 1 root root 0 Aug 8 14:41 a b
-rw-r--r--. 1 root root 0 Aug 8 14:21 a.conf
-rw-r--r--. 1 root root 0 Aug 8 14:21 a.conf.bak
-rw-r--r--. 1 root root 24 Aug 3 09:47 args
-rw-r--r--. 1 root root 18 Aug 3 09:45 args1
-rwxr-xr-x. 1 root root 101 Aug 3 09:50 argsnum.sh
-rw-r--r--. 1 root root 0 Aug 4 14:06 b
-rwxr-xr-x. 1 root root 72 Jul 19 16:51 backup.sh
-rwxr-xr-x. 1 root root 318 Aug 3 10:27 checkdisk.sh
-rwxr-xr-x. 1 root root 281 Aug 4 16:47 createuser.sh
-rw-r--r--. 1 root root 6349 Aug 9 14:34 data2.zip
-rw-r--r--. 1 root root 3072 Aug 9 14:27 data_spite00
-rw-r--r--. 1 root root 3072 Aug 9 14:27 data_spite01
-rw-r--r--. 1 root root 205 Aug 9 14:27 data_spite02
-rw-r--r--. 1 root root 6349 Aug 9 10:39 data.zip
-rwxr-xr-x. 1 root root 286 Jul 19 17:09 disk.sh
-rwxr-xr-x. 1 root root 90 Aug 3 10:45 excute.sh
-rwxr-xr-x. 1 root root 63 Jul 21 10:34 file1.sh
-rwxr-xr-x. 1 root root 93 Jul 21 11:30 file.sh
-rwxr-xr-x. 1 root root 424 Aug 5 08:51 filetype.sh
-rwxr-xr-x. 1 root root 289 Aug 4 11:22 hostping_if.sh
-rwxr-xr-x. 1 root root 158 Aug 3 10:00 hostping.sh
-rwxr-xr-x. 1 root root 44 Jul 21 10:37 locat.sh
-rwxr-xr-x. 1 root root 365 Aug 5 09:20 reset.sh
-rwxr-xr-x. 1 root root 31 Jul 15 17:54 scripts.sh
-rwxr-xr-x. 1 root root 80 Jul 20 15:43 shell.sh
-rwxr-xr-x. 1 root root 86 Jul 20 15:43 shellson.sh
-rwxr-xr-x. 1 root root 744 Jul 21 15:17 systeminfo.sh
drwxr-xr-x. 2 root root 4096 Aug 11 17:32 test
-rw-r--r--. 1 root root 47508 Aug 15 11:11 tree-1.6.0-10.el7.x86_64.rpm
-rwxr-xr-x. 1 root root 232 Aug 4 11:46 yn.sh
[11:11:55root@LGW-Linux-7data]#rpm
rpm rpm2cpio rpmdb rpmdumpheader rpmkeys rpmquery rpmverify
[11:11:55root@LGW-Linux-7data]#rpm2cpio tree-1.6.0-10.el7.x86_64.rpm | cpio -idv ./usr/bin/tree
./usr/bin/tree
177 blocks
[11:12:32root@LGW-Linux-7data]#mv usr/bin/tree /usr/bin/
[11:12:50root@LGW-Linux-7data]#tree
.
├── a
├── a\\ b
├── a.conf
├── a.conf.bak
├── args
├── args1
├── argsnum.sh
├── b
├── backup.sh
├── checkdisk.sh
├── createuser.sh
├── data2.zip
├── data_spite00
├── data_spite01
├── data_spite02
├── data.zip
├── disk.sh
├── excute.sh
├── file1.sh
├── file.sh
├── filetype.sh
├── hostping_if.sh
├── hostping.sh
├── locat.sh
├── reset.sh
├── scripts.sh
├── shell.sh
├── shellson.sh
├── systeminfo.sh
├── test
│ ├── hello
│ ├── hello.c
│ └── hello.s
├── tree-1.6.0-10.el7.x86_64.rpm
├── usr
│ └── bin
└── yn.sh
3 directories, 34 files
[11:12:53root@LGW-Linux-7data]#
恢复方式二:执行覆盖安装
11:12:53root@LGW-Linux-7data]#rm -rf /usr/bin/tree
[11:16:10root@LGW-Linux-7data]#tree
-bash: /usr/bin/tree: No such file or directory
[11:16:12root@LGW-Linux-7data]#rpm -ivh --replacepkgs tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:tree-1.6.0-10.el7 ################################# [100%]
[11:16:45root@LGW-Linux-7data]#tree
.
├── a
├── a\\ b
├── a.conf
├── a.conf.bak
├── args
├── args1
├── argsnum.sh
├── b
├── backup.sh
├── checkdisk.sh
├── createuser.sh
├── data2.zip
├── data_spite00
├── data_spite01
├── data_spite02
├── data.zip
├── disk.sh
├── excute.sh
├── file1.sh
├── file.sh
├── filetype.sh
├── hostping_if.sh
├── hostping.sh
├── locat.sh
├── reset.sh
├── scripts.sh
├── shell.sh
├── shellson.sh
├── systeminfo.sh
├── test
│ ├── hello
│ ├── hello.c
│ └── hello.s
├── tree-1.6.0-10.el7.x86_64.rpm
├── usr
│ └── bin
└── yn.sh
3 directories, 34 files
--nosignatrue:不检查合法性
--nodiges:不检查包完整性
--noscripts:不执行程序包脚本
%pre:安装前脚本 nopre
%post:安装后脚本 nopost
%preun:卸载前脚本 nopreun
%postun:卸载后及哦啊吧 nopostun
升级及降级
格式 rpm -U | --upgrade | -F | --freshen [install option] packagefile
-U:升级并安装(没有直接安装)
-F:升级(没有就不安装)
--oldpackage:降级
--force:强制
常用: -Uvh -Fvh
注意事项:不建议对内核做升级操作,linux支持多内核秉承,因此直接安装新版本内核;升级时,原配置文件会保留,新配置文件会重命名为.rpmnew保留
查询及校验
查询
格式 rpm -q | --query [selection option] [query option]
-a:所有包
-f:查看指定文件由哪个包安装生成
-p rpmfile:针对尚未安装的程序包做查询操作
query optino选项
--changelog:查询rpm包changlog
-c:查询程序的配置文件
-d:查询程序的文档
-i:information
-l:查看指定的程序包安装后所生成的所有文件
--scripts:查看程序自带的脚本
--whatprovides capatility:查询指定的capability由哪个包所提供
--whatrequires capability:查询指定的capability被哪个包所依赖
--provides:列出指定程序包所提供的capability
-R:查询指定程序包所依赖的capabiltity
常用查询方法:
-qa 查询全部
-q package
-qi package 查询程序详情
-qc package 查询程序配置文件
-ql package 查询程序包安装后的文件
-qd package 查询程序的文档
-q --script package 查询程序的执行脚本
-qf filepath 查询可执行文件是由哪个安装包生成的
-qpi packagefile 查询未安装的软件包详情
-qpl packagefile 查询未安装的软件包安装产生的文件
校验
检验包的合法性
格式 rpm -K|--checksig rpmfile
检查之前,需要提前导入所需要的公钥,每个生产包厂商公钥不同
[15:16:54root@LGW-Linux-7Packages]#rpm -K tree-1.6.0-10.el7.x86_64
error: tree-1.6.0-10.el7.x86_64: open failed: No such file or directory
[15:17:04root@LGW-Linux-7Packages]#ll | grep tree
-rw-rw-r--. 1 root root 24540 Nov 25 2015 texlive-pst-tree-svn24142.1.12-38.el7.noarch.rpm
-rw-rw-r--. 1 root root 47508 Jul 4 2014 tree-1.6.0-10.el7.x86_64.rpm
[15:17:26root@LGW-Linux-7Packages]#rpm -K tree
error: tree: open failed: No such file or directory
[15:17:33root@LGW-Linux-7Packages]#rpm -K tree-1.6.0-10.el7.x86_64.rpm
tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
[15:17:42root@LGW-Linux-7Packages]#
破坏文件
[15:18:53root@LGW-Linux-7data]#echo >> tree-1.6.0-10.el7.x86_64.rpm
[15:19:19root@LGW-Linux-7data]#rpm -K tree-1.6.0-10.el7.x86_64.rpm
tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (MD5) PGP MD5 NOT OK
增加了一个回车行
修复
[15:22:36root@LGW-Linux-7data]#vim -b tree-1.6.0-10.el7.x86_64.rpm
%!xxd vim进入后使用xxd命令进入二进制编辑模式,删除如下0a后 %! xxd -r报存,然后退出
[15:24:10root@LGW-Linux-7data]#rpm -K tree-1.6.0-10.el7.x86_64.rpm
tree-1.6.0-10.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
软件在安装时,会将包里的每个文件的元数据,如:大小,权限,所有者,时间等记录至rpm相关的数
据库中,可以用来检查包中的文件是否和当初安装时有所变化
rpm -V|--verify [select-options] [verify-options]
S : 表示文件大小;
M : 表示权限;
5 : 表示MD5检查和;
D : 表示主从设备号;
L : 表示符号连接;
U : 表示属主;
G : 表示属组;
c所在位置表示文件类型 c:配置文件 d:数据文件 l:许可证文件 r:自述文件
T : 表示最后修改时间根据文件类型的不同检验的项目也不同
. 表示当前位置代表的字符含义一致
S.5….T
1.centos-release包里除/etc/issue /etc/yum/vars/contentdir之外其他文件都没有变化,因此没有列出来。
2./etc/issue文件的大小发生了变化 (S)
3./etc/issue文件的MD5校验和发生变化 (5)
4./etc/issue文件的最后修改时间发生变化 (T)
卸载
格式 rpm -e | erase [--allmatches] [--nodeps] [--noscfipts] [--notriggers] [--test] package_name
注意:当包卸载时,配置文件不会删除,会以filename.rpmsave的形势保理
强行删除rpm包
rpm -e rpm --nodeps 删除后无法安装,需要进入紧急救援模式去安装rpm程序
rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage
数据库
rpm包数据库地址 /var/lib/rpm
rpm --initdb|--rebuilddb
initdb: 初始化数据库,如不存在则创建,否则不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录
以上是关于28RPM包管理器的主要内容,如果未能解决你的问题,请参考以下文章