🔍搜索⌘K

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:
  1. 下载 GNU Wget for Windows 压缩包;
  2. 解压后将 wget.exe 路径添加到系统环境变量 PATH;
  3. 打开 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

适用条件:

  1. 远程服务器支持 HTTP 断点续传(返回 Accept-Ranges: bytes 响应头);
  2. 本地已存在部分下载的文件(文件名与远程一致,或通过 -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)