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