本文主要介绍GNU Wget实用程序及其在在FreeBSD操作系统下的安装过程,并对几个最常用的下载功能进行了说明,主要包括以下几个方面:

  • GNU Wget概述
  • Wget程序安装
  • Wget常用功能

1 GNU Wget概述

GNU Wget是一个免费的实用程序,方便用户以非交互方式下载文件,支持HTTP、HTTPS和FTP协议,也可以通过HTTP代理进行检索。

(1)非互式

Wget是非交互式的,这意味着它可以在后台工作,下载过程中不需要用户登录,也不需要用户介入。用户启动Wget任务后即可断开与系统的连接,留下Wget默默地完成工作,这在传输大量数据或者执行耗时较长的任务时提供了极大的便利。

(2)递归下载

Wget可以跟踪HTML、XHTML和CSS页面中的链接,以创建远程网站的本地版本,从而完全重新创建原始网站的目录结构。这有时被称为“递归下载”。当然,Wget会尊重机器人排除标准(/robots.txt)。用户还可以指示Wget将下载文件中的链接转换为指向本地文件,以便脱机查看。

(3)站点镜像

当通过FTP检索时,可以使用文件名通配符匹配和目录的递归镜像。Wget可以读取HTTP和FTP服务器提供的时间戳信息,并将其存储在本地。因此,Wget可以查看远程文件自上次检索以来是否发生了变化,如果有,则自动检索新版本。这使得Wget适合于FTP站点和主页的镜像。

(4)断点续传

Wget被设计为对缓慢或不稳定的网络连接的健壮性。如果由于网络问题导致下载失败,它将继续重试,直到检索到整个文件。如果服务器支持重传,它将指示服务器从上次停止的地方继续下载。

(5)代理服务

Wget支持代理服务器,它可以减轻网络负载,加快检索速度,并提供防火墙后的访问。Wget默认使用被动FTP下载,主动FTP是一个选项。

(6)功能丰富

Wget内置丰富的功能,大多数功能都可以可以通过命令行选项或通过初始化文件进行配置。

(7)免费使用

GNU Wget是一个自由软件。这意味着每个人都可以根据自由软件基金会发布的GNU通用公共许可证条款使用它、重新分发它和/或修改它,更多的功能请参见GNUWget的官网说明

2 Wget程序安装

在FreeBSD操作系统中安装Wget非常简便。可以通过Potrs手工编译来安装,也可以通过pkg来安装编译好的二进制程序包。

以root用户在命令行中输入pkg install wget,然后按照提示操作即可安装编译好的Wget程序。

wget使用镜像下载文件命令 wget 镜像网站_服务器

3 Wget常用功能

安装完后,运行 wget --help 命令查看程序帮助。

wget使用镜像下载文件命令 wget 镜像网站_wget使用镜像下载文件命令_02

从帮助信息中可以看出,Wget最简单的使用方式为在wget命令后面直接跟要下载的URL网络地址,那就随便找个地址输入一下看看吧。

同时,也会发现wget中可以设置的参数非常多,大体上分为启动参数、日志与输入文件、下载参数、目录参数、HTTP选项、HTTPS选项、FTP选项、FTPS选项、递归下载选项、递归接受、拒绝选项等等。如此数量的参数看着都让人头大,好在日常应用中涉及的参数不太多,下面结合常用的几个下载场景,对涉及到的选项进行简要说明。

(1)断点续传

短格式:-c

长格式:--continue’

断点续传是下载过程中最常用的功能,可以从以前下载的断点处继续下载而不是重新从头来过。这个参数常用于网络不稳定或者耗时较长的大文件下载,命令格式如下:

wget --continue http://localhost/index.html

(2)不生成主机前缀文件夹

短格式:-nH

长格式:--no-host-directories

在下载多个文件时,Wget会解析URL中的目录结构自动生成文件存储结构,默认会从主机开始生成文件夹。这个选项告诉Wget不要从主机以后生成文件夹,不要生成这个主机文件夹,命令格式如下:

wget --no-host-directories http://localhost/index.html

(3)调整扩展名

短格式:-E

长格式:--adjust-extension

如果下载的文件类型为“application/xhtml+xml”或“text/html”而URL却没有以正则表达式“\.[Hh][Tt][Mm][Ll]?”结尾时,这个选项会给文件名加下“.html”后缀,以保证文件类型的正确。这种方式在需要镜像一个网页文件不以html结尾的网站时会起到很大的作用。命令格式如下:

wget --adjust-extension http://localhost/index.html

(4)压缩下载

长格式:--compression=type

压缩下载选项只有一种长格式,用来选择传输过程中的压缩类型,可选项为“auto”、“gzip”和“none”。

如果定义为“auto”或者“gzip”,Wget会请求服务器使用gzip格式压缩这个文件。如果服务器压缩了这个文件,并在响应中加入了相应的“Content-Encoding”头域,接收到的文件将会被自动解压缩。

如果定义为“none”,Wget不会请求服务器压缩这个文件。这也是默认的压缩选项。

命令格式如下:

wget --compression=auto http://localhost/index.html

(5)设置用户代理字符串

短格式:-U agent-string

长格式:--user-agent=agent-string

这个选项设置发送给HTTP服务器的“User-Agent”头字段。HTTP协议允许浏览器通过“User-Agent”头域字段识别自己。服务器也可以通过这个字段来区分“WWW”软件,并进行客户追踪等。Wget通常使用“Wget/version”字符串来标记自己。然而,一些站点可能实施了根据用户代理信息来调整服务输出的策略,可能会拒绝向看起来不像是浏览器的的客户提供信息。此选项允许更改由Wget发布的用户代理头部行。当然,如非必要,最好要使用这个选项。命令格式如下:

wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0" http://localhost/index.html

(6)下载子文件夹

短格式:-r

长格式:--recursive

此选项开启递归下载,默认摸索的树深度为5级,如果要自定义树深度可以使用--level参数。

短格式:-l depth

长格式:--level=depth

此选项设置递归搜索的子文件夹的深度,可以避免下载较深的目录,此选项默认值为5,设置为“-l 0”或“-l inf”代表无限深度。

命令格式如下:

wget -r -l 0 http://localhost/index.html

(7)检查时间戳

短格式:-N

长格式:--timestamping

此选项用于比对文件的时间戳,只有修改时间发生变化了的文件才会被下载。这有利于节省网络带宽和等待时间,没有变化的文件不会被下载多次。命令格式如下:

wget -N  http://localhost/index.html
wget --timestamping http://localhost/index.html

(8)镜像下载

短格式:-m

长格式:--mirror

此选项用于网站或文件的镜像下载。此选项打开了递归下载、无限深度和时间戳检查选项,并且保持FTP目录列表显示,实际效果相当于“-r -N -l inf --no-remove-listing”,即自动进行无深度限制的递归搜索,检查文件的修改时间戳,只下载修改时间发生变化的文件。使用此选项需要注意的是Wget不会自动修改页面中的链接,网站原封不动的下载,原封不动的浏览。命令格式如下:

wget -r -N -l inf  http://localhost/index.html
wget --mirror http://localhost/index.html

(9)下载页面内联资源

短格式:-p

长格式:--page-requisites

此选项导致Wget去下载为显示这个页面所有必要的文件和资源,包括内联图像、声音、引用的样式表等,以保证离线时能正确地显示页面。通常,当下载单个HTML页面时,不会下载正确显示它所需的任何必要的文档。将“-r”和“-l”一起使用会有所帮助,但是由于Wget通常不区分外部文档和内联文档,因此通常不会下载这些缺少需求的“叶子文档”。下载页面所有资源命令格式如下:

wget --page-requisites http://localhost/index.html

(10)镜像网站+离线浏览

Wget可以用来下载一个完整的站点,自动转换页面链接以支持离线浏览。使用的选项如下:

--mirror:开启镜像所需要的所有选项。

--no-parent:在递归检索时,永远不要提升到父目录,只下载当前目录结构下的文件。

--convert-links:将所有链接转换成本地链接以便离线浏览。

--page-requisites:下载内联样式文件、图片等所有必需的文件。

命令格式如下:

wget --mirror --no-parent --convert-links --page-requisites http://localhost/
wget --recursive --level=inf --timestamping --no-parent --convert-links --page-requisites http://localhost/