介绍
大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件。软件通常都是存放在存储库中,并通过包的形式进行分发。处理包的工作被称为包管理。包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档。
包管理系统除了安装软件外,它还提供了工具来更新已经安装的包。包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可。
在配置服务器或开发环境时,我们最好了解下包在官方存储库之外的情况。某个发行版的稳定版本中的包有可能已经过时了,尤其是那些新的或者快速迭代的软件。然而,包管理无论对于系统管理员还是开发人员来说都是至关重要的技能,而已打包的软件对于主流 Linux 发行版来说也是一笔巨大的财富。
本指南旨在快速地介绍下在多种 Linux 发行版中查找、安装和升级软件包的基础知识,并帮助您将这些内容在多个系统之间进行交叉对比。
包管理系统:简要概述
大多数包系统都是围绕包文件的集合构建的。包文件通常是一个存档文件,它包含已编译的二进制文件和软件的其他资源,以及安装脚本。包文件同时也包含有价值的元数据,包括它们的依赖项,以及安装和运行它们所需的其他包的列表。
虽然这些包管理系统的功能和优点大致相同,但打包格式和工具却因平台而异:
操作系统 | 格式 | 工具 |
---|---|---|
Debian / Ubuntu | sudo apt-get upgrade | 只更新已安装的包 |
sudo apt-get dist-upgrade | 可能会增加或删除包以满足新的依赖项 | |
sudo apt upgrade | 和 apt-get upgrade 类似 | |
sudo apt full-upgrade | 和 apt-get dist-upgrade 类似 | |
CentOS | sudo yum update | |
Fedora | sudo dnf upgrade | |
FreeBSD Packages | sudo pkg upgrade | |
FreeBSD Ports | less /usr/ports/UPDATING | 使用 less 来查看 ports 的更新提示(使用上下光标键滚动,按 q 退出)。 |
cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a | 安装 portmaster 然后使用它更新已安装的 ports |
搜索某个包
大多数发行版都提供针对包集合的图形化或菜单驱动的工具,我们可以分类浏览软件,这也是一个发现新软件的好方法。然而,查找包最快和最有效的方法是使用命令行工具进行搜索。
系统 | 命令 | 说明 |
---|---|---|
Debian / Ubuntu | apt-cache show package | 显示有关包的本地缓存信息 |
apt show package | ||
dpkg -s package | 显示包的当前安装状态 | |
CentOS | yum info package | |
yum deplist package | 列出包的依赖 | |
Fedora | dnf info package | |
dnf repoquery --requires package | 列出包的依赖 | |
FreeBSD Packages | pkg info package | 显示已安装的包的信息 |
FreeBSD Ports | cd /usr/ports/category/port && cat pkg-descr |
从存储库安装包
知道包名后,通常可以用一个命令来安装它及其依赖。你也可以一次性安装多个包,只需将它们全部列出来即可。
系统 | 命令 | 说明 |
---|---|---|
Debian / Ubuntu | sudo dpkg -i package.deb | |
sudo apt-get install -y gdebi && sudo gdebi package.deb | 安装 gdebi ,然后使用 gdebi 安装 package.deb 并处理缺失的依赖 | |
CentOS | sudo yum install package.rpm | |
Fedora | sudo dnf install package.rpm | |
FreeBSD Packages | sudo pkg add package.txz | |
sudo pkg add -f package.txz | 即使已经安装的包也会重新安装 |
删除一个或多个已安装的包
由于包管理器知道给定的软件包提供了哪些文件,因此如果某个软件不再需要了,它通常可以干净利落地从系统中清除这些文件。
系统 | 命令 | 说明 |
---|---|---|
Debian / Ubuntu | man apt-get | 更新本地包数据库以及与包一起工作 |
man apt-cache | 在本地的包数据库中搜索 | |
man dpkg | 和单独的包文件一起工作以及能查询已安装的包 | |
man apt | 通过更简洁,用户友好的接口进行最基本的操作 | |
CentOS | man yum | |
Fedora | man dnf | |
FreeBSD Packages | man pkg | 和预先编译的二进制包一起工作 |
FreeBSD Ports | man ports | 和 Ports 集合一起工作 |
结论和进一步的阅读
本指南通过对多个系统间进行交叉对比概述了一下包管理系统的基本操作,但只涉及了这个复杂主题的表面。对于特定系统更详细的信息,可以参考以下资源:
- 这份指南 详细介绍了 Ubuntu 和 Debian 的软件包管理。
- 这里有一份 CentOS 官方的指南 使用 yum 管理软件
- 这里有一个有关 Fedora 的
dnf
的 wiki 页面 以及一份有关dnf
官方的手册 - 这份指南 讲述了如何使用
pkg
在 FreeBSD 上进行包管理 - 这本 FreeBSD Handbook 有一节讲述了如何使用 Ports 集合
via: https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg
译者后记:
从经典的 configure
&& make
&& make install
三部曲到 dpkg
,从需要手处理依赖关系的 dpkg
到全自动化的 apt-get
,恩~,你有没有想过接下来会是什么?译者只能说可能会是 Snaps
,如果你还没有听过这个东东,你也许需要关注下这个公众号了:Snapcraft
作者:Brennen Bearnes 译者:Snapcrafter 校对:wxy
发表回复