dnf install / remove / upgrade
install 安装,remove 卸载(会连带删除依赖它的包,执行前 dnf 会列出将要删除的清单),upgrade 升级全部,--refresh 强制刷新元数据。
sudo dnf install -y nginx
sudo dnf upgrade --refresh
dnf remove 会级联删除依赖被删包的其它软件,输出里的清单一定要看一眼再确认。
dnf search / info / provides
search 搜索,info 查看详情,provides 查找哪个包提供了某个文件或命令(写 '*/bin/foo' 这种通配形式更准),list 列出可用或已安装的包。
dnf provides '*/sbin/nginx'
dnf list installed | grep nginx
dnf history / undo
dnf 会记录每一次事务。history 列出历史,history info N 看某次详情,history undo N 回滚该次操作(依赖关系复杂时可能无法回滚)。
sudo dnf history info 42
sudo dnf history undo 42
undo 是尽力而为:如果系统状态在之后再变过,回滚可能失败或需要手动处理冲突。
rpm 查询
-qa 列出全部已安装包,-ql 列出某包的文件,-qf 反查文件归属,-qi 查看包信息,-q --changelog 看更新日志,-V 校验文件是否被改动过。
rpm -ql nginx | head -20
rpm -qf /usr/sbin/nginx
rpm -V 输出里的标记含义:S 大小变化、M 权限或类型变化、5 校验和不一致、T 时间戳变化。文件名前面带 c 表示它是配置文件。
添加仓库 / dnf config-manager
dnf config-manager --add-repo 添加第三方仓库(新版用 --add-repo=URL),--set-enabled / --set-disabled 启停仓库,repoquery -l 在不安装的情况下列出包内容。
sudo dnf config-manager --add-repo=https://example.com/repo.repo
sudo dnf config-manager --set-enabled epel
dnf repoquery -l nginx | head
dnf module
RHEL 8+ 用模块流管理同一软件的多个版本(比如 PHP 8.1 / 8.2 / 8.3)。module list 查看,module enable / install 指定流,module reset 回到默认。
sudo dnf module reset php
sudo dnf module enable php:8.2
切换模块流通常需要先 reset 再 enable,直接 enable 别的流会报冲突;切换后建议把相关包重装一遍。