网络命令82 条

wget 下载与抓取

GNU 下载工具:-c 续传、-q 静默、--spider 只探测存在性、-i 批量列表;与 curl 各有拥趸,脚本里都常见。

Linux 运维命令速查系统更新于 2026-10-13

wget 是什么

Wget 是 GNU 项目的非交互式下载工具,1996 年发布,支持 HTTP、HTTPS 与 FTP,绝大多数 Linux 发行版都自带(Alpine 等精简系统需 apk add wget)。它的定位是「无人值守地把文件搬到本地」:能被脚本与 cron 调用,失败自动重试,支持断点续传,还能一次读入 URL 列表逐条下载或递归镜像整个站点。与 curl 的分工是:wget 面向文件和站点的批量搬运,curl 面向构造任意请求并查看响应细节。

基本信息

适用平台Linux/Unix(GNU Wget);Debian、RHEL 系通常预装,Alpine 需 apk add wget
命令语法wget [选项] URL...
常用选项-c 断点续传 -O 指定输出文件名 -P 指定保存目录 -q 静默 --limit-rate 限速 -t 重试次数 --timeout 超时 -i 从文件读URL列表 --spider 只探测不下载 -b 后台运行
权限说明普通用户即可;写目标目录需要相应权限,只有绑定特权端口等场景才需要 root
退出码0 成功 / 1 一般错误 / 3 文件IO错误 / 4 网络失败 / 5 证书校验失败 / 8 服务器返回错误响应

典型使用场景

  • 脚本拉取安装包或配置:wget -q -O /tmp/app.tar.gz URL,靠退出码判断成败
  • 大文件中断续传:传输中断后加 -c 从断点接着下,不用整包重来
  • 定时抓取:cron 里定期下载数据文件、证书吊销列表等
  • 批量下载:把 URL 一行一条写进 urls.txt,用 -i 一次跑完
  • 存在性探测:--spider 只做检查、不产生下载流量,适合巡检脚本
  • 站点镜像:-m 递归镜像,配合 --wait 与 --limit-rate 降低对目标站的压力

常用示例

常用示例
wget -q -O /tmp/app.tar.gz https://example.com/app.tar.gz   # 静默下载到指定路径
wget -c https://example.com/big.iso                          # 断点续传:中断后再执行一次即可
wget --spider -S https://example.com/health 2>&1 | grep HTTP  # 只探测,打印响应头与状态码
wget -q -i urls.txt                                           # 按列表批量下载
wget -q -O - https://example.com/version.txt | head           # 输出到标准输出,直接接管道
wget --limit-rate=2m -c https://example.com/img.iso           # 限速 2MB/s,避免占满出口带宽
wget -t 3 --timeout=15 -q https://example.com/a.zip           # 显式限制重试与超时,防止脚本挂住
wget -b -o /var/log/wget.log https://example.com/big.tar      # 后台下载,日志写到指定文件

退出码与输出读法

项含义正常与异常
退出码 0全部下载成功脚本应以此为准,别只看文件是否存在
退出码 4网络层失败:DNS 解析不了、连不上、连接被重置检查域名解析、路由与出口防火墙
退出码 8服务器返回错误状态(404/403/500 等)URL 写错或服务端异常,落盘内容不可信
退出码 5TLS 证书校验失败先查证书链有效期与系统时间,不要直接绕过
进度行进度、重试与错误提示都写标准错误嵌入脚本时用 -q 或重定向,避免污染日志
--spider 只做存在性探测(等同 HEAD),对部分动态页面结果仅供参考;需要看响应头细节时 curl -sI 更直接,两者可以互相印证。
-m 递归镜像会跟随页面里的链接,务必先试跑并加上 -np(不上溯父目录)、--wait 与 --limit-rate,否则可能拖慢对方站点甚至触发封禁;同时要注意对方 robots.txt 的约定。
代理环境下 wget 读取 http_proxy、https_proxy 环境变量以及 /etc/wgetrc、~/.wgetrc,不读 curl 的配置文件。容器或 CI 里「curl 能下、wget 不能下」多半是漏传了这些环境变量。

易错点

  • wget 的进度与错误信息都写标准错误:不加 -q 或重定向时,下载信息会混进脚本日志
  • 默认重试 20 次、默认超时 900 秒:脚本里不显式设置 -t 与 --timeout,遇到 DNS 或路由异常会长时间无输出地挂住
  • -c 断点续传依赖服务器支持 Range 请求;对每次内容都变的动态下载接口(大小或 ETag 不稳定),续传会拼出损坏文件,应去掉 -c 重下
  • -O 会把所有输入写进同一个文件:-i 配多 URL 再用 -O 时后一个覆盖前一个,批量下载多文件应改用 -P 指定目录
  • 用 --no-check-certificate 跳过证书校验会让中间人攻击无感,只应在已确认是内网自签证书的场景临时使用

数据来源与参考

  • GNU Wget 官方手册(GNU Wget Manual)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌