摘要:wget 是 Linux 下经典的命令行下载工具,支持断点续传、后台下载、限速、递归镜像网站等核心功能。本文从 wget 的工作机制出发,详解
-c(断点续传)、-b(后台下载)、--limit-rate(限速)、--mirror(镜像网站)等高频参数,并结合批量下载、模拟浏览器、认证下载等实战场景给出可复用的命令示例。最后通过 wget 与 curl 的对比、性能优化技巧和常见问题排查,帮助读者全面掌握 wget 的使用方法。
wget 是 Linux 系统中最经典的命令行下载工具之一。相比图形化下载器,它支持 断点 续传、后台下载、限速等功能,尤其适合服务器环境下的自动化任务。这篇文章从实现原理到实战技巧,带你掌握 wget 的精髓。
wget 的核心机制
wget 的设计哲学是"非交互式下载"——不需要用户守在屏幕前,它自己会处理重试、超时、重定向等问题。
基本工作流程:
- 解析 URL,建立 TCP 连接
- 发送 HTTP/HTTPS/FTP 请求
- 接收响应,写入本地文件
- 遇到中断时记录进度,支持续传
这意味着你可以把它丢到后台,或者写进 crontab 定时任务,它自己会搞定一切。
必须掌握的常用参数
1. 指定文件名和路径
# 下载时重命名
wget -O backup.tar.gz https://example.com/file.tar.gz# 指定下载目录
wget -P /tmp/downloads https://example.com/file.zip
-O 会覆盖同名文件,-P 则保留原始文件名。两个参数可以组合使用。
2. 断点续传:网络 中断 的救星
# 启用断点续传
wget -c https://example.com/large-file.iso
原理是 wget 会在本地记录已下载的字节数,下次连接时发送 Range: bytes=已下载字节数- 请求头,服务器返回剩余数据。前提是服务器支持断点续传(响应头包含 Accept-Ranges: bytes)。
3. 后台下载与日志记录
# 后台运行,日志输出到 wget-log
wget -b https://example.com/bigfile.zip# 指定日志文件
wget -b -o download.log https://example.com/bigfile.zip
后台模式下,wget 会将输出重定向到文件,即使关闭终端也不会中断。
4. 限速:避免拖垮网络
# 限制下载速度为 1MB/s
wget --limit-rate=1m https://example.com/file.iso
这在服务器环境下尤其有用,防止下载占满带宽影响其他服务。支持 k(KB/s)和 m(MB/s)单位。
5. 递归下载整个网站
# 镜像整个网站
wget --mirror --convert-links --adjust-extension https://example.com
--mirror:启用镜像模式(等同于-r -N -l inf --no-remove-listing)--convert-links:将链接转换为本地链接--adjust-extension:根据 Content-Type 添加正确的文件扩展名
6. 处理 HTTPS 证书问题
# 忽略证书检查(测试环境)
wget --no-check-certificate https://self-signed.badssl.com/
测试自签名证书的服务器时,这个参数很有用。生产环境不建议使用。
实战场景
批量下载文件列表
# 从文件读取 URL 列表
cat > urls.txt << EOF
https://example.com/file1.zip
https://example.com/file2.zip
https://example.com/file3.zip
EOFwget -i urls.txt
-i 参数从文件读取 URL,每行一个,适合批量下载场景。
模拟浏览器请求
# 添加 User-Agent 和 Referer
wget --user-agent="Mozilla/5.0" \--referer="https://example.com" \https://example.com/download/file.zip
有些网站会检查 User- Agent 和 Referer,用这个方法可以绑过简单的反爬虫检测。
下载需要认证的资源
# HTTP Basic 认证
wget --user=username --password=secret https://example.com/protected.zip# 使用 Cookie
wget --header="Cookie: session=abc123" https://example.com/user/file.zip
超时与重试控制
# 设置超时时间为 30 秒,最多重试 5 次
wget --timeout=30 --tries=5 https://example.com/file.zip
网络不稳定时,合理设置超时和重试次数能提高成功率。
wget vs curl:如何选择
| 特性 | wget | curl |
|---|---|---|
| 设计目标 | 下载文件 | 数据传输 |
| 断点续传 | 原生支持 | 需手动实现 |
| 递归下载 | 支持 | 不支持 |
| 协议支持 | HTTP/HTTPS/FTP | HTTP/HTTPS/FTP/SCP/SFTP等 |
| 上传功能 | 不支持 | 支持 |
| 库支持 | 无 | libcurl |
简单说:下载文件用 wget,API 调试用 curl。
性能优化 技巧
1. 并发下载大文件
wget 本身不支持 多线程 ,但可以用 xargs 启动多个实例:
# 分块下载(需要服务器支持 Range 请求)
# 先获取文件大小
size=$(curl -sI https://example.com/bigfile.zip | grep -i content-length | awk '{print $2}')
# 然后手动分块下载
更好的选择是使用 axel 或 aria2 等多线程下载工具。
2. 连接池复用
下载多个小文件时,使用 --keep-session-cookies 复用连接:
wget --keep-session-cookies --save-cookies cookies.txt \--load-cookies cookies.txt \-i urls.txt
3. DNS 缓存 优化
# 强制使用指定 DNS
wget --no-dns-cache --inet4-only https://example.com/file.zip
某些情况下禁用 DNS 缓存可以解决解析错误问题。
常见问题排查
下载卡住不动
检查网络连接和防火墙规则:
# 测试连通性
curl -I https://example.com/file.zip# 查看详细过程
wget -d https://example.com/file.zip
-d 参数输出调试信息,能看到请求头和响应头的完整内容。
文件名乱码
URL 中的中文会被编码,下载后文件名显示为 %E4%B8%AD%E6%96%87。解决方法:
# 使用 --restrict-file-names 控制编码
wget --restrict-file-names=nocontrol https://example.com/中文文件.zip
下载不完整
检查磁盘空间和权限:
df -h /tmp
ls -l /tmp/downloads
某些文件系统(如 FAT32)有 4GB 文件大小限制。
总结
wget 的核心价值在于自动化友好——后台运行、断点续传、限速控制,这些特性让它成为服务器下载的首选工具。掌握常用参数后,你可以在脚本中灵活运用,构建可靠的下载流程。
核心要点回顾:
-c断点续传是必背参数-b后台下载适合大文件--limit-rate限速保护带宽--mirror递归下载整个网站-i从文件批量下载
相关工具推荐:
- cURL 命令 - 更强大的数据传输工具
- tar 命令 - 归档压缩工具
- HTTP 状态码查询 - 查询下载时的状态码含义

