RPM 软件包
RPM 的介绍
为了方便用户在 Linux 操作系统中安装软件,尽可能像 Windows 中软件安装一样,简单、高效、便捷。一些 Linux 操作系统厂商或开发者直接在已知的系统中将软件源码编译好,使用者可以直接下载并进行安装、升级、卸载等操作。在 Linux 操作系统中常见的软件包格式有两种:rpm 和 deb。而在 Red Hat、CentOS、openSUSE 等使用的是 rpm 软件格式。
RPM 最早是由 Red Hat 开发出来,由于很好用,所以很多发行版也利用 RPM 来进行软件包的管理。RPM 全名 Red Hat Package Manager,最大的特点就是把需要安装的软件提前编译、打包,然后在 RPM 包里留下用以记录软件依赖关系的相关数据。当用户安装时,优先查看这些数据,如果系统满足数据要求就安装软件包,否则不能安装。安装完成后,将软件包相关信息记录到 RPM 自己的数据库中,便于查询和卸载等。所以说 RPM 的优点是方便安装、卸载、查询,缺点就是只能在指定的操作系统上使用,所以不同厂商的 RPM 包,甚至同一厂商不同版本操作系统的 RPM 包都不通用。
RPM 命令
RPM 包的相关文件一般都会放在对应的目录中,比如 RPM 包安装后,配置文件会放在 /etc
下,执行文件会放在 /usr/bin
下,链接库文件会放在 /usr/lib
下,帮助与说明文档会放在 /usr/share/man
和 /usr/share/doc
目录下。
命令语法: rpm [命令选项] 软件包
常用命令选项:
-i
安装-v
显示详细信息-h
显示安装进度-e
卸载-U
升级,如果系统中有低版本的就会升级,如果系统没有安装相应的软件包,则安装。-F
有条件的升级,会检测用户指定的软件包是否已经安装到 Linux 操作系统中。--nodeps
忽略软件包之间的依赖关系。--replacefiles
覆盖文件。--replacepkgs
修复。--force
强制。--test
测试。-q
查询指定的软件包是否安装。-qi
查看指定的软件包的信息,包括开发商、版本、说明。-ql
查看指定软件包中所包含的文件列表。-qc
查看指定软件包的配置文件。-qa
查看本机安装的所有包。-qf
查看一个文件归属于哪个已安装的软件包。
示例:利用 RPM 命令安装软件包:httpd.rpm
挂载安装盘到 mnt
目录:
# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
安装软件包:
# rpm -ivh /mnt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-93.el7.centos.x86_64 ################################# [100%]
查看已安装的所有软件包:
# rpm -qa
bash-4.2.46-34.el7.x86_64
coreutils-8.22-24.el7.x86_64
httpd-2.4.6-93.el7.centos.x86_64
...
查看某个软件包是否安装:
# rpm -qa | grep httpd
httpd-2.4.6-93.el7.centos.x86_64
查看系统中的文件属于哪个安装包:
# rpm -qf /etc/httpd/conf/httpd.conf
httpd-2.4.6-93.el7.centos.x86_64
查看软件包中有哪些文件(已安装的包):
# rpm -ql httpd
/etc/httpd/conf/httpd.conf
/usr/sbin/httpd
/usr/lib/systemd/system/httpd.service
...
查看软件包中有哪些文件(未安装的包):
# rpm -qpl /mnt/Packages/mysql-community-server-5.7.31-1.el7.x86_64.rpm
/etc/my.cnf
/usr/sbin/mysqld
/var/lib/mysql
...
查看指定软件包中的配置文件:
# rpm -qc /mnt/Packages/mysql-community-server-5.7.31-1.el7.x86_64.rpm
/etc/my.cnf
/etc/logrotate.d/mysql
...
软件包卸载:
# rpm -e httpd
测试软件包是否可用:
# rpm -ivh /mnt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm --test
Verifying... ################################# [100%]
Preparing... ################################# [100%]
# rpm -qa | grep httpd
强制安装:
# rpm -ivh /mnt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm --force
Verifying... ################################# [100%]
Preparing... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-93.el7.centos.x86_64 ################################# [100%]
# rpm -qa | grep httpd
httpd-2.4.6-93.el7.centos.x86_64
覆盖安装:
# rpm -ivh /mnt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm --replacefiles
Verifying... ################################# [100%]
Preparing... ################################# [100%]
软件包 httpd-2.4.6-93.el7.centos.x86_64 已经安装
修复软件:
# rpm -ivh /mnt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm --replacepkgs
Verifying... ################################# [100%]
Preparing... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-93.el7.centos.x86_64 ################################# [100%]
RPM 格式的软件包安装简单、快捷、高效,但是 RPM 软件包安装需要解决依赖关系,安装过程中必须首先解决依赖包的安装。解决依赖关系相对于初学者来说是比较痛苦的问题。
下面给出的是安装 dhcp 软件包时出现的依赖:
# rpm -ivh /mnt/Packages/dhcp-4.2.5-68.el7.centos.x86_64.rpm --test
错误:依赖检测失败:
libdns-export.so.100()(64bit) 被 dhcp-12:4.2.5-68.el7.centos.x86_64 需要
libirs-export.so.91()(64bit) 被 dhcp-12:4.2.5-68.el7.centos.x86_64 需要
libisc-export.so.95()(64bit) 被 dhcp-12:4.2.5-68.el7.centos.x86_64 需要
libisccfg-export.so.90()(64bit) 被 dhcp-12:4.2.5-68.el7.centos.x86_64 需要
为了能够更加高效的安装 RPM 包而不需要用户自己去解决依赖关系,可以使用 yum 软件仓库来安装,用户安装软件时的同时由 yum 自己解决依赖关系。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。