Wget 完全使用指南:从基础下载到高级场景
概述
wget 是一款非交互式网络下载工具,诞生于 1996 年,凭借 “稳定、强大、支持后台运行” 的特性,成为 Linux、macOS 等类 Unix 系统的标配工具(Windows 需手动安装)。其名称来源于 “World Wide Web” 与 “get” 的结合,核心价值在于:
- 多协议支持:原生支持 HTTP、HTTPS、FTP 三大主流下载协议,部分版本支持 SFTP;
- 全自动下载:可在用户退出终端、甚至断开 SSH 连接后,后台持续执行下载任务;
- 抗干扰能力:支持断点续传、重试机制,网络波动时无需重新下载整个文件;
- 轻量灵活:仅通过命令行参数即可实现 “批量下载、递归爬取、限速下载” 等复杂需求,无需图形界面。
无论是日常下载单个文件、批量获取资源,还是爬取小型网站内容,wget 都能高效完成,是开发者、运维人员的必备工具之一。
一、基础准备:安装与版本检查
1.1 检查是否已安装
类 Unix 系统(Linux、macOS)通常预装 wget,可通过以下命令验证:
# 查看 wget 版本,确认安装状态
wget --version
# 正确输出示例(Linux):
# GNU Wget 1.21.2 built on linux-gnu.
# 正确输出示例(macOS):
# GNU Wget 1.21.4 for darwin19.6.0.
1.2 安装 wget(若未预装)
- Linux(Ubuntu/Debian):
sudo apt update && sudo apt install -y wget
- macOS(通过 Homebrew):
brew install wget
- Windows:
- 下载 GNU Wget for Windows 压缩包;
- 解压后将 wget.exe 路径添加到系统环境变量 PATH;
- 打开 CMD 或 PowerShell,执行 wget --version 验证。
二、核心用法:基础下载场景
wget 的基础语法为 wget [选项] [URL],以下是日常最常用的 8 个基础场景,覆盖 “单文件下载、内容读取、自定义保存” 等需求。
2.1 直接下载单个文件(默认命名)
最简洁的用法:直接指定文件 URL,wget 会将文件保存到当前目录,且文件名与远程服务器保持一致。
# 格式:wget 目标文件URL
wget https://example.com/file.zip
# 执行后会显示下载进度(百分比、速度、剩余时间),示例输出:
# --2024-09-05 10:30:00-- https://example.com/file.zip
# Resolving example.com (example.com)... 93.184.216.34
# Connecting to example.com (example.com)|93.184.216.34|:443... connected.
# HTTP request sent, awaiting response... 200 OK
# Length: 1048576 (1.0M) [application/zip]
# Saving to: ‘file.zip’
#
# file.zip 100%[===================>] 1.00M 1.2MB/s in 0.8s
#
# 2024-09-05 10:30:01 (1.2MB/s) - ‘file.zip’ saved [1048576/1048576]
2.2 读取 URL 内容(类似 curl)
若无需保存文件,仅需查看 URL 返回的内容(如接口响应、网页源码),可通过 -O -(大写 O,后接 - 表示 “输出到标准输出”)和 -q(静默模式,隐藏下载进度)组合实现,效果类似 curl:
# 格式:wget -O - -q URL
wget -O - -q https://example.com/api/data
# 输出:直接在终端打印 URL 返回的内容(如 JSON 数据、HTML 源码)
# 适用场景:快速测试接口、查看网页纯文本内容
- -O -(--output-document=-):将下载内容输出到 “标准输出”(终端),而非文件;
- -q(--quiet):关闭所有日志和进度提示,仅保留内容输出。
2.3 下载文件并自定义本地名称
默认保存的文件名可能过长或不直观,通过 -O(大写 O,--output-document)参数可指定本地保存路径和文件名:
# 格式:wget -O 本地路径/自定义文件名 URL
# 示例1:保存到当前目录,并重命名为“backup.zip”
wget -O backup.zip https://example.com/long-filename-20240905.zip
# 示例2:保存到指定目录(需确保目录存在),命名为“data.txt”
wget -O ~/downloads/data.txt https://example.com/remote-data.txt
注意:-O 后需紧跟 “本地路径 + 文件名”,且路径中的目录(如 ~/downloads/)需提前创建,否则会报错 “无法创建文件”。
2.4 保存下载日志(便于排查问题)
下载大文件或批量任务时,可通过 -o(小写 o,--output-file)将下载过程的日志保存到文件,方便后续查看下载状态、排查失败原因:
# 格式:wget -o 日志文件路径 URL
wget -o download.log https://example.com/large-file.iso
# 执行后:
# 1. 文件正常下载到当前目录;
# 2. 下载进度、错误信息等日志会写入 download.log
# 查看日志:cat download.log
- 日志包含内容:DNS 解析过程、HTTP 响应状态码、下载速度、中断原因(若失败)等。
2.5 静默模式下载(隐藏所有输出)
若在脚本中使用 wget(如定时任务),无需显示下载进度,可通过 -q(--quiet)启用静默模式,仅在下载失败时才输出错误信息:
# 格式:wget -q URL
wget -q https://example.com/script-dependency.tar.gz
# 执行后:终端无任何输出,仅在文件下载成功/失败时通过 exit code 区分
# 查看 exit code(0 表示成功,非 0 表示失败):echo $?
进阶:若需 “完全静默,即使失败也不输出”,可追加 -nv(--no-verbose)或重定向错误输出到 /dev/null:
wget -q -nv https://example.com/file.txt 2>/dev/null
2.6 后台运行下载任务
下载大文件时,若需关闭终端但保持下载继续,可通过 -b(--background)将 wget 放入后台执行:
# 格式:wget -b URL
wget -b https://example.com/ubuntu-22.04.iso
# 执行后输出:
# Continuing in background, pid 12345.
# Output will be written to ‘wget-log’.
# 说明:
# 1. 进程 ID 为 12345,可通过 kill 12345 终止任务;
# 2. 下载日志默认写入当前目录的 wget-log 文件,可通过 -o 指定自定义日志路径
查看后台下载状态:
# 查看日志实时更新(跟踪下载进度)
tail -f wget-log
# 查看 wget 进程是否在运行
ps aux | grep wget
2.7 断点续传(恢复中断的下载)
若下载过程中网络中断、终端关闭,无需重新下载整个文件,通过 -c(--continue)可从上次中断的位置继续下载:
# 格式:wget -c 原下载 URL
# 示例:恢复之前中断的 ubuntu-22.04.iso 下载
wget -c https://example.com/ubuntu-22.04.iso
适用条件:
- 远程服务器支持 HTTP 断点续传(返回 Accept-Ranges: bytes 响应头);
- 本地已存在部分下载的文件(文件名与远程一致,或通过 -O 指定相同路径)。
若服务器不支持断点续传,-c 会失效,wget 会重新下载并覆盖本地文件(需谨慎)。
2.8 批量下载(从文件读取 URL 列表)
若需下载多个文件(如 10 个不同的图片、文档),可先将所有 URL 写入一个文本文件,再通过 -i(--input-file)让 wget 批量读取并下载:
# 步骤1:创建 URL 列表文件(如 urls.txt)
cat > urls.txt << EOF
https://example.com/file1.jpg
https://example.com/file2.pdf
https://example.com/file3.zip
EOF
# 步骤2:批量下载文件(默认保存到当前目录)
wget -i urls.txt
# 进阶:批量下载并自定义保存目录(通过 -P 指定)
wget -i urls.txt -P ~/batch-downloads/
- -P(--directory-prefix):指定所有文件的统一保存目录,若目录不存在会自动创建。
三、高级用法:应对复杂场景
除基础下载外,wget 还支持 “递归爬取、限速下载、代理访问” 等高级功能,适用于更复杂的需求。
3.1 递归下载(爬取网站内容)
通过 -r(--recursive)启用递归模式,wget 会从指定 URL 开始,自动爬取所有关联的页面和文件(如网页、图片、CSS),类似小型爬虫:
# 格式:wget -r 目标网站 URL
# 示例:爬取 example.com 的首页及关联资源(深度默认 5 层)
wget -r https://example.com/
# 执行后:
# 1. 在当前目录创建“example.com”文件夹;
# 2. 按网站目录结构保存爬取的文件(如 example.com/index.html、example.com/images/logo.jpg)
常用参数组合(控制递归行为):
- -l <深度>(--level):限制递归深度(默认 5,-l 1 表示仅爬取当前页面);
- -np(--no-parent):不爬取父目录(避免爬取 URL 上级的无关内容);
- -k(--convert-links):将爬取文件中的绝对链接转为相对链接,便于本地打开网页;
- -P <目录>:指定爬取内容的保存目录。
实用示例:爬取某博客的某篇文章及所有图片,仅 1 层深度,本地可浏览:
wget -r -l 1 -np -k -P ~/blog-backup https://example.com/blog/post-123/
3.2 限速下载(避免占用过多带宽)
若在服务器或共享网络环境下载,为避免 wget 占用全部带宽影响其他服务,可通过 --limit-rate 限制下载速度(单位:B/s、KB/s、MB/s):
# 格式:wget --limit-rate=速度 URL
# 示例1:限制速度为 1MB/s(下载大文件时不影响其他服务)
wget --limit-rate=1M https://example.com/large-file.zip
# 示例2:限制速度为 500KB/s
wget --limit-rate=500K https://example.com/video.mp4
- 速度单位支持:K(千字节)、M(兆字节),不写单位默认是字节(B/s);
- 该限制为 “最高速度”,实际速度受网络条件影响可能低于限制值。
3.3 带认证的下载(用户名 / 密码验证)
若下载的资源需要 HTTP 基础认证(如私有文档库、测试环境接口),可通过 --user 和 --password 传递用户名和密码:
# 格式:wget --user=用户名 --password=密码 需认证的 URL
wget --user=admin --password=admin123 https://example.com/private-docs.pdf
安全提示:直接在命令行输入密码会被 history 记录(可通过 history -d 命令行序号 删除),更安全的方式是仅用 --user,让 wget 交互式提示输入密码:
wget --user=admin https://example.com/private-docs.pdf
# 执行后提示:Password for user ‘admin’: (输入时无明文显示,输完回车即可)
3.4 通过代理服务器下载
若本地网络无法直接访问目标 URL(如境外资源),可通过 -e(--execute)指定代理配置,让 wget 通过代理下载:
# 1. HTTP 代理示例
wget -e "use_proxy=yes" -e "http_proxy=http://代理IP:端口" https://example.com/file.zip
# 2. HTTPS 代理示例(若代理支持 HTTPS)
wget -e "use_proxy=yes" -e "https_proxy=http://代理IP:端口" https://example.com/file.zip
# 3. 带认证的代理示例(若代理需要用户名密码)
wget -e "use_proxy=yes" -e "http_proxy=http://用户名:密码@代理IP:端口" https://example.com/file.zip
- 若需长期使用代理,可将代理配置写入 ~/.wgetrc 文件(无需每次命令行输入):
# 编辑 ~/.wgetrc
echo "use_proxy=yes" >> ~/.wgetrc
echo "http_proxy=http://代理IP:端口" >> ~/.wgetrc
echo "https_proxy=http://代理IP:端口" >> ~/.wgetrc
3.5 重试机制(应对不稳定网络)
网络波动时,wget 默认会重试 20 次(间隔 15 秒),可通过 --tries 和 --waitretry 自定义重试次数和间隔:
# 格式:wget --tries=重试次数 --waitretry=重试间隔秒数 URL
# 示例:下载失败时重试 5 次,每次间隔 10 秒
wget --tries=5 --waitretry=10 https://example.com/unstable-file.zip
- --tries=0:表示无限重试(直到下载成功或手动终止);
- --waitretry=0:表示不等待,立即重试(不推荐,可能给服务器造成压力)。
四、常用参数速查表
为方便快速查阅,将 wget 高频参数按 “功能分类” 整理如下:
功能分类 | 参数 | 全称 | 核心作用 | 示例 |
---|---|---|---|---|
基础下载 | -O <path> | --output-document | 自定义本地保存路径 / 文件名 | -O ~/data.txt URL |
-q | --quiet | 静默模式,隐藏进度和日志 | -q URL | |
-b | --background | 后台运行下载任务 | -b URL | |
断点与重试 | -c | --continue | 断点续传,恢复中断下载 | -c URL |
--tries=<n> | --tries | 自定义重试次数(0 表示无限) | --tries=5 URL | |
--waitretry=<s> | --waitretry | 重试间隔(秒) | --waitretry=10 URL | |
批量与递归 | -i <file> | --input-file | 从文件读取 URL 批量下载 | -i urls.txt |
-r | --recursive | 递归下载(爬取网站) | -r URL | |
-l <n> | --level | 递归深度(默认 5) | -r -l 1 URL | |
-np | --no-parent | 递归时不爬取父目录 | -r -np URL | |
限速与代理 | --limit-rate=<s> | --limit-rate | 限制下载速度(K/M) |