=Start=
缘由:
大部分互联网公司使用的系统都是Linux,而其中的很大一部分又是RHEL系(以免费的CentOS为主),所以熟悉RHEL系Linux的命令不论是对于自己学习还是工作需要都是很有帮助的。今天要记录的就是RHEL系Linux上一个用得非常多的软件包管理工具——RPM。
参考解答:
RPM(Red Hat Package Manager)是一个软件包管理工具,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多。该工具包最先是由Red Hat公司推出的,后来被其他Linux开发商所借用。由于它为Linux使用者省去了很多时间,所以被广泛应用于在Linux下安装、删除软件。
虽然现在我在CentOS上一般都是用yum命令来安装软件(会自动处理一些依赖),但是在日常工作中的很多方面还是需要相对底层一些的rpm命令来解决,比如接下来要介绍到的几种场景:
场景1.我们得到一个新软件,在安装之前,一般都要先查看一下软件包里有什么内容,假设这个文件是:zabbix-release-2.4-1.el6.noarch.rpm,我们可以用这条命令查看:
rpm -qpi zabbix-release-2.4-1.el6.noarch.rpm
系统将会列出这个软件包的详细资料,包括含有多少个文件、各文件名称、文件大小、创建时间、编译日期等信息。
场景2.上面列出的所有文件在安装时不一定全部安装,就像Windows下程序的安装方式分为典型、完全、自定义一样,Linux也会让你选择安装方式,此时我们可以用下面这条命令查看软件包将会在系统里安装哪些文件,以方便我们的选择:
rpm -qpl zabbix-release-2.4-1.el6.noarch.rpm
场景3.选择安装方式后,开始安装。我们可以用「rpm-ivh zabbix-release-2.4-1.el6.noarch.rpm」命令安装此软件。在安装过程中,若系统提示此软件已安装过或因其他原因无法继续安装,但若我们确实想执行安装命令,可以在 -ivh 后加一参数「-replacepkgs」:
rpm -ivh -replacepkgs zabbix-release-2.4-1.el6.noarch.rpm
场景4.有时我们卸载某个安装过的软件,只需执行「rpm -e zabbix-release-2.4-1.el6.noarch.rpm」命令即可。
rpm -e zabbix-release-2.4-1.el6.noarch.rpm
场景5.对低版本软件进行升级是提高其功能的好办法,这样可以省去我们卸载后再安装新软件的麻烦,要升级某个软件,只须执行命令「rpm -Uvh zabbix-release-3.0-1.el6.noarch.rpm」,注意:此时的文件名必须是要升级软件的升级补丁
rpm -Uvh zabbix-release-3.0-1.el6.noarch.rpm
场景6.另外一个安装软件的方法可谓是Linux的独到之处,同时也是RPM强大功能的一个表现:通过FTP/HTTP站点直接在线安装软件。当找到含有你所需软件的站点并与此网站连接后,执行下面的命令即可实现在线安装,譬如在线安装zabbix-release-2.4-1.el6.noarch.rpm,可以用命令:
rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
场景7.在我们使用电脑过程中,难免会有误操作,若我们误删了几个文件而影响了系统的性能时,怎样查找到底少了哪些文件呢?RPM软件包提供了一个查找损坏文件的功能,执行此命令:rpm -Va即可,Linux将为你列出所有损坏的文件。你可以通过Linux的安装光盘进行修复。
rpm -Va
场景8.Linux系统中文件繁多,在使用过程中,难免会碰到我们不认识的文件,在Windows下我们可以用“开始/查找”菜单快速判断某个文件属于哪个文件夹,在Linux中,下面这条命令行可以帮助我们快速判定某个文件属于哪个软件包:
rpm -qf /path/to/file
场景9.当每个软件包安装在Linux系统后,安装文件都会到RPM数据库中“报到”,所以,我们要查询某个已安装软件的属性时,只需到此数据库中查找即可。注意:此时的查询命令不同于1和8介绍的查询,这种方法只适用于已安装过的软件包!命令格式:
rpm -q zabbix rpm -qa | grep "zabbix"
「鸟哥的私房菜」的总结:
[root@www ~]# rpm -qa <==已安装软件 [root@www ~]# rpm -q[licdR] 已安装的软件名称 <==已安装软件 [root@www ~]# rpm -qf 存在与系统上面的某个软件名 <==已安装软件 [root@www ~]# rpm -qp[licdR] 未安装的某个文件名称 <==直接从RPM文件进行查询 选项与参数: 查询已安装软件的信息: -q :仅查询后面接的软件名称是否有安装; -qa :列出所有的,已经安装在本机 Linux 系统上面的所有软件名称; -qi :列出该软件的详细信息 (information),包含开发商、版本与说明等; -ql :列出该软件所有的文件与目录所在完整文件名 (list); -qc :列出该软件的所有配置文件 (找出在 /etc/ 底下的文件名而已) -qd :列出该软件的所有说明文件 (找出与 man 有关的文件而已) -qR :列出与该软件有关的相依软件所含的文件 (Required 的意思) -qf :由后面接的文件名称,找出该文件属于哪一个已安装的软件; 查询某个 RPM 文件内含有的信息: -qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出某个 RPM 文件内的信息,而非已安装的软件信息!注意!
参考链接:
- http://www.jb51.net/os/RedHat/1261.html
- http://www.codesec.net/view/324248.html
- http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html
- http://vbird.dic.ksu.edu.tw/linux_basic/0520rpm_and_srpm_2.php
- http://blog.csdn.net/fengyifei11228/article/details/6526149
=EOF=
《 “RPM的使用学习” 》 有 4 条评论
在CentOS下如何查看命令「htpasswd」是由哪个软件包提供的可以用下面的方法「yum provides」:
yum provides *bin/htpasswd
http://serverfault.com/a/259510
对于后期的Fedora的RPM包,如果出现类似错误”error: unpacking of archive failed on file /builddir/build/SOURCES/mypackage-1.0.0.tar.gz;4dc983a7: cpio: MD5 sum mismatch”可以使用「`–nomd5`」选项以继续安装:
`[user@host ~]$ rpm –nomd5 -i /tmp/mypackage-1.0.0-1.src.rpm`
如何查看没有安装的RPM包的详细信息?
https://stackoverflow.com/questions/3005889/displaying-information-on-non-installed-rpm-package
http://www.pixelbeat.org/docs/packaging.html
`
$ rpm -qip bash-4.2.46-21.el7_3.src.rpm
`
Red Hat 系列的 RPM 包管理器是如何通过 OpenPGP 签名方式保证软件包的完整性的
https://access.redhat.com/blogs/766093/posts/3373211