软件包管理工具是一组命令的集合,其作用是在操作系统中提供安装、更新、删除及卸载软件的方法,同时提供对系统中所有软件状态信息的查询。在不同的操作系统中,确实存在不同的默认包管理工具。以下是一些常见的操作系统的默认包管理工具。
| 包管理器 | 包格式 | 适用操作系统/发行版 | 简要说明 |
|---|---|---|---|
| apt | .deb |
Ubuntu、Debian 及其衍生发行版 | Debian 系默认工具链。apt 是高层命令(如 apt install),底层由 dpkg 处理 .deb 包安装。支持依赖自动解析、仓库管理。 |
| yum | .rpm |
CentOS 7 及更早、RHEL 7、旧版 Fedora | 基于 RPM 的传统包管理器,依赖解析较慢,已被 DNF 取代。 |
| DNF | .rpm |
Fedora(≥22)、RHEL 8+、CentOS Stream | YUM 的下一代替代品,使用 libsolv 进行快速依赖解析,性能更好,内存占用更低。 |
| zypper | .rpm |
openSUSE(Tumbleweed / Leap) | 功能强大,支持事务回滚(结合 Btrfs/Snapper),交互式体验好。 |
| pacman | 自定义二进制包(.pkg.tar.zst 等) |
Arch Linux、Manjaro | 极简高效,单命令完成安装/更新/清理。滚动更新模型,软件版本新。 |
| pkgtools | .tgz / .txz(压缩 tarball) |
Slackware | 最古老的 Linux 包管理系统之一,无自动依赖解析,强调“KISS”原则(Keep It Simple, Stupid)。 |
| winget | 多种(MSIX、EXE、MSI 等) | Windows 10(1709+)、Windows 11 | 微软官方包管理器,通过清单(YAML)描述安装源,支持从 GitHub 或私有源安装应用。 |
| Chocolatey | nupkg(基于 NuGet) |
Windows | 第三方包管理器,需管理员权限。支持自动化脚本、企业部署,社区和商业版本并存。 |
| Scoop | JSON 清单(描述安装方式) | Windows(推荐 PowerShell + 用户权限) | 轻量级,面向开发者。默认安装到用户目录(无需管理员),支持 buckets(类似仓库)扩展。 |
由于生态的复杂性,Windows 系统至今未出现一个一统江湖的包管理器。
apt/apt-get(Ubuntu、Debian)
apt 是 ubuntu 系统默认的软件包管理工具,是 apt-get 的现代改进版本,旨在提供更简洁、更友好的用户体验。在 shell 中通常使用 apt,因为可以少打 4 个字符。在脚本中安装软件通常使用 apt-get,兼容性更好,实现更底层。
apt 的基本语法
| apt | apt-get | 命令含义 |
|---|---|---|
| apt install <包名> | apt-get install <包名> | 安装软件包 |
| apt remove <包名> | apt-get remove <包名> | 移除软件包 |
| apt purge <包名> | apt-get purge <包名> | 移除软件包及配置文件 |
| apt update | apt-get update | 刷新存储库索引 |
| apt upgrade | apt-get upgrade | 升级所有可升级的软件包 |
| apt autoremove <包名> | apt-get autoremove <包名> | 自动删除所有不需要的软件包 |
| apt full-upgrade | apt-get dist-upgrade | 在升级软件包时自动处理依赖关系 |
| apt search <正则表达式> | apt-cache search <正则表达式> | 搜索应用程序 |
| apt show <包名> | apt-cache show <包名> | 显示安装细节 |
| apt clean | apt-get clean | 清理已下载的软件包,不会影响软件的正常使用 |
| apt autoclean | apt-get autoclean | 删除已经卸载的软件的软件包备份 |
apt 的使用(wget为例)
◾更新存储库
apt 从软件源安装软件,它需要在本地维护一个软件源的存储库,这样就能在存储库中搜索软件包了。但软件源中的软件包信息是频繁更新的,如果你想使用更新版本的软件,你就需要先更新本地的存储库,再进行软件安装。
apt update
◾搜索软件包
apt search ^wget
◾安装软件包
apt install wget
# 使用 dpkg 安装软件包
dpkg -i xx.deb
◾查看软件包
# 查看本地是否安装 wget
apt list | grep ^wget
# 查看软件包的具体信息
apt show wget
# 查看软件包对应的文件信息
dpkg -L rstudio-server
◾卸载软件包
# 卸载软件,保留相关文件
apt remove rstudio-server
# 卸载软件并删除相关文件
apt autoremove rstudio-server
◾更新软件包
# 先更新存储库,确保获取到更新的版本包信息
apt update
# 更新系统中所有的软件包,使用 installing/upgrading packages 的方式来处理依赖
apt upgrade
# 更新系统中所有的软件包,使用 removing/installing/upgrading packages 的方式来处理依赖
apt full-upgrade
yum(CentOS、RHEL)
yum 是一种基于 RPM 包管理系统的包管理工具,它是在基于 Red Hat 的 Linux 发行版中默认提供的。Red Hat Enterprise Linux (RHEL)、CentOS 和 Fedora 等许多常见的 Linux 发行版都默认安装了 yum。它是一个强大而常用的工具,用于在 Linux 系统中方便地管理软件包的安装、更新和卸载。
yum 的命令形式为:yum [options] [command] [package ...]。其中 [package ...] 是操作的对象,[command] 为所要进行的操作,包括 install、update、remove、list 等,而 [options] 是可选项,包括:
-h—– 帮助-y—– 当安装过程提示选择全部为"yes"-q—– 不显示安装的过程- ……
以下是一些常用的 yum 命令和功能:
| yum | 命令含义 | 说明 |
|---|---|---|
| yum install <包名> | 安装软件包 | 使用 yum install 命令安装指定的软件包 |
| yum update | 更新软件包 | 使用 yum update 命令更新系统中已安装的软件包到最新版本 |
| yum upgrade | 升级系统 | 使用 yum upgrade 命令升级整个系统以获取最新的软件包和安全修复 |
| yum search <关键字> | 搜索软件包 | 使用 yum search 命令搜索软件包的名称或关键字 |
| yum list installed | 列出已安装的软件包 | 使用 yum list installed 命令列出系统中已安装的软件包 |
| yum remove <包名> | 删除软件包 | 使用 yum remove 命令卸载指定的软件包 |
| yum clean all | 清理缓存 | 使用 yum clean 命令清理 yum 的缓存文件,以释放磁盘空间 |
zypper(OpenSUSE)
Zypper 是 OpenSUSE 和企业版 SUSE 中软件包管理器 ZYpp 的命令行接口。 主要用于管理软件包(用来安装、删除、更新和查询本地或远程的软件包),以及管理仓库(用命令行添加、删除、启用或禁用库)。
以下是一些常用的 zypper 命令和功能:
| zypper | 命令含义 | 说明 |
|---|---|---|
| zypper install <包名> | 安装软件包 | |
| zypper source-install <包名> | 安装源码包 | |
| zypper update <包名> | 更新某一软件包 | |
| zypper update | 更新所有软件包 | |
| zypper list-updates | 查看所有可用的更新列表 | |
| zypper remove <包名> | 删除软件包 | |
| zypper search <关键字> | 搜索软件包 | |
| zypper info <包名> | 查看有关包的信息 | |
| zypper patches | 查看所有可打补丁 | |
| zypper patch <补丁名> | 安装指定补丁 | |
| zypper al <包名> | 锁住软件包(al 是 add lock的缩写) | 软件包被锁之后将不能被移除或升级 |
| zypper ll | 查看所有已被锁住的软件包 | |
| zypper rl <包名> | 解锁软件包(rl 是 remove lock的缩写) |
常用包管理操作
◾安装包
# 示例:安装Mozilla firefox
[root@linuxprobe ~]# zypper install MozillaFirefox
Loading repository data...
Reading installed packages...
Resolving package dependencies...
The following NEW packages are going to be installed:
MozillaFirefox MozillaFirefox-branding-SLED
The following packages are not supported by their vendor:
MozillaFirefox MozillaFirefox-branding-SLED
2 new packages to install.
Overall download size: 964.0 KiB. After the operation, additional 3.4 MiB will be used.
Continue? [y/n/?] (y): y
Retrieving package MozillaFirefox-3.6.16-0.2.1.x86_64 (1/2), 949.0 KiB (3.4 MiB unpacked)
Retrieving: MozillaFirefox-3.6.16-0.2.1.x86_64.rpm [done]
Installing: MozillaFirefox-3.6.16-0.2.1 [done]
Retrieving package MozillaFirefox-branding-SLED-3.5-1.1.5.x86_64 (2/2), 15.0 KiB (34.0 KiB unpacked)
Retrieving: MozillaFirefox-branding-SLED-3.5-1.1.5.x86_64.rpm [done]
Installing: MozillaFirefox-branding-SLED-3.5-1.1.5 [done]
◾安装源码包
# 示例:从库中安装 apache
[root@linuxprobe ~]# zypper source-install apache2-mod_nss
Reading installed packages...
Loading repository data...
Resolving package dependencies...
Retrieving package mozilla-nss-devel-3.12.8-1.2.1.x86_64 (2/3), 473.0 KiB (2.6 MiB unpacked)
Retrieving: mozilla-nss-devel-3.12.8-1.2.1.x86_64.rpm [done]
Installing: mozilla-nss-devel-3.12.8-1.2.1 [done]
Retrieving: apache2-mod_nss-1.0.8-17.5.src.rpm [done]
◾删除包
# 示例:移除 Mozilla Firefox
[root@linuxprobe ~]# zypper remove MozillaFirefox
Loading repository data...
Reading installed packages...
Resolving package dependencies...
The following packages are going to be REMOVED:
MozillaFirefox MozillaFirefox-branding-SLED
2 packages to remove.
After the operation, 3.4 MiB will be freed.
Continue? [y/n/?] (y): y
Removing MozillaFirefox-branding-SLED-3.5-1.1.5 [done]
Removing MozillaFirefox-3.6.16-0.2.1 [done]
◾查找包
# 示例:查找所有usb开头的软件包
[root@linuxprobe ~]# zypper search usb*
Loading repository data...
Reading installed packages...
S | Name | Summary | Type
--+---------------------+----------------------------------------------------------------+--------
| usb_modeswitch | A mode switching tool for controlling multiple-device USB gear | package
| usb_modeswitch-data | A mode switching tool for controlling multiple-device USB gear | package
| usbip-devel | Headers and static libraries | package
i | usbutils | Tools and libraries for USB devices | package
◾查看软件包详情
# 示例:查看usbutils的信息
[root@linuxprobe ~]# zypper info usbutils
Loading repository data...
Reading installed packages...
Information for package usbutils:
Repository: LINUXPROBE
Name: usbutils
Version: 0.73-38.19
Arch: x86_64
Vendor: SUSE LINUX Products GmbH, Nuernberg, Germany
Support Level: unknown
Installed: Yes
Status: up-to-date
Installed Size: 461.0 KiB
Summary: Tools and libraries for USB devices
Description:
This package contains a utility for inspecting devices connected to USB
ports.
It requires kernel version 2.3.99-pre7 or newer, or the USB backport
which was introduced in 2.2.18 (supporting the /proc/bus/usb
interface).
◾锁住包
# 锁住包文件 usbutils
[root@linuxprobe ~] # zypper al usbutils
Specified lock has been successfully added.
# 查看所有已被锁住的软件包, ll 是 List Locks的缩写
[root@linuxprobe ~] # zypper ll
# | Name | Type | Repository
--+-----------------+---------+-----------
1 | usbutils | package | (any)
◾解锁包
# 加rl选项解锁 usbutils, rl 是 remove lock的缩写
[root@linuxprobe ~] # zypper rl usbutils
1 lock has been successfully removed.
[root@linuxprobe ~] # zypper ll
There are no package locks defined.
管理软件包仓库
◾用 zypper 添加库
# 语法:
zypper addrepo
#
[root@linuxprobe ~] # zypper addrepo --check --refresh --name "Mozilla-repo" http://download.opensuse.org/repositories/mozilla/SLE_11/ "Mozillarepo"
Adding repository 'Mozilla-repo' [done]
Repository 'Mozilla-repo' successfully added
Enabled: Yes
Autorefresh: Yes
URI: http://download.opensuse.org/repositories/mozilla/SLE_11/
◾创建本地库
# 我们可以使用zypper从本地目录中创建一个包含所有rpm文件的本地库
# 语法:
zypper addrepo
#
# 示例:创建一个名为Linuxprobe_Repo的本地目录,包含所有rpm文件
[root@linuxprobe ~] # zypper addrepo /var/stormgt/dsminst Linuxprobe_Repo
Adding repository 'Linuxprobe_Repo' [done]
Repository 'Linuxprobe_Repo' successfully added
Enabled: Yes
Autorefresh: No
URI: dir:///var/stormgt/dsminst
[root@linuxprobe ~] # zypper search --repo Linuxprobe_Repo
Loading repository data...
Reading installed packages...
S | Name | Summary | Type
--+-------------+-----------------------------------------+--------
i | TIVsm-API | the API | package
i | TIVsm-API64 | the API | package
i | TIVsm-BA | the Backup Archive Client | package
i | gskcrypt32 | IBM GSKit Cryptography Runtime | package
i | gskcrypt64 | IBM GSKit Cryptography Runtime | package
i | gskssl32 | IBM GSKit SSL Runtime With Acme Toolkit | package
i | gskssl64 | IBM GSKit SSL Runtime With Acme Toolkit | package
注:你也可以通过此命令添加NFS或FTP路径
◾查看库
[root@linuxprobe ~] # zypper lr
# | Alias | Name | Enabled | Refresh
--+--------------------------------------------------+--------------------------------------------------+---------+--------
1 | Mozillarepo | Mozilla-repo | Yes | Yes
2 | SUSE-Linux-Enterprise-Server-11-SP1 11.1.1-1.152 | SUSE-Linux-Enterprise-Server-11-SP1 11.1.1-1.152 | Yes | Yes
#
# 查看repo完整的URI:
[root@linuxprobe ~] # zypper lr --uri
# | Alias | Name | Enabled | Refresh | URI
--+--------------------------------------------------+--------------------------------------------------+---------+---------+----------------------------------------------------------
1 | Mozillarepo | Mozilla-repo | Yes | Yes | http://download.opensuse.org/repositories/mozilla/SLE_11/
2 | SUSE-Linux-Enterprise-Server-11-SP1 11.1.1-1.152 | SUSE-Linux-Enterprise-Server-11-SP1 11.1.1-1.152 | Yes | Yes | http://19.106.65.64/FUSELinux/600RC0
◾在库中搜索包
# 列出指定库Mozillarepo的所有软件包
[root@linuxprobe ~] # zypper search --repo Mozillarepo
Loading repository data...
Reading installed packages...
S | Name | Summary | Type
--+------------------------------------+------------------------------------------+-----------
i | MozillaFirefox | Mozilla Firefox Web Browser | package
i | MozillaFirefox-branding-SLED | SLED branding of MozillaFirefox | package
| MozillaFirefox-branding-openSUSE | openSUSE branding of MozillaFirefox | package
| MozillaFirefox-branding-openSUSE | openSUSE branding of MozillaFirefox | srcpackage
◾库重命名
# 重命名库可以用 renamerepo 选项
# 示例:将库"Linuxprobe_Repo"的名字改成"MyLinuxRepo"
[root@linuxprobe ~] # zypper renamerepo Linuxprobe_Repo MyLinuxRepo
Repository 'Linuxprobe_Repo' renamed to 'MyLinuxRepo'.
◾删除库
# 用removerepo选项来移除库
[root@linuxprobe ~] # zypper removerepo MyLinuxRepo
Removing repository 'MyLinuxRepo' [done]
Repository 'MyLinuxRepo has been removed.
◾备份库
# 用export选项可以备份一系列库文件
[root@linuxprobe ~] # zypper lr --export /var/tmp/backup.repo
Repositories have been successfully exported to /var/tmp/backup.repo.
◾从备份文件中添加库
[root@linuxprobe ~] # zypper addrepo /var/tmp/backup.rep
◾禁用/使用库
# 1
# 示例: 用 modifyrepo 选项的 -d 参数来禁用Mozilla库
[root@linuxprobe ~] # zypper modifyrepo -d Mozillarepo
Repository 'Mozillarepo' has been successfully disabled.
# 2
# 示例: 用 modifyrepo选项 -e 参数来允许使用Mozilla库
[root@linuxprobe ~] # zypper modifyrepo -e Mozillarepo
Repository 'Mozillarepo' has been successfully enabled.
◾刷新库
# 1
# 示例: 刷新Mozilla库
[root@linuxprobe ~] # zypper refresh Mozillarepo
Repository 'Mozilla-repo' is up to date.
Specified repositories have been refreshed.
# 2
# 示例: 自动刷新指定库
[root@linuxprobe ~] # zypper modifyrepo --refresh Linuxprobe_Repo
Autorefresh has been enabled for repository 'Linuxprobe_Repo'.
pacman(Arch Linux、Manjaro)
使用 pacman 包管理器的 Linux 系统有:Arch Linux 及其衍生版本(Manjaro Linux、EndeavourOS、ArcoLinux、Artix Linux)
| pacman | 命令含义 | 说明 |
|---|---|---|
| pacman -S <包名> | 安装软件包 | |
| pacman -Syu <包名> | 更新软件包 | |
| pacman -Syy | 强行更新应用的软件库(源) | |
| pacman -R <包名> | 移除软件包 | |
| pacman -S archlinuxcn-keyring | 安装 archlinuxcn-keyring 包导入 GPG key | |
| pacman -Sy paru | 更新源 | |
| pacman -Ss <关键字> | 搜索含关键字的包 | |
| pacman -Qi <包名> | 查看有关包的信息 | |
| pacman -Ql <包名> | 列出该包的文件 |
pacman 配置文件路径:/etc/pacman.conf
pkgtools(Slackware)
以下是一些常用的 pkgtools 命令和功能:
| pkgtools 命令 | 命令含义 | 说明 |
|---|---|---|
| installpkg <包名>.txz | 安装本地 .txz 软件包(不处理依赖) |
|
| removepkg <包名> | 卸载已安装的软件包 | |
| upgradepkg <旧包> <新包>.txz | 升级软件包(替换旧版本) | |
| pkgtool | 交互式菜单工具(可安装/查看/移除包) | |
| ls /var/log/packages/ | 查看已安装的包列表(非命令,但常用) | |
| grep -r “关键字” /var/log/packages/ | 搜索已安装包中含关键字的包 |
配置文件路径:
# 软件源(mirror)配置(需启用 `slackpkg` 工具)
/etc/slackpkg/mirrors
# 主要包数据库(每个包一个记录文件)
/var/log/packages/
注意:pkgtools 本身 不自动解析依赖,依赖需手动处理。slackpkg 是其扩展工具,支持在线更新。
winget(Windows)
微软官方包管理器。适用版本为 Windows 10 (1709+)、Windows 11 (需安装 App Installer)。
| winget 命令 | 命令含义 | 说明 |
|---|---|---|
| winget install <包标识> | 安装软件 | |
| winget upgrade <包标识> | 升级指定软件 | |
| winget upgrade –all | 升级所有可更新的软件 | |
| winget uninstall <包标识> | 卸载软件 | |
| winget search <关键字> | 搜索可用软件包 | |
| winget show <包标识> | 显示软件包详细信息 | |
| winget list | 列出已安装的可管理软件 | |
| winget source update | 更新软件源 |
配置文件路径:
# 用户配置
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json
源清单仓库:https://github.com/microsoft/winget-pkgs
Chocolatey(Windows)
社区主导的 Windows 包管理器 (商业版由 Chocolatey Inc. 提供)。首次使用需以管理员身份运行 PowerShell 并执行安装脚本。使用 nupkg(基于 NuGet),封装安装脚本,而调用非官方安装程序。
| choco 命令 | 命令含义 | 说明 |
|---|---|---|
| choco install <包名> | 安装软件(如 choco install git) |
|
| choco upgrade <包名> | 升级指定软件 | |
| choco upgrade all | 升级所有已安装软件 | |
| choco uninstall <包名> | 卸载软件 | |
| choco search <关键字> | 搜索软件包 | |
| choco list –local-only | 列出本地已安装的包 | |
| choco info <包名> | 查看包的详细信息 | |
| choco outdated | 检查哪些包有可用更新 |
配置文件路径:
# 配置文件
$env:ChocolateyInstall\config\chocolatey.config
$env:ChocolateyInstall = C:\ProgramData\chocolatey #默认
# 包安装目录
C:\ProgramData\chocolatey\lib\
包仓库:https://community.chocolatey.org/
Scoop(Windows)
开源社区 (GitHub) 维护的 Windows 包管理器,使用普通用户权限调用官方安装程序,无需管理员权限。应用安装在 ~/scoop/apps/,环境变量自动配置。
| scoop 命令 | 命令含义 | 说明 |
|---|---|---|
| scoop install <包名> | 安装软件 | |
| scoop update <包名> | 更新指定软件 | |
| scoop update * | 更新所有已安装软件 | |
| scoop uninstall <包名> | 卸载软件 | |
| scoop search <关键字> | 搜索主 bucket 中的软件 | |
| scoop list | 列出已安装的软件 | |
| scoop info <包名> | 查看包信息 | |
| scoop bucket add <名称> |
添加第三方 bucket |
配置文件路径:
# 用户安装根目录
~\scoop
%USERPROFILE%\scoop
# 配置文件
~\scoop\config.json
# Buckets(仓库)位置
~\scoop\buckets\
首次使用需以 管理员身份运行 PowerShell 并执行安装脚本。默认仅安装到用户目录,无需管理员权限,非常适合开发者工具链管理。