每个计算机化的设备都使用某种形式的软件来执行其预期的任务。 在软件的早期,产品经过严格的测试以检查错误和其他缺陷。 在过去十年左右的时间里,软件通过互联网发布,目的是通过应用新版本的软件来修复任何错误。 在某些情况下,每个单独的应用程序都有自己的更新程序。 在其他情况下,则由用户自行决定如何获取和升级软件。
Linux 早期就采用了维护一个中心位置的做法,用户可以在其中查找和安装软件。 在本文中,我将讨论 Linux 上软件安装的历史,以及如何针对永无止境的 CVE 洪流保持现代操作系统的最新状态。
在软件包管理器出现之前,Linux 上的软件是如何安装的?
从历史上看,软件是通过 FTP 或邮件列表提供的(最终,这种分发将扩展到包括基本网站)。 只有几个小文件包含创建二进制文件的指令(通常在 tar 文件中)。 你可以解压这些文件,阅读 readme,只要你有 GCC 或其他形式的 C 编译器,你通常会运行一个 ./configure
脚本,其中包含一些属性列表, 例如库文件的路径,创建新二进制文件的位置等。 此外,configure
过程将检查你的系统的应用程序依赖项。 如果缺少任何主要要求,configure 脚本将退出,并且在满足所有依赖项之前,你无法继续安装。 如果 configure 脚本成功完成,则会创建一个 Makefile
。
一旦存在 Makefile
,你就可以继续运行 make
命令(此命令由你使用的任何编译器提供)。 make
命令有许多称为*make 标志*的选项,这些选项有助于优化系统的生成的二进制文件。 在计算的早期,这非常重要,因为硬件难以跟上现代软件的需求。 如今,编译选项可以更加通用,因为大多数硬件都足以满足现代软件的需求。
最后,在 make
过程完成后,你需要运行 make install
(或 sudo make install
)才能实际安装软件。 你可以想象,为每个软件都这样做既耗时又乏味,更不用说更新软件是一个复杂且可能非常复杂的过程。
什么是软件包?
发明软件包是为了解决这种复杂性。软件包将多个数据文件收集到一个存档文件中,以便于移植和存储,或者只是压缩文件以减少存储空间。 软件包中包含的二进制文件是根据开发人员选择的合理默认值进行预编译的。 软件包还包含元数据,例如软件的名称,其用途的描述,版本号以及软件正确运行所需的依赖项列表。
几种 Linux 风味创建了自己的软件包格式。 一些最常用的软件包格式包括
- .deb:此软件包格式由 Debian、Ubuntu、Linux Mint 和其他几个衍生版本使用。 它是第一个被创建的软件包类型。
- .rpm:此软件包格式最初称为 Red Hat Package Manager。 它由 Red Hat、Fedora、SUSE 和其他几个较小的发行版使用。
- .tar.xz:虽然它只是一个压缩的 tarball,但这是 Arch Linux 使用的格式。
虽然软件包本身不直接管理依赖项,但它们代表了 Linux 软件管理的一大进步。
什么是软件仓库?
几年前,在智能手机普及之前,如果许多用户没有参与 Linux 生态系统,他们很难理解软件仓库的概念。 直到今天,大多数 Windows 用户似乎仍然习惯于打开 Web 浏览器来搜索和安装新软件。 但是,那些拥有智能手机的人已经习惯了软件“商店”的概念。 智能手机用户获取软件的方式与软件包管理器的工作方式并没有什么不同。 虽然已经尝试过为软件仓库制作有吸引力的 UI,但绝大多数 Linux 用户仍然使用命令行来安装软件包。 软件仓库是系统配置为使用的任何仓库的所有可用软件的集中列表。 以下是一些搜索特定软件包的仓库的示例(请注意,为了简洁起见,这些已被截断)
使用 aurman 的 Arch Linux
user@arch ~ $ aurman -Ss kate
extra/kate 18.04.2-2 (kde-applications kdebase)
Advanced Text Editor
aur/kate-root 18.04.0-1 (11, 1.139399)
Advanced Text Editor, patched to be able to run as root
aur/kate-git r15288.15d26a7-1 (1, 1e-06)
An advanced editor component which is used in numerous KDE applications requiring a text editing component
使用 YUM 的 CentOS 7
[user@centos ~]$ yum search kate
kate-devel.x86_64 : Development files for kate
kate-libs.x86_64 : Runtime files for kate
kate-part.x86_64 : Kate kpart plugin
使用 APT 的 Ubuntu
user@ubuntu ~ $ apt search kate
Sorting... Done
Full Text Search... Done
kate/xenial 4:15.12.3-0ubuntu2 amd64
powerful text editor
kate-data/xenial,xenial 4:4.14.3-0ubuntu4 all
shared data files for Kate text editor
kate-dbg/xenial 4:15.12.3-0ubuntu2 amd64
debugging symbols for Kate
kate5-data/xenial,xenial 4:15.12.3-0ubuntu2 all
shared data files for Kate text editor
最著名的软件包管理器是什么?
如以上输出所示,软件包管理器用于与软件仓库进行交互。以下是一些最著名的软件包管理器的简要概述。
基于 RPM 的软件包管理器
更新基于 RPM 的系统,特别是基于 Red Hat 技术的系统,具有非常有趣和详细的历史。 事实上,当前版本的 yum(对于企业发行版)和 DNF(对于社区)结合了几个开源项目来提供其当前的功能。
最初,Red Hat 使用了一个名为 RPM(Red Hat Package Manager)的软件包管理器,该软件包管理器至今仍在使用。 但是,它的主要用途是安装本地的 RPM,而不是搜索软件仓库。 创建了一个名为 up2date
的软件包管理器,以通知用户软件包的更新,并使他们能够搜索远程仓库并轻松安装依赖项。 虽然它达到了目的,但一些社区成员认为 up2date
存在一些重大缺陷。
yum 的当前版本来自几个不同的社区努力。 Yellowdog Updater (YUP) 是 1999-2001 年由 Terra Soft Solutions 的人们开发的,作为 Yellow Dog Linux 的图形安装程序的后端引擎。 杜克大学喜欢 YUP 的想法,并决定对其进行改进。 他们创建了 Yellowdog Updater, Modified (yum),最终被改编用于帮助管理大学的 Red Hat Linux 系统。 Yum 越来越受欢迎,到 2005 年,估计超过一半的 Linux 市场都在使用它。 如今,几乎每个使用 RPM 的 Linux 发行版都使用 yum 进行软件包管理(少数值得注意的例外)。
使用 yum
为了使 yum 可以从互联网仓库下载和安装软件包,文件必须位于 /etc/yum.repos.d/
中,并且它们必须具有扩展名 .repo
。 这是一个 repo 文件的示例
[local_base]
name=Base CentOS (local)
baseurl=http://7-repo.apps.home.local/yum-repo/7/
enabled=1
gpgcheck=0
这是我的一个本地仓库的配置,这解释了为什么 GPG 检查已关闭。 如果此检查已打开,则每个软件包都需要使用加密密钥签名,并且需要将相应的密钥导入到接收更新的系统中。 因为我自己维护这个仓库,所以我信任这些软件包并且不费心签名。
一旦存储库文件就位,你就可以开始从远程存储库安装软件包。 最基本的命令是 yum update
,它将更新当前安装的每个软件包。 这*不需要*特定的步骤来刷新有关仓库的信息; 这是自动完成的。 该命令的示例如下所示
[user@centos ~]$ sudo yum update
Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager
local_base | 3.6 kB 00:00:00
local_epel | 2.9 kB 00:00:00
local_rpm_forge | 1.9 kB 00:00:00
local_updates | 3.4 kB 00:00:00
spideroak-one-stable | 2.9 kB 00:00:00
zfs | 2.9 kB 00:00:00
(1/6): local_base/group_gz | 166 kB 00:00:00
(2/6): local_updates/primary_db | 2.7 MB 00:00:00
(3/6): local_base/primary_db | 5.9 MB 00:00:00
(4/6): spideroak-one-stable/primary_db | 12 kB 00:00:00
(5/6): local_epel/primary_db | 6.3 MB 00:00:00
(6/6): zfs/x86_64/primary_db | 78 kB 00:00:00
local_rpm_forge/primary_db | 125 kB 00:00:00
Determining fastest mirrors
Resolving Dependencies
--> Running transaction check
如果你确定你希望 yum 执行任何命令而不停止输入,你可以在命令中放入 -y
标志,例如 yum update -y
。
安装新软件包同样容易。 首先,使用 yum search
搜索软件包的名称
[user@centos ~]$ yum search kate
artwiz-aleczapka-kates-fonts.noarch : Kates font in Artwiz family
ghc-highlighting-kate-devel.x86_64 : Haskell highlighting-kate library development files
kate-devel.i686 : Development files for kate
kate-devel.x86_64 : Development files for kate
kate-libs.i686 : Runtime files for kate
kate-libs.x86_64 : Runtime files for kate
kate-part.i686 : Kate kpart plugin
获得软件包的名称后,你可以简单地使用 sudo yum install kate-devel -y
安装该软件包。 如果你安装了不再需要的软件包,可以使用 sudo yum remove kate-devel -y
将其删除。 默认情况下,yum 将删除软件包及其依赖项。
有时你可能不知道软件包的名称,但你知道实用程序的名称。 例如,假设你正在寻找实用程序 updatedb
,该实用程序创建/更新 locate
命令使用的数据库。 尝试安装 updatedb
会返回以下结果
[user@centos ~]$ sudo yum install updatedb
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
No package updatedb available.
Error: Nothing to do
你可以通过运行以下命令来查找实用程序来自哪个软件包
[user@centos ~]$ yum whatprovides *updatedb
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
bacula-director-5.2.13-23.1.el7.x86_64 : Bacula Director files
Repo : local_base
Matched from:
Filename : /usr/share/doc/bacula-director-5.2.13/updatedb
mlocate-0.26-8.el7.x86_64 : An utility for finding files by name
Repo : local_base
Matched from:
Filename : /usr/bin/updatedb
我在命令前面使用了星号 *
,因为 yum whatprovides
使用文件的路径来建立匹配。 由于我不确定文件位于何处,因此我使用星号来指示任何路径。
当然,yum 还有更多选项可用。 我建议你查看 yum 的手册页以获取其他选项。
Dandified Yum (DNF) 是 yum 的较新版本。 它在 Fedora 18 中引入,尚未在企业发行版中采用,因此主要在 Fedora(及其衍生版本)中使用。 它的用法与 yum 几乎完全相同,但是它的构建目的是为了解决性能不佳、未记录的 API、缓慢/损坏的依赖项解析以及偶尔的高内存使用率。 DNF 旨在作为 yum 的直接替代品,因此我不会重复这些命令——无论你在何处使用 yum
,只需替换为 dnf
即可。
使用 Zypper
Zypper 是另一个旨在帮助管理 RPM 的软件包管理器。 该软件包管理器最常与 SUSE(和 openSUSE)相关联,但也已被 MeeGo、Sailfish OS 和 Tizen 采用。 它最初于 2006 年推出,并从此不断迭代。 除了 Zypper 用作系统管理工具 YaST 的后端之外,没有太多可说的,并且一些用户发现它比 yum 更快。
Zypper 的用法与 yum 非常相似。 要搜索、更新、安装或删除软件包,只需使用以下命令
zypper search kate
zypper update
zypper install kate
zypper remove kate
在使用 zypper
向系统添加软件仓库时,与上述包管理器相比,存在一些主要差异。 与上述包管理器不同,zypper
使用包管理器本身添加软件仓库。 最常见的方法是通过 URL,但 zypper
也支持从 repo 文件导入。
suse:~ # zypper addrepo http://download.videolan.org/pub/vlc/SuSE/15.0 vlc
Adding repository 'vlc' [done]
Repository 'vlc' successfully added
Enabled : Yes
Autorefresh : No
GPG Check : Yes
URI : http://download.videolan.org/pub/vlc/SuSE/15.0
Priority : 99
您以类似的方式删除软件仓库。
suse:~ # zypper removerepo vlc
Removing repository 'vlc' ...................................[done]
Repository 'vlc' has been removed.
使用 zypper repos
命令查看系统上软件仓库的状态。
suse:~ # zypper repos
Repository priorities are without effect. All enabled repositories share the same priority.
# | Alias | Name | Enabled | GPG Check | Refresh
---+---------------------------+-----------------------------------------+---------+-----------+--------
1 | repo-debug | openSUSE-Leap-15.0-Debug | No | ---- | ----
2 | repo-debug-non-oss | openSUSE-Leap-15.0-Debug-Non-Oss | No | ---- | ----
3 | repo-debug-update | openSUSE-Leap-15.0-Update-Debug | No | ---- | ----
4 | repo-debug-update-non-oss | openSUSE-Leap-15.0-Update-Debug-Non-Oss | No | ---- | ----
5 | repo-non-oss | openSUSE-Leap-15.0-Non-Oss | Yes | ( p) Yes | Yes
6 | repo-oss | openSUSE-Leap-15.0-Oss | Yes | ( p) Yes | Yes
zypper
甚至具有类似的功能,可以确定哪个软件包包含文件或二进制文件。 与 YUM 不同,它在命令中使用连字符(尽管这种搜索方法已弃用)。
localhost:~ # zypper what-provides kate
Command 'what-provides' is replaced by 'search --provides --match-exact'.
See 'help search' for all available options.
Loading repository data...
Reading installed packages...
S | Name | Summary | Type
---+------+----------------------+------------
i+ | Kate | Advanced Text Editor | application
i | kate | Advanced Text Editor | package
与 YUM 和 DNF 一样,Zypper 具有比此处涵盖的更丰富的功能集。 请查阅官方文档以获取更深入的信息。
基于 Debian 的包管理器
Debian 是目前维护的最古老的 Linux 发行版之一,其系统与基于 RPM 的系统非常相似。 它们使用 .deb
软件包,这些软件包可以通过名为 dpkg 的工具进行管理。 dpkg 与 rpm 非常相似,因为它旨在管理本地可用的软件包。 它不进行依赖关系解析(尽管它进行依赖关系检查),并且没有可靠的方法与远程软件仓库交互。 为了改善用户体验和易用性,Debian 项目委托了一个名为 Deity 的项目。 这个代号最终被放弃并更改为 Advanced Package Tool (APT)。
APT 于 1998 年以测试版本发布(并在 1999 年出现在 Debian 2.1 中),许多用户认为 APT 是基于 Debian 的系统的定义性特征之一。 它以类似于基于 RPM 的系统的方式使用软件仓库,但 apt
历史上使用 /etc/apt/sources.list
来管理软件仓库,而不是 yum
使用的单个 .repo
文件。 最近,它还从 /etc/apt/sources.d/
中提取文件。 按照基于 RPM 的包管理器的示例,要在基于 Debian 的发行版上完成相同的事情,您有几个选项。 您可以在终端中手动编辑/创建上述位置的文件,或者在某些情况下,您可以使用 UI 前端(例如 Ubuntu 等提供的 Software & Updates
)。 为了向所有发行版提供相同的处理方式,我将仅介绍命令行选项。 要在不直接编辑文件的情况下添加软件仓库,您可以执行以下操作
user@ubuntu:~$ sudo apt-add-repository "deb http://APT.spideroak.com/ubuntu-spideroak-hardy/ release restricted"
这将在 /etc/apt/sources.list.d
中创建一个 spideroakone.list
文件。 显然,这些行会根据要添加的软件仓库而变化。 如果您要添加个人软件包档案 (PPA),您可以这样做
user@ubuntu:~$ sudo apt-add-repository ppa:gnome-desktop
注意: Debian 本身不支持 PPA。
添加软件仓库后,基于 Debian 的系统需要意识到有一个新的位置可以搜索软件包。 这可以通过 apt-get update
命令完成
user@ubuntu:~$ sudo apt-get update
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
Hit:2 http://APT.spideroak.com/ubuntu-spideroak-hardy release InRelease
Hit:3 http://ca.archive.ubuntu.com/ubuntu xenial InRelease
Get:4 http://ca.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [517 kB]
Get:6 http://security.ubuntu.com/ubuntu xenial-security/main i386 Packages [455 kB]
Get:7 http://security.ubuntu.com/ubuntu xenial-security/main Translation-en [221 kB]
...
Fetched 6,399 kB in 3s (2,017 kB/s)
Reading package lists... Done
现在添加并更新了新的软件仓库,您可以使用 apt-cache
命令搜索软件包
user@ubuntu:~$ apt-cache search kate
aterm-ml - Afterstep XVT - a VT102 emulator for the X window system
frescobaldi - Qt4 LilyPond sheet music editor
gitit - Wiki engine backed by a git or darcs filestore
jedit - Plugin-based editor for programmers
kate - powerful text editor
kate-data - shared data files for Kate text editor
kate-dbg - debugging symbols for Kate
katepart - embeddable text editor component
要安装 kate
,只需运行相应的安装命令
user@ubuntu:~$ sudo apt-get install kate
要删除软件包,请使用 apt-get remove
user@ubuntu:~$ sudo apt-get remove kate
在软件包发现方面,APT 不提供任何类似于 yum whatprovides
的功能。 如果您想找到磁盘上特定文件的来源,可以通过几种方法来获取此信息。
使用 dpkg
user@ubuntu:~$ dpkg -S /bin/ls
coreutils: /bin/ls
使用 apt-file
user@ubuntu:~$ sudo apt-get install apt-file -y
user@ubuntu:~$ sudo apt-file update
user@ubuntu:~$ apt-file search kate
apt-file search
的问题在于,与 yum whatprovides
不同,除非您知道确切的路径,否则它过于冗长,并且它会自动添加通配符搜索,以便您最终获得任何包含单词 kate 的结果
kate: /usr/bin/kate
kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katebacktracebrowserplugin.so
kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katebuildplugin.so
kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katecloseexceptplugin.so
kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katectagsplugin.so
这些示例中的大多数都使用了 apt-get
。 请注意,当前 Ubuntu 的大多数教程都专门使用 apt
。 单个 apt
命令旨在仅实现 APT 武器库中最常用的命令。 由于功能在 apt-get
、apt-cache
和其他命令之间拆分,因此 apt
希望将它们统一为一个命令。 它还添加了一些优点,例如着色、进度条和其他零碎的东西。 上述大多数命令都可以替换为 apt
,但并非所有当前接收安全补丁的基于 Debian 的发行版都默认支持使用 apt
,因此您可能需要安装其他软件包。
基于 Arch 的包管理器
Arch Linux 使用名为 pacman 的包管理器。 与 .deb
或 .rpm
文件不同,pacman 使用更传统的 tarball 和 LZMA2 压缩 (.tar.xz
)。 这使得 Arch Linux 软件包比其他形式的压缩存档(例如 gzip)小得多。 pacman 最初于 2002 年发布,一直在稳步迭代和改进。 pacman 的主要优点之一是它支持 Arch Build System,这是一个从源代码构建软件包的系统。 构建系统提取名为 PKGBUILD 的文件,该文件包含元数据(例如版本号、修订号、依赖项等)以及一个 shell 脚本,其中包含用于编译符合 Arch Linux 要求的软件包所需的标志。 然后将生成的二进制文件打包到上述 .tar.xz
文件中,以供 pacman 使用。
该系统导致了 Arch User Repository (AUR) 的创建,它是一个社区驱动的软件仓库,包含 PKGBUILD 文件和支持补丁或脚本。 这使得几乎无限量的软件可以在 Arch 中使用。 该系统的明显优势在于,如果用户(或维护者)希望向公众提供软件,他们不必通过官方渠道才能将其接受到主软件仓库中。 缺点是它依赖于类似于 Docker Hub、Canonical 的 Snap 软件包或其他类似机制的社区管理。 有许多特定于 AUR 的包管理器可用于从 AUR 中的 PKGBUILD 文件下载、编译和安装(我们稍后将对此进行介绍)。
使用 pacman 和官方软件仓库
Arch 的主要包管理器 pacman 使用标志而不是像 yum
和 apt
这样的命令词。 例如,要搜索软件包,您将使用 pacman -Ss
。 与 Linux 上的大多数命令一样,您可以找到 manpage
和内联帮助。 pacman
的大多数命令都使用同步 (-S) 标志。 例如
user@arch ~ $ pacman -Ss kate
extra/kate 18.04.2-2 (kde-applications kdebase)
Advanced Text Editor
extra/libkate 0.4.1-6 [installed]
A karaoke and text codec for embedding in ogg
extra/libtiger 0.3.4-5 [installed]
A rendering library for Kate streams using Pango and Cairo
extra/ttf-cheapskate 2.0-12
TTFonts collection from dustimo.com
community/haskell-cheapskate 0.1.1-100
Experimental markdown processor.
Arch 还使用类似于其他包管理器的软件仓库。 在上面的输出中,搜索结果以它们所在的软件仓库作为前缀(在本例中为 extra/
和 community/
)。 与基于 Red Hat 和 Debian 的系统类似,Arch 依赖于用户将软件仓库信息添加到特定文件中。 这些软件仓库的位置是 /etc/pacman.conf
。 下面的示例与库存系统非常接近。 我已启用用于 Steam 支持的 [multilib]
软件仓库
[options]
Architecture = auto
Color
CheckSpace
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[community]
Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist
可以在 pacman.conf
中指定特定 URL。 此功能可用于确保所有软件包都来自特定的时间点。 例如,如果某个软件包存在严重影响您的错误,并且它有多个依赖项,则可以通过将特定 URL 添加到您的 pacman.conf
中,然后运行降级系统的命令来回滚到特定的时间点
[core]
Server=https://archive.archlinux.org/repos/2017/12/22/$repo/os/$arch
与基于 Debian 的系统一样,在您告知它之前,Arch 不会更新其本地软件仓库信息。 您可以通过发出以下命令来刷新软件包数据库
user@arch ~ $ sudo pacman -Sy
:: Synchronizing package databases...
core 130.2 KiB 851K/s 00:00 [##########################################################] 100%
extra 1645.3 KiB 2.69M/s 00:01 [##########################################################] 100%
community 4.5 MiB 2.27M/s 00:02 [##########################################################] 100%
multilib is up to date
如您在上面的输出中所见,pacman
认为 multilib 软件包数据库是最新的。 如果您认为这是不正确的,您可以通过运行 pacman -Syy
来强制刷新。 如果您想更新您的整个系统(不包括从 AUR 安装的软件包),您可以运行 pacman -Syu
user@arch ~ $ sudo pacman -Syu
:: Synchronizing package databases...
core is up to date
extra is up to date
community is up to date
multilib is up to date
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...
Packages (45) ceph-13.2.0-2 ceph-libs-13.2.0-2 debootstrap-1.0.105-1 guile-2.2.4-1 harfbuzz-1.8.2-1 harfbuzz-icu-1.8.2-1 haskell-aeson-1.3.1.1-20
haskell-attoparsec-0.13.2.2-24 haskell-tagged-0.8.6-1 imagemagick-7.0.8.4-1 lib32-harfbuzz-1.8.2-1 lib32-libgusb-0.3.0-1 lib32-systemd-239.0-1
libgit2-1:0.27.2-1 libinput-1.11.2-1 libmagick-7.0.8.4-1 libmagick6-6.9.10.4-1 libopenshot-0.2.0-1 libopenshot-audio-0.1.6-1 libosinfo-1.2.0-1
libxfce4util-4.13.2-1 minetest-0.4.17.1-1 minetest-common-0.4.17.1-1 mlt-6.10.0-1 mlt-python-bindings-6.10.0-1 ndctl-61.1-1 netctl-1.17-1
nodejs-10.6.0-1
Total Download Size: 2.66 MiB
Total Installed Size: 879.15 MiB
Net Upgrade Size: -365.27 MiB
:: Proceed with installation? [Y/n]
在前面提到的关于降级系统的情况下,您可以通过发出 pacman -Syyuu
来强制降级。 重要的是要注意,不应该轻易进行此操作。 这在大多数情况下不应导致问题; 但是,存在降级一个软件包或多个软件包会导致级联故障并使您的系统处于不一致状态的风险。 谨慎使用!
要安装软件包,只需使用 pacman -S kate
user@arch ~ $ sudo pacman -S kate
resolving dependencies...
looking for conflicting packages...
Packages (7) editorconfig-core-c-0.12.2-1 kactivities-5.47.0-1 kparts-5.47.0-1 ktexteditor-5.47.0-2 syntax-highlighting-5.47.0-1 threadweaver-5.47.0-1
kate-18.04.2-2
Total Download Size: 10.94 MiB
Total Installed Size: 38.91 MiB
:: Proceed with installation? [Y/n]
要删除软件包,您可以运行 pacman -R kate
。 这仅删除软件包,而不删除其依赖项
user@arch ~ $ sudo pacman -S kate
checking dependencies...
Packages (1) kate-18.04.2-2
Total Removed Size: 20.30 MiB
:: Do you want to remove these packages? [Y/n]
如果您想删除其他软件包不需要的依赖项,您可以运行 pacman -Rs:
user@arch ~ $ sudo pacman -Rs kate
checking dependencies...
Packages (7) editorconfig-core-c-0.12.2-1 kactivities-5.47.0-1 kparts-5.47.0-1 ktexteditor-5.47.0-2 syntax-highlighting-5.47.0-1 threadweaver-5.47.0-1
kate-18.04.2-2
Total Removed Size: 38.91 MiB
:: Do you want to remove these packages? [Y/n]
在我看来,Pacman 提供了搜索给定实用程序的软件包名称的最简洁的方法。 如上所示,yum
和 apt
都依赖于路径来找到有用的结果。 Pacman 对您最可能正在寻找的软件包进行了一些智能猜测
user@arch ~ $ sudo pacman -Fs updatedb
core/mlocate 0.26.git.20170220-1
usr/bin/updatedb
user@arch ~ $ sudo pacman -Fs kate
extra/kate 18.04.2-2
usr/bin/kate
使用 AUR
有几个流行的 AUR 软件包管理器助手。 其中,yaourt
和 pacaur
非常多产。 但是,这两个项目都在 Arch Wiki 上被列为已停止或有问题。 因此,我将讨论 aurman
。 它的工作方式几乎与 pacman
完全相同,只是它会搜索 AUR 并包含一些有用的(但可能很危险)选项。 从 AUR 安装软件包将启动使用软件包维护者的构建脚本。 系统会多次提示您继续的权限(为了简洁起见,我截断了输出)
aurman -S telegram-desktop-bin
~~ initializing aurman...
~~ the following packages are neither in known repos nor in the aur
...
~~ calculating solutions...
:: The following 1 package(s) are getting updated:
aur/telegram-desktop-bin 1.3.0-1 -> 1.3.9-1
?? Do you want to continue? Y/n: Y
~~ looking for new pkgbuilds and fetching them...
Cloning into 'telegram-desktop-bin'...
remote: Counting objects: 301, done.
remote: Compressing objects: 100% (152/152), done.
remote: Total 301 (delta 161), reused 286 (delta 147)
Receiving objects: 100% (301/301), 76.17 KiB | 639.00 KiB/s, done.
Resolving deltas: 100% (161/161), done.
?? Do you want to see the changes of telegram-desktop-bin? N/y: N
[sudo] password for user:
...
==> Leaving fakeroot environment.
==> Finished making: telegram-desktop-bin 1.3.9-1 (Thu 05 Jul 2018 11:22:02 AM EDT)
==> Cleaning up...
loading packages...
resolving dependencies...
looking for conflicting packages...
Packages (1) telegram-desktop-bin-1.3.9-1
Total Installed Size: 88.81 MiB
Net Upgrade Size: 5.33 MiB
:: Proceed with installation? [Y/n]
有时会提示您提供更多输入,具体取决于您要安装的软件包的复杂性。 为了避免这种乏味,aurman
允许您传递 --noconfirm
和 --noedit
选项。 这相当于说“接受所有默认值,并相信软件包维护者的脚本不会是恶意的。” 使用此选项时要格外小心! 虽然这些选项本身不太可能破坏您的系统,但您绝不应该盲目地接受别人的脚本。
结论
当然,本文只触及了包管理器可以做什么的表面。 还有许多其他包管理器可用,我无法在此空间中介绍。 某些发行版(例如 Ubuntu 或 Elementary OS)已竭尽全力提供包管理的图形方法。
如果您对包管理器的一些更高级功能感兴趣,请在下面发布您的问题或评论,我很乐意撰写一篇后续文章。
附录
# search for packages
yum search <package>
dnf search <package>
zypper search <package>
apt-cache search <package>
apt search <package>
pacman -Ss <package>
# install packages
yum install <package>
dnf install <package>
zypper install <package>
apt-get install <package>
apt install <package>
pacman -S <package>
# update package database, not required by yum, dnf and zypper
apt-get update
apt update
pacman -Sy
# update all system packages
yum update
dnf update
zypper update
apt-get upgrade
apt upgrade
pacman -Su
# remove an installed package
yum remove <package>
dnf remove <package>
apt-get remove <package>
apt remove <package>
pacman -R <package>
pacman -Rs <package>
# search for the package name containing specific file or folder
yum whatprovides *<binary>
dnf whatprovides *<binary>
zypper what-provides <binary>
zypper search --provides <binary>
apt-file search <binary>
pacman -Fs <binary>
9 条评论