在最开始介绍Linux发行版分类时曾提到过是按照软件包打包格式分为如下三大类:

  • Debian系列: 软件包后缀格式为.deb,软件包管理命令为apt
  • Red Hat系列: 软件包后缀格式为.rpm, 软件包管理命令为yumdnfzypper
  • ArchLinux系列: 软件包后缀格式为.pkg.tar.zst, 软件包管理命令为pacman
  • GentooLinux系列:软件包从源代码构建,GentooLinux为用户提供了大量的应用程序源代码,软件包管理命令工具为emerge

apt包管理器用法

APT高级打包工具(英语:Advanced Packaging Tools,缩写为APT)是Debian及其派生的Linux软件包管理器。APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端,用来处理deb格式的软件包。现在经过APT-RPM组织修改,APT已经可以安装在支持RPM的系统管理RPM包。

  • 安装软件 : apt install <package>
  • 删除软件 : apt remove <package>
  • 查找软件 : apt search <package-name>
  • 更新软件 : apt update
  • 软件源配置文件: /etc/apt/sources.list.d/*.list 自定义软件源配置文件
  • 更新软件源缓存: apt update
  • 清理软件源缓存: 无

yum包管理器用法

Yum(Yellowdog Updater, Modified),是由Duke University团队修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于RPM包管理的字符前端软件包管理器。能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。被Yellow Dog Linux本身,以及Fedora、Red Hat Enterprise Linux采用。

  • 安装软件 : yum install <package>
  • 删除软件 : yum remove <package>
  • 查找软件 : yum search <package-name>
  • 更新软件 : yum update
  • 软件源配置文件: /etc/yum.repos.d/*.repo 自定义软件源配置文件
  • 更新软件源缓存: yum makecache
  • 清理软件源缓存: yum clean all

DNF包管理器(yum的下一代替代版)

DNF,全称Dandified Yum,是RPM发行版的软件包管理器Yellowdog Updater, Modified(yum)的下一代版本。DNF最早出现在Fedora 18中,并在Fedora 22、RHEL8中替代yum。DNF旨在解决部分yum已知的不足之处,包括糟糕的性能、高内存使用、缓慢的迭代拓扑排序。

简单说下DNF替代了Yum的主要原因:

  • 庞大而复杂的内部代码集,这也是任何一款软件产品发展到一定阶段常常要面临的难题,有时候重新实现某一功能要比在它基础上改造要简单的多。
  • Python的终结,Yum是使用Python实现的,迁移到Python3可能改造可能有巨大的困难且毫无意义,倒不如重新实现来的简单且更好,最新版本的DNF改用C/C++来实现,并将大部分功能封装到了libdnf库中,以便对外提供API。
  • 解决软件包的安装依赖关系的解析速度和性能问题,让安装包更加智能的解析依赖关系。

既然是替代方案,当然用法差异并不大,接下来了解下DNF软件包管理器的用法:

  • 安装软件 : dnf install <package>
  • 删除软件 : dnf remove <package>
  • 查找软件 : dnf search <package-name>
  • 更新软件 : dnf update
  • 软件源配置文件: /etc/yum.repos.d/*.repo(配置目录兼容yum,实际上yum命令是dnf命令的软链接)
  • 更新软件源缓存: dnf makecache
  • 清理软件源缓存: dnf clean all

现在我们在CentOS8中看到的yum其实已经是dnf命令的软链接了。

ZYPPER包管理器用法

zypperSuSe Linux分支默认的包管理器工具,采用了一种称为布尔可满足性问题算法计算软件包依赖性问题,简单的来说就是分析出依赖关系后,将软件依赖包安装选择权和决策权交给用户自己决策。

  • 安装软件 : zypper install <package>
  • 删除软件 : zypper remove <package>
  • 查找软件 : zypper search <package-name>
  • 更新软件 : zypper update
  • 软件源配置文件: /etc/zypp/repos.d/*.repo
  • 更新软件源缓存: zypper refresh
  • 清理软件源缓存: zypper clean

Pacman包管理器用法

Pacman是一个软件包管理器,作为Arch Linux发行版的一部分。它最早由Arch Linux的Judd Vinet开发。Pacman可以解决安装过程中的依赖问题,自动下载并且安装所有需要的软件包。

最初的pacman很慢。这是因为您要引用的镜像服务器与您网络距离太远,传输速度太慢。
因此,有必要在使用前使用下面命令自动执行镜像优化。

# 测试并选择延迟最低的镜像源地址(通过-c参数选择国家)
$ sudo pacman-mirrors -g -c China

# 更新软件源本地缓存
$ sudo pacman -Sy
  • 安装软件 : pacman -S <package>-Sw选项只下载不安装
  • 升级所有版本比源列表低的包: pacman -Su
  • 删除软件 : pacman -R <package>
  • 查找软件 : pacman -Ss <package>
  • 查找软件 : pacman -Qs <package>(查找本地安装软件)
  • 更新软件 : pacman -U <package> ,软件包可以是软件包名字、本地路径,也可以是URL地址。
  • 软件源配置文件: /etc/pacman.conf
  • 更新软件源缓存: pacman -Sy
  • 清理软件源缓存: pacman -Sc(清理安装后临时缓存的软件包), -Scc选项彻底清理所有缓存信息。

portage包管理用法

gentoo的包管理工具称为portage。emerge是这个portage的字符界面管理工具,图形界面工具还有portato,porthole,kuroo,himerge等。

emerge常用命令有:

  • 同步portage:emerge --sync 或 emerge-webrsync
  • 升级所有的软件包:emerge -uDN @world
  • 重编译所有的软件包:emerge -e @world

特立独行的软件安装方法

上面列举的软件包管理工具都是重点考虑如何解决软件包依赖问题,而有些软件安装方法就不需要这种考虑,这类软件被称为(portable software)便携软件,在Windows系统中被称做绿色软件,这类软件不需要安装就可以直接使用。

不依赖于特定发行版的包装格式在Linux生态系中在Flatpak前早已被提出过数次。
2000年代早期,autopackage开始,2004年则是klik,这也提供了Alexander Larsson灵感,于2007年开发出glick项目。
到了2014年,klik便演化成AppImage,其目标是成为不依赖于特定散布版的便携式上游打包格式。
Canonical公司则于2016年发布了Snappy,其目标也是为了提供广泛的linux生态系一个通用的包装格式,其支持类似于Flatpak的格式,同时也支持应用程序商店式的数字发行与更新模式。

下面列举一些常见的便携软件

  • AppImage : 核心思想是一个应用程序 = 一个文件,下载即用,非常适合无需root权限的软件。您可以阅读官网文档了解如何制作、使用一款AppImage更多介绍。使用示例: AnotherRedisDesktopManager
  • Flatpak : 口号是Linux系统上的软件的未来Flatpak的目标是在用户想要运行他们可能并不完全信任的应用软件时提供一个安全的沙盒环境供用户使用。应用程序将必须使用由flatpak提供的函数调用来控制硬件设备或访问用户的文件,而flatpak将会在给予应用程序访问权限前提示用户。Flatpak允许应用程序开发人员直接向用户提供更新,而无需通过发行版,而不必为每个发行版分别打包和测试应用程序。提升了软件更新的速度但也可能会降低稳定性。您可以访问Flathub软件仓库获取更多软件。
  • Snappy : 用过Ubuntu的人一定使用过这类软件,这类软件包最初设计是应用于Ubuntu Core系统的移动端、云、物联网平台, snap格式包是一种可以由主机操作系统动态挂载的压缩的文件系统,其中还附有元数据声明,snap系统可以据其为应用程序设置适当的安全沙箱或容器。安装snap软件后执行df命令,你可以看到多了/dev/loopX文件系统。

flatpak

总结

本文介绍了Linux系统大多数发行版可能使用的软件包管理工具,根据软件包格式分为三大主流派系:DebianRed HatPacman

接着介绍了三大派系当前使用最广泛的软件包管理器以及使用方法。

古人云:天下大势,分久必合。总有一些人在想着解决软件包依赖问题,以及各种软件包如何可以在所有Linux发行版中通用,因此就出现了AppImageFlatpakSnap。从现在(2020年)的使用情况来看,未来很可能属于Flatpak的。



悟空的学习笔记
8 声望1 粉丝

阳光总在风雨后