问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Ubuntu 软件包管理:apt、snap 和 Flatpak 如何选择

创作时间:
作者:
@小白创作中心

Ubuntu 软件包管理:apt、snap 和 Flatpak 如何选择

引用
CSDN
1.
https://blog.csdn.net/crazyjinks/article/details/146481226

在Ubuntu系统中,软件包管理是每位用户都必须面对的基础任务。从经典的apt到新兴的snap和Flatpak,不同的包管理工具各有优劣。本文将深入探讨这三种主流的软件包管理方案,帮助你根据具体需求做出最佳选择。

作为一名Ubuntu用户,你可能对apt-get命令非常熟悉。多年来,apt(Advanced Package Tool)一直是Debian系Linux发行版(包括Ubuntu)的标准软件包管理工具。它使用.deb软件包,自动解决依赖关系,极大地简化了软件安装过程。Ubuntu甚至还提供了一个图形化的软件商店,方便用户通过UI安装软件。

然而,随着软件包管理技术的不断发展,以及对安全性、隔离性和跨发行版兼容性的需求日益增长,新的软件包管理方案应运而生。其中,Canonical公司推出的snap和社区驱动的Flatpak尤为引人注目。

本文将简要探讨apt、snap和Flatpak这三种软件包管理方案,分析它们的特点、优缺点,并最终给出针对不同用户场景的推荐。

apt (原 apt-get):Debian 系的经典传承

为什么需要包管理器?

在早期的Linux系统中,安装软件通常需要手动下载源代码、解决复杂的依赖关系、编译、安装,整个过程繁琐且容易出错。为了简化软件安装和管理,包管理器应运而生。

包管理器就像一个软件管家,它负责:

  • 自动下载和安装软件:用户只需输入简单的命令,包管理器就会自动从软件仓库下载软件包并安装。
  • 解决依赖关系:软件通常依赖于其他软件或库,包管理器会自动处理这些依赖关系,确保软件能够正常运行。
  • 管理已安装的软件:包管理器可以方便地更新、卸载、查询已安装的软件。
  • 维护系统完整性:包管理器可以跟踪软件包之间的关系,防止误删重要文件或破坏系统稳定性。

apt 与 yum:两大阵营

在Linux世界中,存在着两大主流的包管理器阵营:

  • Debian系:以apt为代表,使用.deb软件包格式。Debian、Ubuntu、Linux Mint等发行版都属于这一阵营。
  • Red Hat系:以yum(Yellowdog Updater, Modified)为代表,使用.rpm软件包格式。Red Hat Enterprise Linux (RHEL)、CentOS、Fedora等发行版属于这一阵营。

apt和yum的主要区别在于它们所使用的软件包格式和软件仓库不同。.deb和.rpm是两种不同的软件包格式,它们包含了软件的二进制文件、配置文件、依赖信息等。不同的发行版维护着自己的软件仓库,其中包含了各种软件包。

Ubuntu 与 Debian 的关系

Ubuntu是基于Debian的Linux发行版。Debian是一个历史悠久、以稳定性和自由软件精神著称的Linux发行版。Ubuntu在Debian的基础上进行了改进和优化,增加了易用性、用户友好的桌面环境,以及更频繁的软件更新。

Ubuntu继承了Debian的apt软件包管理系统,并在此基础上进行了扩展和完善。因此,Ubuntu用户可以使用apt命令来管理软件,并享受Debian庞大的软件仓库和社区支持。

apt 的核心优势与不足

apt的核心优势在于其强大的依赖管理能力,能够自动解决软件包之间的依赖问题,这在Linux软件安装历史上是一大进步。

优点:

  • 成熟稳定:经过多年发展,apt已经非常成熟稳定,拥有庞大的软件仓库和广泛的社区支持。
  • 依赖管理:自动解决软件包之间的依赖关系,简化安装过程。
  • 速度快:由于软件包直接安装到系统,启动速度通常较快。
  • 资源占用少:软件包不包含冗余依赖,占用磁盘空间较少。
  • Debian/Ubuntu生态支持:依托Debian和Ubuntu庞大的社区和软件仓库。

缺点:

  • 安全性相对较低:.deb软件包安装后可以访问系统任何位置,存在潜在安全风险。
  • 版本冲突:多个软件可能依赖同一库的不同版本,导致版本冲突。
  • 跨发行版兼容性差:.deb软件包主要用于Debian系发行版。
  • PPA风险:某些软件可能需要通过PPA (Personal Package Archive)安装,而PPA的质量参差不齐,存在安全风险。

常用命令:

  • sudo apt update:更新软件源列表。
  • sudo apt upgrade:更新已安装的软件包。
  • sudo apt install <package_name>:安装软件包。
  • sudo apt remove <package_name>:卸载软件包(保留配置文件)。
  • sudo apt --purge remove <package_name>:卸载软件包并清除配置文件。
  • sudo apt autoremove:卸载不再需要的依赖包。
  • sudo apt clean:清理已下载的软件包缓存。
  • apt search <keyword>:搜索软件包。
  • apt list --installed:列出已安装的软件包。

apt使用的.deb软件包最初由Debian Linux推出,并被Ubuntu继承。apt的核心优势在于其强大的依赖管理能力,能够自动解决软件包之间的依赖问题,这在Linux软件安装历史上是一大进步。

优点:

  • 成熟稳定:经过多年发展,apt已经非常成熟稳定,拥有庞大的软件仓库和广泛的社区支持。
  • 依赖管理:自动解决软件包之间的依赖关系,简化安装过程。
  • 速度快:由于软件包直接安装到系统,启动速度通常较快。
  • 资源占用少:软件包不包含冗余依赖,占用磁盘空间较少。
  • Debian/Ubuntu生态支持

缺点:

  • 安全性相对较低:.deb软件包安装后可以访问系统任何位置,存在潜在安全风险。
  • 版本冲突:多个软件可能依赖同一库的不同版本,导致版本冲突。
  • 跨发行版兼容性差:.deb软件包主要用于Debian系发行版。
  • PPA风险:某些软件可能需要通过PPA (Personal Package Archive)安装,而PPA的质量参差不齐,存在安全风险。

常用命令:

  • sudo apt update:更新软件包列表,获取最新的软件包信息
  • sudo apt upgrade:升级已安装的软件包到最新版本
  • sudo apt install <package_name>:安装指定的软件包
  • sudo apt remove <package_name>:卸载指定的软件包(保留配置文件)
  • sudo apt --purge remove <package_name>:卸载指定的软件包并清除配置文件
  • sudo apt autoremove:自动移除不再需要的依赖包
  • sudo apt clean:清理已下载的软件包缓存,释放磁盘空间
  • apt search <keyword>:根据关键词搜索软件包
  • apt list --installed:列出所有已安装的软件包

snap:容器化与安全性

snap是Canonical公司推出的全新软件包管理方案,它采用了一种类似容器的技术,将应用程序及其所有依赖打包在一起,形成一个独立的、隔离的运行环境。

优点:

  • 安全性高:snap软件包运行在沙盒环境中,与系统隔离,降低了安全风险。
  • 依赖隔离:每个snap软件包都包含其所有依赖,避免了版本冲突问题。
  • 自动更新:snap软件包默认自动更新,保持软件最新。
  • 跨发行版兼容性:snap软件包可以在多个Linux发行版上运行。
  • 易于回滚:snap支持版本回滚,方便恢复到之前的版本。

缺点:

  • 闭源:snap商店是闭源的,由Canonical控制,这与Linux社区的开源精神相悖。
  • 性能:由于采用容器化技术,snap软件包的启动速度可能较慢,尤其是在首次启动时。
  • 体积大:snap软件包包含所有依赖,导致体积较大,占用更多磁盘空间。
  • 中心化:snap商店是中心化的,所有软件包都必须通过Canonical的审核才能发布。
  • 强制使用?:Ubuntu有时会强制使用snap,即使你使用apt install命令安装软件,也可能安装的是snap版本。比如之前有人吐槽的apt install chromium,会发现安装的是snap版本,虽然这是因为chromium-browser is deb package and chromium is snap package。但是snap的引入,导致了这种使用习惯上的问题。
  • 图形化商店不友好

常用命令:

  • snap find <keyword>:搜索snap软件包。
  • snap install <package_name>:安装snap软件包。
  • snap refresh <package_name>:更新snap软件包。
  • snap remove <package_name>:卸载snap软件包。
  • snap list:列出已安装的snap软件包。
  • snap revert <package_name>:回滚到之前的版本。

snap find <keyword>:搜索 Snap 软件包
snap install <package_name>:安装指定的 Snap 软件包
snap refresh <package_name>:更新指定的 Snap 软件包
snap remove <package_name>:卸载指定的 Snap 软件包
snap list:列出已安装的 Snap 软件包
snap revert <package_name>:将指定的 Snap 软件包回滚到之前的版本

Flatpak:社区驱动与去中心化

Flatpak是一个社区驱动的软件包管理方案,它也采用了容器化技术,但与snap不同的是,Flatpak是完全开源和去中心化的。

优点:

  • 开源:Flatpak是完全开源的,符合Linux社区的开源精神。
  • 去中心化:Flatpak没有中心化的商店,用户可以从多个仓库安装软件包。
  • 安全性:Flatpak软件包也运行在沙盒环境中,提供良好的安全性。
  • 依赖共享:Flatpak支持运行时共享,多个软件包可以共享相同的依赖,减少磁盘空间占用。
  • 友好的图形界面商店:Flathub提供了完善的图形界面商店,方便用户浏览和管理Flatpak软件包。

缺点:

  • 成熟度:相比apt和snap,Flatpak相对较新,某些软件可能没有Flatpak版本。
  • 依赖管理:虽然支持运行时共享,但Flatpak的依赖管理不如apt成熟。
  • 性能:容器化技术也可能导致Flatpak软件包启动速度较慢。

常用命令:

  • flatpak search <keyword>:搜索Flatpak软件包。
  • flatpak install <remote> <package_name>:从指定仓库安装Flatpak软件包。
  • flatpak update <package_name>:更新Flatpak软件包。
  • flatpak uninstall <package_name>:卸载Flatpak软件包。
  • flatpak list:列出已安装的Flatpak软件包。
  • flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo:添加Flathub仓库。

flatpak search <keyword>:搜索 Flatpak 软件包
flatpak install <remote> <package_name>:从指定的远程仓库安装 Flatpak 软件包 (通常 是 flathub)
flatpak update <package_name>:更新指定的 Flatpak 软件包
flatpak uninstall <package_name>:卸载指定的 Flatpak 软件包
flatpak list:列出已安装的 Flatpak 软件包
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo:添加 Flathub 仓库(如果尚未添加)

总结与建议

apt、snap和Flatpak各有优缺点,适用于不同的场景:

  • apt:成熟稳定,速度快,资源占用少,适合服务器环境和对性能要求较高的场景。但安全性相对较低,小可能存在版本冲突问题。
  • snap:安全性高,依赖隔离,自动更新,适合需要高安全性和最新软件的场景。但闭源、性能、体积和中心化是其主要问题。
  • Flatpak:开源、去中心化、安全性高,适合桌面用户和注重开源精神的场景。但成熟度和依赖管理仍有提升空间。

针对不同用户场景的建议:

  • 桌面用户:推荐使用Flatpak。Flathub提供了友好的图形界面商店,方便浏览和安装软件。Flatpak的开源、去中心化特性也更符合Linux社区的精神。

  • SSH开发者:仍然推荐使用apt。apt成熟稳定,速度快,资源占用少,更适合服务器环境和命令行操作。

  • 临时试用:由于apt remove命令不会自动移除不再需要的依赖包,而需要手动执行apt autoremove来清理,这在需要频繁安装、卸载软件,或者希望保持系统干净整洁的场景下,可能会略显繁琐。相比之下,Snap的设计理念之一就是提供一种更“干净”的安装和卸载体验。snap remove命令会移除Snap软件包及其所有相关数据和依赖(在Snap的沙盒环境中),无需额外的清理步骤。因此,如果你更看重软件卸载的彻底性和便捷性,或者希望尽量减少对系统的潜在影响(例如在试用软件或临时使用软件时),Snap可能会是更方便的选择。

最终结论:

对于喜欢桌面环境的用户,Flatpak的商店界面友好,是更好的选择。对于喜欢通过SSH进行开发的开发者,apt install仍然是首选,因为它成熟稳定,速度快,资源占用少。snap由于其闭源特性和Canonical的强制推广,个人认为其很难在Linux市场上长期立足。但是因为开箱即用嘛,我可以在snap install一下,当然后续flatpak生态持续完善后,snap开箱即用的优势也荡然无存了。我们拭目以待吧。

希望本文能帮助你更好地理解Ubuntu上的各种软件包管理方案,并根据自己的需求做出明智的选择。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号