Linux 包管理基础:apt、yum、dnf 和 pkg

Brennen Bearnes 的头像

·

·

·

50,462 次阅读
Package_Management_tw_mostov.png-307.8kB

介绍

大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件。软件通常都是存放在存储库中,并通过包的形式进行分发。处理包的工作被称为包管理。包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档。

包管理系统除了安装软件外,它还提供了工具来更新已经安装的包。包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可。

在配置服务器或开发环境时,我们最好了解下包在官方存储库之外的情况。某个发行版的稳定版本中的包有可能已经过时了,尤其是那些新的或者快速迭代的软件。然而,包管理无论对于系统管理员还是开发人员来说都是至关重要的技能,而已打包的软件对于主流 Linux 发行版来说也是一笔巨大的财富。

本指南旨在快速地介绍下在多种 Linux 发行版中查找、安装和升级软件包的基础知识,并帮助您将这些内容在多个系统之间进行交叉对比。

包管理系统:简要概述

大多数包系统都是围绕包文件的集合构建的。包文件通常是一个存档文件,它包含已编译的二进制文件和软件的其他资源,以及安装脚本。包文件同时也包含有价值的元数据,包括它们的依赖项,以及安装和运行它们所需的其他包的列表。

虽然这些包管理系统的功能和优点大致相同,但打包格式和工具却因平台而异:

操作系统格式工具
Debian / Ubuntusudo apt-get upgrade只更新已安装的包
sudo apt-get dist-upgrade可能会增加或删除包以满足新的依赖项
sudo apt upgradeapt-get upgrade 类似
sudo apt full-upgradeapt-get dist-upgrade 类似
CentOSsudo yum update
Fedorasudo dnf upgrade
FreeBSD Packagessudo pkg upgrade
FreeBSD Portsless /usr/ports/UPDATING使用 less 来查看 ports 的更新提示(使用上下光标键滚动,按 q 退出)。
cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a安装 portmaster 然后使用它更新已安装的 ports

搜索某个包

大多数发行版都提供针对包集合的图形化或菜单驱动的工具,我们可以分类浏览软件,这也是一个发现新软件的好方法。然而,查找包最快和最有效的方法是使用命令行工具进行搜索。

系统命令说明
Debian / Ubuntuapt-cache show package显示有关包的本地缓存信息
apt show package
dpkg -s package显示包的当前安装状态
CentOSyum info package
yum deplist package列出包的依赖
Fedoradnf info package
dnf repoquery --requires package列出包的依赖
FreeBSD Packagespkg info package显示已安装的包的信息
FreeBSD Portscd /usr/ports/category/port && cat pkg-descr

从存储库安装包

知道包名后,通常可以用一个命令来安装它及其依赖。你也可以一次性安装多个包,只需将它们全部列出来即可。

系统命令说明
Debian / Ubuntusudo dpkg -i package.deb
sudo apt-get install -y gdebi && sudo gdebi package.deb安装 gdebi,然后使用 gdebi 安装 package.deb 并处理缺失的依赖
CentOSsudo yum install package.rpm
Fedorasudo dnf install package.rpm
FreeBSD Packagessudo pkg add package.txz
sudo pkg add -f package.txz即使已经安装的包也会重新安装

删除一个或多个已安装的包

由于包管理器知道给定的软件包提供了哪些文件,因此如果某个软件不再需要了,它通常可以干净利落地从系统中清除这些文件。

系统命令说明
Debian / Ubuntuman apt-get更新本地包数据库以及与包一起工作
man apt-cache在本地的包数据库中搜索
man dpkg和单独的包文件一起工作以及能查询已安装的包
man apt通过更简洁,用户友好的接口进行最基本的操作
CentOSman yum
Fedoraman dnf
FreeBSD Packagesman pkg和预先编译的二进制包一起工作
FreeBSD Portsman ports和 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

本文由 LCTT 原创编译,Linux中国 荣誉推出

6 条回复

  1. 来自四川成都的 Chrome 59.0|GNU/Linux 用户 的头像
    来自四川成都的 Chrome 59.0|GNU/Linux 用户

    dpkg 若要查看最近安裝的包,不如 rpm 方便。只能查看其一个文本格式的日志文件。

    rpm –query –all –last | less

    来自成都
  2. 来自陕西西安的 Chrome 60.0|GNU/Linux 用户 的头像
    来自陕西西安的 Chrome 60.0|GNU/Linux 用户

    好文要支持!!!

    来自西安
  3. 来自天津的 Chrome 59.0|GNU/Linux 用户 的头像
    来自天津的 Chrome 59.0|GNU/Linux 用户

    或许是flatpak呢

    来自天津
  4. 来自河南濮阳的 Firefox 55.0|Windows 10 用户 的头像
    来自河南濮阳的 Firefox 55.0|Windows 10 用户

    wifi页面??? 不是wiki吗?

    来自洛阳
  5. linux [Chrome 60.0|Mac 10.11] 的头像
    linux [Chrome 60.0|Mac 10.11]

    汗~

    来自海口
  6. 来自广东深圳的 Chrome 71.0|Windows 10 用户 的头像
    来自广东深圳的 Chrome 71.0|Windows 10 用户

    很详细!赞一个!

    来自深圳

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注