yumdownloader和apt download是Linux离线部署的核心工具:前者属yum-utils,支持--resolve自动下载RPM依赖;后者为apt原生命令,仅下载指定DEB包不解析依赖,需配合apt-rdepends等补全。

Linux 运维中,只下载安装包不安装是离线部署、安全审计或物理隔离环境下的刚需。关键不是“能不能下”,而是“下得全不全、能不能用”。yumdownloader 和 apt download 是两类系统最直接、最轻量的下载工具,但用法和能力边界完全不同——搞混会导致依赖缺失、安装失败。
用 yumdownloader 下载 RPM 包(CentOS/RHEL 7 及更早)
这个命令来自 yum-utils 包,专为 RPM 生态设计,支持依赖解析和路径控制:
- 先确认已安装工具:sudo yum install -y yum-utils
- 只下载主包(无依赖):yumdownloader httpd,文件保存在当前目录
- 下载主包 + 所有运行时依赖:yumdownloader --resolve httpd
- 指定保存路径:yumdownloader --destdir=/mnt/offline-pkgs --resolve nginx
- 注意:若目标包已安装,
--resolve仍能正确拉取全部依赖;无需先卸载
用 apt download 下载 DEB 包(Ubuntu/Debian 系)
这是 apt 套件原生命令(Ubuntu 16.04+/Debian 9+ 默认可用),特点是极简、零副作用:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 无需 sudo,普通用户可执行(除非源需认证)
- 只下载指定包,不查依赖、不改缓存、不写日志:apt download curl
- 文件直接落在当前目录,命名含版本与架构,如
curl_7.81.0-1ubuntu1.18_amd64.deb - 想确保包名有效,建议先运行 apt update 同步索引
- 遇到
Unable to locate package,优先检查拼写、源是否启用(如 universe)、是否执行过 apt update
需要完整依赖?别只靠单条命令
单独用 yumdownloader --resolve 或 apt download 仍可能漏依赖——尤其当目标包依赖其他仓库(如 EPEL、backports)或存在多层间接依赖时:
- RPM 系:用 yum deplist httpd 查依赖树,再结合
yumdownloader --resolve补全 - DEB 系:用 apt-rdepends --no-recommends --no-suggests --recurse nginx | grep "^\w" | sort -u | tr -d "" 提取纯包名,再传给
apt download - 下载后建议校验:
dpkg-deb -I *.deb | grep Version(DEB)或rpm -qpi *.rpm | grep Version(RPM),确认架构与版本匹配
下载后怎么在内网用?关键预处理不能跳
一堆 .deb 或 .rpm 文件拷进内网,不能直接 rpm -ivh 或 dpkg -i ——顺序错、签名缺、依赖环都会失败:
- RPM 系:推荐建本地 YUM 源。进包目录执行 createrepo .,再配
/etc/yum.repos.d/local.repo指向file:///path/to/pkgs,最后yum install --nogpgcheck pkgname - DEB 系:用 dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz 生成索引,再加源
deb [trusted=yes] file:/path/to/pkgs ./,运行apt update && apt install pkgname - 无论哪种,下载前清空缓存更稳妥:
yum clean all或sudo apt clean










