有很多方法可以将应用程序安装到 Linux 系统上。有些是新的,例如 Flatpak 和容器。另一些,例如 DEB 和 RPM,是经受时间考验的经典格式。
没有任何操作系统拥有通用的安装程序。如今,所有主要的操作系统都混合使用应用商店(第一方和第三方)、拖放安装和安装向导,因为有无数的开发者交付软件。不同的开发者对其交付的代码有不同的要求,这决定了他们各自选择的安装方法。
Linux 开创了软件包管理器的概念,这是一个用于安装、管理和卸载应用程序的命令。两个常见的软件包管理器命令是 apt
和 dnf
。apt
命令管理 DEB 软件包,而 dnf
管理 RPM 软件包。理论上,两者并非严格互斥,但在实践中,Linux 发行版通常使用其中之一。理论上可以在一个系统上同时运行两者,但软件包安装会重叠,版本控制会很困难,并且这些命令会彼此冗余。但是,如果您在混合 Linux 环境中工作,与运行一个发行版的工作站和运行另一个发行版的服务器交互,您可能需要了解两者。
搜索应用程序
在可以使用软件包管理器安装应用程序之前,您需要知道软件包的名称。通常,应用程序名称和软件包名称是相同的。在 dnf
和 apt
上验证要安装的软件包名称的过程完全相同
$ sudo dnf search zsh
====== Name Exactly Matched: zsh ======
zsh.x86_64 : Powerful interactive shell
[...]
使用 apt
$ sudo apt search zsh
Sorting... Done
Full Text Search... Done
csh/stable 20110502-4+deb10u1 amd64
Shell with C-like syntax
ddgr/stable 1.6-1 all
DuckDuckGo from the terminal
direnv/stable 2.18.2-2 amd64
Utility to set directory specific environment variables
draai/stable 20180521-1 all
Command-line music player for MPD
[...]
为了在搜索早期从 apt
获得相关结果,您可以使用 正则表达式
apt search ^zsh
Sorting... Done
Full Text Search... Done
zsh/stable 5.7.1-1 amd64
shell with lots of features
[...]
查找应用程序的软件包
有些命令与其他命令捆绑在一起,都在一个软件包中。当发生这种情况时,您可以使用软件包管理器来了解哪个软件包提供了您需要的内容。dnf
和 apt
命令在搜索此类元数据的方式上有所不同。
在 dnf
上
$ sudo dnf provides pgrep
procps-ng-3.3.15-6.el8.x86_64 : System and process monitoring utilities
Repo : baseos
Matched from:
Filename : /usr/bin/pgrep
apt
命令使用子命令 apt-file
。要使用 apt-file
,您必须先安装它,然后提示它更新其缓存
$ sudo apt install apt-file
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl
The following NEW packages will be installed:
apt-file libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl
0 upgraded, 5 newly installed, 0 to remove and 14 not upgraded.
Need to get 297 kB of archives.
After this operation, 825 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
$ sudo apt-file update
[...]
您可以使用 apt-file
搜索命令。您可以通过仅搜索命令来撒一张非常大的网,但是如果您碰巧知道命令的预期路径,它会更准确
$ sudo apt-file search /usr/bin/pgrep
pgreplay: /usr/bin/pgreplay
procps: /usr/bin/pgrep
安装应用程序
使用 apt
和 dnf
安装应用程序基本上是相同的
$ sudo apt install zsh
使用 dnf
,您可以使用相同的选项安装单个软件包
$ sudo dnf install zsh
许多基于 RPM 的发行版都具有安装组,这些组将有时表面上相关的应用程序收集到一个易于安装的目标中。例如,Fedora 中的 Design Suite 组包含流行的创意应用程序。许多想要一个创意应用程序的艺术家可能也想要类似的应用程序,安装整个组是快速轻松地开始构建数字工作室的明智方法。您可以使用 group list
查看可用的组(使用 -v
查看不带空格的组名)
$ sudo dnf group list -v
[...]
Available Groups:
Container Management (container-management)
RPM Development Tools (rpm-development-tools)
Design Suite (design-suite)
Development Tools (development)
[...]
使用 group install
子命令安装 RPM 组
$ sudo dnf group install design-suite
您可以使用 @
符号来减少输入
$ sudo dnf install @design-suite
升级应用程序
使用软件包管理器的一个优势是它可以知道它曾经安装的所有应用程序。这意味着您不必去寻找应用程序的更新版本。相反,您可以告诉软件包管理器扫描更新。
dnf
和 apt
使用的子命令略有不同。由于 apt
保留了需要定期更新的信息缓存,因此它使用 upgrade
子命令进行应用程序更新
$ sudo apt upgrade
相比之下,dnf
每次使用命令时都会更新元数据,因此 update
和 upgrade
子命令是可互换的
$ sudo dnf upgrade
这与以下命令相同
$ sudo dnf update
卸载应用程序
如果您曾经尝试在任何平台上手动卸载应用程序,那么您就会知道,在卸载应用程序后,不可避免地会有剩余文件,例如首选项文件或资源或图标,散落在硬盘驱动器的各个角落。使用软件包管理器的另一个优势是,您的软件包管理器知道软件包安装的每个文件
$ sudo dnf remove zsh
remove
子命令也用于 apt
$ sudo apt remove zsh
使用 apt
卸载软件包不会删除修改后的用户配置文件,以防您不小心卸载了软件包。如果您希望 apt
删除应用程序及其配置文件,请对您之前卸载的应用程序使用 purge
$ sudo apt purge zsh
apt
和 dnf
(即使使用 purge
)都不会删除您主目录中的数据或配置文件。要从您的主目录中删除数据,您必须手动执行(通常可以在 ~/.config
和 ~/.local
中找到)。
学习软件包管理
无论您选择的 Linux 发行版偏爱 apt
还是 dnf
,这些命令的用途大致相同。它们帮助您安装、更新和卸载软件包。这两个是最常见的软件包管理器,它们在很大程度上相互镜像了最重要的语法元素,因此在它们之间切换非常容易。
每个都有一些高级功能,例如存储库管理,这些功能差异很大,但这些功能往往不如经典的 search
和 install
序列那样频繁运行。
无论您更频繁地使用哪个软件包管理器,您都可以下载我们的 apt 速查表 和 dnf 速查表,以便在最需要时手边有最重要的语法。
9 条评论