一、背景知识
在基于 Debian 的 Linux 发行版中(如 Ubuntu、Kali、Linux Mint 等),软件的安装、更新和卸载主要通过 包管理器(Package Manager) 来完成。这个包管理器使用 .deb
格式的软件包。
- Debian 以前使用的主要工具是:
dpkg
和apt-get
。 - 后来为了简化用户体验,引入了
apt
命令,它是apt-get
和apt-cache
的一个更友好封装。
二、apt-get
是什么?
apt-get
是 Debian 系统中的一个 底层命令行工具,用于管理软件包(安装、卸载、更新等),属于 APT
(Advanced Package Tool)系统的一部分。
apt-get
的主要功能:
命令 | 作用 |
---|---|
apt-get update | 更新软件包索引(不会升级软件) |
apt-get upgrade | 升级已安装的包 |
apt-get install <package> | 安装包 |
apt-get remove <package> | 卸载包(保留配置) |
apt-get purge <package> | 卸载包及配置 |
apt-get autoremove | 自动移除不再需要的包 |
apt-get clean | 清除下载的软件包缓存 |
apt-get dist-upgrade | 升级系统(可处理依赖变动) |
三、apt
是什么?
apt
是一个在 Ubuntu 16.04(2016年)后加入的命令行工具,目标是替代 apt-get
和 apt-cache
,提供更人性化的语法和输出格式。
它并不是取代 apt-get
,而是对常见命令进行了封装,是一种“更方便的接口”。
apt
的主要命令:
命令 | 作用 |
---|---|
apt update | 更新软件索引 |
apt upgrade | 升级包 |
apt install <package> | 安装包 |
apt remove <package> | 卸载包(保留配置) |
apt purge <package> | 卸载包和配置文件 |
apt autoremove | 自动删除多余包 |
apt list | 列出包信息 |
apt search <keyword> | 搜索软件包 |
apt show <package> | 显示软件包详细信息 |
apt edit-sources | 编辑源列表 |
四、两者的区别总结
对比点 | apt-get | apt |
---|---|---|
出现时间 | 较早,经典命令 | 2016年起,为用户设计 |
定位 | 低层工具,脚本友好 | 面向用户,简洁高效 |
输出格式 | 原始,少美化 | 更美观、结构清晰 |
命令数量 | 更多,复杂 | 精简,覆盖常用操作 |
脚本中使用 | ✅ 推荐 | ❌ 不推荐(可能不稳定) |
✅:适合写 shell 脚本
❌:不建议在生产脚本中使用 apt
(未来可能变更)
五、常见对比示例
操作 | apt-get 命令 | apt 命令 |
---|---|---|
更新索引 | sudo apt-get update | sudo apt update |
安装 nginx | sudo apt-get install nginx | sudo apt install nginx |
卸载包 | sudo apt-get remove nginx | sudo apt remove nginx |
查看包信息 | apt-cache show nginx | apt show nginx |
搜索包 | apt-cache search nginx | apt search nginx |
六、注意事项和最佳实践
- 一般用户(日常使用、排查问题)推荐使用
apt
,更加友好。 - 写脚本或自动化部署,推荐用
apt-get
,兼容性更好。 apt-get dist-upgrade
≈apt full-upgrade
,但apt
推荐使用full-upgrade
。- 使用
apt update
之后,一定要执行apt upgrade
或apt full-upgrade
,才能真正升级已安装的软件。
七、补充:dpkg
的位置
dpkg
是 Debian 的最底层安装工具,不会自动处理依赖。- 通常你使用
.deb
文件手动安装时会用到它:
|
|
如果依赖出错,再用:
|
|
八、常见问题
1. 为什么要先 apt update
才能 install
?
因为系统需要获取最新的软件包列表,否则可能找不到包或安装的是旧版本。
2. 执行 apt upgrade
和 apt full-upgrade
有什么区别?
upgrade
:只升级已安装包,不移除旧依赖。full-upgrade
:升级包 + 移除或替换依赖,风险稍高,但升级彻底。
九、小练习建议
你可以试着执行以下命令熟悉操作(使用前加 sudo
):
|
|
那snap是什么呢?
🧠 一句话定义:
Snap 是一种由 Canonical(Ubuntu 背后公司)开发的软件包格式和包管理系统,用于实现跨发行版、沙箱隔离、自带依赖的软件部署方式。
简单说,它是一种比传统 apt
/.deb
更“现代化”的软件安装方式。
🧱 Snap 和 apt 的核心区别
对比项 | apt / .deb 包 | snap 包(Snapcraft) |
---|---|---|
包格式 | .deb | .snap |
是否自带依赖 | ❌ 不自带,依赖系统库 | ✅ 自带依赖(更独立) |
沙箱隔离 | ❌ 无(完全系统级集成) | ✅ 有(类似 App 容器) |
更新方式 | 手动或半自动更新 | 自动后台更新 |
跨发行版支持 | ❌ 通常只适配 Debian/Ubuntu | ✅ 可跨 Debian、Arch、Fedora、OpenSUSE 等 |
启动速度 | 快 | 相对慢一些(因初始化沙箱环境) |
文件位置 | /usr/bin 等标准位置 | /snap/ 、/var/snap/ 等 snap 专用路径 |
包管理器 | apt 、dpkg | snap 命令 |
📦 Snap 应用的特点
- 打包完整:Snap 包是“自带一切”的,开发者把程序和它的所有依赖打包一起发布。
- 沙箱隔离:Snap 应用在沙箱中运行,不会污染系统环境,类似手机 App。
- 自动更新:Snap 后台每隔一段时间会自动检查并升级应用。
- 统一打包平台:只需打一次包,理论上可在各种 Linux 上运行。
🛠 常见 Snap 命令
|
|
📌 示例:用 Snap 安装 Chromium 浏览器
|
|
这就安装了一个独立、可更新、与系统隔离的 Chromium 浏览器。
🧩 Snap 与其他新型包管理器的比较
包管理系统 | 出品方 | 代表发行版 | 说明 |
---|---|---|---|
Snap | Canonical | Ubuntu | Ubuntu 官方主推,支持沙箱、自动更新 |
Flatpak | Fedora 社区 | Fedora | GNOME 社区主推,强调桌面隔离 |
AppImage | 社区驱动 | 通用 | 不安装,单文件运行,非常轻便 |
❗ 有争议:不少开发者批评 Snap 启动慢、不遵守 FHS 目录结构、默认启用自动更新不可关闭。
✅ 什么时候使用 Snap 比 apt 更合适?
- 你需要最新版本,但官方仓库版本太老;
- 软件依赖复杂,你不想自己处理依赖问题;
- 你用的不是 Ubuntu,也能用 Snap 安装 Ubuntu 提供的软件;
- 你希望沙箱隔离系统,减少污染风险;
🚫 什么时候不建议使用 Snap?
- 你关心性能和启动速度;
- 你需要软件完全集成进系统(如系统服务);
- 你在制作最小 Linux 镜像(Snap 会带来较大体积);
🔚 总结一句话:
Snap 就像 Linux 世界的 App Store:简单、可移植、沙箱、安全,但有时也比较重。