YUM和APT指南
1. 概述
包管理器是每个 Linux 系统的一个很棒的特性。它们使我们能够轻松地处理软件包的安装、删除和检查。
在本教程中,我们将学习如何使用其中最著名的两个:YUM 和 APT。
2. 包管理器概述
在开始之前,让我们概述一下有效的包管理器是什么。
在 Windows 中,我们通常通过下载和运行可执行安装程序来安装软件。
在 Linux 中,我们仍然可以做同样的事情,手动下载和安装我们的发行版所期望的格式的包。然而,主流方法包括依靠包管理器来浏览可用的软件(连同已安装的软件),以及安装、更新和卸载它。
包管理器提供的软件版本可能并不总是最新的,但整个过程更精简、更快、更安全。
现在让我们看看 YUM 和 APT 是什么,以及它们是如何工作的。
3. YUM – Yellowdog 更新程序,已修改
YUM 是一个用于基于 RPM 的发行版的包管理实用程序。 RPM(Red Hat Package Manager)是 RHEL 和 CentOS 等系统所基于的包管理器。
YUM 在底层使用 RPM,通过高级抽象隐藏了它的复杂性。
Fedora 22 和 RHEL 8 引入了对 YUM 的重写,称为 DNF,它很可能成为基于 RPM 系统的新标准。
4. APT——高级打包工具
另一方面,APT 是用于在基于 DPKG 的发行版中管理软件的不同工具的集合。
DPKG 意为 Debian PacKaGe,是 Debian 和 Ubuntu 等系统核心的包管理器。
APT 封装了对 DPKG 的低级调用,为用户提供用户友好的界面。
值得注意的是,APT 是在几种不同上下文中使用的首字母缩写词。它是打包系统 (APT)、分发它的 Linux 包 (apt),也是构成库的工具之一(apt、apt-get、apt-cache等)。
4.1. apt
apt 是 APT 包管理器的最新工具。
这通常是混淆的来源,因为用户不确定是使用apt还是apt-get进行操作,以及它们的区别是什么。
让我们在这里清除它们:apt是手动处理基于 Debian 的系统时的正确工具。我们应该总是更喜欢它而不是apt-get和apt-cache,因为它统一并简化了其他两个的主要操作。
它还提供了一个有用的进度条以及其他一些小好处,如彩色输出和附加信息。
4.2. apt-get
另一方面,如果我们要编写管理操作脚本, apt-get 是正确的选择。它提供了更稳定的界面、更多的功能,并且还允许进行更深入的定制。
在 Ubuntu 16.04 之前,它是各种操作的默认工具。在 Ubuntu 16.04 中,apt成为人类使用的首选选项。
4.3. apt-cache
最后, apt-cache 是一个补充apt-get的工具,它还提供有关已安装软件和可用软件的信息。
4.4. Snappy
Ubuntu 背后的公司 Canonical 最近发布了一个新的与发行版无关的打包系统,称为 Snappy。 snap包是自包含的,可以安装在 Ubuntu 以及 Fedora、CentOS、Arch、Gentoo 等中。
虽然最新的 Ubuntu 版本主要通过 Snappy 分发一些软件包,但 APT 仍然是管理软件包的官方方式,至少目前是这样。
5. 查询
现在让我们看看如何使用这些工具来查询我们的包管理器。
5.1.列出软件包
我们可以要求 YUM 使用以下命令列出我们的包:
# List installed and available packages from repositories:
yum list all
# List only installed packages:
yum list installed
# List only available packages:
yum list available
# List installed and available kernel packages:
yum list kernel
相反,使用 APT,我们可以列出我们的包:
# List installed and available packages from repositories:
apt list
# List only installed packages:
apt list --installed
如果我们只想查看可用的包,我们可以求助于一些grep ,因为没有开箱即用的 APT 命令来执行此操作:
# List only available packages:
apt list | grep -v installed
对于脚本,我们还可以考虑使用apt-cache提供的最接近apt list的解决方案:
apt-cache search .
但请注意,结果的出现次数和返回顺序都会有所不同。
5.2. 搜索包
使用 YUM,我们可以查找名称或描述中包含特定术语的包:
yum search SOMETHING
这一次,在 APT 中是相同的:
apt search SOMETHING
apt-cache search SOMETHING
5.3. 获取包裹详情
一旦我们知道我们对哪个包感兴趣,我们可能想要检查它的详细信息。
在 YUM 中:
yum info MY_PACKAGE
同样,在 APT 中:
apt show MY_PACKAGE
apt-cache show MY_PACKAGE
6. 包管理
现在我们已经了解了如何搜索和检查软件包,让我们看看如何管理它们:
6.1. 更新包信息
首先,我们需要更新我们的包索引。
这些命令不会更新任何已安装的软件包,它们只是下载有关可以安装或升级的软件包的最新信息。
在 YUM 中:
yum check-update
相反,在 APT 中,它很简单:
apt update
apt-get update
我们应该始终在任何其他操作之前运行apt update 。
6.2. 安装包
在 YUM 中安装软件包:
yum install MY_PACKAGE
同样,在 Debian 系统中它根本没有区别:
apt install MY_PACKAGE
apt-get install MY_PACKAGE
6.3. 升级包
升级包可以通过不同的方式完成。
在 YUM 中,命令yum update在内部运行yum check-update,这意味着我们不需要运行后者,除非我们想避免在更新包索引后安装任何东西。我们可以按如下方式升级全部或部分软件包:
# Update the package index and every package:
yum update
# Update only the package MY_PACKAGE:
yum update MY_PACKAGE
# Apply security-related package updates:
yum update --security
或者:
# Update every package:
apt upgrade
apt-get upgrade
# Update every package along with their dependencies:
apt full-upgrade
apt-get dist-upgrade
# Update only the package MY_PACKAGE:
apt-get install --only-upgrade MY_PACKAGE
# Apply security-related package updates:
unattended-upgrade --dry-run -d
重要的是要知道升级软件包及其依赖项可能意味着卸载现有软件并安装新软件,如果升级过程需要这样做的话。
另一方面,标准升级命令永远不会卸载任何东西。但是,与apt-get upgrade(也不安装任何东西)不同,apt upgrade可能会在需要时安装新软件。
6.4. 移除包
有时我们需要删除一个软件包。让我们探索不同的方法,从浅和软到深和最终。
为了摆脱已安装的包及其在 YUM 中的依赖关系,我们可以执行以下两个等效命令之一:
yum erase MY_PACKAGE
yum remove MY_PACKAGE
在 RHEL7 及更高版本中,还可以使用autoremove删除其他不需要的软件包:
yum autoremove MY_PACKAGE
Debian 删除软件包的方法是:
apt remove MY_PACKAGE
apt-get remove MY_PACKAGE
但是,如果我们也想删除包的配置,彻底清除系统,那么我们可以利用purge:
apt purge MY_PACKAGE
apt-get purge MY_PACKAGE
6.5.清理
有时,我们的系统会被孤立的包污染,它们不再需要但仍然占用空间。
我们可以通过autoremove删除 YUM 中这些不需要的包,无需任何包名:
yum autoremove
这也适用于 Debian 发行版:
apt autoremove
apt-get autoremove
7. 仓库管理
两种打包系统都从一组官方存储库开始,用于查询获取包。
然而,社区正在蓬勃发展,而且我们需要的软件包经常在官方存储库中丢失,或者存在但版本太旧而无法满足我们的需求。
在这些情况下,我们可能希望将非官方存储库添加到包管理器列表中(始终注意它可能代表安全问题的事实)。
7.1.添加存储库
在 YUM 中添加存储库是一项手动操作,包括在文件夹*/etc/yum.repos.d下创建一个扩展名为.repo*的文件。
该文件必须包含有关我们要连接到的自定义存储库的所有信息。
让我们尝试添加 AdoptOpenJDK 存储库:
# /etc/yum.repos.d/adoptopenjdk.repo
[AdoptOpenJDK]
name=AdoptOpenJDK
baseurl=http://adoptopenjdk.jfrog.io/adoptopenjdk/rpm/centos/7/$(uname -m)
enabled=1
gpgcheck=1
gpgkey=https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public
然而,在 APT 中,情况却大不相同。必须使用apt-key add下载存储库的 GPG 密钥并将其添加到 APT 密钥环:
wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
然后,此时,可以通过add-apt-repository –yes后跟 URL 添加存储库:
add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
与 YUM 不同,所有存储库都保存在单个文件*/etc/apt/sources.list*中。
7.2. 删除存储库
在 YUM 中删除存储库的执行方式不同,具体取决于它的安装方式。 我们可以运行以下命令并分析其输出:
rpm -qa | grep -i CUSTOM_REPOSITORY
如果找到存储库的 RPM 包,则表示它是通过 RPM 安装的,我们可以使用*-e*将其删除:
rpm -e CUSTOM_REPOSITORY_RPM_PACKAGE
否则,我们可以简单地删除存储库文件:
rm /etc/yum.repos.d/CUSTOM_REPOSITORY.repo
我们也可以在不删除它的情况下禁用它,只需在存储库文件中将enabled=1设置为enabled=0即可。
另一方面,在 APT 中,我们可以简单地执行以下操作:
add-apt-repository --remove ppa:CUSTOM_REPOSITORY/ppa
或者,我们可以在/etc/apt/sources.list文件中注释掉与存储库相关的行。
8. 其他操作
这两个做了很多其他的操作。让我们介绍其中的一些。
8.1. 重新安装软件包
如果软件包损坏,例如某些文件丢失,我们可以使用以下方法重新安装它:
yum reinstall MY_PACKAGE
apt reinstall MY_PACKAGE
apt-get reinstall MY_PACKAGE
8.2. 安装特定版本的包
相反,有时我们可能需要安装特定版本的包。
我们可以通过以下方式检查软件包的可用版本:
yum list MY_PACKAGE --showduplicates
apt-cache showpkg MY_PACKAGE
然后我们可以针对想要的版本进行新安装:
yum install MY_PACKAGE-WANTED_VERSION
apt install MY_PACKAGE=WANTED_VERSION
apt-get install MY_PACKAGE=WANTED_VERSION
YUM 还允许我们从现有版本降级到以前安装的版本之一:
yum downgrade MY_PACKAGE-WANTED_VERSION
8.3. 安装一组软件包
一些包为了一个共同的目的被组合在一个组中,并且可以一次安装。
让我们以另一个现实世界的例子为目标,并考虑在 Linux 服务器中安装图形环境。
安装 X Window System和GNOME组将为我们省去手动安装数百个软件包的麻烦:
yum groupinstall 'X Window System' 'GNOME'
然而,Debian 包管理器将它们作为简单的包来处理,所以经典的apt install命令就足够了:
apt-get install xorg