大家好,我是良许。

wget 是一个可以从网络上下载文件的免费实用程序,它的工作原理是从 Internet 上获取数据,并将其保存到本地文件中或显示在你的终端上。

这实际上也是大家所使用的浏览器所做的,例如 Firefox 或 Chrome,其实在内部也是调用了 wget 程序进行数据下载。

本文介绍 8 个 wget 命令常见使用方式,希望对小伙伴们有所帮助。

1. 使用 wget 命令下载文件

你可以使用 wget 命令来下载指定链接的文件。默认情况下,下载的文件将保存到当前工作目录中的同名文件中。

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

如果你不想将下载的文件保存在本地,而只是想将其显示在标准输出(stdout)里,可以使用 --output-document 选项,同时后面再跟上一个 - 号。

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

如果你想给下载的文件重新命名,那么可以使用 --output-document 选项(或者更简便,直接使用 -O 即可):

$ wget http://www.lxlinux.net --output-document newfile.html

2. 断点续传

如果你要下载的文件非常大,因为网络的原因有可能出现一次性无法下载完全的情况。如果每次都要重新下载,那么都不知道要等到猴年马月。

这种情况下,就可以使用 --continue 选项(或者 -c )实现断点续传。也就是说,如果因为各种原因导致下载中断,使用了这个选项,就可以继续上次的下载,而不需要重新进行下载。

$ wget --continue https://www.lxlinux.net/linux-distro.iso

3. 下载一系列文件

如果你下载的不是一个大文件,而是需要很多个小文件,那么 wget 命令也可以帮你轻松实现。

但是,这里还需要使用一些 bash 语法来实现目的。一般来讲,这些文件的名称都有一定的规律,比如:file_1.txt,file_2.txt,file_3.txt,等等,那么你就需要使用这样的命令:

$ wget http://www.lxlinux.net/file_{1..4}.txt

4. 镜像整个站点

如果你想对某个网站进行整站下载,包括其目录结构,那么你就需要使用 --mirror 选项。

这个选项等同于 --recursive --level inf --timestamping --no-remove-listing,这意味着它是无限递归的,因此你可以下载到指定域上的所有内容。

如果你使用 wget 存档站点,那么这些选项 --no-cookies --page-requisites --convert-links 也可用于确保每个页面都是最新的、最完整的。

5. 修改 HTML 请求标头

学过网络通讯的小伙伴都知道,HTTP 数据包里包含了非常多的元素。其中,HTTP 标头是数据包初始的组成部分。

当你使用浏览器浏览网页时,你的浏览器会向服务器发送 HTTP 请求标头。具体发了些什么东西呢?可以使用 --debug 选项查看 wget 每次请求发送的标头信息:

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

你可以使用 --header 选项修改请求标头。为什么要这么做呢?其实有很多使用场景的。例如,有时候为了测试,需要模拟特定的浏览器发出的请求。

比如,你想模拟 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://www.lxlinux.net

除此之外,你还可以伪装成特定的移动设备(比如 iPhone ):

$ 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:// www.lxlinux.net

6. 查看响应标头

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

$ wget --debug www.lxlinux.net
[...]
---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'

7. 响应 301 响应

熟悉网络协议的都知道,200 响应码意味着一切都按预期进行。而 301 响应则意味着 URL 已经指向不同的网站。

这种情况下,如果你需要下载文件,那么就需要使用 wget 的重定向功能。所以,如果你遇到 301 响应时,就需要使用 --max-redirect 选项。

如果你不想要重定向,那么可以将 --max-redirect 设置为 0 。

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

或者,你还可以将其设置为其他数字以控制 wget 跟随的重定向数量。

8. 展开短链接

有时候,我们需要将一个长链接转为短链接,例如在文本框里填写信息时,有时候文本框对字符长度有限制,这时短链就可以大大减少字符数。

除了使用第三方平台,其实我们可以直接使用 wget 命令来将短链接还原为长链接。这里依然使用 --max-redirect 选项:

$ 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://www.lxlinux.net/ [following]
0 redirections exceeded.

输出的倒数第二行,在 Location 部分,后面你就看到了短链展开之后的真面目。

wget命令8种实用用法的更多相关文章

  1. Linux系统中虚拟设备文件的各种实用用法

    大家好,我是良许. 大家知道,在 Linux 下,一切皆文件,对于设备文件也是如此.我们在工作的过程中,经常会看到 /dev/null 这个玩意,那它到底是什么呢? 专业地讲,/dev/null 是一 ...

  2. Linux下命令行cURL的10种常见用法示例

    curl的命令行工具功能非常强大,这些数据交互的功能基本上都是通过URL方式进行的,下面这篇文章主要给大家分享了在Linux中命令行cURL的10种常见用法示例,通过示例代码介绍的非常详细,需要的朋友 ...

  3. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  4. js模版引擎handlebars.js实用教程——另一种Helper用法

    返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...

  5. 【数据下载】利用wget命令批量下载ftp文件和文件夹

    这是一个“”数据大发现”的时代,大家都在创造数据,使用数据以及分享数据,首先一步我们就需要从数据库download我们需要的数据. Ftp是一种常见的在线数据库,今天介绍一种可以批量下载文件夹的方法, ...

  6. 【搬运】Wget 命令详解

    用过 Linux 系统的对于 wget 不陌生吧,从网上下载资源等操作都是少不了它,它体积小但功能集全,支持 FTP HTTP HTTPS 协议下载方式,支持断点续传 代理服务器. 现在 Window ...

  7. 每天一个Linux命令(59)wget命令

        wget命令用来从指定的URL下载文件.     (1)用法:     用法:  wget  [参数]  [URL]     (2)功能:     功能:  wget命令用来从指定的URL下载 ...

  8. 安装wget 、 wget命令

    今天给服务器安装新LNMP环境时,wget 时提示 -bash:wget command not found,很明显没有安装wget软件包.一般linux最小化安装时,wget不会默认被安装. 可以通 ...

  9. [转帖]Linux的wget命令详解

    Linux的wget命令详解 来源不明 找到的也是转帖的 https://www.cnblogs.com/cindy-cindy/p/6847502.html Linux wget是一个下载文件的工具 ...

  10. Mac安装wget的两种方法

    ​ 第一种.传统的安装包 A - 从ftp://ftp.gnu.org/gnu/wget/下载到最新的wget安装包到本地 B - 然后通过终端tar -zxvf命令解压到我们某个目录 C - 然后依 ...

随机推荐

  1. Winform中checklistbox控件的常用方法

    Winform中checklistbox控件的常用方法最近用到checklistbox控件,在使用其过程中,收集了其相关的代码段1.添加项checkedListBox1.Items.Add(" ...

  2. Apache Kafka源码分析 - PartitionStateMachine

    startup 在onControllerFailover中被调用, initializePartitionState private def initializePartitionState() { ...

  3. Delphi透明组件开发(去掉自己的csOpaque,去掉父控件的WS_CLIPCHILDREN,增加WS_EX_TRANSPARENT,截获WM_ERASEBKGND,然后在WM_DRAWITEM里画) good

    透明的控件, 一般继承自TGraphicControl的(就是那些没有handle属性, 不能有focus的控件, 如image)都有Transparent属性. 对TWinControl类的控件, ...

  4. javaweb之监听器详解

    在servlet中定义了多种类型的监听器,他们用于监听事件源分别是servletContext,httpsession,servletrequest 这三个域对象. servlet中监听器主要有三类: ...

  5. HDU 1728 逃离迷宫(DFS)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)  ...

  6. 匿名HTTP透明HTTP高匿HTTP区别

    透明代理的意思是客户端根本不需要知道有代理服务器的存在,但是它传送的仍然是真实的IP.你要想隐藏的话,不要用这个. 普通匿名代理能隐藏客户机的真实IP,但会改变我们的请求信息,服务器端有可能会认为我们 ...

  7. 记录一次APP的转让流程

    由于业务需要,需要将开发的App从一个账号(A账号)转移到另一个账号(B账号),这里简单介绍一下转让流程.主要包括两大步骤: 转让方(A账号)提出转让申请 接收方(B账号)接受转让App 如果不想看这 ...

  8. Socket TCP/UDP

    TCP TCPClient package com.tcp; import java.io.*; import java.net.*; class TCPClient { public static ...

  9. spring-mvc默认首页配置

    一想到默认首页,很多人可能首先想到的是在web.xml如下配置: <welcome-file-list> <welcome-file>xxxx/xxx</welcome- ...

  10. jQuery中attr()和prop()的区别,修改checked属性 jquery attr(&#39;checked&#39; 不起作用 attr(&#39;checked&#39; 不对

    在做复选框全选按钮的时候,出现了一个问题,使用语句$.attr('checked',true),将复选框的属性改为被选中,在chrome浏览器中第一次点击有效后面就不行了,IE8倒是没有问题. 百度了 ...