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

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

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

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

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

包管理工具

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

系统软件包文件格式软件包管理工具
Debian.debapt, apt-cache, apt-get, dpkg
Ubuntu.debapt, apt-cache, apt-get, dpkg
CentOS.rpmyum
Fedora.rpmdnf
FreeBSDPorts, .txzmake, pkg

基于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 / Ubuntusudo apt-get update
CentOSyum check-update
Fedoradnf check-update
FreeBSD Packagessudo pkg update
FreeBSD Portssudo portsnap fetch update

升级已安装的软件包

为了确保安装在系统中的软件保持最新,你需要更新软件包。注意,有些软件包在更新时会打破以前的配置。

在FreeBSD系统上,在用portmaster更新系统前,最好读一读/usr/ports/UPDATING。

系统命令注释
Debian / Ubuntusudo apt-get upgrade只更新已安装的软件包
sudo apt-get dist-upgrade也许会添加或移除软件包(为了满足新的软件包依赖)
CentOSsudo yum update
Fedorasudo dnf upgrade
FreeBSD Packagessudo pkg upgrade
FreeBSD Portsless /usr/ports/UPDATING查看升级信息
cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a安装portmaster,然后用它升级安装的ports

查找软件包

大多数发型版提供了图形前端,简单方便。但是快速高效的方法是使用命令行工具操作。

系统命令注释
Debian / Ubuntuapt-cache search search_string
CentOSyum search search_string
yum search all search_string搜索所有字段,包括描述
Fedoradnf search search_string
dnf search all search_string搜索所有字段,包括描述
FreeBSD Packagespkg search search_string通过名字搜索
pkg search -f search_string通过名字搜索,返回全部描述
pkg search -D search_string搜索描述
FreeBSD Portscd /usr/ports && make search name=package通过名字搜索
cd /usr/ports && make search key=search_string搜索评论、描述和依赖

查看特定软件包的信息

当要安装软件包时,读一读软件包的详细描述是很有必要的。

系统命令注释
Debian / Ubuntuapt-cache 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 apt-get install package
sudo apt-get install package1 package2 ...安装多个软件包
sudo apt-get install -y package默认yes
CentOSsudo yum install package
sudo yum install package1 package2 ...
sudo yum install -y package
Fedorasudo dnf install package
sudo dnf install package1 package2 ...
sudo dnf install -y package
FreeBSD Packagessudo pkg install package
sudo pkg install package1 package2 ...
FreeBSD Portscd /usr/ports/category/port && sudo make install从源码编译安装

从本地安装软件

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

系统命令注释
Debian / Ubuntusudo dpkg -i package.deb
sudo apt-get install -y gdebi && sudo 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 / Ubuntusudo apt-get remove package
sudo apt-get autoremove移除不需要的软件包
CentOSsudo yum remove package
Fedorasudo dnf erase package
FreeBSD Packagessudo pkg delete package
sudo pkg autoremove移除不需要的软件包
FreeBSD Portssudo pkg delete package
cd /usr/ports/path_to_port && make deinstall

获得帮助

万能的man命令

系统命令注释
Debian / Ubuntuman apt-get
man apt-cache
man dpkg
CentOSman yum
Fedoraman dnf
FreeBSD Packagesman pkg
FreeBSD Portsman ports

《软件包管理基础:apt, yum, dnf, pkg》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注