Linux: 包管理——apt / dpkg / snap 与软件安装

在 Linux 上安装软件不需要去官网下载 exe——通过包管理器一行命令就能完成。不同的发行版使用不同的包管理器,但核心概念都一样。

📋 前置知识:需要先掌握以下内容

1. 你将学到


2. 一个安装 Nginx 的故事

(1) 痛点:Windows 上装个软件要搜官网、下载、双击、点下一步

小明需要在 Ubuntu 上安装 Nginx。他习惯性打开浏览器搜索 "nginx download"。

(2) apt 一行搞定

Bob 说:"在 Ubuntu 上装 Nginx 只需要一行命令。"

BASH
sudo apt update
sudo apt install nginx -y

30 秒后 Nginx 就装好了——自动处理依赖、自动创建服务文件、自动设置开机启动。

(3) 收益:包管理器改变了安装方式

小明发现 apt 不仅安装软件,还自动处理了所有依赖关系。他再也没有手动下载 exe 或 dmg 了。


3. 知识点讲解

(1) apt——Debian/Ubuntu 的包管理

BASH
# 更新软件源列表
sudo apt update

# 升级所有已安装的软件
sudo apt upgrade -y

> 💡 **提示**:`apt update && apt upgrade -y` 是系统维护的黄金组合——`update` 刷新软件源列表,`upgrade` 升级已安装的软件。建议在安装新软件前先 `update`,否则可能找不到最新版本的包。

# 安装软件
sudo apt install nginx -y
sudo apt install curl wget git vim -y    # 一次装多个

# 卸载软件
sudo apt remove nginx                    # 保留配置文件
sudo apt purge nginx                     # 删除配置文件

# 搜索软件
apt search "web server"
apt show nginx                           # 查看软件包信息

# 清理
sudo apt autoremove                      # 删除不再需要的依赖
sudo apt autoclean                       # 清理下载的缓存

(2) dpkg——本地 deb 包安装

BASH
# 安装本地 .deb 文件
sudo dpkg -i package.deb

# 如果依赖缺失,用 apt 修复
sudo apt install -f

# 查看已安装
dpkg -l | grep nginx
dpkg -L nginx                           # 查看包安装的文件路径

# 卸载
sudo dpkg -r package_name               # 卸载
sudo dpkg -P package_name               # 完全清除(含配置文件)

(3) 软件源和 PPA

BASH
# 软件源列表
cat /etc/apt/sources.list

# 添加 PPA(Personal Package Archive)
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12

# Ubuntu 软件源的优先顺序
# 1. /etc/apt/sources.list
# 2. /etc/apt/sources.list.d/*.list

(4) snap/flatpak——容器化包

BASH
# snap(Ubuntu 内置)
snap find "code"                         # 搜索
sudo snap install code --classic         # 安装 VS Code
sudo snap install lxd                    # 安装 LXD
sudo snap refresh                        # 更新所有 snap
sudo snap remove code                    # 卸载

# snap 的特点:自动更新、沙箱隔离、跨发行版

ℹ️ 说明:apt、snap、flatpak 是三种不同的包管理方案——apt 安装系统原生包(性能最好、最轻量),snap/flatpak 是容器化包(隔离性好、自动更新,但启动稍慢、占用空间更大)。日常使用优先 apt,需要跨发行版或沙箱隔离时选 snap/flatpak。

(5) 语言级包管理器

TEXT 📖 仅展示
# Python
pip install requests                     # 安装 Python 包
pip install -r requirements.txt          # 从文件安装
pip list                                 # 列出已安装包
pip uninstall requests                   # 卸载
pip freeze > requirements.txt            # 导出依赖

# Node.js
npm install express                      # 安装包
npm install -g typescript                # 全局安装
npm list                                 # 列出已安装包
npx create-react-app my-app              # 不安装直接运行

# Rust
cargo install ripgrep                    # 安装工具
cargo add serde                          # 添加依赖到项目

▶ 示例:apt 基本操作

BASH
# 1. 更新软件源
sudo apt update

# 2. 安装常用开发工具
sudo apt install -y build-essential curl wget git vim htop

# 3. 搜索一个包
apt search "text editor" | grep -i "vim\|nano"

# 4. 查看包信息
apt show htop

# 5. 卸载
sudo apt remove htop
sudo apt autoremove    # 清理无用的依赖

输出:

TEXT 📖 仅展示
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Fetched 119 kB in 1s
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  build-essential curl wget git vim htop
0 upgraded, 6 newly installed, 0 to remove
Need to get 12.3 MB of archives.
Setting up build-essential (12.9ubuntu3) ...
Setting up curl (7.81.0-1) ...
vim - Vi IMproved - enhanced vi editor
htop - interactive processes viewer
Package: htop
Version: 3.0.5-7build2
Priority: optional
Section: utils
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
  htop
0 upgraded, 0 newly installed, 1 to remove
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
  libhwloc5
0 upgraded, 0 newly installed, 1 to remove

▶ 示例:dpkg 安装本地包

BASH
# 下载 VS Code 的 .deb 包
wget https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64 -O code.deb

# 安装
sudo dpkg -i code.deb

# 如果提示依赖问题,修复
sudo apt install -f

# 查看 VS Code 安装的文件
dpkg -L code | head -20

输出:

TEXT 📖 仅展示
--2026-07-07 10:23:01--  https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64
Resolving code.visualstudio.com... 20.190.159.4
HTTP request sent, awaiting response... 302 Found
Length: 95000000 (90M) [application/octet-stream]
Saving to: 'code.deb'
code.deb          100%[==========>] 90.51M  5.2MB/s    in 18s
Selecting previously unselected package code.
Setting up code (1.89.1-1716721786) ...
/usr/share/code/code
/usr/share/code/resources/app/package.json
/usr/share/code/resources/app/product.json
/usr/bin/code
/usr/share/applications/code.desktop
/usr/share/icons/hicolor/512x512/apps/code.png

▶ 示例:添加 PPA 安装新版 Python

BASH
# Ubuntu 22.04 默认 Python 3.10,要装 Python 3.12 需要 PPA
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3.12-distutils

# 验证
python3.12 --version

输出:

TEXT 📖 仅展示
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Get:3 http://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy InRelease [23.8 kB]
Fetched 23.8 kB in 1s
Reading package lists... Done
The following NEW packages will be installed:
  python3.12 python3.12-venv python3.12-distutils
Setting up python3.12 (3.12.4-1+jammy1) ...
Python 3.12.4

▶ 示例:pip 管理 Python 包

BASH
# 安装 Flask Web 框架
pip install flask

# 创建依赖清单
pip freeze > requirements.txt

# 在另一台机器上安装同样的依赖
pip install -r requirements.txt

# 安装到用户目录(不需要 sudo)
pip install --user black

输出:

TEXT 📖 仅展示
Collecting flask
  Downloading flask-3.0.3-py3-none-any.whl (101 kB)
Installing collected packages: flask
Successfully installed flask-3.0.3
flask==3.0.3
werkzeug==3.0.3
jinja2==3.1.4
Collecting black
  Downloading black-24.4.2-py3-none-manylinux1_x86_64.whl (2.2 MB)
Installing collected packages: black
Successfully installed black-24.4.2

▶ 示例:查找已安装包的路径

BASH
# 查看 nginx 安装在了哪些目录
dpkg -L nginx | head -10

# 查看 nginx 的配置文件
dpkg -L nginx | grep -E "\.conf$"

# 查看某个命令属于哪个包
dpkg -S /usr/bin/htop
# htop: /usr/bin/htop

# 反向——查看某个文件属于哪个包
dpkg -S /etc/nginx/nginx.conf
# nginx: /etc/nginx/nginx.conf

输出:

TEXT 📖 仅展示
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default
/etc/nginx/sites-enabled/default
/usr/sbin/nginx
/var/www/html/index.html
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default
htop: /usr/bin/htop
nginx: /etc/nginx/nginx.conf

▶ 综合示例:从零搭建 Web 开发环境

BASH
#!/bin/bash
# setup-web-env.sh - 从零搭建 Web 开发环境

set -e

echo "=== 搭建 Web 开发环境 ==="

# 1. 更新系统
echo ">>> 更新软件源..."
sudo apt update
sudo apt upgrade -y

# 2. 安装基础工具
echo ">>> 安装基础工具..."
sudo apt install -y build-essential curl wget git vim htop net-tools

# 3. 安装 Nginx
echo ">>> 安装 Nginx..."
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

# 4. 安装 Node.js
echo ">>> 安装 Node.js 20..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

> ⚠️ **注意**:`curl | bash` 模式(从网络下载脚本直接执行)存在供应链攻击风险——如果服务器被入侵或 DNS 被劫持,可能执行恶意代码。在生产服务器上,建议先下载脚本、审查内容后再执行,或优先使用发行版官方仓库。

# 5. 安装 Python 3 + pip
echo ">>> 安装 Python 3..."
sudo apt install -y python3 python3-pip python3-venv

# 6. 安装 Docker
echo ">>> 安装 Docker..."
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

# 7. 验证
echo ""
echo "=== 环境验证 ==="
echo "Nginx: $(nginx -v 2>&1)"
echo "Node.js: $(node --version)"
echo "npm: $(npm --version)"
echo "Python: $(python3 --version)"
echo "Git: $(git --version)"
echo "Docker: $(docker --version)"

echo ""
echo "✅ 环境搭建完成!部分更改(如 Docker)需要重新登录生效。"

❓ 常见问题

Q: apt updateapt upgrade 有什么区别? A: \1

Q: apt removeapt purge 有什么区别? A: \1

Q: 怎么查看一个包安装了哪些文件? A: dpkg -L package_name 列出包安装的所有文件。dpkg -S /path/to/file 反向查找某个文件属于哪个包。

Q: PPA 安全吗? A: PPA 是第三方维护的源,安全级别低于官方源。建议只添加知名项目的官方 PPA(如 deadsnakes、nginx、git-core)。非知名 PPA 有安全风险。

Q: 依赖冲突怎么办? A: 先用 sudo apt install -f 修复。不行就检查 PPA 冲突(禁用冲突的 PPA)。极端情况下,手动下载 .deb 包用 dpkg -i 安装。


📖 小节


📝 作业

  1. 基础题(难度⭐):用 apt 安装 htop 和 tree 命令,验证安装成功,然后用 dpkg -L 查看 htop 安装了哪些文件
  2. 进阶题(难度⭐⭐):用 apt search "database" 搜索并安装一个数据库(如 PostgreSQL 或 SQLite),然后用 pip 安装一个 Python 包(如 requestsflask
  3. 挑战题(难度⭐⭐⭐):写一个一键环境搭建脚本,安装 git/vim/htop/nginx/nodejs/python3,每个安装步骤检查是否已安装以避免重复,最后输出所有工具的版本验证报告
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏