Linux wget 命令详解:从基础到高级下载技巧

摘要 :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. 指定文件名和路径

bash 复制代码
# 下载时重命名
wget -O backup.tar.gz https://example.com/file.tar.gz

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

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

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

bash 复制代码
# 启用断点续传
wget -c https://example.com/large-file.iso

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

3. 后台下载与日志记录

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

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

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

4. 限速:避免拖垮网络

bash 复制代码
# 限制下载速度为 1MB/s
wget --limit-rate=1m https://example.com/file.iso

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

5. 递归下载整个网站

bash 复制代码
# 镜像整个网站
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 证书问题

bash 复制代码
# 忽略证书检查(测试环境)
wget --no-check-certificate https://self-signed.badssl.com/

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

实战场景

批量下载文件列表

bash 复制代码
# 从文件读取 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,每行一个,适合批量下载场景。

模拟浏览器请求

bash 复制代码
# 添加 User-Agent 和 Referer
wget --user-agent="Mozilla/5.0" \
     --referer="https://example.com" \
     https://example.com/download/file.zip

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

下载需要认证的资源

bash 复制代码
# HTTP Basic 认证
wget --user=username --password=secret https://example.com/protected.zip

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

超时与重试控制

bash 复制代码
# 设置超时时间为 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 启动多个实例:

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

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

2. 连接池复用

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

bash 复制代码
wget --keep-session-cookies --save-cookies cookies.txt \
     --load-cookies cookies.txt \
     -i urls.txt

3. DNS 缓存优化

bash 复制代码
# 强制使用指定 DNS
wget --no-dns-cache --inet4-only https://example.com/file.zip

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

常见问题排查

下载卡住不动

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

bash 复制代码
# 测试连通性
curl -I https://example.com/file.zip

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

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

文件名乱码

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

bash 复制代码
# 使用 --restrict-file-names 控制编码
wget --restrict-file-names=nocontrol https://example.com/中文文件.zip

下载不完整

检查磁盘空间和权限:

bash 复制代码
df -h /tmp
ls -l /tmp/downloads

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

总结

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

核心要点回顾

  • -c 断点续传是必背参数
  • -b 后台下载适合大文件
  • --limit-rate 限速保护带宽
  • --mirror 递归下载整个网站
  • -i 从文件批量下载

相关工具推荐

相关推荐
AOwhisky13 小时前
Ceph系列第二期:Ceph集群部署实战(cephadm)
linux·运维·笔记·分布式·ceph·云计算·存储
Agent手记13 小时前
跨境电商从选品到售后全流程自动化可能吗?基于实在Agent与LLM+RPA的端到端落地实战指南
运维·人工智能·ai·自动化·rpa
wanhengidc13 小时前
云手机 算力终端应用
运维·服务器·网络·游戏·智能手机
郝亚军13 小时前
RK3562 nfs mount
linux·运维·服务器
IT策士13 小时前
docker 实战:将一个多组件应用完整容器化
运维·docker·容器
热爱Liunx的丘丘人13 小时前
Dockerfile 构建自定义 Nginx Web 服务镜像
运维·前端·nginx
IT策士13 小时前
Docker 数据管理:Volume 与 Bind Mount
运维·docker·容器
随便做点啥13 小时前
8卡服务器(4服务x 2卡)Nginx 负载均衡配置,与百分位延迟说明
服务器·nginx·负载均衡
.千余13 小时前
【测试】测试用例设计攻略(6大设计方法)
服务器·网络·笔记·学习·测试用例