软件包管理
05 软件包管理
目录
- 软件包管理概述
- RHEL系:yum/dnf包管理
- RHEL系:RPM包直接操作
- RHEL系:自建仓库
- Debian系:apt/dpkg包管理
- Debian系:apt源管理
- 源码编译安装(通用)
- Snap与Flatpak简介
- 国内镜像源配置
- 版本锁定与依赖解决
- 运维常用命令精选
- 趣味命令专栏
1. 软件包管理概述
生活类比
📦 快递类比:软件包就像快递包裹——里面有程序(商品)、依赖列表(配件清单)、安装脚本(组装说明)。包管理器就是你的"智能快递柜",自动处理拆包、组装和退货。
两大阵营对比
| 特性 | RHEL系 | Debian系 |
|---|---|---|
| 包格式 | .rpm | .deb |
| 高级管理器 | yum(旧)/ dnf(新) | apt / apt-get |
| 底层工具 | rpm | dpkg |
| 仓库配置 | /etc/yum.repos.d/*.repo | /etc/apt/sources.list |
| 代表发行版 | CentOS, RHEL, Fedora, 麒麟V10 | Ubuntu, Debian, Kali |
💡 想一想:为什么会有两套包管理系统?统一成一个不好吗?
答案:历史原因——RPM由Red Hat开发(1997),DPKG由Debian社区开发(1994),各自发展了20多年,生态和工具链已经深度绑定,就像中文和英文各自有完整的语法体系。
2. RHEL系:yum/dnf包管理
问题:我想在CentOS/麒麟V10上安装软件,怎么做?
解决:使用 yum(CentOS 7)或 dnf(CentOS 8+/Fedora/麒麟V10)。
yum与dnf的关系
dnf是yum的升级版,命令几乎相同- CentOS 8+ / Fedora / 麒麟V10 使用
dnf - CentOS 7 使用
yum - 下面的命令中,把
yum替换为dnf即可在新版系统上使用
基础操作
# 安装软件
sudo yum install -y vim # -y 表示自动确认
sudo dnf install -y nginx # Fedora/麒麟V10用dnf
# 卸载软件
sudo yum remove -y vim
# 搜索软件
yum search nginx # 按关键词搜索
yum list installed # 列出已安装的包
yum list available # 列出可安装的包
# 更新软件
sudo yum update # 更新所有软件
sudo yum update -y nginx # 只更新nginx
# 查看软件信息
yum info nginx
# 查看软件依赖
yum deplist nginx
仓库管理
# 查看已启用的仓库
yum repolist
# 输出示例:
# repo id repo name status
# baseos CentOS-8 - BaseOS 3000+
# appstream CentOS-8 - AppStream 8000+
# epel Extra Packages for E-Linux 13000+
# 启用/禁用仓库
sudo yum install -y --enablerepo=epel htop
sudo yum install -y --disablerepo=epel vim
# 添加EPEL仓库(Extra Packages for Enterprise Linux)
sudo yum install -y epel-release
yum history —— 包管理的"后悔药"
# 查看安装历史
yum history
# 输出示例:
# ID | Command line | Date | Action(s) | Altered
# ---+-----------------------+------------+-----------+--------
# 5 | install -y nginx | 2024-03-15 | Install | 3
# 4 | remove -y vim | 2024-03-14 | Remove | 1
# 3 | update | 2024-03-13 | Update | 25
# 查看某次操作的详情
yum history info 5
# 撤销某次操作(后悔药!)
sudo yum history undo 5
# 重做某次操作
sudo yum history redo 5
清理缓存
# 清理所有缓存
sudo yum clean all
# 重建缓存
sudo yum makecache
# 查看缓存大小
du -sh /var/cache/yum/
💡 想一想:
yum install和yum update的区别是什么?对一个已安装的包执行yum install会怎样?答案:install只在新安装时使用(已安装则跳过),update会升级到最新版本。对已安装的包执行install不会升级。
3. RHEL系:RPM包直接操作
问题:我下载了一个.rpm文件,怎么手动安装?
解决:使用 rpm 命令直接操作。
# 安装rpm包
sudo rpm -ivh nginx-1.20.1-1.el8.x86_64.rpm
# -i: install安装 -v: verbose详细 -h: hash显示进度条
# 升级rpm包
sudo rpm -Uvh nginx-1.22.0-1.el8.x86_64.rpm
# 卸载rpm包
sudo rpm -e nginx
# 查询已安装的包
rpm -qa # 列出所有已安装包
rpm -qa | grep nginx # 搜索特定包
# 查看包包含哪些文件
rpm -ql nginx # 列出nginx安装的所有文件
# 查看某个文件属于哪个包
rpm -qf /etc/nginx/nginx.conf
# 输出:nginx-1.20.1-1.el8.x86_64
# 查看包信息
rpm -qi nginx
RPM的四大查询
| 命令 | 功能 | 记忆口诀 |
|---|---|---|
rpm -qa | 查询所有已安装包 | query all |
rpm -ql 包名 | 查询包安装的文件 | query list |
rpm -qf 文件 | 查询文件属于哪个包 | query file |
rpm -qi 包名 | 查询包的详细信息 | query info |
RPM vs YUM/DNF
| 特性 | rpm | yum/dnf |
|---|---|---|
| 自动解决依赖 | ❌ 不支持 | ✅ 支持 |
| 安装本地包 | ✅ | ✅(yum localinstall xxx.rpm) |
| 从仓库安装 | ❌ | ✅ |
| 建议 | 仅用于本地包 | 日常使用首选 |
⚠️ 注意:直接使用
rpm安装包时,如果有依赖未满足会报错。推荐使用yum localinstall xxx.rpm,它会自动解决依赖。
# 推荐方式:自动解决依赖
sudo yum localinstall nginx-1.20.1-1.el8.x86_64.rpm
💡 想一想:为什么
rpm -ivh安装包经常失败,而yum install很少失败?答案:rpm不解决依赖关系,如果A包依赖B包,必须手动先装B再装A;yum自动从仓库下载所有依赖,一步到位。
4. RHEL系:自建仓库
问题:公司内部网络不能访问外网,怎么搭建自己的软件仓库?
解决:使用 createrepo 创建本地仓库。
# 安装工具
sudo yum install -y createrepo httpd
# 创建仓库目录
sudo mkdir -p /var/www/html/repo/Packages
# 把rpm包放进去
sudo cp *.rpm /var/www/html/repo/Packages/
# 生成仓库元数据
sudo createrepo /var/www/html/repo/
# 启动HTTP服务
sudo systemctl start httpd
sudo systemctl enable httpd
# 客户端配置(创建repo文件)
sudo tee /etc/yum.repos.d/local.repo << 'EOF'
[local-repo]
name=Local Repository
baseurl=http://192.168.1.100/repo/
enabled=1
gpgcheck=0
EOF
# 刷新缓存
sudo yum clean all && sudo yum makecache
💡 想一想:为什么要用自建仓库而不是直接用rpm安装?
答案:自建仓库支持依赖解析,团队成员可以像使用官方仓库一样用yum安装软件,不需要手动管理依赖。
5. Debian系:apt/dpkg包管理
问题:我想在Ubuntu/Debian/Kali上安装软件,怎么做?
解决:使用 apt(推荐)或 apt-get。
基础操作
# 更新包列表(必须先做!)
sudo apt update
# 类比:先去图书馆查一下有哪些书、哪些书有新版
# 安装软件
sudo apt install -y vim
# 卸载软件(保留配置文件)
sudo apt remove -y vim
# 彻底卸载(删除配置文件)
sudo apt purge -y vim
# 搜索软件
apt search nginx
# 查看软件信息
apt show nginx
# 列出包的文件
dpkg -L nginx
# 升级所有已安装的软件
sudo apt upgrade -y
# 清理不再需要的依赖
sudo apt autoremove -y
# 清理已下载的包缓存
sudo apt clean
apt与apt-get的关系
| 命令 | 说明 |
|---|---|
apt | 新式命令,输出友好,有进度条和颜色 |
apt-get | 老式命令,适合脚本使用,输出稳定 |
apt-cache search | 搜索(等同于 apt search) |
apt-cache show | 查看详情(等同于 apt show) |
dpkg —— Debian系的底层工具
# 安装deb包
sudo dpkg -i nginx_1.18.0-1_amd64.deb
# 如果报依赖错误,用apt修复
sudo apt install -f # fix broken dependencies
# 列出所有已安装的包
dpkg -l # 等同于 rpm -qa
dpkg -l | grep nginx
# 查看包安装了哪些文件
dpkg -L nginx # 等同于 rpm -ql
# 查看文件属于哪个包
dpkg -S /etc/nginx/nginx.conf # 等同于 rpm -qf
# 查看包信息
dpkg -s nginx # 等同于 rpm -qi
dpkg四大查询对照表
| 功能 | RHEL系 (rpm) | Debian系 (dpkg) |
|---|---|---|
| 列出所有已安装包 | rpm -qa | dpkg -l |
| 查看包的文件 | rpm -ql 包名 | dpkg -L 包名 |
| 文件属于哪个包 | rpm -qf 文件 | dpkg -S 文件 |
| 查看包信息 | rpm -qi 包名 | dpkg -s 包名 |
💡 想一想:
apt remove和apt purge有什么区别?什么时候用哪个?答案:remove只删除程序文件,保留配置文件(方便以后重新安装时恢复设置);purge连配置文件一起删除。如果只是临时卸载用remove,彻底清理用purge。
6. Debian系:apt源管理
问题:apt默认源在国外,下载很慢,怎么换国内源?
解决:修改 /etc/apt/sources.list 文件。
sources.list 格式说明
# 格式:类型 地址 发行版代号 组件
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
# ↑ ↑ ↑ ↑
# | | | 组件(软件分类)
# | | 发行版代号
# | 仓库地址
# 类型:deb(二进制包)或 deb-src(源码包)
组件含义
| 组件 | 说明 | 类比 |
|---|---|---|
| main | 官方支持的自由软件 | 学校采购的"必修课教材" |
| restricted | 官方支持的非自由软件 | 学校采购的"选修课教材" |
| universe | 社区维护的自由软件 | 师生推荐的"课外读物" |
| multiverse | 社区维护的非自由软件 | "商业教辅资料" |
备份并替换源
# 备份原始源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为阿里云源(Ubuntu 22.04 jammy)
sudo tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF
# 更新缓存
sudo apt update
💡 想一想:
sources.list和/etc/apt/sources.list.d/*.list有什么区别?答案:两者功能相同,sources.d目录下可以放多个.list文件,方便管理第三方源,不用修改主文件,更模块化。
7. 源码编译安装(通用)
问题:仓库里没有我要的软件,或者版本太旧,怎么办?
解决:从源码编译安装——这是所有发行版通用的方法。
生活类比
🍳 做菜类比:
- 包管理器安装 = 点外卖(方便快捷,但选择有限)
- 源码编译安装 = 自己买菜做饭(麻烦,但想做什么菜都行,还能定制口味)
编译安装四步走
# 第0步:安装编译工具
# RHEL系
sudo yum groupinstall -y "Development Tools"
sudo yum install -y gcc make
# Debian系
sudo apt install -y build-essential
# 第1步:下载源码并解压
wget https://example.com/software-1.0.tar.gz
tar -xzf software-1.0.tar.gz
cd software-1.0
# 第2步:配置(检查环境、生成Makefile)
./configure --prefix=/usr/local/software
# --prefix 指定安装目录
# 第3步:编译(把源码翻译成机器语言)
make -j$(nproc)
# -j$(nproc) 使用所有CPU核心并行编译,加速编译
# 第4步:安装(把编译好的文件复制到指定位置)
sudo make install
编译安装后的善后工作
# 添加可执行文件到PATH
echo 'export PATH=/usr/local/software/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 添加库文件路径
echo '/usr/local/software/lib' | sudo tee /etc/ld.so.conf.d/software.conf
sudo ldconfig
# 创建systemd服务(可选)
sudo tee /etc/systemd/system/software.service << 'EOF'
[Unit]
Description=My Software Service
After=network.target
[Service]
ExecStart=/usr/local/software/bin/software
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now software
编译安装 vs 包管理器安装
| 特性 | 包管理器 | 源码编译 |
|---|---|---|
| 安装速度 | 快(预编译) | 慢(需编译) |
| 自动管理依赖 | ✅ | ❌ 手动解决 |
| 版本选择 | 受限于仓库 | 任意版本 |
| 可定制性 | 低 | 高(编译选项) |
| 卸载方便 | ✅ remove | ❌ 需手动删除 |
| 升级方便 | ✅ update | ❌ 需重新编译 |
💡 想一想:源码编译安装有什么缺点?如何弥补?
答案:缺点是没有包管理器追踪,卸载困难。可以用
checkinstall工具把编译结果打成deb/rpm包,然后用包管理器管理。
8. Snap与Flatpak简介
问题:传统包管理器版本太旧,编译又太复杂,有没有折中方案?
解决:Snap和Flatpak——新一代"自带依赖"的包格式。
生活类比
🥡 快餐类比:传统包管理器像食堂(共享厨房和食材),Snap/Flatpak像外卖便当(自带所有食材和餐具,不依赖食堂的厨房)。
Snap(Ubuntu主推)
# 安装snapd(如果没有)
sudo apt install -y snapd # Debian系
sudo yum install -y snapd # RHEL系(需EPEL)
# 搜索软件
snap find vscode
# 安装软件
sudo snap install code --classic
# 列出已安装的snap包
snap list
# 更新snap包
sudo snap refresh code
# 卸载
sudo snap remove code
Flatpak(Fedora/RHEL主推)
# 安装flatpak
sudo dnf install -y flatpak # Fedora/RHEL
sudo apt install -y flatpak # Ubuntu/Debian
# 添加Flathub仓库
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# 安装软件
flatpak install flathub org.gimp.GIMP
# 运行软件
flatpak run org.gimp.GIMP
# 列出已安装
flatpak list
# 更新
flatpak update
# 卸载
flatpak uninstall org.gimp.GIMP
三种安装方式对比
| 特性 | 传统包管理器 | Snap | Flatpak |
|---|---|---|---|
| 依赖处理 | 共享系统库 | 自带大部分依赖 | 自带所有依赖 |
| 包体积 | 小 | 中等 | 较大 |
| 启动速度 | 快 | 较慢 | 较慢 |
| 跨发行版 | ❌ | ✅ | ✅ |
| 主推者 | 各发行版 | Canonical(Ubuntu) | Red Hat/Fedora |
| 沙箱隔离 | ❌ | ✅ | ✅ |
💡 想一想:Snap和Flatpak的包为什么比传统包大很多?
答案:因为它们自带依赖库,不依赖系统库。好处是跨发行版兼容,坏处是浪费磁盘空间,且启动稍慢。
9. 国内镜像源配置
问题:默认的官方源在国外,下载速度只有几十KB/s,怎么办?
解决:配置国内镜像源。
主流镜像站
| 镜像站 | 地址 | 特点 |
|---|---|---|
| 阿里云 | mirrors.aliyun.com | 速度快,稳定 |
| 清华TUNA | mirrors.tuna.tsinghua.edu.cn | 教育网首选 |
| 中科大USTC | mirrors.ustc.edu.cn | 教育网备选 |
| 华为云 | mirrors.huaweicloud.com | 企业级 |
| 腾讯云 | mirrors.cloud.tencent.com | 速度快 |
RHEL系(CentOS 7)换源
# 备份
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下载阿里云repo文件
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo \
http://mirrors.aliyun.com/repo/Centos-7.repo
# 或者清华源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo \
https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
# 清理并重建缓存
sudo yum clean all && sudo yum makecache
RHEL系(CentOS 8 / Stream)换源
# 替换baseurl
sudo sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*.repo
sudo sed -i 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-*.repo
sudo yum clean all && yum makecache
Fedora换源
# 阿里云源
sudo sed -e 's|^metalink=|#metalink=|g' \
-e 's|^#baseurl=http://download.example/pub/fedora/linux|baseurl=https://mirrors.aliyun.com/fedora|g' \
-i /etc/yum.repos.d/fedora.repo \
-i /etc/yum.repos.d/fedora-updates.repo \
-i /etc/yum.repos.d/fedora-modular.repo
sudo dnf clean all && dnf makecache
麒麟V10换源
# 麒麟V10基于CentOS 8,方法类似
sudo cp /etc/yum.repos.d/kylin_x86_64.repo /etc/yum.repos.d/kylin_x86_64.repo.bak
# 编辑repo文件,将baseurl改为国内镜像
sudo vi /etc/yum.repos.d/kylin_x86_64.repo
sudo yum clean all && yum makecache
Debian/Ubuntu换源
# 备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# Ubuntu 22.04 (jammy) —— 阿里云源
sudo tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
EOF
# Ubuntu 22.04 —— 清华源
sudo tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
EOF
# Ubuntu 22.04 —— 中科大源
sudo tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
EOF
# Debian 12 (bookworm) —— 阿里云源
sudo tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.aliyun.com/debian/ bookworm main contrib non-free
deb https://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free
deb https://mirrors.aliyun.com/debian-security/ bookworm-security main contrib non-free
EOF
# 更新缓存
sudo apt update
Kali Linux换源
# 备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 阿里云源
sudo tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
EOF
sudo apt update
一键换源脚本思路
#!/bin/bash
# 简单的换源脚本示例(Ubuntu)
MIRROR="https://mirrors.aliyun.com"
CODENAME=$(lsb_release -cs)
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
cat << EOF | sudo tee /etc/apt/sources.list
deb ${MIRROR}/ubuntu/ ${CODENAME} main restricted universe multiverse
deb ${MIRROR}/ubuntu/ ${CODENAME}-updates main restricted universe multiverse
deb ${MIRROR}/ubuntu/ ${CODENAME}-security main restricted universe multiverse
EOF
sudo apt update
echo "换源完成!当前使用:${MIRROR}"
💡 想一想:换源后
apt update报"GPG error"怎么办?答案:可能是镜像没有导入GPG密钥。运行
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <密钥ID>导入密钥。
10. 版本锁定与依赖解决
问题:有些软件不能随便升级(升级后可能不兼容),怎么锁定版本?
解决:使用版本锁定功能。
RHEL系:版本锁定
# 安装插件
# CentOS 7
sudo yum install -y yum-plugin-versionlock
# CentOS 8+ / Fedora
sudo dnf install -y python3-dnf-plugin-versionlock
# 锁定nginx版本
sudo yum versionlock add nginx
# 查看锁定列表
sudo yum versionlock list
# 解锁
sudo yum versionlock delete nginx
Debian系:版本锁定
# 锁定nginx版本(hold)
sudo apt-mark hold nginx
# 查看锁定列表
sudo apt-mark showhold
# 解锁
sudo apt-mark unhold nginx
# 或者使用dpkg
echo "nginx hold" | sudo dpkg --set-selections
依赖冲突排查
# RHEL系
yum check # 检查依赖问题
package-cleanup --problems # 列出问题包
package-cleanup --dupes # 查找重复安装的包
# Debian系
sudo apt install -f # 自动修复依赖
sudo dpkg --configure -a # 修复未完成的配置
apt-cache depends nginx # 查看nginx的依赖
apt-cache rdepends nginx # 查看谁依赖了nginx(反向依赖)
降级软件(版本回退)
# RHEL系
sudo yum downgrade nginx-1.18.0 # 降级到指定版本
sudo yum history undo <ID> # 撤销某次操作
# Debian系
sudo apt install nginx=1.18.0-1 # 安装指定版本
# 先查看可用版本
apt-cache policy nginx
💡 想一想:为什么不直接卸载冲突包?
答案:很多系统核心组件被其他包依赖,直接卸载可能导致系统功能失效甚至无法启动。应该用
remove模拟(apt remove --simulate 包名)先看看会影响哪些包。
11. 运维常用命令精选
以下是软件包管理的日常必备操作速查。
快速诊断包问题
# RHEL系:检查系统中是否有损坏的包
sudo rpm -Va
# 输出示例:
# S.5....T. c /etc/nginx/nginx.conf # 表示文件被修改过
# Debian系:检查包的完整性
sudo debsums -c
# 需要先安装:sudo apt install -y debsums
一键安装常用工具包
# RHEL系
sudo yum install -y \
vim wget curl net-tools lsof strace tcpdump \
htop iotop iftop bash-completion \
epel-release yum-utils
# Debian系
sudo apt install -y \
vim wget curl net-tools lsof strace tcpdump \
htop iotop iftop bash-completion \
build-essential
安全更新
# RHEL系:只安装安全更新
sudo yum update --security
# Debian系:只安装安全更新
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
查看包安装时间和大小
# RHEL系:按安装时间排序
rpm -qa --last | head -20
# Debian系:按安装时间排序
ls -lt /var/lib/dpkg/info/*.list | head -20
# 查看已安装包的总大小
# RHEL系
rpm -qa --queryformat '%{SIZE}\n' | awk '{sum+=$1} END {print sum/1024/1024 " MB"}'
# Debian系
dpkg-query -W -f='${Installed-Size}\n' | awk '{sum+=$1} END {print sum/1024 " MB"}'
各发行版命令对照总表
| 操作 | RHEL系 (yum/dnf) | Debian系 (apt) |
|---|---|---|
| 安装 | yum install 包 | apt install 包 |
| 卸载 | yum remove 包 | apt remove 包 |
| 彻底卸载 | yum remove 包 | apt purge 包 |
| 搜索 | yum search 关键词 | apt search 关键词 |
| 更新全部 | yum update | apt upgrade |
| 更新列表 | yum makecache | apt update |
| 查看信息 | yum info 包 | apt show 包 |
| 列出文件 | rpm -ql 包 | dpkg -L 包 |
| 文件溯源 | rpm -qf 文件 | dpkg -S 文件 |
| 清理缓存 | yum clean all | apt clean |
| 修复依赖 | yum check | apt install -f |
| 锁定版本 | yum versionlock add 包 | apt-mark hold 包 |
12. 趣味命令专栏
包管理不只是严肃的运维工作,也有一些好玩的工具可以安装!
🎮 nsnake —— 终端贪吃蛇
# 安装
sudo apt install -y nsnake # Debian系
sudo dnf install -y nsnake # Fedora
# 开始游戏
nsnake
# 用方向键控制蛇的移动,吃食物变长,不要撞墙!
# 数学老师可以让同学们用这个来理解坐标系和向量运动。
📊 nload —— 实时网络流量图
# 安装
sudo apt install -y nload # Debian系
sudo yum install -y nload # RHEL系(需EPEL)
# 运行
nload
# 在终端中实时显示网络流量的波形图,非常直观!
# 就像心电图一样,但是是网络流量的"心电图"。
🗺️ asciiquarium —— 终端水族馆
# 安装(需要perl和Term::Animation)
sudo apt install -y libcurses-perl
sudo cpan Term::Animation
sudo apt install -y asciiquarium # 或从源码编译
# 运行
asciiquarium
# 终端变成水族馆,有小鱼游来游去!
🎵 cmus —— 终端音乐播放器
# 安装
sudo apt install -y cmus # Debian系
sudo yum install -y cmus # RHEL系(需EPEL)
# 运行
cmus
# 在终端里听歌!按 :add /path/to/music 添加音乐
# 按 Enter 播放,x 暂停,v 停止
🎲 figlet —— 生成ASCII艺术字
# 安装
sudo apt install -y figlet # Debian系
sudo yum install -y figlet # RHEL系
# 使用
figlet "Hello Linux"
# 输出:
# _ _ _ _ _ _
# | | | | ___| | | ___ | | (_)_ __ _ ___ __
# | |_| |/ _ \ | |/ _ \| | | | '_ \| | | \ \/ /
# | _ | __/ | | (_) | |___| | | | | |_| |> <
# |_| |_|\___|_|_|\___/|_____|_|_| |_|\__,_/_/\_\
# 用不同的字体
figlet -f banner "Linux"
figlet -f script "Math"
# 数学老师可以在终端展示大字标题!
figlet -f big "f(x) = x^2"
🌍 telnet towel.blinkenlights.nl —— 终端星球大战
# 确保安装了telnet
sudo apt install -y telnet # Debian系
sudo yum install -y telnet # RHEL系
# 观看ASCII版星球大战!
telnet towel.blinkenlights.nl
# 整个星球大战电影用ASCII字符在终端中播放!
# 这是互联网上最古老的彩蛋之一。
🔢 cal —— 终端日历
# 显示当月日历
cal
# 显示全年日历
cal -y
# 显示特定年月
cal 9 2024
# 显示儒略日(天文/数学计算常用)
cal -j
# 数学老师可以用来讲解日期计算、闰年等概念!
📝 实用技巧:用包管理器查询命令归属
# 在终端中遇到一个不认识的命令,想知道它属于哪个包?
# RHEL系
yum provides "*/命令名"
# 例:yum provides "*/htop"
# Debian系
apt-file search "命令名"
# 需要先安装和更新:sudo apt install -y apt-file && sudo apt-file update
本章小结
主题 核心工具 一句话记忆 RHEL系包管理 yum/dnfRedHat家族的"采购部" RPM操作 rpm -ivh/-qa/-ql/-qf手动安装和查询 Debian系包管理 apt/dpkgDebian家族的"采购部" 源码编译 configure/make/install万能但麻烦的"DIY" 新型包格式 Snap / Flatpak "自带干粮"的跨发行版方案 换源 修改repo/sources.list 从"海外代购"到"国内直购" 版本锁定 versionlock / apt-mark hold 给软件"冻结年龄" 依赖修复 yum check/apt install -f解决"缺少零件"的问题