🖥️ 第07章 · 包管理与软件安装

apt apt-get dpkg

包管理与软件安装

这一章讲怎么在 Ubuntu 上安装、更新、卸载软件。Debian 系用 apt / apt-get,底层是 dpkg;安装来源还有"官方仓库"与"第三方脚本"之分。学会这章,你就能在这台服务器上装齐一切依赖。

先理解"仓库 + 包管理器"

Linux 装软件大多不靠"下载 exe",而是靠软件仓库:

概念 说明
软件仓库 (repo) 一个集中存放软件包、带版本号的服务器
包 (package) 一种打包好的软件单元,.deb
包管理器 负责下载、解析依赖、安装、卸载的软件
依赖 (dependencies) 一个包运行所需的其它包,通常自动处理

apt 会从 /etc/apt/sources.list 和 /etc/apt/sources.list.d/ 里的仓库地址拉取软件。它解决了"我装了 A,但缺 B,C 依赖"的连锁问题——自动帮你装齐。

提示 安装前先确认来源可信。Ubuntu 官方仓库(xenial/focal/jammy/noble 等)最稳;第三方 PPA 或外网脚本(pip、npm、官方 .sh)虽然装得新,但风险高、还可能在系统里留残骸。

更新软件源 apt update

apt update 会从仓库刷新索引,告诉系统现在有哪些可用包。它不升级软件,只是同步清单。

sudo apt update

注意 很多新手装不上包,第一反应是"包不存在",其实往往是没先 apt update,本地索引太旧、找不到新版本。装任何东西前,先跑一遍 apt update。

安装 apt install

sudo apt install nginx            # 安装 nginx
sudo apt install -y mysql-server  # -y 自动回答 yes,不依赖交互

在这台服务器上,nginx、MySQL 8、certbot 等很多软件都是这么装的。

升级 apt upgrade && dist-upgrade

命令 作用
apt upgrade 升级所有已装包到仓库里的最新版
apt dist-upgrade 升级并处理包之间的依赖变更(可能装/删新包)
sudo apt update
sudo apt upgrade -y

警告 生产环境升级前务必先备份。dist-upgrade 可能移除旧包甚至改变内核,服务器上跑着生产服务(bangdream、lovelive 等),盲目升级可能拖垮正在运行的应用。升级窗口要挑业务低峰。

搜索与查看 apt search / show / list

命令 作用
apt search 关键词 搜索仓库里匹配的包
apt show 包名 查看包的详细信息(版本、依赖、说明)
apt list --installed 列出所有已安装的包
apt list --installed \| grep 包名 确认某包是否已装
apt search nginx | grep -i install
apt show nginx
apt list --installed | grep -E "nginx|mysql"

卸载与清理

sudo apt remove 包名       # 卸载包,但保留配置文件
sudo apt purge 包名        # 卸载包并删除配置文件
sudo apt autoremove        # 自动移除不再需要的依赖
sudo apt clean             # 清理本地下载的 .deb 缓存

提示 想彻底"抹掉"一个软件,用 purge(连配置一起删);只想"停用"就用 remove。autoremove 能顺手清掉那些"我再也用不到的依赖",保持系统干净。

底层工具 dpkg

apt 是高层封装,dpkg 是它背后真正处理 .deb 的程序。用到 dpkg 的场景:安装了本地下载的 .deb 文件。

sudo dpkg -i 软件.deb          # 安装本地包
dpkg -l | grep 包名            # 列出并确认包
dpkg -L nginx                  # 列出包安装了哪些文件
dpkg -S /usr/bin/nginx         # 查某个文件是哪个包安装的

注意 dpkg -i 本地.deb 不会自动补依赖。如果报"依赖未满足"错误,安装完后先 sudo apt -f install 自动修复依赖。

在 Ubuntu 24.04 上,一部分软件要通过官方脚本或其它方式安装,而不是 apt。比如:

  • Node.js(npm/pnpm/Node 本体):官方安装脚本,装进 /usr/local(所以 node、npm 在 /usr/local/bin);
  • pnpm:corepack prepare 或 npm i -g pnpm;
  • Xray、RustDesk 等:官方 release 二进制或脚本;
  • Prometheus 等:官方 .tar.gz 解包即用(第 5 章)。

提示 用官方脚本装的软件,不走 apt 管理。所以 apt list --installed 里看不到 node;这类软件要手动升级、手动清理,别指望 apt autoremove 帮你删。

常用对比表

命令 作用 示例
apt update 刷新仓库索引 sudo apt update
apt install 安装包 sudo apt install -y nginx
apt upgrade 升级所有包 sudo apt upgrade -y
apt search 搜索包 apt search nginx
apt show 包详情 apt show nginx
apt remove / purge 卸载(留/删配置) sudo apt purge nodejs
apt autoremove 清孤立依赖 sudo apt autoremove
dpkg -i 装本地 .deb sudo dpkg -i pkg.deb
apt list --installed 列出已装 apt list --installed

易错点

  • 忘了 apt update:索引太旧,装不上新包。
  • 不备份就 upgrade:生产升级可能拖垮服务。
  • apt remove 后配置还在:想彻底清除用 purge。
  • dpkg -i 会缺依赖:装完跑 sudo apt -f install。
  • 官方脚本装的软件不归 apt 管:升级、清理要另想办法。
  • 别用 root 裸跑安装:强烈建议 sudo 而非 su,装坏了有据可查。

相关命令

apt、apt-get、apt-cache、dpkg、dpkg-query、snap(另一包管理器)、flatpak、corepack(Node 生态)。