wget 详解

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,只能获取源代码。需要更高级的工具,如 HTTrackPhantomJS 等。
  • 下载速度慢 :可能是服务器限流、本地网络带宽不足或跨境访问延迟。可以使用 --limit-rate 调节,或检查网络 。

2. 安全与法律考虑

  • 遵守robots.txtwget 默认会遵守网站的 robots.txt 协议,其中规定了哪些目录可以被爬取,这是对网站负责的表现。
  • 尊重服务器资源 :使用 -w 参数设置下载间隔,避免对目标服务器造成过大压力。高频请求可能被视为 DoS 攻击。
  • 注意版权法律:镜像或下载网站内容前,请确认您是否拥有相应权限,并明确您的使用意图,避免侵权。
  • 谨慎处理证书 :跳过 SSL 证书检查(--no-check-certificate)时需谨慎,这会使连接面临中间人攻击的风险。

🆚 与 curl 的对比

curlwget 都是强大的命令行网络工具,但侧重点不同:

  • wget :专注于下载,支持递归、镜像、断点续传,是网站抓取和批量下载的专家。
  • curl :功能更全面,像一个网络数据交换的瑞士军刀。它几乎支持所有网络协议,擅长发送各种 HTTP 请求、与 API 交互、处理Cookie和头信息,数据可以下载也可以上传。

总的来说,如果需要下载整个网站 或在不稳定网络下下载大文件wget 是更合适的选择;如果需要测试 API 、发送 POST 请求 或在脚本中进行复杂的网络交互,则应选择 curl

如果网络环境复杂,还可以关注 wget2,它支持 HTTP/2、并行连接,能更高效地完成下载任务。

相关推荐
weixin_462446234 个月前
【原创实践】mac手动安装 wget
macos·wget
Ray Song8 个月前
【Linux】 wget、curl 用法区别
linux·运维·服务器·curl·wget
MinggeQingchun1 年前
Python - 爬虫-网页抓取数据-工具wget
爬虫·python·curl·wget
kaixin_learn_qt_ing1 年前
wget -q -O
wget
ShareBeHappy_Qin2 年前
Linux 命令—— ping、telnet、curl、wget(网络连接相关命令)
linux·curl·telnet·wget·ping·网络连接命令
Bel_Ami@2 年前
Mac 如何安装 wget
mac·wget·homebrew
DK数据工作室2 年前
Window如何运行sh文件以及wget指令
windows·python·编程·wget·sh文件
太空漫步112 年前
迅雷下载不了的资源怎么下载?
centos·下载·wget
Bel_Ami@2 年前
Mac安装wget流程及异常解决(亲测有效)
linux·macos·mac·brew·wget