第 6 章 · 软件安装与包管理
本章一次性解决你三个老大难:「社区里好多安装器看得一脸懵」、「官方没有的版本社区里到底去哪找」、「Windows 上的软件在 Linux 怎么装」。读完你会有一条清晰的「找软件决策链」和一份可信渠道清单。
本章目录
6.1 为什么有这么多安装器 6.2 Ubuntu:apt/dpkg 6.3 Rocky:dnf/rpm 6.4 其他安装器速览 6.5 源码编译安装 6.6 通用软件格式 6.7 装在哪(回扣第 3 章) 6.8 第三方源与社区渠道 6.9 找软件决策树 6.10 Windows→Linux 对照 6.11 安全验证 自测题6.1为什么有这么多安装器:一个世界观就懂了
安装器(包管理器)多的根本原因:每个发行版家族独立打包、独立维护软件仓库。不同家族对「软件以什么格式打包、依赖怎么记录、更新怎么下发」有不同方案:
| 包管理器 | 使用家族 | 一句话理解 |
|---|---|---|
| apt / dpkg | Debian、Ubuntu | .deb 包;你本地的主武器 |
| dnf / rpm | RHEL、Rocky、Alma、Fedora | .rpm 包;你外网服务器的主武器(yum 是 dnf 前身) |
| pacman | Arch、Manjaro | 滚动更新 + AUR 社区库,极简高效 |
| zypper | openSUSE | 企业级,rpm 生态 |
| apk | Alpine | 微容器镜像里的极简包管理 |
| Nix | 跨发行版 | 纯函数式包管理,环境可复现(进阶) |
| Snap / Flatpak / AppImage | 跨发行版 | 「应用商店」式:自带依赖的通用格式,装桌面软件方便 |
6.2Ubuntu:apt/dpkg 全家桶(练到条件反射)
sudo apt update # 更新软件源索引(装新包前必做)
sudo apt upgrade # 升级已装软件(-y 免确认)
sudo apt install nginx # 安装(自动解决依赖)
sudo apt remove nginx # 卸载(保留配置)
sudo apt purge nginx # 卸载含配置
sudo apt autoremove # 清理不再需要的依赖
apt search 关键词 # 搜索仓库里的软件
apt show 包名 # 包信息
apt list --installed # 已安装清单
apt list --upgradable # 可升级清单
dpkg -i 软件.deb # 手动安装 .deb(不解决依赖)
dpkg -L 包名 # 装了哪些文件
dpkg -S 路径 # 文件属于哪个包
dpkg --purge 包名 # 卸载含配置
dpkg -l | grep 关键词 # 查看已装包
依赖坏了用 sudo apt --fix-broken install 修复;源配置在 /etc/apt/sources.list 与 /etc/apt/sources.list.d/。
6.3Rocky:dnf/rpm 全家桶(与 apt 一一对应)
sudo dnf check-update # 检查更新(等价 apt update)
sudo dnf update # 升级
sudo dnf install nginx # 安装
sudo dnf remove nginx # 卸载
sudo dnf autoremove # 清理依赖
dnf search 关键词 # 搜索
dnf info 包名 / dnf list installed / dnf list updates
sudo dnf history # 安装历史(dnf 独有,可回滚!)
rpm -ivh 软件.rpm # 手动装 .rpm
rpm -ql 包名 # 装了哪些文件
rpm -qf 路径 # 文件属于哪个包
rpm -e 包名 # 卸载
rpm -V 包名 # 校验包文件是否被篡改(安全排查用)
apt update/upgrade/install/remove/purge ↔ dnf check-update/update/install/remove;dpkg -L/-S ↔ rpm -ql/-qf。命令长得不一样,逻辑一模一样。源文件在 /etc/yum.repos.d/*.repo。
6.4其他安装器速览(认识即可)
- pacman(Arch):
pacman -Syu全量更新;AUR(Arch 用户仓库)是超大型社区库,yay是其助手 —— 这就是「社区软件库」的极致形态。 - zypper(openSUSE):
zypper ref/up/install。 - apk(Alpine):
apk add/update/del。 - Nix:每个软件装进独立路径、版本可并装,环境声明式可复现;进阶玩,生产服务器一般不用。
6.5源码编译安装:什么时候用、怎么用
什么时候才需要编译:① 官方没打包;② 仓库版本太老、想要新特性;③ 需要定制编译参数。绝大多数场景不需要编译(编译慢、依赖易错、更新要自己管)。
# Ubuntu 装构建工具;Rocky 用:dnf groupinstall "Development Tools"
sudo apt install build-essential
tar -zxvf app-1.2.3.tar.gz && cd app-1.2.3
./configure --prefix=/usr/local/app # 检查环境 + 指定安装位置(--prefix)
make # 编译(可用 make -j$(nproc) 并行加速)
sudo make install # 安装到 /usr/local/app
# 之后:加 PATH、写 systemd 服务(第 7 章)、配 /etc 配置
软件名 依赖 configure error」;make install 前确认 --prefix(默认会撒进 /usr 各处,卸载很麻烦)。用 stow 或统一 --prefix=/opt/软件名 可让「删目录=卸载」。
6.6通用软件格式:Snap / Flatpak / AppImage
| 格式 | 机制 | 场景 |
|---|---|---|
| Snap(Ubuntu 主推) | 自动更新、沙箱;命令 snap install 软件 | Ubuntu 上装桌面软件最省心(如 VS Code、浏览器);缺点:占用大、自动更新有时烦 |
| Flatpak(跨发行版) | 沙箱 + 独立运行时;flatpak install flathub 软件 | 桌面应用跨发行版统一;Flathub 是它的「应用商店」 |
| AppImage | 单个可执行文件,chmod +x 后直接跑 | 免安装绿色软件(类似 Windows 绿色 exe);AppImageHub 可搜 |
| 来源 | 落点 |
|---|---|
| apt/dnf 官方仓库 | /usr(bin/lib/share)+ /etc 配置 + /var/lib 数据 |
| 源码编译默认 | /usr/local(bin/lib) |
| 商业/绿色软件包 | /opt/软件名/(如 /opt/java、/opt/tomcat) |
| Snap/Flatpak | 各自私有目录(/snap、/var/lib/flatpak),与系统隔离 |
| 容器镜像 | 镜像内,宿主机只存镜像层(第 13 章) |
装完后立刻确认:which 命令 能定位、systemctl status 能管理(若提供服务)、配置文件在 /etc 下能找到。
6.8第三方源与社区渠道:官方没有的版本去哪找
「官方仓库没有 / 版本太老」时的社区渠道,按可信度排序:
| 渠道 | 适用于 | 说明 |
|---|---|---|
| EPEL(Rocky/RHEL 专属) | Rocky 补软件缺口 | Fedora 社区维护的「Red Hat 系官方扩展仓库」,dnf install epel-release 后就能装 nginx/redis 等大量软件 —— Rocky 必装 |
| Remi(Rocky/RHEL) | 新版 PHP/Redis | PHP 版本太老时用 Remi 源换新版本 |
| PPA(Ubuntu) | 新版/社区软件 | Launchpad 上的个人/团队仓库:add-apt-repository ppa:作者/仓库;只加可信作者(如 deadsnakes 装新 Python) |
| COPR(Fedora 系) | Fedora/Rocky 社区包 | Fedora 官方的社区构建服务,dnf copr enable 作者/仓库 |
| 官方站点的 .deb/.rpm | MySQL、MongoDB、Docker 等 | 大厂商官网提供「配置官方源」的安装脚本/仓库地址,版本最新且最可信 |
| GitHub Releases | 开源软件官方发布 | releases 页下载二进制/安装包/AppImage;github.com/作者/项目/releases |
| Flathub / Snap Store / AppImageHub | 桌面应用 | 跨发行版应用商店网站,可直接网页搜索 |
| Docker Hub 等镜像仓库 | 服务器软件容器版 | 官方镜像(如 nginx:1.27-alpine),连版本都不用自己编(第 13 章) |
| 镜像站(TUNA/阿里云/中科大) | 加速官方源 | 国内服务器 apt/dnf 换国内镜像,速度质变(第 16 章有清单) |
6.9找软件决策树(把它当流程图背下来)
图 6-1 · 找软件决策树(示意)
记忆口诀:仓库优先 → 桌面走商店 → 服务找官方源 → 都没有去 GitHub/镜像 → 最后才编译。
6.10Windows 软件 → Linux 对照(常见软件怎么装)
| Windows 软件 | Linux 对应方案(按推荐序) |
|---|---|
| Office / Word | WPS Office(Linux 版)、LibreOffice(apt/dnf 直装) |
| Photoshop | GIMP(仓库直装)、Krita |
| 微信 / QQ | 官方 Linux 版(官网下载 .deb);或用 Wine/容器跑 Windows 版(不推荐生产依赖) |
| 浏览器 | Chrome/Firefox 官方 .deb/.rpm,或仓库直装 |
| VS Code | 官方 .deb/.rpm 或 snap |
| WinRAR / 压缩 | 7-Zip(p7zip)、tar 本身全能 |
| 远程桌面(Windows 远程连接) | Remmina(客户端)、xrdp(被连接端,第 2 章) |
| 某些只有 Windows 版的软件 | Wine/CrossOver(兼容层);虚拟机里跑 Windows;或找网页版替代 |
搜索姿势:在浏览器搜「软件名 + linux 安装」或「软件名 + snap/flatpak」,优先官网。多数知名软件官网都有 Linux 专区。
6.11安全验证:装软件前怎么确认没被投毒
1只走可信源
官方仓库、官方源、知名项目 GitHub。第三方「一键脚本」慎用。
2校验和
官方页面给 SHA256,下载后 sha256sum 文件 比对 —— 不同就是文件损坏或被篡改。
3绝不 curl | bash
curl 网址 | bash 等于把脚本当 root 执行且不可审计 —— 这是供应链攻击高发区。先下载、看内容、再执行。
wget https://example.com/app.tar.gz
wget https://example.com/app.tar.gz.sha256
sha256sum -c app.tar.gz.sha256 # 输出 OK 才继续
# 下载脚本后先查看再执行
wget https://example.com/install.sh && less install.sh
本章自测题
- Ubuntu 和 Rocky 的包管理器分别是什么?「更新索引」「升级」「安装」「卸载含配置」各怎么写?
- 一个 .deb 文件怎么手动装?怎么查一个文件属于哪个包?
- 源码编译的标准三步是什么?推荐 --prefix 指向哪里?
- Rocky 补软件缺口第一站是什么源?Ubuntu 想要新版 Python 可以用什么?
- 按决策树,你要装一个官方仓库没有的服务器软件(如新版 MySQL),正确顺序是?
- 桌面 GUI 软件跨发行版有什么通用格式?
- 为什么不能执行 curl 网址 | bash?正确做法是什么?
- Windows 的 Office 和 PS 在 Linux 各用什么替代?
参考答案
1. apt/dpkg、dnf/rpm;apt update ↔ dnf check-update;apt upgrade ↔ dnf update;apt install ↔ dnf install;apt purge ↔ dnf remove(配置随包删除)。
2. dpkg -i x.deb;dpkg -S 路径(Rocky:rpm -qf 路径)。
3. ./configure --prefix=/usr/local/软件名 → make → make install。
4. EPEL;PPA(如 deadsnakes)。
5. 官方站点提供的官方源/仓库脚本 → 官网 .deb/.rpm → 官方 Docker 镜像 → 源码编译。
6. Snap / Flatpak / AppImage。
7. 未审计的远程脚本以 root 直接执行,无法确认内容与可信度;先下载、less 查看、再执行。
8. WPS/LibreOffice;GIMP/Krita。