软件管理目录
1. 获取程序包的途径
- 系统发行版的光盘或官方的服务器
- 项目官方站点
- 第三方组织
- Fedora-EPEL(推荐)
- 搜索引擎:
- 自己制作
2.软件包的组成
- 二进制程序
- 库文件
- 头文件
- 配置文件
- 帮助文件
- 脚本文件
- 日志文件
2. 软件包管理器的核心功能
- 制作软件包
- 安装软件
- 卸载软件
- 升级软件
- 查询软件
- 校验软件
3. 软件包管理工具
- 分类:
- 前端工具,常用的前端工具有以下这些:
- yum
- apt-get
- zypper (suse上的rpm前端管理工具)
- dnf(Fedora 22+ rpm前端管理工具)
- 后端工具,常用的后端工具有以下这些:
- rpm
- dpt
- 前端工具,常用的前端工具有以下这些:
- 注意:
- 前端工具是依赖于后端工具的
- 前端工具是为了自动解决后端工具的依赖关系而存在的
4.rpm包管理
4.1 rpm介绍
- rpm是
Redhat Package Manager
的简称,用于管理软件包。 - rpm有一个强大的数据库
/var/lib/rpm
。 - rpm的管理工作包括软件的安装、卸载、升级、查询、校验、重建数据库、验证软件包来源合法性等等。
4.2 rpm包安装
语法: rpm -ivh /PATH/TO/PACKAGE_FILE …(安装光盘驱动中的安装包需选挂载驱动)
- 常用选项:
-i: 安装
-v: 显示详细信息
-h: 显示安装进度条
–test: 测试安装,但不真正执行安装过程
–nodeps: 忽略依赖关系
–replacepkgs: 重新安装,替换原有安装
–oldpackage: 降级
–force: 强行安装,可以实现重装或降级
–nodigest: 不检查包的完整性
–nosignature: 不检查包的来源合法性
–noscripts: 不执行程序包脚本片断
%pre:安装前脚本 --nopre
%post:安装后脚本 --nopost
%preun:卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun
-
命令:rpm -ivh [安装包路径]
- 作用:安装软件包,需要指定软件包绝对路径(在软件包所在目录下可以不指定绝对路径)
[root@localhost ~]# mount /dev/cdrom /mnt mount: /dev/sr0 写保护,将以只读方式挂载 [root@localhost ~]# rpm -ivh /mnt/Packages/wget-1.14-15.el7.x86_64.rpm 警告:/mnt/Packages/wget-1.14-15.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:wget-1.14-15.el7 ################################# [100%] [root@localhost Packages]# rpm -ivh wget-1.14-15.el7.x86_64.rpm //与安装包在同一目录
-
命令:rpm -ivh -test [安装包路径]
- 作用:测试一个软件包是否能在该系统上安装
[root@localhost ~]# rpm -ivh --test /mnt/Packages/wget-1.14-15.el7.x86_64.rpm 警告:/mnt/Packages/wget-1.14-15.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY 准备中... ################################# [100%] 软件包 wget-1.14-15.el7.x86_64 已经安装
-
命令:rpm -ivh --force [安装包路径]
- 作用:如果软件包存在, 强制再次安装(有依赖关系未安装的不能强制安装,需忽略依赖才可强制安装)
[root@localhost ~]# rpm -ivh --force /mnt/Packages/wget-1.14-15.el7.x86_64.rpm 警告:/mnt/Packages/wget-1.14-15.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:wget-1.14-15.el7 ################################# [100%]
-
命令:rpm -ivh --nodeps [安装包路径]
- 作用:使用–nodeps忽略安装包包依赖关系,强制安装
[root@localhost ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-67.el7.x86_64.rpm 警告:/mnt/Packages/httpd-2.4.6-67.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY 错误:依赖检测失败: /etc/mime.types 被 httpd-2.4.6-67.el7.x86_64 需要 httpd-tools = 2.4.6-67.el7 被 httpd-2.4.6-67.el7.x86_64 需要 libapr-1.so.0()(64bit) 被 httpd-2.4.6-67.el7.x86_64 需要 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-67.el7.x86_64 需要 [root@localhost ~]# rpm -ivh --nodeps /mnt/Packages/httpd-2.4.6-67.el7.x86_64.rpm 警告:/mnt/Packages/httpd-2.4.6-67.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:httpd-2.4.6-67.el7 ################################# [100%]
4.3 rpm包卸载
语法:rpm -e PACKAGE_NAME
- 先查询, 然后卸载
[root@localhost ~]# rpm -qa|grep wget wget-1.14-15.el7.x86_64 [root@localhost ~]# rpm -e wget [root@localhost ~]# rpm -qa|grep wget [root@localhost ~]#
4.3 rpm包查询
常用命令:
- rpm -q PACKAGE_NAME //查询指定的包是否已安装
- rpm -qa //查询已经安装的所有包
- rpm -qi PACKAGE_NAME //查询指定包的说明信息
- rpm -ql PACKAGE_NAME //查询指定软件包安装后生成的文件列表
- rpm -qf /path/to/somefile //查询指定的文件是由哪个rpm包安装生成的
- rpm -qc PACKAGE_NAME //查询指定包安装的配置文件
- rpm -qd PACKAGE_NAME //查询指定包安装的帮助文件
- rpm -q --scripts PACKAGE_NAME //查询指定包中包含的脚本
- rpm -q --whatprovides CAPABILITY //查询指定的CAPABILITY(能力)由哪个包所提供
- 如:rpm -q --whatprovides /bin/cat
- rpm -q --whatrequires CAPABILITY //查询指定的CAPABILITY被哪个包所依赖
- rpm -q --changelog COMMAND //查询COMMAND的制作日志
- rpm -q --scripts PACKAGE_NAME //查询指定软件包包含的所有脚本文件
- rpm -qR PACKAGE_NAME //查询指定的软件包所依赖的CAPABILITY
- rpm -q --provides PACKAGE_NAME //列出指定软件包所提供的CAPABILITY
- rpm -qpi /PATH/TO/PACKAGE_FILE //查询指定未安装包的说明信息
- rpm -qpl /PATH/TO/PACKAGE_FILE //查询未安装的软件包会产生哪些文件
- 命令:rpm -q xxx
- 作用:查看xxx包是否安装
[root@localhost ~]# rpm -q wget wget-1.14-15.el7.x86_64
- 命令:rpm -qa | grep xxx
- 作用:查询系统已安装的xxx包
[root@localhost ~]# rpm -qa | grep wget wget-1.14-15.el7.x86_64
- 命令:rpm -qi xxx
- 作用:查看xxx包的相关信息
[root@localhost ~]# rpm -qi wget Name : wget Version : 1.14 Release : 15.el7 Architecture: x86_64 Install Date: 2019年09月26日 星期四 15时34分54秒 Group : Applications/Internet Size : 2055533 License : GPLv3+ Signature : RSA/SHA256, 2017年05月05日 星期五 21时44分34秒, Key ID 199e2f91fd431d51 Source RPM : wget-1.14-15.el7.src.rpm Build Date : 2017年05月05日 星期五 20时39分40秒
- 命令:rpm -ql xxx
- 作用:查询xxx包所安装的文件
[root@localhost ~]# rpm -ql wget /etc/wgetrc /usr/bin/wget /usr/share/doc/wget-1.14 /usr/share/doc/wget-1.14/AUTHORS /usr/share/doc/wget-1.14/COPYING /usr/share/doc/wget-1.14/MAILING-LIST /usr/share/doc/wget-1.14/NEWS /usr/share/doc/wget-1.14/README /usr/share/doc/wget-1.14/sample.wgetrc /usr/share/info/wget.info.gz /usr/share/locale/be/LC_MESSAGES/wget.mo
- 命令:rpm -qc xxx
- 作用:查询xxx包相关的配置文件
[root@localhost ~]# rpm -qc wget /etc/wgetrc
- 命令:rpm -qd xxx
- 作用:查看xxx包的帮助文件
[root@localhost ~]# rpm -qd wget /usr/share/doc/wget-1.14/AUTHORS /usr/share/doc/wget-1.14/COPYING /usr/share/doc/wget-1.14/MAILING-LIST /usr/share/doc/wget-1.14/NEWS /usr/share/doc/wget-1.14/README /usr/share/doc/wget-1.14/sample.wgetrc /usr/share/info/wget.info.gz /usr/share/man/man1/wget.1.gz
- 命令:rpm -qf [配置文件或命令绝对路径]
- 作用:查询配置文件或命令来自于哪个rpm包
[root@localhost ~]# rpm -qf /usr/bin/wget wget-1.14-15.el7.x86_64
- 命令:rpm -q --scripts xxx
- 作用:查询指定包中包含的脚本
[root@localhost ~]# rpm -q --scripts wget postinstall scriptlet (using /bin/sh): /sbin/install-info /usr/share/info/wget.info.gz /usr/share/info/dir || : preuninstall scriptlet (using /bin/sh): if [ "$1" = 0 ]; then /sbin/install-info --delete /usr/share/info/wget.info.gz /usr/share/info/dir || : fi
- 命令:rpm -qpi [未安装包的路径]
- 作用:查询指定未安装包的说明信息
[root@localhost ~]# rpm -qpi /mnt/Packages/acpid-2.0.19-8.el7.x86_64.rpm 警告:/mnt/Packages/acpid-2.0.19-8.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY Name : acpid Version : 2.0.19 Release : 8.el7 Architecture: x86_64 Install Date: (not installed) Group : System Environment/Daemons Size : 148583 License : GPLv2+ Signature : RSA/SHA256, 2017年05月09日 星期二 21时02分15秒, Key ID 199e2f91fd431d51 Source RPM : acpid-2.0.19-8.el7.src.rpm Build Date : 2017年05月09日 星期二 20时56分03秒 Build Host : x86-019.build.eng.bos.redhat.com Relocations : (not relocatable) Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> Vendor : Red Hat, Inc. URL : http://sourceforge.net/projects/acpid2/ Summary : ACPI Event Daemon Description : acpid is a daemon that dispatches ACPI events to user-space programs.
- 命令:rpm -qpl [未安装包的路径]
- 作用: 查询未安装的软件包会产生哪些文件
[root@localhost ~]# rpm -qpl /mnt/Packages/acpid-2.0.19-8.el7.x86_64.rpm 警告:/mnt/Packages/acpid-2.0.19-8.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY /etc/acpi /etc/acpi/actions /etc/acpi/actions/power.sh /etc/acpi/events /etc/acpi/events/powerconf /etc/acpi/events/videoconf /etc/sysconfig/acpid /usr/bin/acpi_listen /usr/lib/systemd/system/acpid.service /usr/sbin/acpid /usr/sbin/kacpimon /usr/share/doc/acpid-2.0.19 /usr/share/doc/acpid-2.0.19/COPYING /usr/share/doc/acpid-2.0.19/Changelog /usr/share/doc/acpid-2.0.19/README /usr/share/doc/acpid-2.0.19/TESTPLAN /usr/share/doc/acpid-2.0.19/TODO /usr/share/man/man8/acpi_listen.8.gz /usr/share/man/man8/acpid.8.gz /usr/share/man/man8/kacpimon.8.gz
4.4 wget下载安装包程序
语法:wget [link]
- 命令:wget [包下载链接]
- 作用:下载安装包程序
[root@localhost ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm --2019-09-26 16:22:49-- http://mirror.centos.org/centos/7/os/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm 正在解析主机 mirror.centos.org (mirror.centos.org)... 202.76.233.2, 2401:78c0::e00e 正在连接 mirror.centos.org (mirror.centos.org)|202.76.233.2|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 302 Found 位置:http://64.123.28.149/files/70200000011BF713/ap.stykers.moe/centos/7.6.1810/updates/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm [跟随至新的 URL] --2019-09-26 16:22:49-- http://64.123.28.149/files/70200000011BF713/ap.stykers.moe/centos/7.6.1810/updates/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm 正在连接 64.123.28.149:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:560272 (547K) [application/octet-stream] 正在保存至: “wget-1.14-18.el7_6.1.x86_64.rpm” 100%[=========================================================>] 560,272 1.13MB/s 用时 0.5s 2019-09-26 16:22:50 (1.13 MB/s) - 已保存 “wget-1.14-18.el7_6.1.x86_64.rpm” [560272/560272])
4.4 rpm包升级
-
命令:rpm -Uvh [软件升级包路径]
- 作用:如果装有老版本的,则升级;否则,则安装
[root@localhost ~]# rpm -qa | grep wget wget-1.14-15.el7.x86_64 [root@localhost ~]# ls 123 a outfile wget-1.14-18.el7_6.1.x86_64.rpm [root@localhost ~]# rpm -Uvh wget-1.14-18.el7_6.1.x86_64.rpm 警告:wget-1.14-18.el7_6.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:wget-1.14-18.el7_6.1 ################################# [ 50%] 正在清理/删除... 2:wget-1.14-15.el7 ################################# [100%]
-
命令:rpm -Fvh [软件升级包路径]
- 作用:如果装有老版本的,则升级;否则,退出
[root@localhost ~]# rpm -e wget [root@localhost ~]# rpm -q wget 未安装软件包 wget [root@localhost ~]# rpm -Fvh wget-1.14-18.el7_6.1.x86_64.rpm 警告:wget-1.14-18.el7_6.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY [root@localhost ~]# rpm -q wget 未安装软件包 wget [root@localhost ~]# rpm -ivh /mnt/Packages/wget-1.14-15.el7.x86_64.rpm 警告:/mnt/Packages/wget-1.14-15.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:wget-1.14-15.el7 ################################# [100%] [root@localhost ~]# rpm -Fvh wget-1.14-18.el7_6.1.x86_64.rpm 警告:wget-1.14-18.el7_6.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:wget-1.14-18.el7_6.1 ################################# [ 50%] 正在清理/删除... 2:wget-1.14-15.el7 ################################# [100%]
4.5 rpm包校验
如果执行以下命令无内容输出说明此包未被修改过
[root@localhost ~]# rpm -V vsftpd
S.5…T. c /etc/pam.d/vsftpd
…T. c /etc/vsftpd/ftpusers
S.5…T. c /etc/vsftpd/vsftpd.conf
.M… /var/ftp/pub
改变属性注释:
S //文件的容量大小是否被改变
M //文件的类型或者文件的属性是否被修改
5 //MD5这一种指纹加密的内容已经不同
D //装置的主/次代码已经改变
L //路径已经被改变
U //文件的所属主已被修改
G //文件的所属组已被修改
T //文件的创建时间已被改变
4.6 rpm重建数据库
数据库信息在/var/lib/rpm目录中
-
命令:rpm --rebuilddb
- 作用:重建数据库,一定会重新建立
[root@localhost ~]# ls /var/lib/rpm Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5 Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername [root@localhost ~]# rpm --rebuilddb [root@localhost ~]# ls /var/lib/rpm Basenames Dirnames Installtid Obsoletename Providename Sha1header Triggername Conflictname Group Name Packages Requirename Sigmd5
-
命令:rpm --initdb
- 作用:初始化数据库,没有才建立,有就不用建立
[root@localhost ~]# ls /var/lib/rpm Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5 Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername
5.常见rpm应用
- 如何查询 util-linux 软件包安装了哪些文件?
rpm -ql util-linux
- 如何查询 mkdir 命令是由哪个 RPM 软件包安装的?
rpm -qf /usr/bin/mkdir
- 升级软件包时,-F、-U选项有何区别?
区别:
1. -F 升级时安装有老版本,则升级;没有安装老版本,则退出安装,不升级
2. -U 升级时安装有老版本,则升级;没有安装老版本,依然继续安装新版本 - 如何检查vsftpd软件包是否安装?
1.rpm -ivh --test vsftpd
2.rpm -q vsftpd
3.rpm -qa | grep vsftpd - 如何检查vsftpd软件包所有的文件存放目录?
rpm -ql vsftpd
- 如何检查vsftpd软件包的配置文件?
rpm -qc vsftpd
- 如何使用rpm安装vsftpd服务?
rpm -ivh vsftpd
- 如何使用rpm强制安装依赖包?
rpm -ivh --nodeps xxx
- 如何使用rpm卸载vsftpd软件包?
rpm -e vsftpd