关键在于使用对应系统的专用下载命令:RHEL系用dnf download或yumdownloader,Debian系用apt download配合apt-cache depends展开依赖,不可混用或误用安装命令rpm -ivh/dpkg -i。

直接下载 RPM 或 DEB 包而不安装,关键不是“能不能”,而是“用哪个命令、在哪个系统、要不要依赖”。不同发行系工具链完全不同,混用会卡在路径、缓存位置或依赖解析上。
dnf download 只适用于 RHEL 8+/Fedora/CentOS Stream
这是目前 Red Hat 系最干净的方式,dnf 自带 download 插件,不触发任何安装逻辑:
- 默认下载到当前目录:
dnf download nginx - 指定保存路径:
dnf download nginx --destdir=/tmp/rpms - 下载时跳过已存在文件(避免重复):
dnf download --downloaddir=/tmp/rpms --setopt=downloadonly=1 nginx - 注意:
dnf download不自动拉依赖,加--resolve才会尝试下载依赖包(但不会校验是否可装)
yumdownloader --resolve 是 CentOS 7/RHEL 7 的可靠选择
yumdownloader 来自 yum-utils,必须先装:yum install yum-utils。它比 yum install --downloadonly 更可控:
- 只下主包:
yumdownloader httpd - 连依赖一起下:
yumdownloader --resolve mariadb-server - 指定输出目录:
yumdownloader --destdir=/mnt/offline --resolve python3-pip - 常见坑:如果仓库配置里有
metalink或不可达源,--resolve会失败,此时需临时禁用:yumdownloader --disablerepo="*" --enablerepo="base" --resolve package
apt download 和 apt-get download 在 Debian/Ubuntu 上行为不同
别混淆这两个命令——apt download 只下指定包,apt-get download 是旧命令但更常用;真正要下完整依赖链,得靠 apt-cache depends 配合 apt download:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 单包下载:
apt download curl(结果在当前目录) - 查依赖并批量下载:
apt download $(apt-cache depends --recurse --no-recommends --no-suggests| grep "^\w" | sort -u) - 注意:
apt download不检查本地缓存,而apt-get --download-only install会把包存在/var/cache/apt/archives/,但后者需要 root 权限且可能触发 pre-install 脚本 - DEB 包名常含版本和架构,如
curl_7.68.0-1ubuntu2.20_amd64.deb,手动下载时务必核对apt list --installed | grep curl确认目标版本
rpm -ivh 和 dpkg -i 不是下载命令,别误用
很多人搜“怎么下载 rpm 包”却试 rpm -ivh xxx.rpm,这其实是安装命令,且会立即校验签名、依赖、脚本执行权限。一旦失败,你连包都没真正拿到手。
-
rpm -qpl xxx.rpm可预览内容,rpm -qpR xxx.rpm查依赖,但都不下载 -
dpkg-deb -I xxx.deb类似,看元数据不下载 - 真正想离线部署,优先走
dnf download --resolve或apt download+ 依赖展开,而不是靠wget拼 URL——镜像站路径结构随版本变,容易 404
最容易被忽略的一点:下载下来的包是否带 GPG 签名、是否启用 repo 的 gpgcheck=1,会影响后续离线安装时的验证失败。如果只是临时测试,下载后用 rpm --nosignature -ivh 或 dpkg --ignore-debsig -i 绕过,但生产环境必须保留签名链。










