Home Linux 学习 第十章 获取和管理软件
Post
Cancel

Linux 学习 第十章 获取和管理软件

第十章 获取和管理软件

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 等) 所使用。通过 aptdpkg 命令以安装、管理、更新和删除软件

  • 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

  1. 检查 /etc/yum.conf

文件中

gpgcheck 表明是否对软件包验证

installonly_limit=3 表明允许在系统中保存同一包的最多三个版本 (请不要将其设置为小于 2,以确保始终拥有至少两个内核包)

clean_requirements_on_remove=True 表示在卸载某软件将一起卸载依赖项 (如果该依赖不被其他软件使用)

best=True 表示升级软件时优先尝试最新版本

cachedir 表示缓存位置

keepcache 是否保留缓存

debuglevel 写入日志的详细级别,越高越详细

metadata_expire 元数据超时时间

详细了解,使用 man yum.conf 命令

  1. 检查 /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 命令时将检查每一个库,将软件包相关元数据下载到本地系统,所有不要启用过多的软件库

  1. 从 YUM 库中下载 RPM 软件包和元数据

在 rpm 目录有一个 repodata 目录,为所有启用库的 repodata 目录汇总

元数据信息存储在 /var/cache/yum ,在达到超时时间后将获取最新元数据,yum 默认为 6h,dnf 默认为 48h

  1. 将 RPM 软件包安装到 Linux 文件系统

相关软件下载到缓存中后,yum 命令通过运行 rpm 命令安装。如果软件包有脚本,先执行脚本。然后将软件包内容 (命令、配置文件、文档等) 复制到 RPM 元数据指定位置。最后运行安装后执行的脚本

  1. 将 YUM 库的元数据存储到本地 RPM 数据库

包含在每个 RPM 软件库中的元数据最终被复制到本地的 RPM 数据库中,而 RPM 数据库存储在 /var/lib/rpm 目录的多个文件中

10.4.3 借助第三方软件库使用 yum

为了稳定性,建议仅使用官方自带,但自己使用以舒适度优先,可以启用 RPM Fusion 第三方库,参考 https://rpmfusion.org/

10.4.4 使用 yum 命令管理软件

  1. 搜索软件包

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


  1. 安装和删除软件包
  • install 子命令用于安装一个或多个软件包,以及相应依赖包

yum install firefoxyum -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 的安装事务

  1. 更新软件包

yum check-update 检查更新,yum update 更新全部软件,yum update firefox 更新 Firefox

  1. 更新软件包组

为更方便地管理一套完整的软件包,yum 支持软件包组

yum grouplist | less 查看软件包组

yum groupinfo LXDE 查看 LXDE 桌面相关软件包组

yum groupinstall LXDE 安装 LXDE 软件包组

yum groupremove LXDE 删除整个 LXDE 组

  1. 维护 RPM 软件包数据库和缓存

yum clean packages 清除软件安装包

yum clean metadata 清除元数据

yum clean all

虽然可能不大,但 RPM 数据库有受损的可能

yum check 检查缓存和数据库情况

rpm --rebuilddb 重建数据库

注:一般使用本地 RPM 数据库的最适合命令为 rpm

  1. 从 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) 、容器映像

可以自动化批量安装软件

This post is licensed under CC BY 4.0 by the author.

Linux 学习 第八、九章 学习系统管理与安装 Linux

Linux 学习 第十一章 获取用户账户