前言
在 Debian 及其衍生的 Linux 系统(如 Ubuntu、Linux Mint 等)中,你会经常用到一个工具:apt。或许你还知道有一个 dpkg 工具,但不清楚二者的定位与使用场景。
本文将以模块化的结构,从基础概念、核心命令、操作流程到核心区别,一步步拆解 dpkg 与 apt 的差异与关联。相信看完后,可以帮助你彻底理清二者的逻辑,掌握它们的正确使用方法,让 Linux 软件包管理变得简单清晰。
我也不会,于是边学习边把有用的东西记下来的。
排版/纠错:豆包
基础概念
软件包
它不只是程序本身,还包含:
- 安装 / 卸载脚本
- 可执行文件
- 配置文件
- 依赖说明
dpkg
dpkg(Debian Package Management System)是 Debian 及其衍生系统的底层软件包处理工具。
基础命令:
1. 安装软件
sudo dpkg -i 包名.deb
-i= install:安装本地.deb包
2. 普通卸载(保留配置)
sudo dpkg -r 包名
-r= remove:删除程序文件 → 保留配置 → 不处理依赖
3. 彻底卸载(连配置一起删)
sudo dpkg -P 包名
-P= purge:删除程序 + 配置 → 清理干净
4. 查询所有已安装的包
dpkg -l
-l= list:列出系统里所有已经装上的包
5. 查询某个包是否安装、详细信息
dpkg -s 包名
-s= status:看版本、是否安装、依赖等
6. 查看这个包装了哪些文件
dpkg -L 包名
-L= List files:看软件把文件装到了哪里
7. 查询某个文件属于哪个包
dpkg -S 文件路径
-S= Search:查文件属于哪个包,例如
dpkg -S /usr/bin/ls
apt
apt(Advanced Packaging Tool)是一个在 Debian 及其衍生系统的 Shell 前端软件包管理器。
基础命令:
1. 更新软件源列表(必须常做)
sudo apt update
作用:去服务器拉取最新包清单,不更新软件本身
2. 升级所有可更新的软件
sudo apt upgrade
作用:更新所有已装软件 → 自动解决依赖
3. 安装软件
sudo apt install 包名
作用:自动下载 → 自动解决依赖 → 调用 dpkg 安装
4. 卸载软件(保留配置)
sudo apt remove 包名
作用:安全卸载 → 自动处理依赖 → 保留配置
5. 彻底卸载(删配置)
sudo apt purge 包名
6. 搜索软件(不知道包名时用)
apt search 关键词
7. 查看包详细信息
apt show 包名
8. 清理没用的依赖
sudo apt autoremove
作用:卸载那些不再被需要的依赖包
9. 清理下载缓存的 .deb
sudo apt clean
区别
两个工具的区别
dpkg = 包处理工具(Package Handler),只负责处理包,不会联网,不会自动解决依赖
。
apt = 包管理器(Package Manager),可以联网从软件源下载包,自动解决依赖,甚至升级整个系统。apt 最后调用 dpkg 完成实际操作。
dpkg 安装本地.deb文件及流程
可以使用以下命令安装包:
sudo dpkg -i 包名.deb
流程
- 必须提前下载好 .deb 文件
- dpkg 打开这个包,读取里面的:
- 可执行文件
- 配置文件
- 依赖列表
- dpkg 检查系统里有没有这些依赖
- 有 → 继续安装
- 没有 → 直接报错,安装失败
- 把文件复制到系统对应目录
- 执行安装脚本
- 安装完成(或失败)
特点
- 不联网
- 不下载依赖
- 缺依赖就装不上
- 只做 “拆包、安装”
apt 安装本地.deb文件及流程
可以使用以下命令安装包:
sudo apt install 软件名
流程
- apt 先读 本地软件源缓存(知道每个软件对应哪个包、在哪下载)
- 查这个软件的依赖关系
- 计算:
- 需要装哪些包
- 哪些已经有了
- 哪些缺少,需要下载
- 自动从互联网服务器下载所有缺失的 .deb 包
- 把这些包按顺序交给 dpkg
- dpkg 一个个安装
- 全部装完后,apt 做清理、配置
apt 做了 dpkg 不会做的事
- 联网
- 找依赖
- 下载所有依赖包
- 按正确顺序安装
- 处理冲突
- 更新软件列表
dpkg 查询软件包信息完整流程
常用命令:
dpkg -l # 列出所有已安装包
dpkg -s 包名 # 查看某个已安装包详情
dpkg -L 包名 # 查看这个包装了哪些文件
流程
- dpkg 会去本地数据库里找路径:
/var/lib/dpkg/ - 只可以查已经安装的包
- 读取信息:
- 版本
- 安装状态
- 依赖(只看已装的)
- 直接输出结果
特点
- 不联网
- 没有软件源
- 看不到还没安装的包
- 速度极快(只读本地文件)
dpkg 只查 “你电脑里已经有的”。
apt 查询软件包信息完整流程
常用命令:
apt list # 列出所有可安装/已安装的包
apt show 包名 # 查看详细信息
apt search 关键词 # 搜索软件
流程
- apt 先读本地软件源缓存路径:
/var/lib/apt/lists/ - 从缓存里找:
- 这个包在不在软件源里
- 最新版本是多少
- 依赖是什么
- 大小、描述、维护者
- 同时对比本地是否已安装
- 把信息整合后输出给你
特点
- 不实时联网(用的是之前
apt update缓存) - 能查没安装的包
- 能查最新版本
- 信息比 dpkg 更全
apt 查的是 “整个软件仓库里有什么 + 你装了什么”。
dpkg 卸载软件完整流程
命令:
- 普通卸载(保留配置):
dpkg -r 包名 - 彻底卸载(删配置):
dpkg -P 包名
流程
- 去本地数据库
/var/lib/dpkg/查看这个包是否已安装 - 只操作当前已安装的包,不联网、不查仓库
- 读取包内文件列表,把对应文件从系统里删除
- 不检查、不处理依赖
- 不管别的软件是否需要它
- 普通卸载(-r):保留配置文件
- 彻底卸载(-P):连配置文件一起删掉
- 更新本地数据库,标记为 “已卸载”
特点
- 只操作本地已安装包
- 不处理依赖
- 不联网
- 底层暴力卸载
apt 卸载软件完整流程
命令:
- 普通卸载:
apt remove 包名 - 彻底卸载:
apt purge 包名
流程
- 从本地缓存和数据库中,找到这个包
- 检查依赖关系:
- 哪些包依赖它
- 卸载后会不会导致系统损坏
- 自动处理不需要的依赖(安全前提下)
- 调用
dpkg执行真正的卸载 - remove:保留配置
- purge:删除配置
- 更新本地状态
特点
- 安全、智能
- 处理依赖
- 底层还是用 dpkg
- 不会随便把系统搞崩
dpkg 更新完整流程
dpkg 没有更新功能
如果真要用 dpkg 进行更新,只能:
- 自己手动下载新版 .deb
- 再用
dpkg -i安装覆盖。
apt 更新完整流程
apt 更新分两条命令:
1. apt update(更新包列表)
流程
- 去软件源服务器
- 下载最新的包清单、版本号、依赖关系
- 保存到本地缓存
/var/lib/apt/lists/ - 对比已有包,告诉用户哪些可以升级
- 不更新任何软件本身
2. apt upgrade(更新软件)
流程
- 读取本地缓存里的最新版本
- 对比系统当前已安装的版本
- 找出所有需要升级的包
- 自动下载所有新版 .deb
- 自动处理依赖变化
- 按顺序调用 dpkg 安装
- 完成更新
结语
通过本文的梳理,相信你已经清晰掌握了 dpkg 与 apt 的核心差异与适用场景:dpkg 是 Debian 系系统的底层包处理工具,专注于本地.deb 包的拆包、安装、卸载与本地信息查询,不具备联网和自动解决依赖的能力;而 apt 是基于 dpkg 的上层包管理器,通过联网访问软件源、自动计算并下载依赖,完成安全的安装、升级、卸载与全量信息查询,是日常 Linux 系统操作的首选工具。
二者并非对立关系,而是相辅相成的:apt 的所有底层操作最终都依赖 dpkg 完成,而 dpkg 则为 apt 提供了基础的包处理能力。
Comments NOTHING