软件包管理器差不多是 Linux 发行版的标准配置了吧~
软件包和软件包管理器是啥?
软件包是对于一种软件所进行打包的方式。一般来说一个软件包包含这些内容呐~
- 软件的源代码或可执行文件.
- 一些供其它应用 ( 例如软件包管理器 ) 解析的元数据. (例如软件的名称,描述,版本,等等......)
- 一组用来执行安装前后事务的脚本.
而软件包管理器,当然就是来安装/卸载/更新软件包的一组应用程序咯~
软件包管理器是在电脑中自动安装、配制、卸载和升级软件包的工具组合, 在各种系统软件和应用软件的安装管理中均有广泛应用。
一般来说,一个软件包管理器有这样的功能:
- 从软件仓库中查询软件包的信息,并在需要时下载.
- 同时处理软件包需要的其它软件 ( 常常称作"依赖" )
- 验证下载的文件的完整性 ( 例如通过散列值或是数字签名 )
- 通过归档工具解开软件包,然后把文件安放到正确的位置上.
- 其它方便用户的功能 ( 例如软件包组,自动检查更新等等 )
为啥需要个软件包管理器?
首先大家先来回忆一下在 Windows 里是如何装软件的呗~
- 打开搜索引擎搜索一下
- 找到个没被墙的下载网站.....
- 从网页上数十个硕大而带有欺骗性的广告的缝隙中找到真正的下载链接.
- 然后下载......
- 下完以后运行,挑掉一堆勾😂😂,一路下一步直到完成 _(:з」∠)_
是不是很痛苦? 不过通过软件包管理器,汝就可以把安装软件的过程简化到 "安装某个软件" 就可以啦~
而且大多数软件包管理器都是从特定的软件仓库下载软件包,一般不用担心会夹带私货等问题 o(* ̄3 ̄)o
大家经常说的软件源,镜像源是啥?
软件包管理器会自动上网去下载软件,但他可不是四处瞎找,而是去固定的地方找。
这个固定的地方有个名字,叫做软件源。那里专门提供各 种打包好的软件以及相关的信息介绍,供软件包管理器们下载。
这样的软件源有很多,遍布世界各地,软件包管理器应该去哪个呢?其实他自己也不知道,
他需要一个列表,一个软件源列表。软件包管理器工作的时候,就会去一个软件源列表记录的地方去下载软件。
有的人可能离的挺近,去默认的源就很方便,有的人去默认的源可能就很费劲,没准得绕过半个地 球才行。默认的源不够快,自然就需要找个快一点的源来代替。
然后世界各地的 Linux 用户们就会去建设不同的镜像源来方便本地的 Linux 用户呐~ ( 例如有爱的崔土豪 cuihao ~)
典型的软件包管理器的工作方式 _(:з」∠)_
咱来举个安装软件包的栗子~
用户 : 我想安装foo
软件包管理器 : 先让咱在软件仓库里找一下 (´・ω・`)
如果找不到的话,软件包管理器就会告诉用户 "咱找不到汝说的 foo 软件包呐~"
如果找的到的话:
"咱在软件仓库里找到 foo 了呐~,不过 foo 说要带上它的助手 baz 才会来嘛~
( 就是说要安装 foo 需要同时安装它的依赖项 baz )
如果用户同意了的话,软件包管理器就会去软件仓库把 foo 和 baz 带回来 ( 也就是下载这两个软件包 )
接着软件包管理器会检查下载来的软件包是否和数据库中的描述 (散列值 ) 一致, 如果相同的话就会开始安装啦~
在安装结束后,软件包管理器一般都会把具体过程写到自己的日记 (日志) 里方便以后使用呗~
当然啦,不同的软件包管理器有不同的表现呐~
几种常见的软件包管理器 (及其前端)
dpkg ( Debian Package Manager, Debian 软件包管理器 )
dpkg是Debian软件包管理器的基础,它被伊恩·默多克创建于1993年。 用于安装、卸载和供给和.deb软件包相关的信息。
dpkg本身是一个底层的工具。上层的工具,像是APT,被用于从远程获取软件包以及处理复杂的软件包关系。
apt-get / apt / aptitude 和 Synaptic (新立得软件包管理器) 是流行的 dpkg 前端.
基于 Debian 的发行版 (例如 Ubuntu 和 Linux Mint ) 也采用 dpkg 作为包管理器.
RPM ( The RPM Package Manager,RPM 包管理器)
RPM包管理员(简称RPM,全称为The RPM Package Manager)是在Linux下广泛使用的软件包管理器。
RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身的软件包管理器(RPM Package Manager)。
最早由Red Hat研制,现在也由开源社区开发。RPM通常随附于Linux发行版,但也有单独将RPM作为应用软件发行的发行版(例如Gentoo)
不过和 dpkg 不一样的是使用 RPM 的 Linux 发行版都喜欢自己造轮子呐~
Yum(Yellow dog Updater, Modified),最常见的 RPM 前端.
由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成. Yellow Dog Linux本身,Fedora (22 以前)、Red Hat Enterprise Linux,和 CentOS 都在使用它作为前端.
DNF,全称Dandified Yum,是RPM发行版的软件包管理器 Yellowdog Updater, Modified(yum)的下一代版本。Fedora 22 开始成为默认的 RPM 前端.
ZYpp (或称 libzypp ) 是一个软件包管理引擎,通常在 openSUSE/SUS E以 YaST 、Zypper 为前端使用。不像其他的软件包管理器,它提供一个强力的可满足性求解器来计算软件包相依性,也提供了一组方便的软件包管理API.它是一个由 Novell 所赞助的开放源代码且为自由软件的项目,采用GNU通用公共许可证第二版或更新授权。
urpmi 是 Mageia/Mandriva Linux 及其派生发行版的软件包管理系统,它解决了RPM包管理员容易让用户经常遇到相依性地狱的问题,也可以从官方或非官方的来源获得软件包.
pacman
pacman软件包管理器是 Arch Linux 的一大亮点。它将一个简单的二进制包格式和易用的构建系统结合了起来。 不管软件包是来自官方的 Arch 库还是用户自己创建,pacman 都能方便得管理。
pacman 通过和主服务器同步软件包列表来进行系统更新, 这使得注重安全的系统管理员的维护工作成为轻而易举的事情。
这种服务器/客户端模式可以使用一条命令就下载/安装软件包,同时安装必需的依赖包。 pacman 用 C 语言编写,使用 .pkg.tar.xz 打包格式。
Arch Linux 和 基于 Arch Linux 的发行版使用 pacman 作为软件包管理器.
( 最早 pacman 既是前端又是后端,后来为了方便 pacman 和其它程序协作,分离出 libalpm 作为后端 )
作为现 Arch Linux 用户,自然要挺一下 Pacman 啦~ ,这里贴出 Arch Linux Trust User farseerfc 在知乎上的一篇回答呗~
为什么说Arch Linux的pacman包管理系统更先进?相比与apt或rpm等好在哪里呢? - fc farseer 的回答 - 知乎
Portage
Portage是Gentoo Linux所使用的包管理器,基于ports collection机制。Portage的高度灵活性令Gentoo独立于操作系统并获得了元发行版的称号。
Portage主要特色是从源码编译用户所需要安装的软件包。此过程中用户可以调整编译器和目标程序的选项以符合系统需要或自己的喜好。与系统管理相关的功能包括:允许平行版本安装、追踪跨软件包依赖、维护记录已安装软件的数据库、提供本地ebuild库、使本地库与远程库相同步。与个别软件包安装相关的功能有:为目标机器指定编译选项、定制构成软件包的组件。
只是作为基于源代码的软件包管理器,即时编译很消耗 CPU 和 时间 😂😂😂
由于软件包管理器的命令都不相同,咱接下来的文章中会用到 apt / dnf / pacman 当作例子呗~
ArchWiki 上的 Pacman/Rosetta 页面 有几种常见的软件包管理器的命令比较呗~
按照汝的发行版学习一些基本的操作吧 (下次咱要说啥咧?)