将源码文件,利用工具,如: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.gz177 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/tree177 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.sh3 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.sh3 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: 初始化数据库,如不存在则创建,否则不执行任何操作