什么是 wget?它用来做什么?
wget 是一个免费的、非交互式的网络下载器。这意味着它可以在终端或命令行界面中运行,即使您断开与用户界面的连接,下载任务也可以在后台继续进行。它被设计用于稳定可靠地从互联网上下载文件。
wget 主要用来从各种网络协议(包括 HTTP、HTTPS 和 FTP)下载文件。它可以下载单个文件、整个网站页面(进行递归下载)或文件列表。它的非交互性使其非常适合编写脚本、自动化下载任务或在远程服务器上执行下载操作。
为什么选择使用 wget 来下载文件?
相比传统的浏览器下载,使用 wget 有许多显著的优势:
- 非交互性与自动化: wget 不需要图形界面,可以在脚本中运行,极大地便利了自动化下载或批量处理任务。您可以在后台启动下载,然后关闭终端,下载仍会继续。
- 断点续传: 如果下载过程中连接中断,wget 支持从上次停止的地方继续下载(如果服务器支持),这对于下载大文件非常重要。
- 稳定性与鲁棒性: 它设计用于在不稳定的网络环境下工作,能够处理间歇性连接问题并自动重试下载。
- 批量下载: 可以通过提供一个包含多个URL的文本文件,让 wget 自动依次下载列表中的所有文件。
- 递归下载: 能够沿着链接递归地下载整个网站或特定目录的内容,实现网站镜像或离线浏览。
- 下载控制: 提供了丰富的选项,可以控制下载速度、设置重试次数和间隔、处理重定向、发送自定义请求头等。
因此,当您需要下载大量文件、自动化下载流程、在无头环境(如服务器)中下载,或者需要更精细地控制下载过程时,wget 是一个非常强大的工具。
在哪里可以使用 wget?文件会下载到哪里?
在哪里可以使用 wget?
wget 是一个跨平台的工具,主要用于类Unix系统,如 Linux、macOS、BSD 等。在这些系统上,它通常是默认安装的,或者可以通过包管理器轻松安装。
对于 Windows 用户,虽然没有内置 wget,但可以从官方或第三方网站下载 Windows 兼容版本,或者在提供了类Unix环境的工具中(如 Cygwin、MinGW、WSL – Windows Subsystem for Linux)使用它。
文件会下载到哪里?
默认情况下,wget 会将下载的文件保存到您当前运行命令的目录中。例如,如果您在用户的主目录 (`~`) 中运行 wget 命令,文件通常会下载到那里。
您可以通过以下两种方式指定下载位置:
-
使用
-P或--directory-prefix=目录选项指定一个目录。下载的文件将保存在该目录中。wget -P /home/user/downloads http://example.com/file.zip这会将文件下载到
/home/user/downloads目录下。 -
使用
-O或--output-document=文件路径选项指定完整的保存路径和文件名。这不仅指定了保存位置,还可以为下载的文件重命名。wget -O /home/user/documents/my_report.pdf http://example.com/files/report.pdf这会将文件下载并保存为
/home/user/documents/my_report.pdf。
如何使用 wget 下载文件?基础操作指南
下载单个文件
最基本的使用方式是直接跟上您要下载文件的 URL:
wget http://example.com/path/to/yourfile.tar.gz
wget 会尝试从提供的 URL 下载文件,并使用 URL 的最后一部分作为本地文件名(这里是 yourfile.tar.gz)。
如果 URL 中包含特殊字符(如空格、&符号等),或者您想避免shell解释它们,最好将 URL 用单引号或双引号括起来:
wget "http://example.com/path/to/My File With Spaces.zip"
断点续传下载
如果您正在下载一个大文件,下载中断后不希望从头开始,可以使用 -c 或 --continue 选项:
wget -c http://example.com/very_large_file.iso
如果同名文件已经存在且大小小于远程文件,wget 会尝试从本地文件末尾继续下载。
指定保存文件名
使用 -O 选项可以给下载的文件指定一个不同的本地文件名:
wget -O custom_name.zip http://example.com/path/to/original_name.zip
这会将 original_name.zip 下载并保存为 custom_name.zip。
如何使用 wget 下载多个文件或整个网站?高级操作
从文件列表批量下载
如果您有一个包含多个文件URL的文本文件(每行一个URL),可以使用 -i 或 --input-file=文件 选项让 wget 依次下载列表中的所有文件:
首先创建一个文本文件,例如 urls.txt,内容如下:
http://example.com/file1.zip
http://example.com/documents/report.pdf
ftp://ftp.example.com/pub/software.tar.gz
然后运行命令:
wget -i urls.txt
wget 将按顺序下载文件列表中的每个 URL。
递归下载网站内容
wget 最强大的功能之一是递归下载。使用 -r 或 --recursive 选项,wget 会从指定的 URL 开始,跟随页面中的链接,下载整个网站的部分或全部内容:
wget -r http://example.com/directory/
这将开始下载 http://example.com/directory/ 页面,然后扫描该页面中的链接,继续下载链接指向的页面和文件,如此往复,直到达到某个深度限制或不再发现新的同域链接。
常用的递归下载选项:
-
-l 深度或--level=深度:指定递归的深度。-l 0表示无限深度,默认深度通常是5。wget -r -l 2 http://example.com/(只递归下载两层深度) -
-np或--no-parent:不追溯到父目录。这非常有用,可以确保只下载指定目录及其子目录的内容,而不是整个网站结构。wget -r -np http://example.com/downloads/(只下载 /downloads/ 及其下的内容) -
--accept=列表:只下载符合指定扩展名或模式的文件(例如--accept=jpg,png,gif)。 -
--reject=列表:不下载符合指定扩展名或模式的文件。
镜像整个网站
镜像网站是递归下载的一个特殊和常用的模式。使用 -m 或 --mirror 选项可以方便地镜像网站,它相当于同时使用了 -r、-l inf (无限深度)、-N (时间戳比较)、-np 和 --no-if-modified-since 等选项,旨在创建一个网站的本地完整副本:
wget -m http://example.com/
这会尝试下载 example.com 的所有公开内容,并根据时间戳更新本地文件。
如何控制 wget 的下载过程?速度与重试设置
wget 提供了多种选项来控制下载行为:
限制下载速度
使用 --limit-rate=速度 选项可以限制下载使用的带宽,避免占用全部网络资源。速度单位可以是 k (千字节)、m (兆字节):
wget --limit-rate=200k http://example.com/large_file.zip (限制速度为 200 KB/s)
wget --limit-rate=1m http://example.com/another_file.iso (限制速度为 1 MB/s)
设置重试次数与间隔
如果下载失败,wget 会自动重试。您可以使用 --tries=次数 控制重试的总次数(包括第一次尝试)。使用 --wait=秒数 设置每次重试之间的等待时间:
wget --tries=10 --wait=5 http://example.com/unstable_link.tar.gz
这将尝试下载最多10次,每次失败后等待5秒再重试。默认的重试次数通常是20次。
后台下载
使用 -b 或 --background 选项可以在后台启动下载任务。wget 会立即返回命令行提示符,并在后台继续下载,下载信息会被记录在一个日志文件中(通常是 wget-log)。
wget -b http://example.com/very_large_file.zip
要查看后台任务的进度,可以查看生成的日志文件:
tail -f wget-log
使用 wget 下载时的其他常见场景
处理需要认证的链接
对于需要用户名和密码的 HTTP 或 FTP 资源,可以使用 --user=用户名 和 --password=密码 选项:
wget --user=myuser --password=mypassword http://example.com/protected/file.zip
请注意,在命令行中直接写密码存在安全风险,特别是在共享系统上。更安全的方式可能是使用 --ask-password (wget 会提示输入密码) 或配置 .wgetrc 文件。
下载 FTP 文件
wget 同样支持 FTP 协议:
wget ftp://ftp.example.com/pub/somefile.txt
对于需要认证的 FTP,同样可以使用 --user 和 --password 选项。
忽略 robots.txt
网站的 robots.txt 文件通常会指导网络爬虫哪些目录或文件不应被访问。wget 默认会遵守这个规则。如果您需要忽略它(请确保您有权访问相关资源),可以使用 --execute robots=off:
wget -r --execute robots=off http://example.com/private/directory/
模拟浏览器(设置 User-Agent)
有些网站会检查请求的 User-Agent 头部来判断是否允许下载或提供不同内容。可以使用 --user-agent="字符串" 来模拟特定的浏览器或其他客户端:
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" http://example.com/somepage.html
查看下载进度
当您在前台运行 wget 时,它会默认显示一个进度条,显示已下载的数据量、当前下载速度、预计剩余时间等信息。
Length: 12345678 (12M) [application/zip]
Saving to: ‘yourfile.zip’
yourfile.zip 100%[===================>] 12.34M 1.23MB/s in 10s
2023-10-27 10:30:00 (1.23 MB/s) - ‘yourfile.zip’ saved [12345678/12345678]
这个进度条直观地展示了下载状态。
总的来说,wget 是一个功能强大且灵活的命令行下载工具,掌握它的基本及进阶选项,能极大地提高您在处理网络文件下载任务时的效率和控制力。