Linux wget 命令完全指南

Linux wget 命令完全指南

wget 是 Linux 系统中最常用的命令行下载工具之一。它支持 HTTP、HTTPS 和 FTP 协议,功能强大且稳定,特别适合在脚本或远程服务器环境中使用。本文将全面介绍 wget 的用法,从基础到进阶,帮你轻松掌握这个必备工具。


1. 什么是 wget?

wget 是一个非交互式的网络下载器,即使在使用者退出终端或网络中断时,它也能自动重试并继续下载(支持断点续传)。它由 GNU 项目维护,几乎所有的 Linux 发行版都预装了它。

主要特点:

  • 支持 HTTP、HTTPS、FTP 协议
  • 支持递归下载(爬取整个网站)
  • 支持断点续传
  • 支持后台运行
  • 支持限速、代理、认证等

2. 基本语法

wget [选项] [URL]

最简单的用法就是直接跟上文件 URL:

wget https://example.com/file.zip

执行后,文件会下载到当前工作目录,并显示实时进度、速度、剩余时间等信息。


3. 常用选项详解

选项 说明
-O <文件名> 将下载内容保存为指定文件名(可用于重命名)
-o <日志文件> 将输出信息写入日志文件,而不是显示在终端
-c 断点续传(继续之前未完成的下载)
-b 后台下载(将进程放到后台)
-q 静默模式(不输出任何信息)
-v 详细输出(调试用)
--limit-rate=<速率> 限速下载(如 --limit-rate=200k
-t <次数> 设置重试次数(0 表示无限重试)
-T <秒> 设置超时时间(秒)
-P <目录> 指定下载保存的目录(Prefix)
-r 递归下载(用于下载整个网站)
-l <层数> 递归下载的最大深度(配合 -r
-np 不递归到父目录(配合 -r
-A <扩展名> 只下载指定扩展名的文件(如 -A .jpg,.png
-R <扩展名> 排除指定扩展名的文件
--user=<用户名> 指定 HTTP/FTP 认证用户名
--password=<密码> 指定 HTTP/FTP 认证密码
--header="Header: value" 自定义请求头(如修改 User-Agent)
--post-data=<数据> 发送 POST 请求(数据内容)
--post-file=<文件> 发送 POST 请求(从文件读取数据)
--no-check-certificate 忽略 SSL 证书验证(适用于自签名证书)
--spider 爬虫模式(仅检查链接是否存在,不下载)

4. 典型使用示例

4.1 下载单个文件

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.4.tar.gz

4.2 指定保存文件名

wget -O myfile.zip https://example.com/download/largefile.zip

4.3 断点续传(下载中断后继续)

wget -c https://example.com/bigfile.iso

4.4 后台下载

wget -b https://example.com/hugefile.mp4

后台下载时,会在当前目录生成 wget-log 文件记录输出。

4.5 限速下载

wget --limit-rate=500k https://example.com/video.mp4

4.6 下载到指定目录

wget -P /home/user/downloads/ https://example.com/file.pdf

4.7 递归下载整个网站(镜像)

wget -r -l 5 -np -k https://example.com/docs/
  • -r:开启递归
  • -l 5:最多递归 5 层
  • -np:不进入父目录
  • -k:转换链接为本地相对路径(适合离线浏览)

4.8 只下载特定类型的文件

wget -r -A .pdf,.txt https://example.com/documents/

4.9 使用 HTTP 基本认证

wget --user=myuser --password=mypass https://example.com/private/file

4.10 伪装 User-Agent(绕过某些限制)

wget --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://example.com/api

4.11 发送 POST 请求

wget --post-data="name=John&age=30" https://example.com/submit

或从文件读取数据:

wget --post-file=data.json https://example.com/api

4.12 测试链接是否有效(spider 模式)

wget --spider https://example.com/notfound

通过返回码判断(0 表示成功,非 0 表示失败)。


5. 进阶技巧

5.1 使用 wget 下载多个文件

将 URL 列表放入文本文件,然后使用 -i 参数:

wget -i urls.txt

5.2 使用 cookies

wget --load-cookies cookies.txt https://example.com/protected

5.3 忽略 SSL 证书错误(测试环境常用)

wget --no-check-certificate https://self-signed.example.com

5.4 设置代理

wget -e use_proxy=yes -e http_proxy=http://proxy.company.com:8080 https://example.com

或者通过环境变量:

export http_proxy=http://proxy.company.com:8080
wget https://example.com

5.5 重试与等待

wget -t 5 -w 10 https://unstable-site.com/file
  • -t 5:重试 5 次
  • -w 10:每次重试等待 10 秒

5.6 输出到标准输出(配合管道)

wget -q -O - https://example.com/script.sh | bash
  • -q 静默,-O - 输出到 stdout,可用于管道处理。

6. 下载进度与控制

默认情况下,wget 显示进度条、下载速度、已下载大小和剩余时间。你可以通过以下方式控制输出:

  • -q:完全静默(不显示任何输出)
  • -nv:非冗长模式(显示较少信息,但仍有进度和错误)
  • --show-progress:强制显示进度条(与 -q 配合时无效)

7. 注意事项

  1. 文件名处理:如果 URL 带有查询参数(如 ?id=123),wget 会保留该参数作为文件名的一部分。可以通过 -O 重命名避免。

  2. 递归下载风险:递归下载可能拉取大量文件,请谨慎使用,并设置深度限制。

  3. 带宽占用:大文件下载建议使用 --limit-rate 避免占用过多带宽。

  4. SSL 证书:对于生产环境,请不要随意使用 --no-check-certificate,这可能带来安全风险。

  5. 退出状态码wget 返回 0 表示成功,非 0 表示错误(可查看手册获取详细代码含义)。


8. 常用组合命令速查

# 镜像一个静态网站(适合离线浏览)
wget -m -k -K -E https://example.com

# 批量下载(带重命名)
wget -O "image_$(date +%s).jpg" https://example.com/pic.jpg

# 下载并解压(配合 tar)
wget -q -O - https://example.com/src.tar.gz | tar xz

# 限制下载速度并后台运行
wget -b --limit-rate=1m https://bigfile.iso

9. 获取更多帮助

  • 查看完整手册:man wget
  • 简洁帮助:wget --help

结语

wget 是一个低调但极其强大的工具,无论是日常文件下载、数据采集还是网站镜像,它都能胜任。掌握它的各种选项和组合技巧,会大大提升你在 Linux 环境下的工作效率。希望本文能帮助你从入门到精通,灵活运用 wget 解决实际问题。

如果你有任何问题或发现遗漏,欢迎留言讨论! :blush: