第十章 获取和管理软件
10.1 在桌面管理软件
通过软件与 GUI 管理
10.2 超越 Software 窗口
Software 中能检索到的软件有限
10.3 了解 Linux RPM 和 DEB 软件包
软件包称为 tarball (压缩包),包含可执行文件 (命令)、文档、配置文件以及库
- DEB (.deb) 包
Debian GNU/Linux 项目创建了 .deb 包,这种包被 Debian 以及其他基于 Debian 的发行版本 (Ubuntu、Linux Mint、KNOPPIX 等) 所使用。通过 apt
或 dpkg
命令以安装、管理、更新和删除软件
- RPM (.rpm) 包
最初为 Red Hat Package Manager,后被命名为 RPM Package Manager。RPM 是 SUSE、Red Hat 发行版本 (RHEL、Fedora) 以及其他发行版本 (需基于 Red Hat 发行版本,如 CentOS、Oracle Linux 等) 的首选软件包格式。通过原先的 rpm
或增强的 yum
以及现在的 dnf
命令管理软件
yum
终将被 dnf
命令所取代
10.3.1 理解 DEB 包
Debian 软件包以存档文件格式保存了许多文件以及与一些软件相关的元数据。这些文件可以是可执行文件 (命令) 、配置文件以及其他软件项目。而元数据包括依赖项、许可、包大小、描述以及其他信息
通过 apt*
命令以获取 (apt-get
) 、搜索 (apt-cache search
) 、查看详情 (apt-cache show
) 、安装 (apt-get install
) 、升级 (apt-get upgrade
) 、列出已安装软件 (apt-cache pkgnames
) 等
通过 aptitude
命令以在 shell 中使用面向屏幕的菜单从而安装软件
10.3.2 理解 RPM 包
RPM 包是不同文件的合并,而每个文件提供了一项功能。RPM 内部可以是构成软件功能的命令、配置文件以及文档或者元数据 (关于软件包的内容、软件包的来源、运行所需的条件以及其他信息)
使用 rpm -q -i pakageName
命令查看某软件信息
10.4 使用 yum 管理 RPM 软件包
10.4.1 从 yum 到 dnf 的转换
DNF 自称为 Dandified yum https://github.com/rpm-softwes-management/dnf/
虽然 dnf 与 yum 保持了基本的命令行兼容性,但主要区别之一是它遵循严格的 API,并鼓励开发 dnf 的扩展和插件
以下 yum 命令均可作为 dnf 命令使用
有关 dnf 更多信息,可参考 https://dnf.readthedocs.io/
10.4.2 了解 yum 的工作原理
基本语法 yum [options] command
例如安装 Firefox:yum install firefox
- 检查 /etc/yum.conf
文件中
gpgcheck
表明是否对软件包验证
installonly_limit=3
表明允许在系统中保存同一包的最多三个版本 (请不要将其设置为小于 2,以确保始终拥有至少两个内核包)
clean_requirements_on_remove=True
表示在卸载某软件将一起卸载依赖项 (如果该依赖不被其他软件使用)
best=True
表示升级软件时优先尝试最新版本
cachedir
表示缓存位置
keepcache
是否保留缓存
debuglevel
写入日志的详细级别,越高越详细
metadata_expire
元数据超时时间
详细了解,使用 man yum.conf
命令
- 检查 /etc/yum.repos.d/*.repo 文件
若想启用某软件库,将 .repo 文件放到此目录。文件内容大致如下
1
2
3
4
5
6
7
[myrepo] # 开头,`[]` 内为库名
name=My repo # 详细描述
baseurl=https://rpmrepo.yexca.xyz/ # 虚构网址,不存在
# 包含 RPM 文件的 url 可以是 http://, ftp://,file://
enabled=1 # 是否启用该库,若没有默认启用
gpgcheck=1 # 是否检查软件包签名
gpgkey=file:///etc/MYKEY # 用于检查软件包的密钥位置
可以启用任意数量的软件库,但每次允许 yum 命令时将检查每一个库,将软件包相关元数据下载到本地系统,所有不要启用过多的软件库
- 从 YUM 库中下载 RPM 软件包和元数据
在 rpm 目录有一个 repodata 目录,为所有启用库的 repodata 目录汇总
元数据信息存储在 /var/cache/yum ,在达到超时时间后将获取最新元数据,yum 默认为 6h,dnf 默认为 48h
- 将 RPM 软件包安装到 Linux 文件系统
相关软件下载到缓存中后,yum 命令通过运行 rpm 命令安装。如果软件包有脚本,先执行脚本。然后将软件包内容 (命令、配置文件、文档等) 复制到 RPM 元数据指定位置。最后运行安装后执行的脚本
- 将 YUM 库的元数据存储到本地 RPM 数据库
包含在每个 RPM 软件库中的元数据最终被复制到本地的 RPM 数据库中,而 RPM 数据库存储在 /var/lib/rpm 目录的多个文件中
10.4.3 借助第三方软件库使用 yum
为了稳定性,建议仅使用官方自带,但自己使用以舒适度优先,可以启用 RPM Fusion 第三方库,参考 https://rpmfusion.org/
10.4.4 使用 yum 命令管理软件
- 搜索软件包
yum search keyword
- 获取某软件详细信息
yum info firefox
- 若知道命令、配置文件或库名,但不知道软件包名称
yum provides keyword
- 使用
list
子命令以不同方式列出软件包名称
yum list firefox
yum list available
yum list installed
yum list all
- 查看某软件包的依赖、提供者等
yum deplist firefox | less
- 安装和删除软件包
install
子命令用于安装一个或多个软件包,以及相应依赖包
yum install firefox
或 yum -y install firefox
以不需要同意之间安装
reinstall
子命令可以重新安装某软件
yum reinstall firefox
remove
子命令删除软件及其他包不需要的依赖项
yum remove firefox
或者通过历史记录撤销
使用
yum history
查看安装历史记录,yum history info 12
查看 id 为 12 的安装历史记录详情,yum history undo 12
撤销 id 为 12 的安装事务
- 更新软件包
yum check-update
检查更新,yum update
更新全部软件,yum update firefox
更新 Firefox
- 更新软件包组
为更方便地管理一套完整的软件包,yum 支持软件包组
yum grouplist | less
查看软件包组
yum groupinfo LXDE
查看 LXDE 桌面相关软件包组
yum groupinstall LXDE
安装 LXDE 软件包组
yum groupremove LXDE
删除整个 LXDE 组
- 维护 RPM 软件包数据库和缓存
yum clean packages
清除软件安装包
yum clean metadata
清除元数据
yum clean all
虽然可能不大,但 RPM 数据库有受损的可能
yum check
检查缓存和数据库情况
rpm --rebuilddb
重建数据库
注:一般使用本地 RPM 数据库的最适合命令为 rpm
- 从 YUM 库下载 RPM
只是下载,但不安装,下载到当前目录
yumdownloader firefox
dnf download firefox
10.5 使用 rpm 命令安装、查询和验证软件
大部分情况下使用 rpm
命令对本地的安装包文件使用
10.5.1 使用 rpm 安装和删除软件包
- 安装
rpm -i pakageName
需要使用 rpm 包的完整名称,即包括基名、版本、内核等
- 升级
rpm -Uhv pakageName
-h
为打印 # 标识 (安装进度) ,-v
为更详细的输出
- 更新
若当前目录有数以千计的 rpm 包,仅想对以此计算机已经安装过的升级
rpm -Fhv *.rpm
- 重新安装
rpm -Uhv --replacepkgs pakageName
- 降级
rpm -Uhv --oldpackage pakageName
- 删除
删除时仅需要基名,如删除 Firefox
rpm -e firefox
但并不会删除该软件的依赖
10.5.2 查询 rpm 信息
安装玩软件后,使用 -q
选项以查询关于该软件包的信息,如相关描述 -qi
、文件列表 -ql
、配置文件 -qc
查询使用基名即可,如:rpm -qi firefox
还可以查询依赖 -q --requires
、软件包所提供的软件版本 -q --provides
、删除之前和之后运行的脚本 -q --scripts
、更改日记 -q --changelog
通过 --queryformat
查询信息的不同标记,--querytags
以查看所有可用标记
以上为本地 RPM 数据库查询,若添加
-p
选项可查询当前目录的软件包,此时需要输入全程,如rpm -qip zsh-5.7.1-1.fc30.x86_64.rpm
10.5.3 验证 rpm 软件包
注:该选项查阅其他资料并未发现,但本人 Linux 已删除,无法验证 (之前用的时候看到这没复现) ,但既然看到了,还是记录一下比较好
通过使用 -V
选项对已安装的软件包检查,了解自首次安装以来是否被更改。若二进制文件 (/bin
目录下) 被更改,可能表明系统被破解。配置文件更改很常见
查询已安装的 Firefox 的情况 rpm -V firefox
如果输出以下字符,代表相应地方被修改;没有输出表示每个文件为原始状态
字符 | 描述 |
---|---|
S | 文件大小不一致 |
M | 模式不一致 (包括许可和文件类型) |
5 | MD5 校验不一致 |
D | 设备主要 / 次要编号不匹配 |
L | readLink (2) 路径不匹配 |
U | 用户所有权不一致 |
G | 组所有权不一致 |
T | mTime 不一致 |
P | caPabilities 不一致 |
这些指示符来自 rpm 手册的 Verify 部分
可以使用 --replacekgs
以恢复至原始状态
如果对安全性要求过高,可以备份 RPM 数据库,即 /var/lib/rpm 目录,然后存入只读介质,毕竟如果数据库也被破解,那校验将毫无意义
10.6 在企业中管理软件
如 Kickstart 文件、PXE 启动、Satellite 服务器 (Spacewalk) 、容器映像
可以自动化批量安装软件