🐧 Linux 从零到实战 · 2.2 软件安装三法:APT / 源码编译 / Snap
在 Linux 的世界里,安装软件不像 Windows 那样简单地运行一个 .exe 安装包。由于 Linux 的多样性(发行版不同、架构不同),社区演化出了多种安装机制。本章将深度解析最主流的三种安装方式,并教你如何根据场景选择最合适的方法。
1. APT 包管理 (The Debian Way)
APT (Advanced Package Tool) 是 Ubuntu 和 Debian 系统的核心。它操作的是 .deb 格式的二进制包。
1.1 核心原理
APT 像是一个“软件商店”的命令行界面。它连接到远程软件源 (Repository),下载已经编译好的二进制文件,并自动处理依赖关系 (Dependencies)。
APT 通过连接远程软件源并自动处理依赖关系来安装 .deb 包
- 依赖关系:如果软件 A 需要库 B 才能运行,APT 会在安装 A 的同时自动安装 B。
1.2 常用操作
- 安装软件:
sudo apt install <package_name> - 卸载软件:
sudo apt remove <package_name>:删除软件,保留配置文件。sudo apt purge <package_name>:彻底删除软件及其配置文件。
- 更新列表:
sudo apt update(同步远程软件源索引) - 升级软件:
sudo apt upgrade(将所有已安装软件升级到最新版)
1.3 优缺点
- ✅ 优点:极速安装、官方维护、依赖自动处理、卸载干净。
- ❌ 缺点:软件版本可能落后于上游(为了稳定性),受限于发行版版本。
2. Snap 容器化安装 (The Modern Way)
Snap 是由 Canonical 公司推出的现代包格式,旨在解决“一次构建,到处运行”的问题。
2.1 核心原理
与 APT 不同,Snap 采用的是容器化 (Containerized) 方案。
Snap 将所有依赖打包在一起并在隔离的沙箱环境中运行
- 自包含:Snap 包将软件及其运行所需的所有依赖库全部打包在一起。
- 沙箱机制 (Sandboxing):Snap 应用在隔离的环境中运行,不能随意访问系统文件,极大地增强了安全性。
- 自动更新:Snap 软件在后台自动更新,无需手动
upgrade。
2.2 常用操作
- 安装软件:
sudo snap install <package_name> - 卸载软件:
sudo snap remove <package_name> - 查看已安装:
snap list - 更新软件:
sudo snap refresh <package_name>
2.3 优缺点
- ✅ 优点:版本最新、安装简单、安全性高(沙箱)、跨发行版通用。
- ❌ 缺点:启动速度较慢(由于压缩挂载)、占用磁盘空间大、对系统集成度较低。
3. 源码编译安装 (The Hacker Way)
当你需要的软件在软件源里找不到,或者你需要开启某些特殊功能(自定义编译参数)时,你需要面对源代码。
3.1 核心原理
源码编译是将人类可读的 C/C++ 代码,通过编译器 (Compiler) 转换为机器码的过程。
3.2 准备工作
在编译之前,必须安装开发工具集(编译器、make 等):
sudo apt update
sudo apt install build-essential
3.3 经典三部曲 (The Holy Trinity)
绝大多数遵循 GNU 标准的开源项目都采用以下步骤:
- 配置 (
./configure): - 扫描系统环境,检查是否缺少依赖库。
- 生成
Makefile(编译指导书)。 -
示例:
./configure --prefix=/usr/local/myapp(指定安装路径)。 -
编译 (
make): - 根据
Makefile的指令,调用编译器将源码转为二进制执行文件。 -
这是一个耗时过程,取决于 CPU 性能。
-
安装 (
sudo make install): - 将编译好的二进制文件、文档、配置文件拷贝到系统目录(如
/usr/local/bin)。
配置(Configure) $\rightarrow$ 编译(Make) $\rightarrow$ 安装(Install) 的标准流水线
3.4 优缺点
- ✅ 优点:版本绝对最新、可深度定制功能、性能最高(针对当前 CPU 优化)。
- ❌ 缺点:安装极其缓慢、需手动处理依赖(极其痛苦)、卸载困难(除非项目提供了
make uninstall)。
🛠 综合对比速查表
| 维度 | APT (.deb) |
Snap | 源码编译 |
|---|---|---|---|
| 安装速度 | 极快 | 快 | 极慢 |
| 磁盘占用 | 小 | 大 | 中 |
| 版本新鲜度 | 稳定 $\rightarrow$ 旧 | 最新 | 绝对最新 |
| 依赖处理 | 自动 | 自包含 | 手动 (Hard) |
| 安全性 | 系统级权限 | 沙箱隔离 | 系统级权限 |
| 适用人群 | 普通用户/服务器 | 开发者/桌面用户 | 极客/特定定制需求 |
不同安装方式在速度、便捷度与定制化之间的权衡
⚠️ 避坑指南
- 不要混用:如果一个软件既有 Snap 也有 APT 版本,尽量先试 APT。如果需要最新版且不介意磁盘空间,选 Snap。
- 源码卸载陷阱:用
make install安装的软件,如果没有make uninstall指令,你得手动去/usr/local/bin等目录下删除文件,非常麻烦。 - 依赖地狱:源码编译报错
error: ... not found通常意味着缺少-dev结尾的开发库(例如libssl-dev),请先用 APT 安装对应的开发库。
📚 参考
- Ubuntu Documentation: Snap and deb packages
- Opensource.com: Anyone can compile open source code in these three simple steps