本文要点
wget是最常用的命令行下载工具,与curl定位不同:wget 更擅长整站递归下载、断点续传和后台任务,适合批量拉取资源。- 单文件下载用
wget URL;用-O重命名保存、-q静默、-nv精简输出、-S查看服务器响应头。 - 断点续传用
wget -c,配合--limit-rate限速、--tries/--timeout控制重试与超时,适合下载大文件。 - 递归下载用
wget -r -np -nH抓取整个目录,配合-N时间戳判断可做到增量同步(类似镜像站点)。 - 批量下载用
-i指定 URL 列表文件,后台下载用-b,再结合wget.log查看进度。
wget 简介:和 curl 有什么不同
Linux 下最经典的命令行下载工具有两个:wget 和 curl。虽然它们都能下载文件,但设计哲学不同:
wget(GNU Wget)是专职下载器:专注下载本身,天然支持断点续传、递归抓取整站、后台下载、批量 URL 列表,非常适合拉取软件包、备份目录、镜像一个站点。curl是多功能传输工具:能发送任意 HTTP 方法、携带请求头、处理 API 调用,偏向"给服务器发请求拿数据",它的单个文件下载只是一小部分能力。
简单来说,下载大文件、抓整站用 wget;调试接口、发请求用 curl。两者经常配合使用。
本文用一台 Ubuntu 24.04 上的本地 HTTP 服务演示 wget 的常见场景,先看一下版本:
wget --version | head -1GNU Wget 1.21.4 built on linux-gnu.基本下载:单文件与重命名保存
直接下载到当前目录
最简单的用法就是 wget <URL>,文件会以服务器上的名字保存到当前目录,并显示连接过程、HTTP 状态码、文件大小与下载进度:
wget http://127.0.0.1:8901/files/a.txt输出大致如下:
--2026-08-21 20:07:42-- http://127.0.0.1:8901/files/a.txt
Connecting to 127.0.0.1:8901... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12 [text/plain]
Saving to: 'a.txt'
100% [=============================>] 12 --:--:-- ETA
2026-08-21 20:07:42 (1.07 MB/s) - 'a.txt' saved [12/12]其中 200 OK 表示请求成功,Length: 12 [text/plain] 是文件大小(12 字节)和 MIME 类型,最后一行是保存路径和实际收到的字节数。
用 -O 指定保存文件名
如果不想用服务器原名,而想自定义文件名(比如把某个较长的名字换成易记的名字),用 -O:
wget -O save-as.txt http://127.0.0.1:8901/files/a.txt-O 后面跟的是你想保存的路径或文件名。
下面这张图演示了基本下载与重命名保存的完整过程——先直接下载得到 a.txt,再用 -O 保存为 save-as.txt,最后用 cat 与 ls 验证内容与文件:

静默与精简输出
wget -q:安静模式,不输出任何内容,常用于脚本里,配合&&判断成功与否。wget -nv:非冗长模式,只显示摘要不显示进度条,比-q提供更多信息,适合写在文章、演示里避免刷屏。
wget -q http://127.0.0.1:8901/files/a.txt # 无任何输出
wget -nv http://127.0.0.1:8901/files/a.txt # 一行摘要用 -S 查看服务器响应头
想要确认服务器返回了什么(状态码、Server、Content-Type 等),加 -S 或 --server-response,响应的原始头部会先打印出来:
wget -S -O /dev/null http://127.0.0.1:8901/files/a.txt HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.12.3断点续传:大文件下载不掉线
下载大文件时网络偶尔中断,如果从头再来既浪费时间又费流量。wget 的断点续传能记住已下载的进度,从断点继续。
用 --limit-rate 限速
服务器或网络不稳定时,用 --limit-rate 限制下载速度,避免瞬时占满带宽。示例如下(单位可写 k、m):
wget -q --limit-rate=20k http://127.0.0.1:8901/files/big.bin这里把速度限制在 20KB/s,下载一个 5MB 的文件,2 秒后我们用 timeout 中断它,此时文件只下载了一部分。
用 -c 从断点继续
中断后文件并不作废,用 -c(continue)接着上次的进度继续下载:
wget -c http://127.0.0.1:8901/files/big.bin需要注意:只有当本地已存在同名文件且 wget 知道它不完整时,-c 才会续传。如果本地文件是完整的,-c 会提示 File already fully retrieved。
这张图演示了完整的断点续传流程:先用限速下载制造一个"半成品"(40KB),再用 -c 续传,最终得到完整文件(5MB):

控制重试与超时
网络抖动时,--tries 控制重试次数,--timeout 控制单次连接/读取超时:
wget --tries=5 --timeout=30 http://example.com/big.iso--tries=0 表示无限重试。超时的单位是秒,--timeout=30 即 30 秒无响应就重试。
递归下载:抓取整个目录
wget 最有价值的特性之一就是递归下载,可以顺着页面里的链接一层层把整个目录甚至整个网站抓下来。
wget -r -np -nH -nv --no-remove-listing http://127.0.0.1:8901/files/这里几个关键参数:
-r(recursive):递归下载,顺着链接抓取子页面/子文件。-np(no-parent):不向上回溯,只抓当前目录及其子目录,绝不爬到父级目录去。做目录镜像时几乎必加。-nH(no-host-directories):不额外创建以主机名命名的顶层目录,直接把内容存到当前目录,路径更干净。--no-remove-listing:Python 的目录列表页会生成index.html,加上它避免因为保留这个文件而干扰结果展示。
运行后会把 files/ 下所有文件(含 sub/ 子目录)一层层扒下来,最后我们梳理出下载到的文件树:

从上图可以看到,files/ 下所有文件连同一个 sub/b.txt 子目录都被完整下载下来,结尾还统计了 Downloaded: 6 files,说明递归抓取成功。
时间戳同步 -N:增量镜像
递归下载还有个常用组合是 -N(timestamping)。它会对本地与服务器文件比较时间戳,服务器上的文件没更新就不重新下载,从而实现"增量同步",非常适合定期镜像站点或同步数据目录:
wget -r -np -nH -N http://127.0.0.1:8901/files/当服务器文件没有变化时,第二次运行 wget 会收到 304 Not Modified,直接跳过:
HTTP request sent, awaiting response... 304 Not Modified
File 'a.txt' not modified on server. Omitting download.镜像整站 -m
如果要完整镜像一个网站(包括把页面里的链接改成相对路径便于离线浏览),用 -m(mirror)。-m 等价于 -r -N -l inf --no-remove-listing,再配上 -k(convert-links)把链接转成本地相对链接,就是标准的整站镜像组合:
wget -m -k http://example.com/批量与后台下载
用 -i 从列表文件批量下载
需要下载多个文件时,把 URL 逐行写进一个列表文件,用 -i 指定,wget 会逐个下载:
printf "http://127.0.0.1:8901/files/a.txt\nhttp://127.0.0.1:8901/files/sub/b.txt\n" > urls.txt
wget -i urls.txt这样比手动敲多个 URL 更清晰,也方便脚本自动生成列表。
用 -b 后台下载
过大的文件不想一直占着终端,可用 -b(background)把下载丢到后台,wget 会提示进程 PID,并通过 wget.log 记录进度:
wget -bq http://127.0.0.1:8901/files/big.binContinuing in background, pid 2085574.这时可以正常做其他事情,随时用下面的命令查看进度与结果:
tail -f wget.log # 实时查看下载进度
pgrep -f wget # 确认后台进程还在常用 wget 参数速查
| 参数 | 作用 |
|---|---|
-O <file> | 指定保存文件名 |
-q / -nv | 静默 / 精简输出 |
-S | 打印服务器响应头 |
-c | 断点续传 |
--limit-rate=<速度> | 限制下载速度 |
--tries=<n> / --timeout=<s> | 重试次数 / 超时秒数 |
-r | 递归下载 |
-np | 不回溯父目录 |
-nH | 不创建主机名目录 |
-N | 按时间戳增量同步 |
-m | 镜像整站 |
-k | 转换链接为本地相对链接 |
-i <file> | 从列表文件批量下载 |
-b | 后台下载 |
小结
wget 是 Linux 运维中下载类任务的主力工具:单文件下载、重命名保存、断点续传、限速、递归抓取目录、镜像整站、批量与后台下载,基本覆盖了日常所有下载场景。
和 curl 的分工也很明确——要快速、稳健地把文件从网络上"拿走",首选 wget;要精确控制 HTTP 请求去调试接口,就用 curl。把两者各记几招,命令行下处理文件传输基本就够用了。
更多选项可用 wget --help 或 man wget 查看完整文档。
评论 (0)
暂无评论,快来抢沙发吧!