包管理器_包管理器的演变

包管理器

每个计算机化设备都使用某种形式的软件来执行其预期的任务。 在软件的早期,对产品进行了严格的bug和其他缺陷测试。 在过去的十年左右的时间内,该软件已通过Internet发布,目的是通过应用新版本的软件来修复所有错误。 在某些情况下,每个单独的应用程序都有其自己的更新程序。 在其他情况下,则由用户自行决定如何获取和升级软件。

Linux早期采用了在用户可以查找和安装软件的集中位置上进行维护的做法。 在本文中,我将讨论在Linux上进行软件安装的历史,以及如何与CVE永无止境的激流保持最新的操作系统。

在软件包管理器之前如何在Linux上安装软件?

从历史上看,软件是通过FTP或邮件列表提供的(最终,这种分布会增长到包括基本网站)。 只有几个小文件包含创建二进制文件的指令(通常在tarfile中)。 您将解压缩文件,阅读自述文件,并且只要拥有G​​CC或某种其他形式的C编译器,然后通常就可以运行带有某些属性列表的./configure脚本,例如到库文件的路径,到的位置创建新的二进制文件等。此外, configure过程还将检查系统中的应用程序依赖性。 如果缺少任何主要要求,则配置脚本将退出,直到满足所有依赖性后,您才能继续安装。 如果配置脚本成功完成,将创建一个Makefile

Makefile存在后,您将继续运行make命令(该命令由您使用的编译器提供)。 make命令具有许多称为make flags的选项,这些选项有助于优化系统生成的二进制文件。 在计算的早期,这非常重要,因为硬件很难满足现代软件的需求。 如今,编译选项可以更加通用,因为大多数硬件对于现代软件来说已经绰绰有余了。

最后,在完成make过程之后,您需要运行make install (或sudo make install )才能实际安装软件。 您可以想象,对每个软件进行此操作既耗时又乏味-更不用说更新软件是一个复杂且可能非常复杂的过程。

什么是包裹?

发明了包装来对抗这种复杂性。 软件包将多个数据文件收集到一个存档文件中,以便于移植和存储,或者只是压缩文件以减少存储空间。 软件包中包含的二进制文件根据开发人员选择的默认默认值进行预编译。 软件包还包含元数据,例如软件的名称,目的说明,版本号以及软件正常运行所必需的依赖项列表。

几种Linux都创建了自己的软件包格式。 一些最常用的软件包格式包括:

  • .deb:Debian,Ubuntu,Linux Mint和其他几种派生版本使用此软件包格式。 这是第一个要创建的包类型。
  • .rpm:此软件包格式最初称为Red Hat软件包管理器。 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 (红帽软件包管理器)的软件包管理器,该软件包管理器今天仍在使用。 但是,其主要用途是在本地安装RPM,而不是搜索软件存储库。 创建名为up2date的软件包管理器是为了通知用户软件包更新,并使他们能够搜索远程存储库并轻松安装依赖项。 尽管它达到了目的,但一些社区成员认为up2date有一些重大缺陷。

yum的当前咒语来自社区的几种不同努力。 Yellowdog Updater(YUP)由Terra Soft Solutions的开发人员于1999-2001年开发,它是Yellow Dog Linux图形安装程序的后端引擎。 杜克大学喜欢YUP的想法,并决定对其进行改进。 他们创建了Yellowdog Updater Modified(yum) ,最终对其进行了修改,以帮助管理该大学的Red Hat Linux系统。 Yum越来越受欢迎,到2005年,估计它已被超过一半的Linux市场使用。 如今,几乎所有使用RPM的Linux发行版都使用yum进行软件包管理(有一些值得注意的例外)。

使用yum

为了使yum从Internet存储库下载并安装软件包,文件必须位于/etc/yum.repos.d/并且文件扩展名必须是.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的手册页以了解更多选项。

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还支持从回购文件中导入。


   
     
     
     
     
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的工具进行管理。 dpkgrpm非常相似,因为它旨在管理本地可用的软件包。 它没有依赖关系解析(尽管它进行了依赖关系检查),并且没有与远程存储库进行交互的可靠方法。 为了改善用户体验和易用性,Debian项目委托了一个名为Deity的项目。 该代号最终被放弃,并更改为Advanced Package Tool(APT) 。

1998年作为测试版本发布(在1999年出现在Debian 2.1中之前),许多用户认为APT是基于Debian的系统的定义功能之一。 它以与基于RPM的系统类似的方式使用存储库,但是apt历来使用/etc/apt/sources.list来管理yum而不是yum使用的单个.repo文件。 最近,它还从/etc/apt/sources.d/提取/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 ,只需运行相应的install命令:

 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文件


   
     
     
     
     
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-getapt-cache和其他命令之间划分的,因此apt看起来将它们统一为一个命令。 它还增加了一些细节,例如着色,进度条和其他零星的东西。 上面提到的大多数命令都可以用apt代替,但是并非所有当前接受apt的基于Debian的发行版默认都使用apt来支持,因此您可能需要安装其他软件包。

基于Arch的软件包管理器

Arch Linux使用名为pacman的软件包管理器。 与.deb.rpm文件不同,pacman使用具有LZMA2压缩( .tar.xz )的更传统的tarball。 这使Arch Linux软件包比其他形式的压缩归档文件(例如gzip )小得多。 pacman最初于2002年发布,经过不断地迭代和改进。 pacman的主要优点之一是它支持Arch Build System ,这是一个用于从源代码构建软件包的系统。 构建系统将提取一个名为PKGBUILD的文件,该文件包含元数据(例如版本号,修订版,依赖项等),以及带有用于编译符合Arch Linux要求的软件包所需标志的Shell脚本。 然后将生成的二进制文件打包到上述.tar.xz文件中,以供pacman使用。

该系统导致创建了Arch User Repository (AUR),它是一个社区驱动的存储库,其中包含PKGBUILD文件并支持补丁或脚本。 这使得Arch中几乎可以使用无数的软件。 该系统的明显优势在于,如果用户(或维护者)希望向公众提供软件,则他们不必通过官方渠道就可以在主要存储库中接受该软件。 缺点是它依赖类似于Docker Hub ,Canonical的Snap软件包或其他类似机制的社区管理。 有许多特定于AUR的软件包管理器,可用于从AUR中的PKGBUILD文件下载,编译和安装(我们将在后面介绍)。

使用pacman和官方存储库

Arch的主要软件包管理器pacman使用标志代替了诸如yumapt类的命令字。 例如,要搜索软件包,可以使用pacman -Ss 。 与Linux上的大多数命令一样,您可以找到manpage和内联帮助。 pacman大多数命令都使用sync (-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 。 下面的示例非常接近股票系统。 我已经为[multilib]存储库启用了Steam支持:


   
     
     
     
     
[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提供了一种最简洁的方法来搜索给定实用程序的软件包名称。 如上所示, yumapt都依靠路径来找到有用的结果。 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软件包管理器助手。 其中, yaourtpacaur是相当丰富的。 但是,这两个项目在Arch Wiki上都被列为已终止或存在问题 。 因此,我将讨论aurman 。 它的工作原理几乎与pacman,完全相同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
dnf search
zypper search
apt-cache search
apt search
pacman -Ss

# install packages
yum install
dnf install
zypper install
apt-get install
apt install
pacman -S

# 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
dnf remove
apt-get remove
apt remove
pacman -R
pacman -Rs

# search for the package name containing specific file or folder
yum whatprovides *
dnf whatprovides *
zypper what-provides
zypper search --provides
apt-file search
pacman -Fs

翻译自: https://opensource.com/article/18/7/evolution-package-managers

包管理器

你可能感兴趣的:(python,linux,java,大数据,编程语言)