Linux 运维与安全专家 06 · 软件安装与包管理

第 6 章 · 软件安装与包管理

阶段 B预计 6–8 小时你的核心痛点

本章一次性解决你三个老大难:「社区里好多安装器看得一脸懵」、「官方没有的版本社区里到底去哪找」、「Windows 上的软件在 Linux 怎么装」。读完你会有一条清晰的「找软件决策链」和一份可信渠道清单。

6.1为什么有这么多安装器:一个世界观就懂了

安装器(包管理器)多的根本原因:每个发行版家族独立打包、独立维护软件仓库。不同家族对「软件以什么格式打包、依赖怎么记录、更新怎么下发」有不同方案:

包管理器使用家族一句话理解
apt / dpkgDebian、Ubuntu.deb 包;你本地的主武器
dnf / rpmRHEL、Rocky、Alma、Fedora.rpm 包;你外网服务器的主武器(yum 是 dnf 前身)
pacmanArch、Manjaro滚动更新 + AUR 社区库,极简高效
zypperopenSUSE企业级,rpm 生态
apkAlpine微容器镜像里的极简包管理
Nix跨发行版纯函数式包管理,环境可复现(进阶)
Snap / Flatpak / AppImage跨发行版「应用商店」式:自带依赖的通用格式,装桌面软件方便
结论先行 你只需要精通两个:apt(Ubuntu)和 dnf(Rocky),其余认识即可。所有的包管理器哲学都一样:从软件仓库拉包 → 自动装依赖 → 记录到系统 → 可卸载可升级。仓库(repository/源)就是「官方软件商店」的地址列表。

6.2Ubuntu:apt/dpkg 全家桶(练到条件反射)

终端 · apt 日常六连
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(底层包工具)
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 一一对应)

终端 · dnf 日常六连
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(底层)
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其他安装器速览(认识即可)

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 配置
编译前的纪律 先看 README/INSTALL 文件;依赖缺失报错就去搜「软件名 依赖 configure error」;make install 前确认 --prefix(默认会撒进 /usr 各处,卸载很麻烦)。用 stow 或统一 --prefix=/opt/软件名 可让「删目录=卸载」。

6.6通用软件格式:Snap / Flatpak / AppImage

判断依据:桌面 GUI 软件优先 Snap/Flatpak/AppImage;服务器软件(nginx/mysql 等)一律用 apt/dnf 或官方源 —— 服务器别用 Snap/AppImage 跑服务,更新与 systemd 集成都别扭。

6.7装在哪:一张表定生死(回扣第 3 章)

格式机制场景
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/RedisPHP 版本太老时用 Remi 源换新版本
PPA(Ubuntu)新版/社区软件Launchpad 上的个人/团队仓库:add-apt-repository ppa:作者/仓库;只加可信作者(如 deadsnakes 装新 Python)
COPR(Fedora 系)Fedora/Rocky 社区包Fedora 官方的社区构建服务,dnf copr enable 作者/仓库
官方站点的 .deb/.rpmMySQL、MongoDB、Docker 等大厂商官网提供「配置官方源」的安装脚本/仓库地址,版本最新且最可信
GitHub Releases开源软件官方发布releases 页下载二进制/安装包/AppImage;github.com/作者/项目/releases
Flathub / Snap Store / AppImageHub桌面应用跨发行版应用商店网站,可直接网页搜索
Docker Hub 等镜像仓库服务器软件容器版官方镜像(如 nginx:1.27-alpine),连版本都不用自己编(第 13 章)
镜像站(TUNA/阿里云/中科大)加速官方源国内服务器 apt/dnf 换国内镜像,速度质变(第 16 章有清单)
社区源使用纪律 ① 只用信誉好的源(官方、知名项目、大厂);② 加源前备份原配置;③ 别同时加多个互相冲突的 PHP/Python 源;④ EPEL 是 Rocky 的「默认第一站」,先装它。

6.9找软件决策树(把它当流程图背下来)

需要某个软件 ① apt/dnf 仓库有? ② 是桌面 GUI 软件? ③ 是服务器服务? ✅ 直接安装,完事 apt install / dnf install Snap / Flatpak / AppImage 网页或商店搜,下载即用 查官方源/EPEL/Remi 加源后 dnf/apt install 仓库确实没有 / 版本太老 官方下载页 / GitHub .deb/.rpm/二进制/AppImage 官方 Docker 镜像 docker pull,最干净 最后手段:源码编译 /usr/local,自己维护

图 6-1 · 找软件决策树(示意)

记忆口诀:仓库优先 → 桌面走商店 → 服务找官方源 → 都没有去 GitHub/镜像 → 最后才编译。

6.10Windows 软件 → Linux 对照(常见软件怎么装)

Windows 软件Linux 对应方案(按推荐序)
Office / WordWPS Office(Linux 版)、LibreOffice(apt/dnf 直装)
PhotoshopGIMP(仓库直装)、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

本章自测题

  1. Ubuntu 和 Rocky 的包管理器分别是什么?「更新索引」「升级」「安装」「卸载含配置」各怎么写?
  2. 一个 .deb 文件怎么手动装?怎么查一个文件属于哪个包?
  3. 源码编译的标准三步是什么?推荐 --prefix 指向哪里?
  4. Rocky 补软件缺口第一站是什么源?Ubuntu 想要新版 Python 可以用什么?
  5. 按决策树,你要装一个官方仓库没有的服务器软件(如新版 MySQL),正确顺序是?
  6. 桌面 GUI 软件跨发行版有什么通用格式?
  7. 为什么不能执行 curl 网址 | bash?正确做法是什么?
  8. 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。