如果有人拿一个 .deb 文件问你“怎么装”,下一步基本是他正在踩 Debian 软件管理的坑。Debian DEB Packages 这个词看着像某个具体软件包,实际上说的是整套 Debian 系软件分发体系:你从官网下载的 .deb 文件,apt 每天更新的软件索引,系统里的 dpkg 数据库,全都属于这一套。无论你只是想双击安装一个桌面程序,还是要在无桌面的服务器上把网络、MongoDB、字体这些环境一把梭,最终都会绕回包管理。
这篇东西算是我自己踩坑多年后留的一份手记,不打算讲太多理论,重点放在三件事:怎么把 DEB 包和依赖关系弄明白,怎么配置 Debian 的网卡和默认路由,以及几个高频应用问题(MongoDB、PyCharm、字体、VLC 播不了 HEVC)怎么收拾。新手可以按顺序看,老手直接跳到对应章节抄配置。
1. DEB 包的管理逻辑没搞懂,后面全是坑
1.1 一个 DEB 包在系统里究竟做了什么
很多人安装软件时只知道双击或者敲命令,从没想过屏幕上滚过的那些日志在干嘛。DEB 包本质上是一个“搬家箱子”,里面除了真正的程序文件,还有一套安装说明。拆开来看,一个标准的 .deb 文件至少包含三部分:debian-binary 是格式版本标记,control.tar.xz 记录包的名称、版本、依赖关系、安装前后要执行的脚本,data.tar.xz 才是真正要被解压到系统里的文件。
这套设计和 Windows 的安装包思路完全不同。Windows 安装软件时倾向把所有运行库都塞进自己的目录,所以一个软件几百 MB 是常事;Debian 则讲究共享,一个动态库装一次,所有软件都能用。于是 DEB 包里的 Depends 字段就成了关键,它声明“我这个程序能跑起来,必须有这些其他包”。dpkg 在安装时如果发现系统里没有对应的依赖,就会直接报 dependency problems 不让你装,这就是很多人第一次接触 Debian 时遇到的“依赖地狱”的来由。
我印象很深的一台机器,当初为了装一个网卡调优工具,手动去下了个很老的 .deb 包,结果它依赖一个早已被系统清理掉的旧版 libncurses5,而新系统只有 libncurses6。后来我没有硬刚这个老包,而是换了一个官方源里维护中的替代工具,五分钟解决。这个经验后来反复验证:DEB 包本身只是载体,真正决定能否顺利安装的是依赖关系是否被满足。
1.2 dpkg 和 apt:底层拆包与上层调度
dpkg 是 Debian 系里最底层的打包工具,它直接操作 .deb 文件,负责解包、把文件放到指定路径、更新 /var/lib/dpkg/status 这个数据库。你可以用 dpkg -I 查看一个 DEB 包的元信息,用 dpkg -c 看看它会把哪些文件装到系统里,用 dpkg -L 查看已安装包的文件清单,用 dpkg -S 反查某个文件属于哪个包。这些命令在排查“文件怎么多了少了”的时候非常趁手。
但 dpkg 有一个明显的短板:它不负责“找依赖”。你让它装一个包,它只会检查当前系统里有没有
