myfreax

Linux wget 命令下载文件与详解

GNU Wget 是一个命令行程序,用于从 Web 站点下载文件。Wget 可以让您可以使用HTTP,HTTPS和 FTP 协议下载文件

8 min read
By myfreax
Linux wget 命令下载文件与详解
Linux wget 命令下载文件与详解

GNU Wget 是一个命令行程序,用于从 Web 站点下载文件。Wget 可以让您可以使用HTTP,HTTPS和 FTP 协议下载文件。

wget 命令提供了许多选项,允许您下载多个文件,恢复下载,限制速度,递归下载,在后台下载,镜像网站等等。

在本教程中,我们将向你说明如何在 Linux 使用 wget 命令下载文件,以 wget 命令常见的实例介绍 wget 的用法。

安装 wget

wget 命令现已预安装在大多数 Linux 发行版,要检查系统是否已安装 wget。请按快捷键 CTRL+ALT+T 打开终端,运行wget命令。

如果已安装wget,终端打印错误消息 wget: missing URL,否则打印消息 wget command not found。

如果你的计算机运行的是基于 Debian 的 Linux 发行版。例如 Linux mint,Ubuntu。请运行命令 sudo apt install wget 安装 wget。

如果你的计算机运行的是基于 RedHat 的 Linux 发行版。例如 CentOS,Fedora。请运行命令 sudo yum install wget 安装wget。

sudo apt install wget
sudo yum install wget

wget 命令详解

在介绍如何使用 wget 命令之前,让我们先回顾一下基本语法。wget 命令语法形式是wget [options] [url]

options wget 命令的选项,可选参数。url 远程服务器 URL,也是可选参数。

在不指定任何参数与选项运行 wget 命令时,wget 命令下载 URL 指向的文件资源到当前目录。

在下载过程中,wget 会显示进度条以及文件名,文件大小,下载速度和完成下载的预计时间。

如果不需要这些 wget 命令的信息输出,可以使用 -q 选项关闭,该选项经常用于在 Shell 脚本的编程。

下载完成后,可在当前工作目录中找到下载的文件。如果当前目录存在同名文件,wget 命令将在文件名末尾追加数字,不会覆盖已存在的文件。

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.17.2.tar.xz

wget 命令指定保存文件的名称

要以不同的名称保存 wget 下载的文件,在 wget 可以有两种方式做到此操作,一种是使用 -O 选项。

另一种是将 wget 下载的文件写入到标准输出,然后使用标准输出重定向符号 > 写入到文件中。

通常在使用 wget 下载文件时,Linux 系统管理员也会指定 -c 选项下载文件,这可以使得你在下载断开连接时,可以恢复下载。

wget -cO myfreax.com https://www.myfreax.com/
wget -cO - https://www.myfreax.com/ > myfreax.com

wget 命令指定保存目录

要指定不同目录保存下载的文件,请使用 wget 命令的 -P 选项,后跟要保存文件的目录。

目录的路径可以是相对路径或者绝对路径。如果指定目录不存在,wget 命令将会创建该目录。

还有一点值得一提的是,wget 命令的 -P 选项是真的只能指定保存的目录,要同时指定保存文件的目录和名称请使用  -O 选项。

通常在使用 wget 下载文件时,Linux 系统管理员也会指定 -c 选项下载文件,这可以使得你在下载断开连接时,可以恢复下载。

wget -cP /home/myfreax/test https://www.myfreax.com/

wget 命令限制下载速度

要限制下载速度,请使用 wget 命令的 --limit-rate 选项,选项值的默认单位是字节,也可以指定单位 千字节 k 和兆字节 m。

--limit-rate 选项不仅接受整数,也可以接受一个浮点数,例如 --limit-rate=2.5k 是合法的值。

请注意,wget 通过是采用休眠适当的时间来实现限制网络速度,从而使 TCP 传输以减慢到大约指定的速率。

然而在下载文件并不是真的会以非常准确速度下载,因为达到这种平衡需要一些时间,所以如果限制速率不能很好地工作,请不要感到惊讶。

wget --limit-rate=1m url

wget 命令断点续传/恢复下载

如果您在下载大文件期间断开连接,则无需重新开始下载,可以使用 wget 命令的 -c 选项恢复上一次的下载。

也可以在第一次下载文件时直接指定 -c 选项,当下载大文件断开连接时,直接使用之前的命令即可恢复下载。

也可以创建 wget 命令的别名,这样就可以不必每次使用下载文件时重复指定 -c 选项,这是一个好的习惯。

但有一点值得注意点是,wget 命令的恢复下载需要服务器端支持断点续传,否则wget 会重新开始下载文件。

wget -c url

wget 命令后台下载

wget 命令 -b 选项允许你在后台下载文件。这在下载大文件时非常有用。在后台下载时。

wget 命令的下载状态,也就是 wget 命令的标准输出将会被重定向到当前目录的 wget-log 文件。

要查看 wget 命令的下载进度等信息,可以运行 tail 命令 tail -f wget-log 查看wget 命令的下载状态。

wget -cb url
tail -f wget-log

wget 命令下载 FTP 服务器文件

wget 命令除了支持 HTTP 协议之外,还支持 FTP 协议文件下载,以及列出 FTP 服务器的文件。

要从受密码保护的 FTP 服务器下载文件时,您需要指定 FTP 用户名和密码。使用wget 命令的 --ftp-user--ftp-password 选项。

wget --ftp-user=FTP_USERNAME --ftp-password=FTP_PASSWORD ftp://ftp.example.com/filename.tar.gz

wget 命令下载多个文件

如果要一次下载多个文件,可以有两种方式,一种是直接指定多个 URL 在单个命令。另一种是使用wget 命令的 -i 选项指定包含 URLS 的文件。

要使用 wget 命令的 -i 选项,请在后面指定要下载包含 URL 的文件。在此文件的每个 URL 都需要独占一行。

例如命令 wget -i linux-distros.txt 下载 linux-distros.txt 文件包含的 URL 资源。

wget URL1 URL2 
wget -i linux-distros.txt
http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso
https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso
https://download.fedoraproject.org/pub/fedora/linux/releases/28/Server/x86_64/iso/Fedora-Server-dvd-x86_64-28-1.1.iso
linux-distros.txt

wget 命令下载并解压与标准输出

这是非常节省时间的高级技巧,它允许你一边下载一边解压。除了解压之外还可以做你任何想做的事,只要管道右侧的命令允许从标准输入读取数据即可。

要做到边下载边解压,需要使用 wget 命令 -q 选项关闭下载状态的标准输出,然后组合使用 wget 命令 -O 选项,指定标准输出作为文件。

在 wget 当使用连字符 - 作为文件时,则使用标准输出作为写入的文件,最后通过管道 | 传递给 tar 命令。

tar 将 wget 命令下载文件解压缩到指定目录。 -C 选项指定写入的目标目录,参数 - 选项表示从标准输入读取数据。

wget -q -O - "http://wordpress.org/latest.tar.gz" | tar -xzf - -C /var/www

wget 命令指定用户代理 User-Agent

你应该遇到在使用不同浏览器时,有的浏览器可以下载,或者某个浏览器不能下载的情况。或者根据访问者的设备和浏览器,提供的不同页面内容。

这是因为服务器程序根据用户代理User-Agent 进行区分用户的设备类型,从而确定返回不同的内容或者阻止你的下载与访问。

为了避免服务器根据访问者的 User-Agent 用户代理提供不同内容。请使用 wget 命令的  -U 选项指定 User-Agent 用户代理。

wget --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" http://wget-forbidden.com/

结论

至此,您应该对最常见的 wget 选项有一个很好的理解,并且能够使用 wget 载多个文件,恢复下载,根据您的需要组合 wget 选项。