1. 动手之前,先把"软件包"这件事想清楚
1.1 软件包到底是什么
不少人刚接触 Linux 时,第一反应是"安装软件怎么这么麻烦"。在 Windows 上双击 exe 就完事了,到了 Linux 却要敲命令、加源、等下载,看起来绕了一大圈。但你真正折腾过几次之后就会发现,Linux 的软件包管理机制,本质上是在帮你做"依赖管理"和"统一回收"这两件 Windows 默认不擅长的事。
软件包的官方定义是一组文件的集合,通常包含可执行程序、动态库、配置文件、文档和安装脚本。它还有一个最核心的东西:元信息。元信息里记录了版本号、依赖关系、冲突项、安装路径等。Debian 系的 .deb 和 Red Hat 系的 .rpm 都是这种格式。Windows 上的 msi、appx,甚至你双击的那个 setup.exe,本质上也是软件包,只是封装方式不同、管理粒度更粗。
如果你用生活类比来理解:软件包就像超市里已经配好料的食材包,官方源就是你信任的供货商,包管理器是那个帮你检查菜谱(依赖)、把配料分门别类放进柜子(安装)、过期了还能帮忙扔掉(卸载)的家政阿姨。Windows 传统安装工具更像外卖,送到手就能吃,但你几乎不知道里面用了哪些底料,想清理干净更是千难万难。
1.2 两种操作系统在软件管理上的根本差异
Windows 和 Linux 在安装卸载软件这件事上,思路完全不同。Linux 从诞生起就是多用户、多任务系统,软件被拆成一个个小包,共享系统资源,依赖关系靠包管理器统一维护。你安装一个 Python 应用,它会自动帮你把 Python 运行时、相关库一起拉下来,卸载时也能精确移除属于它的文件,前提是你用的是包管理器装的。
Windows 则是从单机桌面系统演化过来的,最初没有统一的应用商店概念。每个软件厂商自己打包,自己决定装到哪个目录,自己依赖哪个版本的运行库。经典的"DLL 地狱"就是这样来的:软件 A 需要 v1 的 dll,软件 B 需要 v2 的 dll,两者不能共存,你装完 B 再打开 A 就直接崩溃。
这也是为什么 Windows 后来推出了 MSI(Windows Installer)、AppX、WinGet 这些标准化方案,本质上是在向 Linux 的包管理哲学靠拢。理解了这一点,你在两个系统之间切换时就不会觉得别扭了,反而能明白:Linux 的"麻烦"换来的是系统整洁和可追溯性,Windows 的"方便"换来的是灵活但其代价是环境混乱。
1.3 会装也要会卸,卸载比安装更见功力
很多人只关注怎么装,忽略了卸载。实际上,卸载做不好,系统的存储占用、注册表残留、启动项垃圾会越积越多。Linux 下你 remove 一个包,如果忘了 autoremove,残留的依赖库会一直躺在系统里。Windows 下你用控制面板卸载程序,很多软件的配置文件、缓存目录、计划任务依然留在原地。
所以这篇内容不只是教你敲几条安装命令,而是把"装"和"卸"当作一个闭环来梳理。你既要知道 apt install 怎么用,也要知道 dpkg -P 的区别;既要会双击 setup.exe,也要会用 winget uninstall 清理残余。下面按系统分别展开。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Linux 下的安装与卸载:从 apt 到 dnf
2.1 Debian/Ubuntu 系:apt 与 dpkg 配合使用
Debian 系目前最常用的包管理工具是 apt,它底层调用 dpkg。dpkg 负责处理单个 .deb 包的安装、卸载、查询,但不会自动处理依赖;apt 则是一个更高层的工具,会自动从软件源拉取依赖包、解决版本冲突。
安装软件包的基本命令:
bash复制# 先更新本地包索引,这会从源服务器拉取最新的包列表
sudo apt update
# 安装软件,例如 nginx
sudo apt install nginx
# 安装指定版本
sudo apt install nginx=1.18.0-0ubuntu1.4
这里我要强调一下 apt update 的重要性。新手最容易犯的错误就是直接 apt install,结果提示"无法定位软件包"或者装到一个很旧的版本。因为本地索引文件记录的还是过去某个时刻的包列表,新加入的软件、新版本你根本看不到。我见过不少人在国内镜像源配好之后忘了 update,然后一直装不上想要的软件。正确习惯是:第一次配好源之后立刻 update,之后每次要装新软件前先 update 一次,花不了几秒。
卸载软件包的命令:
bash复制# 只卸载程序,保留配置文件
sudo apt remove nginx
# 完全卸载,连配置文件一起删
sudo apt purge nginx
# 清理不再需要的依赖包
sudo apt autoremove
# 清理下载的安装缓存 (.deb 文件)
sudo apt clean
remove 和 purge 的区别常被忽略。remove 默认不删除 /etc 下的配置文件和 /var/lib 下的数据,你重装回来配置还在。purge 则是彻底清干净。对于生产服务器,我倾向于 purge,尤其是数据库、Web 服务这类带配置的软件,你不 purge,下次装回来可能带着旧配置直接冲突,排查起来非常痛苦。
还需要提一下 dpkg 本身的用法。有时候你在网上下了个 .deb 包,想手动安装:
bash复制# 安装一个 .deb 文件
sudo dpkg -i xxx.deb
# 如果依赖缺失导致报错,用下面命令修复依赖
sudo apt --fix-broken install
# 查看系统里已安装的包
dpkg -l
# 查看某个包是否安装
dpkg -l | grep nginx
dpkg -i 装 .deb 时如果报依赖错误,不要慌,那是正常现象。dpkg 不会自动帮你装依赖,你需要先 apt --fix-broken install 来补救。很多网友在论坛问"dpkg 安装报错怎么办",其实答案就在这。
2.2 Red Hat 系:yum 与 dnf 的家族延续
CentOS、RHEL、Fedora 以及国内一些服务器
