28、RPM包管理器

将源码文件,利用工具,如:rpmbuild,fpm等工具制作成rpm包文件

Centos系统中也可以使用rpm命令管理rpm程序包,如安装、维护、查询、卸载等

安装

格式 rpm {-i | --install} [install-option] packagefile

选项:

-v 版本

-h:以#显示安装进度

常用组合 rpm -ivh packagefile

28、RPM包管理器

rpm包安装选项

--test 测试安装

28、RPM包管理器

--nodeps:忽略依赖关系

28、RPM包管理器

--replacepkgs | replacefiles  覆盖安装

28、RPM包管理器

恢复方式一:使用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

28、RPM包管理器

升级及降级

格式 rpm {-U | --upgrade | -F | --freshen } [install option] packagefile

-U:升级并安装(没有直接安装)

-F:升级(没有就不安装)

 --oldpackage:降级

 --force:强制

常用: -Uvh   -Fvh

注意事项:不建议对内核做升级操作,linux支持多内核秉承,因此直接安装新版本内核;升级时,原配置文件会保留,新配置文件会重命名为.rpmnew保留

查询及校验
查询

格式 rpm {-q | --query} [selection option]  [query option]

-a:所有包

28、RPM包管理器

-f:查看指定文件由哪个包安装生成

28、RPM包管理器

-p rpmfile:针对尚未安装的程序包做查询操作

28、RPM包管理器

query optino选项

--changelog:查询rpm包changlog

28、RPM包管理器

-c:查询程序的配置文件

28、RPM包管理器

-d:查询程序的文档

28、RPM包管理器

-i:information

28、RPM包管理器

-l:查看指定的程序包安装后所生成的所有文件

28、RPM包管理器

--scripts:查看程序自带的脚本

28、RPM包管理器

28、RPM包管理器

--whatprovides capatility:查询指定的capability由哪个包所提供

28、RPM包管理器

--whatrequires capability:查询指定的capability被哪个包所依赖

28、RPM包管理器

--provides:列出指定程序包所提供的capability

-R:查询指定程序包所依赖的capabiltity

28、RPM包管理器

常用查询方法:

-qa 查询全部

-q package

-qi  package 查询程序详情

-qc package 查询程序配置文件

-ql package 查询程序包安装后的文件

-qd package 查询程序的文档

-q --script package 查询程序的执行脚本

-qf filepath 查询可执行文件是由哪个安装包生成的

-qpi packagefile 查询未安装的软件包详情

-qpl packagefile 查询未安装的软件包安装产生的文件

校验

检验包的合法性

格式 rpm -K|--checksig rpmfile

检查之前,需要提前导入所需要的公钥,每个生产包厂商公钥不同

28、RPM包管理器

[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]#

28、RPM包管理器

破坏文件

[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

28、RPM包管理器

28、RPM包管理器

28、RPM包管理器

软件在安装时,会将包里的每个文件的元数据,如:大小,权限,所有者,时间等记录至rpm相关的数

据库中,可以用来检查包中的文件是否和当初安装时有所变化

rpm {-V|--verify} [select-options] [verify-options]

28、RPM包管理器

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: 初始化数据库,如不存在则创建,否则不执行任何操作

发表评论

相关文章