第21章:Ubuntu/Debian 包管理(APT)
10 分钟阅读
第二十一章:Ubuntu/Debian 包管理(APT)
这一章我们来聊聊Ubuntu和Debian的包管理器——APT。
如果说Linux是一个江湖,那APT就是这个江湖里最流行的"万能工具箱"。不管是装软件、卸载软件、还是升级系统,一条命令全搞定。
Debian的用户说:“我们的APT天下第一!” Ubuntu的用户说:“我们用的是改良版的APT,更香!” 然后Arch用户默默飘过:“我们用pacman,一条命令走天下……”
别吵别吵,让我们来看看APT到底有什么本事!
21.1 APT 工作原理:前端与后端
APT其实是一个两层架构的系统:
- 前端(APT):负责和用户交互、分析依赖、决定安装顺序等"智能化"的工作
- 后端(DPKG):负责实际的安装、配置等"体力活"
你可以把APT理解为"老板",把DPKG理解为"员工"。老板负责思考和决策,员工负责干活。
graph LR
A["用户"] --> B["APT 前端<br/>apt install nginx"]
B --> C["分析依赖"]
B --> D["制定计划"]
C --> E["DPKG 后端<br/>执行安装"]
E --> F["✅ nginx 安装完成"]
style A fill:#ff6b6b
style B fill:#4ecdc4
style E fill:#45b7d1当你执行apt install nginx时,APT会:
- 查询软件仓库,找到nginx包
- 分析nginx依赖哪些库
- 检查系统中已安装了哪些库
- 计算出需要额外安装哪些库
- 生成安装计划
- 调用DPKG执行安装
21.2 apt 与 apt-get 的区别:该用哪个?
这是一个让很多新手困惑的问题:“都是APT,到底该用apt还是apt-get?”
21.2.1 apt:用户友好,彩色输出
apt是后来出的"新版本",主打用户体验:
| |
apt的输出更友好,更适合人类阅读。但apt的输出可能会有变化,因为它面向最终用户。
21.2.2 apt-get:更底层,稳定
apt-get是"老前辈",主打稳定性:
| |
apt-get的输出格式是固定的,不会因为版本更新而改变,所以脚本和自动化工具通常用apt-get。
总结:该用哪个?
| 场景 | 推荐命令 |
|---|---|
| 日常使用(人类用户) | apt |
| Shell脚本(自动化) | apt-get |
| 需要固定输出格式 | apt-get |
简单来说:人类用户用apt,程序用apt-get。
21.3 apt update:更新软件列表
在你安装任何软件之前,第一步永远是apt update!
21.3.1 读取 /etc/apt/sources.list
apt update会读取/etc/apt/sources.list文件,这个文件里记录了你从哪里下载软件:
| |
输出大概是:
deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
🐱 版本代号趣闻:Ubuntu每个版本都用动物命名,而且都是字母顺序:
- 22.04 LTS = Jammy Jellyfish(水母)🪼
- 20.04 LTS = Focal Fossa(马达加斯加长尾狸猫)🐱
- 18.04 LTS = Bionic Beaver(河狸)🦫
- 16.04 LTS = Xenial Xerus(非洲地松鼠)🐿️
看出来了吗?Jammy、Focal、Bionic、Xenial…都是按字母顺序排的!这就是Ubuntu的版本代号规律。
21.3.2 从仓库下载软件包列表
apt update会连接这些仓库,下载最新的软件包列表(不是下载软件本身,只是下载一个"菜单"):
| |
apt update只是更新"软件包列表",不是升级软件!升级软件要用apt upgrade。
21.4 apt upgrade:升级所有软件
更新完软件列表之后,你可能想升级所有已安装的软件到最新版本。这就是apt upgrade的工作!
21.4.1 不删除任何包
apt upgrade是一个温和的升级:
- 它只会升级已有的包
- 不会删除任何已安装的包
- 不会安装新的包(只是升级现有的)
21.4.2 智能升级
| |
| |
21.5 apt dist-upgrade:系统升级
apt dist-upgrade是一个激进版的升级。
21.5.1 处理依赖变化
有些软件的升级会涉及到依赖关系的变化:
- 新版本可能需要新的库
- 新版本可能废弃某些旧的库
dist-upgrade会智能处理这些依赖变化。
21.5.2 可能删除旧包
与upgrade不同,dist-upgrade在必要时会删除某些包(比如一个包被新版替代了)。
| |
dist-upgrade可能会删除一些包,日常使用upgrade就够了。只有在系统大版本升级(比如Ubuntu 22.04到24.04)时才需要dist-upgrade。
21.6 apt install:安装软件
好了,终于到了安装软件的环节!这是你最常用的命令。
21.6.1 apt install nginx
| |
输出大概是:
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
nginx nginx-common nginx-core
0 upgraded, 3 newly installed, 0 to remove.
Need to get 500 KB of archives.
After this operation, 1500 KB of additional disk space will be used.
Do you want to continue? [Y/n]
输入Y或直接回车确认安装。
21.6.2 apt install -y 自动确认
如果你不想每次都按Y,可以用-y参数自动确认:
| |
这在脚本里特别有用!
21.6.3 apt install –reinstall 重新安装
有时候软件出问题了,想重新安装(覆盖安装):
| |
这会:
- 先卸载现有的nginx
- 再重新安装nginx
- 配置文件通常会保留(除非你用
--purge)
21.7 apt remove:卸载软件(保留配置)
想删掉一个软件,但保留配置文件?用apt remove:
| |
apt remove会卸载软件包,但不会删除配置文件。配置文件通常在/etc/nginx/目录下。删除软件后,这些配置文件还在。
21.8 apt purge:完全卸载(删除配置)
想删得干干净净?用apt purge!
21.8.1 apt purge nginx
| |
| |
purge会删除配置文件!如果你是主动卸载想重装,建议用remove;如果是真的不要了,才用purge。
21.9 apt autoremove:自动清理无用依赖
你有没有遇到过这种情况:安装了一个软件,它带来了很多"帮手"(依赖),后来你卸载了主软件,但这些"帮手"还在系统里占地方?
apt autoremove就是来清理这些孤儿的!
| |
| |
建议每次apt remove之后都跑一下apt autoremove,保持系统干净整洁!
21.10 apt search:搜索软件
不知道软件叫什么名字?先搜一搜!
| |
| |
apt search会搜索包的名字和描述,如果你记得软件的一部分名字,直接搜就行。
21.11 apt show:查看软件信息
找到了软件,想看看详细信息?用apt show!
21.11.1 包大小
| |
输出大概是:
Package: nginx
Version: 1.18.0-6ubuntu1.4
Priority: optional
Section: httpd
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@lists.alioth.debian.org>
Installed-Size: 45.2 KB
Depends: nginx-common, nginx-core
Recommends: logrotate
Suggests: document-terminus
Size: 45.2 KB
Homepage: https://nginx.org
Download-Size: 500 KB
APT-Manual-Installed: no
APT-Sources: http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
Description: HTTP server and reverse proxy
nginx (pronounced "engine-x") is an HTTP and reverse proxy server...
21.11.2 依赖关系
看Depends字段,这里写着nginx依赖哪些包:
nginx-commonnginx-core
如果你想看反向依赖(哪些包依赖nginx),用apt-cache rdepends(后面会讲)。
21.11.3 描述信息
看Description字段,这里详细描述了这个包是干嘛的。
21.12 apt list:列出已安装软件
想知道你系统里装了哪些软件?apt list来帮你!
21.12.1 apt list –installed
| |
| |
21.12.2 apt list –upgradable
| |
21.13 apt-cache:apt 的缓存工具
apt-cache是一个查询工具,用来在本地缓存的包列表里查找信息。
21.13.1 apt-cache depends 包名
查看某个包的依赖关系:
| |
21.13.2 apt-cache rdepends 包名
查看反向依赖——哪些包依赖这个包:
| |
apt-cache只是查询工具,不会修改任何东西,很安全!
21.14 dpkg 基础命令
终于轮到DPKG出场了!这是APT的"幕后英雄"。
21.14.1 dpkg -i xxx.deb:安装
直接安装一个.deb文件:
| |
dpkg -i不会自动处理依赖!如果这个包依赖其他包,你需要先手动安装那些依赖,或者用apt install -f来修复。
21.14.2 dpkg -l:列出已安装
| |
21.14.3 dpkg -L 包名:列出文件
查看某个包装了哪些文件:
| |
21.14.4 dpkg -S 文件:查找包
知道一个文件,想知道它属于哪个包?
| |
21.15 deb 包安装:dpkg -i xxx.deb
有时候你需要手动安装一个.deb文件,比如从网上下载的第三方软件。
21.15.1 依赖问题处理
| |
21.15.2 apt install -f 修复
遇到依赖问题怎么办?用apt install -f来自动修复!
| |
正确的安装顺序是:
sudo dpkg -i package.deb- 如果报依赖错误,执行
sudo apt install -f修复
21.16 依赖问题解决
依赖问题是Linux安装软件时最常见的问题之一。
21.16.1 apt install -f
就像上面说的,apt install -f(--fix-broken)会自动安装缺失的依赖。
21.16.2 手动安装依赖
有时候apt install -f也解决不了,你需要手动把依赖一个个装上:
| |
| |
最佳实践:尽量用apt install而不是dpkg -i!因为apt会自动处理所有依赖问题。
本章小结
本章我们学习了Ubuntu/Debian的APT包管理器:
🔑 核心知识点
APT vs apt-get:
apt:面向人类用户,输出友好,有彩色显示apt-get:面向脚本,输出稳定,不易变动
日常命令:
apt update:更新软件包列表apt upgrade:升级所有软件apt install 包名:安装软件apt remove 包名:卸载(保留配置)apt purge 包名:卸载(删除配置)
查询命令:
apt search:搜索软件apt show:查看软件详情apt list --installed:列出已安装
DPKG底层命令:
dpkg -i package.deb:安装deb包dpkg -l:列出已安装dpkg -L 包名:查看包装了哪些文件dpkg -S 文件:查找文件属于哪个包
依赖问题:
apt install -f:自动修复依赖- 尽量用
apt install而不是dpkg -i
💡 记住这个原则
能用
apt install就别用dpkg -i! APT会帮你处理所有依赖问题,省心省力!
当前时间:2026年3月23日 21:28:03 已完成"第二十一章",目前处理"第二十二章"