跳转到内容
搜索 Fedora 文档

    浏览当前文档目录

    Fedora 命令速查(F45 适配)

    一页纸的命令速查。全部按 F45 / dnf5 5.4 的实际参数形态整理——dnf5 与 dnf4 在若干子命令上并不兼容,几条常见的”照抄就报错”已在末尾列出。

    Terminal window
    cat /etc/os-release # 版本与变体
    rpm -q rpm dnf5 kernel # 关键组件版本
    uname -r # 内核
    hostnamectl # 主机概览

    F45 上 rpm -q rpm 应为 rpm-6.1.x;如果还是 6.0.x,说明你还在 F44。

    目的命令
    安装sudo dnf install <pkg>
    搜索dnf search <关键词>
    按文件反查包dnf provides '*/libssl.so.3'
    看包详情dnf info <pkg>
    列出已装dnf list --installed
    删除sudo dnf remove <pkg>
    装本地文件sudo dnf install ./x.rpm(仅告警,见签名页)
    装源码构建依赖sudo dnf builddep x.spec
    标记为手动/依赖sudo dnf mark install <pkg>
    组sudo dnf group install '<组名>'
    换包(同名替换)sudo dnf swap <旧> <新>
    Terminal window
    dnf repolist # 已启用
    dnf repolist --all # 含已禁用(抄仓库 ID 用这个)
    dnf repoinfo <id> # 单仓库的 enabled / gpgcheck 实际值
    sudo dnf --enablerepo=<id> install <pkg> # 临时启用
    sudo dnf config-manager setopt <id>.enabled=0 # 持久关闭
    sudo dnf config-manager addrepo --from-repofile=<url>
    sudo dnf clean all && sudo dnf makecache

    F45 的位置变化(最容易踩):

    内容F44 及更早F45
    自带仓库/etc/yum.repos.d/usr/share/dnf5/repos.d
    GPG 公钥/etc/pki/rpm-gpg/usr/share/pki/rpm-gpg
    自定义仓库/etc/yum.repos.d不变
    覆盖文件—/etc/dnf/repos.override.d/99-config_manager.repo
    Terminal window
    ls /usr/share/dnf5/repos.d/
    rpm -qf /usr/share/dnf5/repos.d/fedora.repo # 有包名就别手改

    详见仓库配置迁到 /usr。

    Terminal window
    sudo dnf upgrade --refresh # 刷新元数据并升级
    sudo dnf updateinfo list --updates # 待装的安全/缺陷更新
    sudo dnf needs-restarting # 是否需要重启
    sudo dnf distro-sync # 对齐到当前仓库版本
    dnf history list # 事务历史
    sudo dnf history undo <id> # 回滚某个事务

    needs-restarting 的实测输出:

    No core libraries or services have been updated since boot-up.
    Reboot should not be necessary.
    Terminal window
    rpm -K pkg.rpm # 检查签名与摘要
    rpm -qpi pkg.rpm | head -10 # 包信息
    sudo rpm --import RPM-GPG-KEY-fedora # 导入公钥
    rpm --addsign pkg.rpm # 给包签名
    sudo rpm -i --nosignature pkg.rpm # 放行单个未签名包

    F45 起 rpm 6.1 强制验签:rpm -i 拒绝未签名包,dnf 仓库安装同样拒绝,dnf install ./x.rpm 只告警。详见强制签名校验。

    Terminal window
    sudo dnf upgrade --refresh # 先升到当前版本最新
    sudo dnf system-upgrade download --releasever=45 # 下载新版本包
    sudo dnf system-upgrade reboot # 重启进入离线事务
    sudo dnf system-upgrade clean # 清理下载缓存

    升级失败的处置见升级失败排障,版本特定步骤见升级到 Fedora 45。

    Terminal window
    sudo dnf install toolbox # Cloud/Server 需手动装
    toolbox create [名字] # 建容器
    toolbox enter [名字] # 进入
    toolbox run <cmd> # 不进入直接执行
    toolbox list # 列出
    toolbox rm <名字> # 删除
    Terminal window
    podman version && podman info # 版本与后端
    podman ps -a # 含已停止
    podman images
    podman run --rm -it fedora:45 bash
    flatpak remotes # 已接应用源
    flatpak list --app
    Terminal window
    systemctl status <unit> --no-pager
    journalctl -b -u <unit> --no-pager | tail -50
    journalctl -p err -b --no-pager | tail -30
    lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS
    df -h / /var /boot
    cat /sys/class/vtconsole/*/name # 控制台后端

    报错原文怎么对,见报错速查。

    九、dnf5 与 dnf4 的差异(照抄会报错的那几条)

    Section titled “九、dnf5 与 dnf4 的差异(照抄会报错的那几条)”
    dnf4 写法dnf5 上的结果用什么代替
    dnf updateinfo --summaryUnknown argumentupdateinfo list --updates
    dnf updateinfo --listUnknown argumentupdateinfo list
    dnf config-manager --add-repo参数不存在config-manager addrepo --from-repofile=
    dnf repoquery --requires可用但输出格式不同先 --help 确认
    dnf groupinstall不存在dnf group install
    Terminal window
    systemctl status <unit> --no-pager # 单服务状态
    systemctl list-units --failed # 本次启动失败的服务
    systemctl list-unit-files | grep <关键词> # 单元是否存在
    sudo systemctl enable --now <unit> # 开机自启并立即启动
    sudo systemctl disable --now <unit> # 取消自启并停止
    sudo systemctl mask <unit> # 彻底屏蔽(比 disable 强)
    sudo systemctl unmask <unit>
    systemctl cat <unit> # 看单元文件原文
    systemctl show <unit> -p LoadState -p ActiveState
    systemctl list-timers --all # 定时任务(替代 cron)
    journalctl -b -1 -p err --no-pager | tail -30 # 上一次启动的错误
    Terminal window
    lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS,UUID
    df -h / /var /boot
    df -i /var # inode 用尽也会报"没空间"
    du -xh --max-depth=1 /var | sort -h | tail -10
    findmnt # 全部挂载关系
    sudo mount -o remount,rw / # 只读根临时转可写
    sudo fsck -n <设备> # 只读检查
    Terminal window
    ip -br addr # 地址一览
    ip route # 路由表
    nmcli dev status # 设备与连接状态
    nmcli con show # 连接名(区分大小写)
    nmcli con up <名字>
    getent hosts <域名> # 只测解析,不测连通
    cat /etc/resolv.conf
    ss -tlnp # 监听端口与进程
    sudo firewall-cmd --state # 装了 firewalld 才有
    sudo firewall-cmd --list-all
    ping -c1 <IP> # 先测 IP 再测域名
    Terminal window
    podman ps -a # 含已停止
    podman logs <容器>
    podman exec -it <容器> bash
    podman inspect <容器> | head -20
    podman system df # 镜像/容器占了多少空间
    podman system prune -a # 清理(慎用)
    systemctl --user daemon-reload # Quadlet 改完必须
    systemctl --user list-unit-files "*.service" | grep generated
    loginctl enable-linger $USER # 退出登录后容器继续跑
    Terminal window
    id # 自己的 uid/gid 与组
    getent passwd <用户>
    sudo useradd -m -G wheel <用户>
    sudo passwd <用户>
    sudo usermod -aG wheel <用户> # 追加组,别漏 -a
    sudo -l # 当前用户能做什么
    ls -lZ <路径> # 权限 + SELinux 标签
    getenforce # Enforcing / Permissive
    sudo ausearch -m AVC -ts recent # 最近的拒绝记录
    sudo restorecon -Rv <路径> # 恢复默认标签
    Terminal window
    journalctl -b --no-pager | tail -50
    journalctl -p err -b --no-pager | tail -30
    journalctl -u <unit> -f # 跟一个服务
    journalctl --disk-usage
    sudo journalctl --vacuum-size=500M
    journalctl -k -b | tail -30 # 只看内核
    dmesg -T | tail -30 # 带人类可读时间
    cat /sys/class/vtconsole/*/name # 控制台后端是谁

    十六、给机器做一份”体检快照”

    Section titled “十六、给机器做一份”体检快照””

    升级前后各跑一次,diff 出来就是”这次到底动了什么”:

    #!/bin/bash
    echo "== $(grep VERSION_ID /etc/os-release)"
    echo "kernel: $(uname -r)"
    for p in systemd glibc python3 openssl dnf5 rpm podman kmscon; do
    printf "%-10s %s\n" "$p" "$(rpm -q --qf '%{VERSION}-%{RELEASE}' "$p" 2>/dev/null || echo '-')"
    done
    echo "repos: /usr=$(ls /usr/share/dnf5/repos.d/*.repo 2>/dev/null | wc -l) /etc=$(ls /etc/yum.repos.d/*.repo 2>/dev/null | wc -l)"
    echo "failed units: $(systemctl --failed --no-legend | wc -l)"

    完整对照见版本矩阵。