软件包管理基础知识:贴切,Yum,DNF,PKG

大多数现代的类Unix操作系统,依赖于一个集中的包管理系统查找和安装软件。本指南用作发现,安装和对各种分布的升级包的基本面的快速参考,并应帮你翻译系统之间的知识。

介绍

大多数现代的类Unix操作系统提供用于查找和安装软件的集中式机制。 软件通常分布在的形式,存放在仓库 使用包被称为包管理 软件包提供操作系统的基本组件,以及共享库,应用程序,服务和文档。

包管理系统做的不止一次性安装软件。 它还提供用于升级已安装的软件包的工具。 软件包存储库有助于确保代码已经过审核,可在您的系统上使用,并且已安装的软件版本已经由开发人员和软件包维护人员批准。

在配置服务器或开发环境时,通常需要查看官方存储库。 分发版的稳定版本中的包可能已过期,特别是在涉及新的或快速变化的软件的情况下。 然而,软件包管理对于系统管理员和开发人员来说是至关重要的技术,而且用于主要发行版的包装软件的财富是一个巨大的资源。

本指南旨在作为查找,安装和升级各种发行版包的基础的快速参考,并且应帮助您在系统之间翻译这些知识。

软件包管理系统:概述

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

虽然它们的功能和好处大体相似,但包装格式和工具因平台而异:

操作系统 格式 工具
Debian .deb aptapt-cacheapt-getdpkg
Ubuntu .deb aptapt-cacheapt-getdpkg
CentOS .rpm yum
Fedora .rpm dnf
FreeBSD 端口, .txz makepkg

在此基础上Debian和系统,如Ubuntu,Linux Mint的,和Raspbian,包格式是.deb文件。 APT(高级打包工具)提供用于大多数常见操作的命令:搜索存储库,安装软件包及其依赖关系集合以及管理升级。 APT命令操作为前端到较低级别dpkg实用程序,它处理的个别安装.deb文件在本地系统上,有时直接调用。

对于大多数Debian衍生分布最近发布的包括apt命令,它提供了一个简洁,统一的接口来那些传统被更具体的处理常见的操作apt-getapt-cache 它的使用是可选的,但可以简化一些任务。

CentOS,Fedora和Red Hat家族的其他成员使用RPM文件。 在CentOS的, yum是用来与两个单独的包文件和库进行交互。

在最近版本的Fedora, yum已被取代dnf ,一个现代化的叉子其中保留了大部分的yum的接口。

FreeBSD的二进制包系统与管理pkg命令。 FreeBSD还提供了Ports Collection,一个本地目录结构和工具,允许用户使用Makefiles直接从源代码获取,编译和安装软件包。 它通常是更方便使用pkg ,但偶尔预编译包不可用,或者您可能需要更改编译时的选项。

更新软件包列表

大多数系统保留远程仓库中可用的软件包的本地数据库。 最好在安装或升级软件包之前更新此数据库。 作为一个局部的例外模式, yumdnf将检查执行某些操作之前更新,但你可以在任何时间更新是否可用问他们。

系统 命令
Debian / Ubuntu sudo apt-get update
sudo apt update
CentOS yum check-update
Fedora dnf check-update
FreeBSD包 sudo pkg update
FreeBSD端口 sudo portsnap fetch update

升级已安装的软件包

确保机器上所有已安装的软件保持最新将是一个巨大的任务,没有包装系统。 您必须跟踪上百个不同包的上游更改和安全警报。 虽然软件包管理器不能解决升级软件时遇到的每个问题,但它确实能够使用几个命令来维护大多数系统组件。

在FreeBSD上,升级已安装的端口可能会引入中断更改或需要手动配置步骤。 这是最好看/usr/ports/UPDATING与升级前portmaster

系统 命令 笔记
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包 sudo pkg upgrade
FreeBSD端口 less /usr/ports/UPDATING 使用less查看更新笔记端口(使用箭头键来滚动,按q退出)。
cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a 安装portmaster ,并使用它来更新安装的端口。

查找包裹

大多数发行版都提供了一个图形或菜单驱动的前端包装集合。 这些可以是按类别浏览和发现新软件的好方法。 然而,通常,找到包的最快和最有效的方法是使用命令行工具进行搜索。

系统 命令 笔记
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包 pkg search search_string 按名称搜索。
pkg search -f search_string 按名称搜索,返回完整描述。
pkg search -D search_string 搜索说明。
FreeBSD端口 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包 pkg info package 显示已安装软件包的信息。
FreeBSD端口 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通常会提示继续。
sudo apt install package 显示彩色进度条。
CentOS sudo yum install package
sudo yum install package1 package2 ... 安装所有列出的软件包。
sudo yum install -y package 假设“是”,其中yum通常会提示继续。
Fedora sudo dnf install package
sudo dnf install package1 package2 ... 安装所有列出的软件包。
sudo dnf install -y package 假设“是”,其中dnf通常会提示继续。
FreeBSD包 sudo pkg install package
sudo pkg install package1 package2 ... 安装所有列出的软件包。
FreeBSD端口 cd /usr/ports/ category / port && sudo make install 从源代码构建并安装端口。

从本地文件系统安装软件包

有时,即使软件不是针对给定操作系统正式打包的,开发商或供应商将提供用于下载的包文件。 通常,您可以使用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安装package.deb和检索任何缺少的依赖。
CentOS sudo yum install package.rpm
Fedora sudo dnf install package.rpm
FreeBSD包 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包 sudo pkg delete package
sudo pkg autoremove 删除不需要的软件包。
FreeBSD端口 sudo pkg delete package
cd /usr/ports/ path_to_port && make deinstall 卸载已安装的端口。

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通常对于给定的操作更快的简写,它不打算作为对传统工具的完整的更换,和它的接口可以版本之间改变,以改善可用性。 如果您在使用脚本或一个管道内的包管理命令,这是一个好主意,坚持使用apt-getapt-cache

得到帮助

除了基于Web的文档,请记住,Unix的手册页(通常被称为手册页 )可用于从外壳大多数命令。 阅读页面,使用man

man page

man中,您可以用箭头键导航。 /搜索页面中的文本,q退出。

系统 命令 笔记
Debian / Ubuntu man apt-get 更新本地包数据库和使用包。
man apt-cache 查询本地包数据库。
man dpkg 使用单个软件包文件和查询已安装的软件包。
man apt 使用更简洁,用户友好的界面来执行大多数基本操作。
CentOS man yum
Fedora man dnf
FreeBSD包 man pkg 使用预编译的二进制包。
FreeBSD端口 man ports 使用端口集合。

结论和进一步阅读

本指南提供了可在系统之间交叉引用,但仅划痕复杂主题表面的基本操作的概述。 有关给定系统的更多详细信息,可以参考以下资源: