Linux 系统中 apt、yum、dnf 和 pkg 包管理命令介绍

Linux 系统中 apt、yum、dnf 和 pkg 包管理命令介绍

大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件。软件通常都是存放在存储库中,并通过包的形式进行分发。不同的Linux发行版使用不同的包管理工具,目前主流Linux发行版中主要是apt、yum、dnf 和 pkg 包管理命令为主。

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

简要概述

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

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

操作系统 格式 工具
Debian deb apt, apt-cache, apt-get, dpkg
Ubuntu deb apt, apt-cache, apt-get, dpkg
CentOS rpm yum
Fedora rpm dnf
FreeBSD Ports, txz make, pkg

Debian 及其衍生版,如 UbuntuLinux MintRaspbian,它们的包格式是 。deb。APT 这款先进的担保理工具提供了大多数常见的操作命令:搜索存储库、安装软件包及其依赖项,并管理升级。在本地系统中,我们还可以使用 dpkg 程序来安装单个的 deb 文件,APT 命令作为底层 dpkg 的前端,有时也会直接调用它。

最近发布的 debian 衍生版大多数都包括了 apt 命令,它提供了一个简洁统一的接口,可用于通常由 apt-getapt-cache 命令处理的常见操作。这个命令是可选的,但使用它可以简化一些任务。

CentOSFedora 和其它 Red Hat 家族成员使用 RPM 文件。在 CentOS 中,通过 yum 来与零丁的包文件和存储库进行交互。

在最近的 Fedora 版本中,yum 已经被 dnf 取代,dnf 是它的一个现代化的分支,它保存了大部分 yum 的接口。

FreeBSD 的二进制包系统由 pkg 命令管理。 FreeBSD 还提供了 Ports 集合,这是一个存在于当地的目录结构和工具,它允许用户获取源码后使用 Makefile 直接从源码编译和安装包。

更新包列表

大多数系统在当地都会有一个和远程存储库对应的包数据库,在安装或升级包之前最好更新一下这个数据库。另外,yumdnf 在执行一些操作之前也会自动检查更新。当然你可以在任何时候对系统进行更新。

系统 敕令
Debian / Ubuntu sudo apt-get update
sudo apt update
CentOS yum check-update
Fedora dnf check-update
FreeBSD Packages sudo pkg update
FreeBSD Ports sudo portsnap fetch update

更新已安装的包

在没有包系统的情况下,想确保机器上所有已安装的软件都保持在最新的状态是一个很艰巨的任务。你将不得不跟踪数百个不同包的上游更改和平安警报。虽然包管理器并不能解决升级软件时遇到的所有问题,但它确实使你能够使用一些命令来维护大多数系统组件。

在 FreeBSD 上,升级已安装的 ports 可能会引入破坏性的改变,有些步骤还必要进行手动配置,所以在通过 portmaster 更新之前最好阅读下 /usr/ports/UPDATING 的内容。

系统 命令 阐明
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 search search_string
apt search search_string
CentOS yum search search_string
yum search all search_string 搜索所有的字段,包含描述
Fedora dnf search search_string
dnf search all search_string 搜索所有的字段,包含描述
FreeBSD Packages pkg search search_string 通过名字进行搜索
pkg search -f search_string 通过名字进行搜索并返回完整的描述
pkg search -D search_string 搜索描述
FreeBSD Ports cd /usr/ports && make search name=package 通过名字进行搜索
cd /usr/ports && make search key=search_string 搜索评论、描述和依赖

查看某个软件包的信息

在安装软件包之前,我们可以通过仔细阅读包的描述来获得很多有用的信息。除了人类可读的文本之外,这些内容通常包含像版本号这样的元数据和包的依赖项列表。

系统 命令 说明
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 apt-get install package
sudo apt-get install package1 package2 ... 安装所有列出来的包
sudo apt-get install -y package apt 提示是否继续的地方直接默认 yes
sudo apt install package 显示一个彩色的进度条
CentOS sudo yum install package
`sudo yum install package1 package2... 安装所有列出来的包
sudo yum install -y package yum 提示是否继续的地方直接默认 yes
Fedora sudo dnf install package
`sudo dnf install package1 package2... 安装所有列出来的包
sudo dnf install -y package dnf 提示是否继续的地方直接默认 yes
FreeBSD Packages sudo pkg install package
sudo pkg install package1 package2 ... 安装所有列出来的包
FreeBSD Ports cd /usr/ports/category/port && sudo make install 从源码构建安装一个 port

从当地文件系统安装一个包

对于一个给定的操作系统,有时有些软件官方并没有提供相应的包,那么开发人员或供应商将需要提供包文件的下载。你通常可以通过 web 浏览器检索这些包,或者通过命令行 curl 来检索这些信息。将包下载到目标系统后,我们通常可以通过单个命令来安装它。

Debian 派生的系统上,dpkg 用来处置单个的包文件。如果一个包有未满足的依赖项,那么我们可以使用 gdebi 从官方存储库中检索它们。

在 CentOS 和 Fedora 系统上,yumdnf 用于安装单个的文件,并且会处理必要的依赖。

系统 命令 阐明
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 sudo apt-get remove package
sudo apt remove package
sudo apt-get autoremove 删除不必要的包
CentOS sudo yum remove package
Fedora sudo dnf erase package
FreeBSD Packages sudo pkg delete package
sudo pkg autoremove 删除不必要的包
FreeBSD Ports sudo pkg delete package
cd /usr/ports/path_to_port && make deinstall 卸载 port

apt 命令

Debian 家族刊行版的管理员通常熟悉 apt-getapt-cache。较少为人所知的是简化的 apt 接口,它是专为交互式使用而设计的。

传统命令 等价的 apt 命令
apt-get update apt update
apt-get dist-upgrade apt full-upgrade
apt-cache search string apt search string
apt-get install package apt install package
apt-get remove package apt remove package
apt-get purge package apt purge package

虽然 apt 通常是一个特定操作的快捷方式,但它并不能完全替代传统的工具,它的接口可能会随着版本的不同而发生变化,以提高可用性。如果你在脚本或 shell 管道中使用担保理命令,那么最好还是坚持使用 apt-getapt-cache

获取帮助

除了基于 web 的文档,请记住我们可以通过 shell 从 Unix 手册页(通常称为 man 页面)中获得大多数的命令。比如要阅读某页,可以使用 man

  1. man page

man 中,你可以用箭头键导航。按 / 搜刮页面内的文本,使用 q 退出。

系统 命令 说明
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 集合一起工作

写在最后

希望通过本教程你能对Linux发行版中不同的包管理命令有所了解,熟悉之后可以让你更好的使用Linux操作系统。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容