linux wget命令

提示:wget是Linux系统中强大的非交互式网络下载工具,支持HTTP、HTTPS和FTP协议,具有断点续传和递归下载功能。

命令简介

wget 是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS和FTP协议下载。它是非交互式的,可以在后台运行,适合用于脚本中自动下载文件。wget具有强大的功能,包括断点续传、递归下载、限制带宽等。

命令语法

wget [选项] [URL...]

常用选项

选项 说明
-O 文件名 将下载的文件保存为指定文件名
-P 目录 将文件下载到指定目录
-c 断点续传,继续下载未完成的文件
-b 后台下载,将wget置于后台运行
-q 静默模式,不显示下载信息
-v 详细输出,显示详细的下载信息
-r--recursive 递归下载,下载整个网站或目录
-l 深度 设置递归下载的深度(默认为5)
-np 不追溯到父目录,仅在当前目录递归
-A 扩展名列表 只下载指定扩展名的文件
-R 扩展名列表 排除指定扩展名的文件
--limit-rate=速度 限制下载速度(如 100k, 1m)
-t 次数 设置重试次数(0为无限重试)
--timeout=秒数 设置超时时间
-i 文件 从文件读取URL列表进行批量下载
--user=用户名 设置FTP/HTTP用户名
--password=密码 设置FTP/HTTP密码
-U 代理字符串 设置用户代理标识
--no-check-certificate 不检查SSL证书(用于HTTPS)

使用示例

示例1:基本文件下载

下载单个文件到当前目录:

# 下载文件,使用默认文件名
wget https://example.com/file.zip

# 下载文件并指定保存的文件名
wget -O download.zip https://example.com/file.zip

# 下载文件到指定目录
wget -P /home/user/downloads https://example.com/file.zip

示例2:断点续传

如果下载中断,可以继续下载:

# 开始下载一个大文件
wget https://example.com/large-file.iso

# 如果下载中断,使用-c继续下载
wget -c https://example.com/large-file.iso

示例3:后台下载和静默模式

在后台下载文件,不显示输出:

# 后台下载
wget -b https://example.com/large-file.iso

# 静默模式下载,不显示任何信息
wget -q https://example.com/file.zip

# 后台静默下载,并将输出保存到日志文件
wget -b -q -o download.log https://example.com/file.zip

示例4:递归下载(网站镜像)

下载整个网站或目录:

# 递归下载网站,深度为2
wget -r -l 2 https://example.com/

# 递归下载,但不追溯到父目录
wget -r -np https://example.com/path/

# 递归下载,限制只下载HTML和图片文件
wget -r -A "*.html,*.jpg,*.png" https://example.com/

# 递归下载,排除特定类型文件
wget -r -R "*.zip,*.exe" https://example.com/

示例5:批量下载

从文件读取URL列表进行批量下载:

# 创建URL列表文件
cat > urls.txt << EOF
https://example.com/file1.zip
https://example.com/file2.zip
https://example.com/file3.zip
EOF

# 从文件读取URL列表进行下载
wget -i urls.txt

# 批量下载并保存到不同文件名
wget -O file1.zip https://example.com/download?file=1 \
     -O file2.zip https://example.com/download?file=2 \
     -O file3.zip https://example.com/download?file=3

示例6:限制下载速度和设置重试

# 限制下载速度为100KB/s
wget --limit-rate=100k https://example.com/large-file.iso

# 限制下载速度为1MB/s
wget --limit-rate=1m https://example.com/large-file.iso

# 设置超时时间为30秒,重试5次
wget --timeout=30 -t 5 https://example.com/file.zip

# 无限重试,直到下载成功
wget -t 0 https://example.com/file.zip

示例7:使用认证下载

下载需要认证的文件:

# FTP下载,需要用户名和密码
wget --user=ftpuser --password=ftppass ftp://example.com/file.zip

# HTTP基础认证下载
wget --user=user --password=pass https://example.com/protected/file.zip

# 将密码放在环境变量中更安全
export MY_PASS="mypassword"
wget --user=user --password=$MY_PASS https://example.com/file.zip

示例8:下载大文件和SSL证书处理

# 下载大文件,分割成多个部分(需要服务器支持Range头)
wget -c --tries=0 --retry-connrefused https://example.com/large-file.iso

# 不检查SSL证书(自签名证书或测试环境)
wget --no-check-certificate https://self-signed.example.com/file.zip

# 指定自定义用户代理
wget -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/91.0.4472.124" \
     https://example.com/file.zip

示例9:高级递归下载选项

# 递归下载,转换为本地浏览的链接
wget -r -k https://example.com/

# 递归下载,并转换链接为相对路径
wget -r -k -p https://example.com/

# 递归下载,同时下载页面所需的所有资源(CSS, JS, 图片等)
wget -r -k -p -np -E https://example.com/

# 递归下载,限制总文件大小
wget -r --quota=100m https://example.com/

wget配置文件

wget的配置文件位于 /etc/wgetrc 和用户目录的 ~/.wgetrc,可以设置默认选项:

# ~/.wgetrc 示例配置
# 默认使用断点续传
continue = on
# 设置重试次数
tries = 10
# 限制下载速度
limit_rate = 1m
# 设置默认输出目录
dir_prefix = ~/downloads
# 安静模式
quiet = on
# 不检查证书
check_certificate = off

注意事项

  1. 递归下载整个网站可能违反目标网站的服务条款,请确保有相应权限
  2. 使用wget下载大文件时,建议使用-c选项以便断点续传
  3. 批量下载时注意不要对目标服务器造成过大压力,可以使用--limit-rate限速
  4. 使用--no-check-certificate选项会降低安全性,仅建议在测试环境使用
  5. 将密码直接放在命令行中可能不安全,可以使用环境变量或配置文件
  6. 递归下载时,-l选项控制深度,0表示无限深度
  7. wget默认会创建.wget-log文件记录下载信息
  8. 在脚本中使用wget时,建议使用-q静默模式,并使用退出状态码判断下载结果

退出状态码

状态码 说明
0 成功下载,无错误
1 通用错误
2 解析错误(例如错误的URL)
3 文件I/O错误
4 网络错误
5 SSL验证错误
6 用户名/密码验证错误
7 协议错误
8 服务器返回错误响应

在脚本中使用wget

#!/bin/bash

# 检查wget是否安装
if ! command -v wget &> /dev/null; then
    echo "wget未安装,正在安装..."
    apt-get install -y wget  # Debian/Ubuntu
    # yum install -y wget     # RHEL/CentOS
fi

# 下载文件并检查是否成功
wget -q -O /tmp/file.zip https://example.com/file.zip
if [ $? -eq 0 ]; then
    echo "下载成功"
    # 进一步处理文件...
else
    echo "下载失败"
    exit 1
fi

# 批量下载URL列表
while read url; do
    filename=$(basename "$url")
    wget -q -O "/downloads/$filename" "$url"
    if [ $? -eq 0 ]; then
        echo "已下载: $filename"
    else
        echo "下载失败: $url" >> error.log
    fi
done < urls.txt

相关命令

  • curl - 另一个强大的网络传输工具
  • axel - 支持多线程的下载加速器
  • aria2 - 轻量级多协议和多源下载工具
  • ftp - FTP客户端工具
  • scp - 通过SSH安全复制文件
  • rsync - 远程文件同步工具