使用 Linux wget 命令的 7 个实用技巧

在 Linux 终端中从互联网下载文件。 使用我们的新速查表充分利用 wget 命令。
80 位读者喜欢这篇文章。
Computer screen with files or windows open

Opensource.com

Wget 是一个从网络下载文件的免费实用工具。 它从互联网获取数据并将其保存到文件或在终端中显示。 这实际上也是 Web 浏览器(如 Firefox 或 Chromium)所做的事情,只是默认情况下,它们在图形窗口中呈现信息,并且通常需要用户主动控制它们。 wget 实用程序旨在非交互式使用,这意味着您可以编写脚本或安排 wget 来下载文件,无论您是否在计算机旁。

使用 wget 下载文件

您可以通过提供指向特定 URL 的链接来使用 wget 下载文件。 如果您提供默认指向 index.html 的 URL,则会下载索引页面。 默认情况下,文件将下载到当前工作目录中同名的文件中。

$ wget http://example.com
--2021-09-20 17:23:47-- http://example.com/
Resolving example.com... 93.184.216.34, 2606:2800:220:1:248:1893:25c8:1946
Connecting to example.com|93.184.216.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1256 (1.2K) [text/html]
Saving to: 'index.html'

您可以使用带有短划线 - 字符的 --output-documentwget 将数据发送到标准输出 (stdout)

$ wget http://example.com --output-document - | head -n4
<!doctype html>
<html>
<head>
   <title>Example Domain</title>

您可以使用 --output-document 选项(简写为 -O)来随意命名您的下载

$ wget http://example.com --output-document foo.html

继续部分下载

如果您正在下载一个非常大的文件,您可能会发现您必须中断下载。 使用 --continue(简写为 -c),wget 可以确定下载停止的位置并继续文件传输。 这意味着下次您下载 4 GB 的 Linux 发行版 ISO 时,您不必在出现问题时返回到开头。

$ wget --continue https://example.com/linux-distro.iso

下载一系列文件

如果不是一个大文件,而是您需要下载的多个文件,wget 可以帮助您。 假设您知道要下载的文件的位置和文件名模式,您可以使用 Bash 语法来指定整数范围内开始和结束点,以表示文件名序列

$ wget http://example.com/file_{1..4}.webp

镜像整个站点

您可以使用 --mirror 选项下载整个站点,包括其目录结构。 此选项与运行 --recursive --level inf --timestamping --no-remove-listing 相同,这意味着它是无限递归的,因此您会获得指定域上的所有内容。 根据网站的创建时间,这可能意味着您获得的内容比您意识到的要多。

如果您使用 wget 来归档站点,那么选项 --no-cookies --page-requisites --convert-links 也很有用,以确保每个页面都是新鲜的、完整的,并且站点副本或多或少是独立的。

修改 HTML 标头

用于数据交换的协议在计算机发送以进行通信的数据包中嵌入了大量元数据。 HTTP 标头是数据初始部分的组成部分。 当您浏览网站时,您的浏览器会发送 HTTP 请求标头。 使用 --debug 选项查看 wget 随每个请求发送的标头信息

$ wget --debug example.com
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.19.5 (linux-gnu)
Accept: */*
Accept-Encoding: identity
Host: example.com
Connection: Keep-Alive

---request end---

您可以使用 --header 选项修改您的请求标头。 例如,有时模仿特定的浏览器很有用,无论是为了测试还是为了解决仅适用于特定用户代理的编码不良的站点。

要标识为在 Windows 上运行的 Microsoft Edge

$ wget --debug --header="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 Edg/91.0.864.59" http://example.com

您还可以伪装成特定的移动设备

$ wget --debug \
--header="User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1" \
http://example.com

查看响应标头

以与浏览器请求发送标头信息相同的方式,响应中也包含标头信息。 您可以使用 --debug 选项查看响应标头

$ wget --debug example.com
[...]
---response begin---
HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 188102
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Etag: "3147526947"
Server: ECS (sab/574F)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

---response end---
200 OK
Registered socket 3 for persistent reuse.
URI content encoding = 'UTF-8'
Length: 1256 (1.2K) [text/html]
Saving to: 'index.html'

响应 301 响应

200 响应代码表示一切都按预期工作。 另一方面,301 响应意味着 URL 已永久移动到其他位置。 这是一种常见的网站管理员在重新定位内容时留下“踪迹”的方式,以便访问旧位置的人仍然可以找到它。 默认情况下,wget 遵循重定向,这可能就是您通常希望它做的事情。

但是,您可以使用 --max-redirect 选项控制 wget 在遇到 301 响应时的行为。 您可以将其设置为 0 以不遵循任何重定向

$ wget --max-redirect 0 http://iana.org
--2021-09-21 11:01:35-- http://iana.org/
Resolving iana.org... 192.0.43.8, 2001:500:88:200::8
Connecting to iana.org|192.0.43.8|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.iana.org/ [following]
0 redirections exceeded.

或者,您可以将其设置为其他数字来控制 wget 遵循多少个重定向。

展开缩短的 URL

--max-redirect 选项对于在实际访问缩短的 URL 之前查看它们非常有用。 缩短的 URL 对于印刷媒体(用户无法复制和粘贴长 URL)或具有字符限制的社交网络(这在现代和像 Mastodon 这样的开源社交网络上并不是什么大问题)上很有用。 但是,它们也可能有点危险,因为它们的目的地本质上是被隐藏的。 通过结合 --head 选项来仅查看 HTTP 标头,以及 --location 选项来解开 URL 的最终目的地,您可以在不加载完整资源的情况下窥视缩短的 URL

$ wget --max-redirect 0 "https://bit.ly/2yDyS4T"
--2021-09-21 11:32:04-- https://bit.ly/2yDyS4T
Resolving bit.ly... 67.199.248.10, 67.199.248.11
Connecting to bit.ly|67.199.248.10|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://example.com/ [following]
0 redirections exceeded.

Location 开头的倒数第二行输出显示了预期目的地。

使用 wget

一旦您练习将探索 Web 的过程视为一个命令,wget 就会成为一种快速有效的方式,可以从 Internet 中提取您需要的信息,而无需使用图形界面。 为了帮助您将其构建到您的常用工作流程中,我们创建了一个速查表,其中包含常用的 wget 用法和语法,包括使用它来查询 API 的概述。在此处下载 Linux wget 速查表。

接下来要阅读的内容
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。 他曾在电影和计算行业工作,而且经常同时工作。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.