在 Linux 和其他基于 Unix 的系统中,软件包管理的生态系统错综复杂,每个系统都有自己的独特的包管理方式,这就给跨平台工作的用户带来了不少麻烦。
Linux 生态里的包管理工具种类繁多,主要如下表所示:
发行版 | 包管理工具 | 简介 |
---|---|---|
Arch Linux 及其衍生版 | Pacman | 界面简洁、易用,自动处理软件依赖问题。 |
Alpine | Alpine Package Keeper (APK) | 轻量级设计,实现软件包的快速安装和更新。 |
Debian 及其衍生版 | Advanced Package Tool (APT) | 功能全面,支持多源管理和丰富的命令行操作。 |
Debian 及其衍生版 | Aptitude | APT 的前端,操作更直观。 |
Ubuntu 及其衍生版 | Snapcraft | Canonical 打造,支持沙盒化安全性和跨平台兼容。 |
基于 RPM 的系统 | Yellowdog Updater, Modified (Yum) | 自动处理依赖,配置管理功能强大。 |
Slackware | Slackpkg | 以简洁的配置和命令行界面著称。 |
Gentoo | Emerge | 支持从源代码编译安装,提供高度自定义选项。 |
Guix | guix 命令 | 命令行工具,用于构建、管理软件包和系统配置。 |
NixOS | nix-env | 支持声明式配置和原子更新,依赖管理能力出众。 |
其它的还有 FreeBSD 上的 pkg、macOS 上的 Homebrew,以及 Windows 上的 Scoop 和 Winget(好像混入了什么奇奇怪怪的东西😁)。
这些工具都有自己独特的命令和逻辑,这就让我们不得不学习多种操作方法来完成相同的任务。
总之,这简直是一团糟……还是说,事情或许有转机?
UPT:一站式 Linux 包管理解决方案
一位名叫 sigoden 的开发者创建了一款名为 Universal Package-management Tool(通用包管理工具,简称 UPT)的强大工具,可以解决 Linux 包管理的纷繁复杂。有了 UPT,就再也不用牢记各种包管理工具的独有「使用哲学」了。
UPT 采用 Rust 编写的,需要先在你的 Ubuntu 或其他 Linux 发行版上安装 Rust 和 Cargo。macOS、Linux 或其他类 Unix 系统,推荐下载 Rustup 安装和管理 Rust 环境。
使用 Cargo 安装 UPT
## 使用 rustup 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
## 安装 upt 命令行工具
cargo install upt
## 复制 upt 文件
sudo cp $HOME/.cargo/bin/upt /usr/local/bin
使用 Cargo 安装 UPT 工具
如果你不想使用 Cargo 安装,也可以直接在 Github 下载编译好的可执行文件。
使用 UPT 管理软件包
UPT 命令速查表
命令 | 功能 |
---|---|
sudo upt update | 更新软件源 |
sudo upt install package_name | 安装软件包 |
sudo upt upgrade package_name | 升级单个软件包 |
sudo upt upgrade | 升级所有软件包 |
sudo upt remove package_name | 卸载软件包 |
sudo upt search package_name | 搜索软件包 |
sudo upt list | 列出所有已安装的软件包 |
sudo upt info package_name | 显示软件包的详细信息 |
sudo upt clean | 清除缓存文件 |
sudo upt help | 显示帮助信息 |
使用 UPT 工具
软件源优先级
如果多个软件源都提供同一个软件包(如 apt、Snap、Flatpak 等),UPT 会根据你设置的优先级来选择。比如要优先使用 Snap,可以使用UPT_TOOL
环境变量:
export UPT_TOOL='snap'
以安装 VLC 为例:
upt install vlc # 不要使用 sudo
通过 UPT 工具安装 Snap 软件包
UPT 会提示输入密码,并自动选择安装 VLC 的 Snap 版本。
虽然安装和使用 UPT 包管理工具需要一些准备工作,但对于熟悉 Linux 的用户来说,应该不是什么难题。
需要注意的是:尽管 UPT 提供了统一的操作命令,但它仍然只是对底层包管理工具的前端封装,并没有统一不同系统中各软件包的名称。也就是说,你还是需要知道不同系统中相应软件包的名称。
比如安装 Python 开发工具包,在不同系统中的命令是这样的:
# 在 Alpine、Debian 和 Ubuntu 上
upt install python3-dev
# 在基于 RPM 的系统上:
upt install python3-devel
# 在 Arch Linux 上
upt install python
如果你使用的是 Ubuntu,也许还会对另一个类似工具 Nala 感兴趣。希望你喜欢这些有趣的命令行工具!