Linux wget 命令详解:从基础到高级下载技巧
剑8512
2026年05月28日 23:15

摘要:wget 是 Linux 下经典的命令行下载工具,支持断点续传、后台下载、限速、递归镜像网站等核心功能。本文从 wget 的工作机制出发,详解 -c(断点续传)、-b(后台下载)、--limit-rate(限速)、--mirror(镜像网站)等高频参数,并结合批量下载、模拟浏览器、认证下载等实战场景给出可复用的命令示例。最后通过 wget 与 curl 的对比、性能优化技巧和常见问题排查,帮助读者全面掌握 wget 的使用方法。

wget 是 Linux 系统中最经典的命令行下载工具之一。相比图形化下载器,它支持 断点 续传、后台下载、限速等功能,尤其适合服务器环境下的自动化任务。这篇文章从实现原理到实战技巧,带你掌握 wget 的精髓。

wget 的核心机制

wget 的设计哲学是"非交互式下载"——不需要用户守在屏幕前,它自己会处理重试、超时、重定向等问题。

基本工作流程:

  1. 解析 URL,建立 TCP 连接

  2. 发送 HTTP/HTTPS/FTP 请求

  3. 接收响应,写入本地文件

  4. 遇到中断时记录进度,支持续传

这意味着你可以把它丢到后台,或者写进 crontab 定时任务,它自己会搞定一切。

必须掌握的常用参数

1. 指定文件名和路径

代码块
PlainText
自动换行
复制代码
# 下载时重命名
wget -O backup.tar.gz https://example.com/file.tar.gz

# 指定下载目录
wget -P /tmp/downloads https://example.com/file.zip
复制成功

-O 会覆盖同名文件,-P 则保留原始文件名。两个参数可以组合使用。

2. 断点续传:网络 中断 的救星

代码块
PlainText
自动换行
复制代码
# 启用断点续传
wget -c https://example.com/large-file.iso
复制成功

原理是 wget 会在本地记录已下载的字节数,下次连接时发送 Range: bytes=已下载字节数- 请求头,服务器返回剩余数据。前提是服务器支持断点续传(响应头包含 Accept-Ranges: bytes)。

3. 后台下载与日志记录

代码块
PlainText
自动换行
复制代码
# 后台运行,日志输出到 wget-log
wget -b https://example.com/bigfile.zip

# 指定日志文件
wget -b -o download.log https://example.com/bigfile.zip
复制成功

后台模式下,wget 会将输出重定向到文件,即使关闭终端也不会中断。

4. 限速:避免拖垮网络

代码块
PlainText
自动换行
复制代码
# 限制下载速度为 1MB/s
wget --limit-rate=1m https://example.com/file.iso
复制成功

这在服务器环境下尤其有用,防止下载占满带宽影响其他服务。支持 k(KB/s)和 m(MB/s)单位。

5. 递归下载整个网站

代码块
PlainText
自动换行
复制代码
# 镜像整个网站
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 证书问题

代码块
PlainText
自动换行
复制代码
# 忽略证书检查(测试环境)
wget --no-check-certificate https://self-signed.badssl.com/
复制成功

测试自签名证书的服务器时,这个参数很有用。生产环境不建议使用。

实战场景

批量下载文件列表

代码块
PlainText
自动换行
复制代码
# 从文件读取 URL 列表
cat > urls.txt << EOF
https://example.com/file1.zip
https://example.com/file2.zip
https://example.com/file3.zip
EOF

wget -i urls.txt
复制成功

-i 参数从文件读取 URL,每行一个,适合批量下载场景。

模拟浏览器请求

代码块
PlainText
自动换行
复制代码
# 添加 User-Agent 和 Referer
wget --user-agent="Mozilla/5.0" \
     --referer="https://example.com" \
     https://example.com/download/file.zip
复制成功

有些网站会检查 User- Agent 和 Referer,用这个方法可以绑过简单的反爬虫检测。

下载需要认证的资源

代码块
PlainText
自动换行
复制代码
# HTTP Basic 认证
wget --user=username --password=secret https://example.com/protected.zip

# 使用 Cookie
wget --header="Cookie: session=abc123" https://example.com/user/file.zip
复制成功

超时与重试控制

代码块
PlainText
自动换行
复制代码
# 设置超时时间为 30 秒,最多重试 5 次
wget --timeout=30 --tries=5 https://example.com/file.zip
复制成功

网络不稳定时,合理设置超时和重试次数能提高成功率。

wget vs curl:如何选择

特性wgetcurl设计目标下载文件数据传输断点续传原生支持需手动实现递归下载支持不支持协议支持HTTP/HTTPS/FTPHTTP/HTTPS/FTP/SCP/SFTP等上传功能不支持支持库支持无libcurl

简单说:下载文件用 wget,API 调试用 curl

性能优化 技巧

1. 并发下载大文件

wget 本身不支持 多线程 ,但可以用 xargs 启动多个实例:

代码块
PlainText
自动换行
复制代码
# 分块下载(需要服务器支持 Range 请求)
# 先获取文件大小
size=$(curl -sI https://example.com/bigfile.zip | grep -i content-length | awk '{print $2}')
# 然后手动分块下载
复制成功

更好的选择是使用 axel 或 aria2 等多线程下载工具。

2. 连接池复用

下载多个小文件时,使用 --keep-session-cookies 复用连接:

代码块
PlainText
自动换行
复制代码
wget --keep-session-cookies --save-cookies cookies.txt \
     --load-cookies cookies.txt \
     -i urls.txt
复制成功

3. DNS 缓存 优化

代码块
PlainText
自动换行
复制代码
# 强制使用指定 DNS
wget --no-dns-cache --inet4-only https://example.com/file.zip
复制成功

某些情况下禁用 DNS 缓存可以解决解析错误问题。

常见问题排查

下载卡住不动

检查网络连接和防火墙规则:

代码块
PlainText
自动换行
复制代码
# 测试连通性
curl -I https://example.com/file.zip

# 查看详细过程
wget -d https://example.com/file.zip
复制成功

-d 参数输出调试信息,能看到请求头和响应头的完整内容。

文件名乱码

URL 中的中文会被编码,下载后文件名显示为 %E4%B8%AD%E6%96%87。解决方法:

代码块
PlainText
自动换行
复制代码
# 使用 --restrict-file-names 控制编码
wget --restrict-file-names=nocontrol https://example.com/中文文件.zip
复制成功

下载不完整

检查磁盘空间和权限:

代码块
PlainText
自动换行
复制代码
df -h /tmp
ls -l /tmp/downloads
复制成功

某些文件系统(如 FAT32)有 4GB 文件大小限制。

总结

wget 的核心价值在于自动化友好——后台运行、断点续传、限速控制,这些特性让它成为服务器下载的首选工具。掌握常用参数后,你可以在脚本中灵活运用,构建可靠的下载流程。

核心要点回顾

  • -c 断点续传是必背参数

  • -b 后台下载适合大文件

  • --limit-rate 限速保护带宽

  • --mirror 递归下载整个网站

  • -i 从文件批量下载

相关工具推荐

  • cURL 命令 - 更强大的数据传输工具

  • tar 命令 - 归档压缩工具

  • HTTP 状态码查询 - 查询下载时的状态码含义