wget 详解

文章目录
- [wget 详解](#wget 详解)
-
- [🎯 核心特性](#🎯 核心特性)
- [🛠️ 安装指南](#🛠️ 安装指南)
- [📖 基本用法与常见示例](#📖 基本用法与常见示例)
- [📚 核心参数速查表](#📚 核心参数速查表)
- [⚠️ 常见问题与注意事项](#⚠️ 常见问题与注意事项)
-
- [1. 常见问题](#1. 常见问题)
- [2. 安全与法律考虑](#2. 安全与法律考虑)
- [🆚 与 `curl` 的对比](#🆚 与
curl的对比)
wget 是一个经典的命令行下载工具,因其简单、强大和可靠而深受开发者和管理员喜爱。它是一个 非交互式 的网络下载器,特别适合在脚本和自动化任务中使用。
以下是关于 wget 的详细介绍。
🎯 核心特性
- 协议广泛 :支持通过 HTTP、HTTPS、FTP 协议下载,从 1.18 版本开始,还增加了对 FTPS 的支持。
- 非交互式运行 :与浏览器不同,
wget可以在后台运行,即使用户退出登录,下载任务也会继续。这让它成为无人值守任务的理想选择。 - 断点续传 :下载中断时,可以使用
-c参数从中断处恢复,无需从头开始,尤其适合大文件或网络不稳定的情况。 - 递归下载:能自动跟踪并下载网页中的所有链接,完整地在本地重建整个网站,通常称为"镜像网站"。
- 限速下载 :通过
--limit-rate参数限制下载速度,避免占用过多网络资源,影响其他应用。 - 后台模式 :使用
-b参数,wget会进入后台执行,终端可以继续处理其他任务。 - 通配符支持:下载 FTP 文件时,可以使用通配符(globbing)匹配文件名,批量下载特定格式的文件。
🛠️ 安装指南
wget 可在 Linux、macOS 和 Windows 上使用。在 Windows 上,你可能需要手动将其所在目录添加到系统的 PATH 环境变量中才能全局调用。
bash
# Ubuntu/Debian
sudo apt update && sudo apt install wget -y
# CentOS/RHEL/Fedora
sudo yum install wget -y # CentOS/RHEL
sudo dnf install wget -y # Fedora
# macOS (需安装 Homebrew)
brew install wget
# Windows (通过包管理器或直接下载)
choco install wget # 通过 Chocolatey
winget install wget # 通过 winget
📖 基本用法与常见示例
wget 的基本命令格式为:wget [选项] [URL]。
-
基本下载
bash# 下载文件到当前目录 wget https://example.com/file.zip -
断点续传
bash# 从中断处继续下载 wget -c https://example.com/large-file.zip -
重命名与指定目录
bash# 保存为指定文件名 wget -O my-file.zip https://example.com/file.zip # 保存到指定目录 wget -P /path/to/download/ https://example.com/file.zip -
批量下载
bash# 从 urls.txt 中读取多个 URL,逐行下载 wget -i urls.txt -
使用URL模式批量下载
bash# 下载 file1.zip, file2.zip, ..., file10.zip wget https://example.com/files/file{1..10}.zip -
限制下载速度
bash# 限速为 200KB/s wget --limit-rate=200k https://example.com/large-file.zip -
后台下载
bash# 后台下载,并查看进度 wget -b https://example.com/large-file.zip tail -f wget-log -
递归下载与镜像
bash# 最简单的递归下载(谨慎使用) wget -r https://example.com/ # 制作适合离线浏览的完整镜像 wget -mk https://example.com/ # -m: 镜像模式 (等同于 -r -N -l inf --no-remove-listing) # -k: 转换链接为本地相对路径 # -w: 下载间隔(秒),尊重服务器
📚 核心参数速查表
| 分类 | 参数 | 作用说明 |
|---|---|---|
| 基本选项 | -O, --output-document=FILE |
将下载内容保存到指定文件 |
-P, --directory-prefix=PREFIX |
将文件保存到指定目录 | |
-i, --input-file=FILE |
从文件中读取URL列表进行下载 | |
| 下载控制 | -c, --continue |
断点续传 |
-b, --background |
启动后进入后台执行 | |
-t, --tries=NUMBER |
设置重试次数(0 表示无限次) | |
-T, --timeout=SECONDS |
设置所有超时时间 | |
| 限制与限速 | --limit-rate=RATE |
限制下载速度 |
| 递归下载 | -r, --recursive |
开启递归下载 |
-l, --level=NUMBER |
指定递归最大深度(默认 5) | |
-nd, --no-directories |
不创建目录结构,将所有文件下载到同一目录 | |
-np, --no-parent |
不追溯至父目录 | |
-A, --accept=LIST |
指定要接受的文件的扩展名列表 | |
| 链接与转换 | -k, --convert-links |
下载完成后,将 HTML/CSS 中的链接转换为本地链接 |
-m, --mirror |
镜像模式(相当于 -r -N -l inf --no-remove-listing) |
|
| 日志与输出 | -o, --output-file=FILE |
将日志信息写入文件 |
-a, --append-output=FILE |
将日志信息追加到文件末尾 | |
-q, --quiet |
静默模式,不输出任何信息 | |
-d, --debug |
开启调试模式,输出详细信息 | |
| HTTP/FTP选项 | --user=USER |
设置 HTTP/FTP 认证用户名 |
--password=PASS |
设置 HTTP/FTP 认证密码 | |
--no-check-certificate |
跳过 SSL 证书检查(不推荐用于安全连接) | |
| 其他 | --delete-after |
下载完成后删除本地文件 |
-e, --execute=COMMAND |
执行 .wgetrc 格式的命令 |
⚠️ 常见问题与注意事项
1. 常见问题
- "wget: command not found":系统未安装 wget,参考上述安装指南进行安装。
- 下载的文件名乱码 :服务器未提供正确的文件名,wget 从 URL 中提取文件名可能导致乱码。可用
-O参数手动指定文件名。 - 镜像网站不完整 :网站可能使用 JavaScript 动态加载内容,wget 无法执行 JS,只能获取源代码。需要更高级的工具,如 HTTrack 或 PhantomJS 等。
- 下载速度慢 :可能是服务器限流、本地网络带宽不足或跨境访问延迟。可以使用
--limit-rate调节,或检查网络 。
2. 安全与法律考虑
- 遵守
robots.txt:wget默认会遵守网站的robots.txt协议,其中规定了哪些目录可以被爬取,这是对网站负责的表现。 - 尊重服务器资源 :使用
-w参数设置下载间隔,避免对目标服务器造成过大压力。高频请求可能被视为 DoS 攻击。 - 注意版权法律:镜像或下载网站内容前,请确认您是否拥有相应权限,并明确您的使用意图,避免侵权。
- 谨慎处理证书 :跳过 SSL 证书检查(
--no-check-certificate)时需谨慎,这会使连接面临中间人攻击的风险。
🆚 与 curl 的对比
curl 和 wget 都是强大的命令行网络工具,但侧重点不同:
wget:专注于下载,支持递归、镜像、断点续传,是网站抓取和批量下载的专家。curl:功能更全面,像一个网络数据交换的瑞士军刀。它几乎支持所有网络协议,擅长发送各种 HTTP 请求、与 API 交互、处理Cookie和头信息,数据可以下载也可以上传。
总的来说,如果需要下载整个网站 或在不稳定网络下下载大文件 ,wget 是更合适的选择;如果需要测试 API 、发送 POST 请求 或在脚本中进行复杂的网络交互,则应选择 curl。
如果网络环境复杂,还可以关注 wget2,它支持 HTTP/2、并行连接,能更高效地完成下载任务。