Loading... <p>目录</p> <hr /> <ol class=" list-paddingleft-2"> <li> <p>安装程序包</p> </li> <li> <p>卸载</p> </li> <li> <p>升级</p> </li> <li> <p>查询</p> </li> <li> <p>校验</p> </li> <li> <p>来源合法性和完整性验证</p> </li> <li> <p>数据库重建</p> </li> </ol> <p><img src="//cto.wang/usr/uploads/2016/07/20160703184515-41.gif" /></p> <p></p> <h1>1 安装程序包</h1> <pre class="brush:bash;toolbar:false">rpm -ivh /path/to/package_file -v 显示执行过程的参数。 -h 使用 # 来表示安装进度。</pre> <p></p> <p><strong>>> –test选项</strong></p> <p>可以用来仅测试是否可以安装,而不是真的安装这个 rpm 包。</p> <p></p> <p><strong>>> 依赖关系</strong></p> <p>如果安装的程序,有许多有依赖关系的包需要安装。我们则需要先解决依赖关系,才能安装这个程序包。</p> <p></p> <p>当然我们也可以忽略依赖关系(参数:–nodeps)。但该方法可能会导致安装程序无法运行。</p> <p></p> <p><strong>>> 重新安装(–replacepkgs)</strong></p> <p>如果配置文件被修改过,则不会被替换。新生成的配置文件被另存为.new </p> <p></p> <p></p> <p></p> <h1>2 卸载程序包</h1> <pre class="brush:bash;toolbar:false">rpm -ev package_name ## 这里就不需要路径了,直接指定程序包名,即可卸载</pre> <p></p> <p><strong>>> 依赖关系</strong></p> <p>如果想要卸载的 rpm 包,被其他包依赖。则,我们可以将依赖与此包的所有包一并卸载。</p> <p>同样,我们可以使用 –nodeps 参数忽略依赖关系,强行卸载此包。</p> <p></p> <p>注意,如果包的配置文件被修改过,那么卸载时,这个修改过的配置文件不会被卸载,而是重命名后保留。</p> <p></p> <h1>3 升级程序包</h1> <p>也就是新版本,替代老版本。(不应该对内核执行升级操作。)</p> <pre class="brush:bash;toolbar:false">rpm -U | -F /path/to/package_file -U 升级或安装 -F 纯升级(需要有老版本程序)</pre> <p></p> <p><strong>>> 依赖关系</strong></p> <p>对于被依赖的包,升级之后可能导致版本冲突。我们可以使用 –force 强行升级。当然同样会产生问题。</p> <p></p> <p></p> <h1>4 查询</h1> <p></p> <p><strong>>> 查询某包是否安装</strong></p> <pre class="brush:bash;toolbar:false">rpm -q package_name [root@localhost Packages]# rpm -q php package php is not installed ## 可以一次查询多个,用空格隔开。</pre> <p></p> <p><strong>>> 查询所有已安装的包</strong></p> <pre class="brush:bash;toolbar:false">rpm -qa ## 查询结果,可以通过 grep 进一步筛选</pre> <p></p> <p><strong>>> 查询程序包描述信息(已安装)</strong></p> <pre class="brush:bash;toolbar:false">[root@localhost Packages]# rpm -qi bash Name : bash Relocations: (not relocatable) Version : 4.1.2 Vendor: CentOS Release : 15.el6_4 Build Date: Thu 18 Jul 2013 06:21:24 AM PDT Install Date: Sat 17 Oct 2015 03:10:09 PM PDT Build Host: c6b10.bsys.dev.centos.org Group : System Environment/Shells Source RPM: bash-4.1.2-15.el6_4.src.rpm Size : 3139291 License: GPLv3+ Signature : RSA/SHA1, Thu 18 Jul 2013 06:46:10 AM PDT, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.gnu.org/software/bash Summary : The GNU Bourne Again shell Description : The GNU Bourne Again shell (Bash) is a shell or command language interpreter that is compatible with the Bourne shell (sh). Bash incorporates useful features from the Korn shell (ksh) and the C shell (csh). Most sh scripts can be run by bash without modification. ## relocations 安装过程是否允许自行指定安装位置</pre> <p></p> <p><strong>>> 查询某包安装生成了哪些文件</strong></p> <pre class="brush:bash;toolbar:false">rpm -ql package_name [root@localhost Packages]# rpm -ql bash /bin/bash /bin/sh /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc /usr/bin/bashbug-64 ...</pre> <p></p> <p> (1)我们也可以单独查看生成的配置文件</p> <pre class="brush:bash;toolbar:false">[root@localhost Packages]# rpm -qc bash /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc</pre> <p></p> <p> (2)查询安装生成的帮助文件</p> <pre class="brush:bash;toolbar:false">[root@localhost Packages]# rpm -qd bash /usr/share/doc/bash-4.1.2/COPYING /usr/share/info/bash.info.gz /usr/share/man/man1/..1.gz /usr/share/man/man1/:.1.gz</pre> <p></p> <p> (3) 查询程序包的脚本文件</p> <pre class="brush:bash;toolbar:false">[root@localhost Packages]# rpm -q --scripts bash 其中包括: preinstall postinstall preuninstall postunintall</pre> <p></p> <p> (4) 查询某文件是由哪个包生成的</p> <pre class="brush:bash;toolbar:false">[root@localhost Packages]# rpm -qf /etc/fstab setup-2.8.14-20.el6_4.1.noarch</pre> <p></p> <p> (5) 对尚未安装的包执行查询</p> <pre class="brush:bash;toolbar:false">[root@localhost Packages]# rpm -qpc zsh-4.3.10-7.el6.i686.rpm /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc ## 在之前所有查询基础上,使用 p 参数。实现查询未安装程序包的各种信息。</pre> <p></p> <p></p> <h1>5 校验</h1> <p>主要是检查程序包安装后,文件属性是否发生变化。</p> <pre class="brush:bash;toolbar:false">rpm -V package_name</pre> <p></p> <p>如果校验结果正常,则不会输出任何结果。如果有不一致的,就会显示。 显示的输出格式是 8 位长得字符串,没有变化的,以"." 点号来表示。</p> <ul class=" list-paddingleft-2"> <li> <p>S File Size</p> </li> <li> <p>M Mode</p> </li> <li> <p>5 MD5 校验码改变</p> </li> <li> <p>D 主设备或次设备号发生改变</p> </li> <li> <p>L ReadLink 路径</p> </li> <li> <p>U 属主</p> </li> <li> <p>G 属组</p> </li> <li> <p>T 时间</p> </li> <li> <p>P capabilityes 改变。</p> </li> </ul> <p></p> <p></p> <h1>6 来源合法性和完整性检验</h1> <p>要完成检验,我们首先要导入程序包制作者的公钥。如果是光盘,则在光盘上会提供。</p> <pre class="brush:bash;toolbar:false">-r--r--r--. 2 root root 1706 Nov 27 2013 RPM-GPG-KEY-CentOS-6 ## 光盘上提供的制作者公钥信息</pre> <p><strong>>> 导入公钥</strong></p> <pre class="brush:bash;toolbar:false">[root@localhost CDROM]# rpm --import /media/CDROM/RPM-GPG-KEY-CentOS-6</pre> <p></p> <p><strong>>> 显示已导入的所有公钥</strong></p> <p></p> <pre class="brush:bash;toolbar:false">[root@localhost CDROM]# rpm -qa gpg-pubkey* gpg-pubkey-c105b9de-4e0fd3a3 gpg-pubkey-0608b895-4bd22942</pre> <p></p> <p></p> <p><strong>>> 显示某公钥详细信息</strong></p> <pre class="brush:bash;toolbar:false">[root@localhost CDROM]# rpm -qi gpg-pubkey-0608b895-4bd22942 Name : gpg-pubkey Relocations: (not relocatable) Version : 0608b895 Vendor: (none) Release : 4bd22942 Build Date: Tue 29 Mar 2016 02:16:32 AM PDT Install Date: Tue 29 Mar 2016 02:16:32 AM PDT Build Host: localhost Group : Public Keys Source RPM: (none) Size : 0 License: pubkey Signature : (none) Summary : gpg(EPEL (6) <epel@fedoraproject.org>) Description : -----BEGIN PGP PUBLIC KEY BLOCK----- Version: rpm-4.8.0 (NSS-3) mQINBEvSKUIBEADLGnUj24ZVKW7liFN/JA5CgtzlNnKs7sBg7fVbNWryiE3URbn1 JXvrdwHtkKyY96/ifZ1Ld3lE2gOF61bGZ2CWwJNee76Sp9Z+isP8RQXbG5jwj/4B M9HK7phktqFVJ8VbY2jfTjcfxRvGM8YBwXF8hx0CDZURAjvf1xRSQJ7iAo58qcHn XtxOAvQmAbR9z6Q/h/D+Y/PhoIJp1OV4VNHCbCs9M7HUVBpgC53PDcTUQuwcgeY6 pQgo9eT1eLNSZVrJ5Bctivl1UcD6P6CIGkkeT2gNhqindRPngUXGXW7Qzoefe+fV QqJSm7Tq2q9oqVZ46J964waCRItRySpuW5dxZO34WM6wsw2BP2MlACbH4l3luqtp Xo3Bvfnk+HAFH3HcMuwdaulxv7zYKXCfNoSfgrpEfo2Ex4Im/I3WdtwME/Gbnwdq 3VJzgAxLVFhczDHwNkjmIdPAlNJ9/ixRjip4dgZtW8VcBCrNoL+LhDrIfjvnLdRu vBHy9P3sCF7FZycaHlMWP6RiLtHnEMGcbZ8QpQHi2dReU1wyr9QgguGU+jqSXYar 1yEcsdRGasppNIZ8+Qawbm/a4doT10TEtPArhSoHlwbvqTDYjtfV92lC/2iwgO6g YgG9XrO4V8dV39Ffm7oLFfvTbg5mv4Q/E6AWo/gkjmtxkculbyAvjFtYAQARAQAB tCFFUEVMICg2KSA8ZXBlbEBmZWRvcmFwcm9qZWN0Lm9yZz6JAjYEEwECACAFAkvS KUICGw8GCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRA7Sd8qBgi4lR/GD/wLGPv9 qO39eyb9NlrwfKdUEo1tHxKdrhNz+XYrO4yVDTBZRPSuvL2yaoeSIhQOKhNPfEgT 9mdsbsgcfmoHxmGVcn+lbheWsSvcgrXuz0gLt8TGGKGGROAoLXpuUsb1HNtKEOwP Q4z1uQ2nOz5hLRyDOV0I2LwYV8BjGIjBKUMFEUxFTsL7XOZkrAg/WbTH2PW3hrfS WtcRA7EYonI3B80d39ffws7SmyKbS5PmZjqOPuTvV2F0tMhKIhncBwoojWZPExft HpKhzKVh8fdDO/3P1y1Fk3Cin8UbCO9MWMFNR27fVzCANlEPljsHA+3Ez4F7uboF p0OOEov4Yyi4BEbgqZnthTG4ub9nyiupIZ3ckPHr3nVcDUGcL6lQD/nkmNVIeLYP x1uHPOSlWfuojAYgzRH6LL7Idg4FHHBA0to7FW8dQXFIOyNiJFAOT2j8P5+tVdq8 wB0PDSH8yRpn4HdJ9RYquau4OkjluxOWf0uRaS//SUcCZh+1/KBEOmcvBHYRZA5J l/nakCgxGb2paQOzqqpOcHKvlyLuzO5uybMXaipLExTGJXBlXrbbASfXa/yGYSAG iVrGz9CE6676dMlm8F+s3XXE13QZrXmjloc6jwOljnfAkjTGXjiB7OULESed96MR XtfLk0W5Ab9pd7tKDR6QHI7rgHXfCopRnZ2VVQ== =V/6I -----END PGP PUBLIC KEY BLOCK-----</pre> <p></p> <p><strong>>> 利用密钥检查程序包</strong></p> <p></p> <pre class="brush:bash;toolbar:false">[root@localhost CDROM]# rpm -K ./Packages/zsh-4.3.10-7.el6.i686.rpm ./Packages/zsh-4.3.10-7.el6.i686.rpm: rsa sha1 (md5) pgp md5 OK ## 上面同时会检查完整性和来源合法性,我们也可以单独检查 --nodigest 不检查完整性 --nosignature 不检查来源合法性</pre> <p></p> <p></p> <p></p> <p></p> <h1>7 rpm 数据库重建</h1> <p>rpm 数据库用来追踪每个程序包的依赖关系。数据库存放在 /var/lib/rpm 目录下,其中包括</p> <pre class="brush:bash;toolbar:false">[root@localhost CDROM]# ll /var/lib/rpm/ total 66820 -rw-r--r--. 1 root root 5513216 Jun 9 04:37 Basenames -rw-r--r--. 1 root root 12288 Apr 2 18:42 Conflictname -rw-r--r--. 1 root root 1474560 Jun 9 04:37 Dirnames -rw-r--r--. 1 root root 10182656 Jun 9 04:37 Filedigests -rw-r--r--. 1 root root 24576 Jun 9 04:37 Group -rw-r--r--. 1 root root 16384 Jun 9 04:37 Installtid -rw-r--r--. 1 root root 40960 Jun 9 04:37 Name -rw-r--r--. 1 root root 24576 Jun 9 04:37 Obsoletename -rw-r--r--. 1 root root 50925568 Jun 9 04:37 Packages -rw-r--r--. 1 root root 1310720 Jun 9 04:37 Providename -rw-r--r--. 1 root root 614400 Jun 9 04:37 Provideversion -rw-r--r--. 1 root root 12288 Mar 29 02:16 Pubkeys -rw-r--r--. 1 root root 446464 Jun 9 04:37 Requirename -rw-r--r--. 1 root root 241664 Jun 9 04:37 Requireversion -rw-r--r--. 1 root root 86016 Jun 9 04:37 Sha1header -rw-r--r--. 1 root root 81920 Jun 9 04:37 Sigmd5 -rw-r--r--. 1 root root 12288 Jun 9 04:37 Triggername ## 如果这些文件损坏,将会对 rpm 的安装,卸载,查询等功能产生影响。</pre> <p><strong><br /></strong></p> <p><strong>>> 初始化</strong></p> <pre class="brush:bash;toolbar:false">rpm --initdb ## 如果事先没有库,则新建。如果有,则不执行</pre> <p></p> <p><strong>>> 重建</strong></p> <pre class="brush:bash;toolbar:false">rpm --rebuilddb ## 直接重建,覆盖原有数据</pre> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <p></p> <h1></h1> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信