云网牛站
所在位置:首页 > Linux教程 > 软件包管理基础:apt,yum,dnf,pkg

软件包管理基础:apt,yum,dnf,pkg

2017-10-21 22:22:48作者:Linux编辑稿源:系统极客

大多数现代类Unix系统都提供了查找和安装软件的包管理工具。软件通常以软件包的形式储存在仓库中,管理软件一般叫做软件包管理。包是一个操作系统的基础组成部分,它包含共享库、应用程序、服务程序和文档。

包管理工具除了提供安装软件之外,还包括升级软件。仓库里的软件包都是经过测试的,不同版本的软件已经通过软件开发者和软件包维护者的实际测试。在配置服务器或开发环境时,非常有必要看一下官方仓库,因为仓库中稳定版本的软件包有时会是很老的旧版本。

软件包管理是系统管理员和开发者都要掌握的基本技能,对于主流发型版来说,它里面包含的软件包资源相当的多,而且绝大部分的软件包都是开源的。

这篇文章介绍不同发型版软件包管理工具的基本使用:查找、安装和升级软件包。

 

包管理工具

一般来说,一个软件包是一个压缩文件,里面包括编译好的二进制文件和需要用到的资源,还有一个安装脚本。软件包中还包含一些其它数据:软件包的依赖。下面列出了对应系统包格式和包管理工具:

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

基于Debian的发型版,像Ubuntu、Linux Mint和Raspbian,它们使用的软件包格式为.deb。APT( Advanced Packaging Tool)高级软件包工具提供搜索仓库、安装软件包和依赖、管理升级。APT命令处理前端,dpkg工具处理后端(处理deb文件)。

CentOS、Fedora和其它基于Red Hat的发型版使用RPM文件。在CentOS中,yum命令可以处理单独的软件包和仓库中的软件包。在最近版本的Fedora中,dnf已经取代了yum,dnf更加现代化,它使用和yum命令相似的接口。

FreeBSD的二进制包管理系统使用pkg命令。FreeBSD也提供了Ports Collection,一个从源码编译安装的本地工具,在没有二进制包的情况下非常方便。

 

更新软件包缓存

大多数软件包管理系统都在本地数据库保存远程软件仓库的可用软件包列表。在安装或更新软件之前,最好更新一下本地缓存的可用软件包数据库。yum和dnf在执行一些命令时会自动更新缓存的软件包列表。

系统 命令
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系统上,在用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

 

从本地安装软件

有时候,软件并没有收录到软件仓库中,这时就需要下载软件包文件进行安装了。在基于Debian的操作系统上,dpkg命令可以处理单独的软件包文件,如果一个软件包没有满足依赖,可以使用gdebi命令从官方仓库中安装依赖包。在CentOS和Fedora系统上,yum和dnf用来安装软件包文件,它们同时处理了依赖。

系统 命令 说明
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-get 和 apt-cache。较少为人所知的是简化的 apt 接口,它是专为交互式使用而设计的。虽然 apt 通常是一个特定操作的快捷方式,但它并不能完全替代传统的工具,它的接口可能会随着版本的不同而发生变化,以提高可用性。如果你在脚本或 shell 管道中使用包管理命令,那么最好还是坚持使用 apt-get 和 apt-cache。

传统命令 等价的 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

 

获得帮助

万能的man命令,除了基于 web 的文档,请记住我们可以通过 shell 从 Unix 手册页(通常称为 man 页面)中获得大多数的命令。比如要阅读某页,可以使用 man: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 集合一起工作

 

相关主题

Ubuntu 16.04 LTS软件包管理基本操作

精选文章
热门文章