linux wget命令详解

Linux wget 命令行工具是一个漂亮的实用程序,用于通过 Internet 下载文件。当您想从网站下载 tarball 和压缩文件、deb 和 rpm 包时,通常会使用它。使用 wget 命令,您可以通过 HTTP、HTTPS 甚至 FTP 协议下载文件。您可以与 wget 命令一起使用的许多选项使其功能强大。

在本教程中,我们将通过示例了解如何使用 GNU wget 命令。

wget 的语法

使用 wget 的语法非常简单。只需调用 wget 命令,然后是选项,然后是网站链接,如图所示。

$ wget [ options ] url

安装 wget

大多数现代 Linux 发行版都附带 wget 实用程序,因此您不需要安装它。但是,在某些情况下可能需要安装,尤其是在较旧的系统和某些云实例中,或者解决“–bash:wget:Command not found”错误消息。

对于 Ubuntu 和 Debian 风格,使用 APT 包管理器运行以下命令:

$ sudo apt-get install wget

要在 RHEL / CentOS 8 版本中安装 wget 命令,请执行:

$ sudo dnf install wget

对于旧版本,(RHEL 7 和 CentOS 7 及更早版本)使用 yum 包管理器,如下所示

$ sudo yum install wget

对于 Arch Linux 和 Arch Linux 发行版,例如 Manjaro、Arch Linux 和 Endeavor OS,请使用 pacman 包管理器,如下所示:

$ sudo pacman -S wget

从网上下载文件

在最基本的形式中,wget 命令不使用任何选项,从 URL 中指定的 Internet 下载文件。最简单的语法如下所示:

$ wget website_url

例如,在下面的示例中,我们从官方 WordPressLinux 站点下载最新的 WordPress tarball。

$ wget https://wordpress.org/latest.tar.gz

从输出中我们可以看到,wget 首先将网站的域解析为 IP 地址,然后连接到服务器,然后启动文件传输。下载过程中,您会看到进度条,显示文件名、大小、下载速度以及预计下载完成时间。

下载完成后,请务必在您当前的工作目录中找到该文件。这可以通过调用ls 命令来验证。

下载文件并以特定名称保存

如果您希望以与原始名称不同的名称保存文件,只需传递-O选项后跟您的首选名称即可。

$ wget -O wordpress.tar.gz https://wordpress.org/latest.tar.gz

上述命令从 WordPress 站点下载原始文件“latest.tar.gz”并将其保存为“wordpress.tar.gz”。

下载到指定目录

如前所述,wget 将文件下载到您当前的工作目录。您可以使用-P后跟目标目录路径的标志来指定不同的下载位置。

$ wget -P /var/www/html https://wordpress.org/latest.tar.gz

在上面的示例中,文件保存在 /var/www/html 目录中。

限制下载速度

使用 wget,您还可以限制下载文件的速度。要限制下载速度,请调用--limit-rate后跟下载速度的选项。速度通常以每秒字节数来衡量。

要将限制速率设置为 500KB/s,请运行以下命令:

$ wget –limit-rate=500k https://wordpress.org/latest.tar.gz

如何继续获取部分下载的文件

有时在文件下载过程中,您的连接可能会突然中断,留下部分下载的文件。不要重新开始下载,而是使用 wget-C选项继续下载,如图所示。

$ wget -c https://wordpress.org/latest.tar.gz

在上面的示例中,我们正在恢复从 WordPress 下载 tarball 文件的文件。请注意,如果网站没有响应恢复文件下载,则该命令将重新开始下载文件并覆盖现有文件。

在后台下载文件

要在后台下载文件,请传递 wget-b选项,如下所示。

$ wget -b https://osdn.net/projects/manjaro/storage/kde/20.0.3/manjaro-kde-20.0.3-200606-linux56.iso

在上面的例子中,我们在后台下载 Manjaro KDE Plasma ISO 文件。要监控下载状态,请使用 wget log 命令,如下所示

$ tail –f wget –log

下载多个文件

如果你有多个文件要下载,在终端上重复运行 wget 命令很麻烦。更好的方法是运行 wget 命令一次以一个接一个地下载文件。

为此,请将网站 URL 保存在文本文件中。此后,使用-i后跟文本文件名称的选项调用 wget 命令。

在本例中,我们要下载 WordPress tarball 文件和 OwnCloud 压缩文件。首先,我们将下载链接保存到一个示例文件中,我们称之为“downloads.txt”:

https://wordpress.org/latest.tar.gz
https://download.owncloud.org/community/owncloud-complete-20200731.zip

现在,要下载多个文件,请运行:

$ wget -i downloads.txt

这些将一个接一个地下载。这就是您下载多个文件的方式。

下载一个网站的镜像

wget 的另一个不为人知的用途是克隆或制作网站的镜像副本的能力。您可以通过传递-m选项来实现这一点,如图所示。这会创建网站的镜像副本以及所有内部链接和其他资源,例如图像、小部件、Javascript 和 CSS 文件。

$ wget -m http://www.example.com

如果您打算克隆一个网站以进行本地浏览,请传递额外的参数,如图所示。

$ wget -m -k -p http://www.example.com

-k标志有助于将链接转换为适合本地查看的格式。同时,该-p选项指示 wget 实用程序下载在浏览器上的 HTML 页面上显示内容所需的相关文件。

忽略 SSL 证书

为了避免在从 SSL 证书不受信任或无效的 Web 服务器通过 HTTPS 下载文件时遇到错误,请传递--no-check-certificate选项:

$ wget --no-check-certificate https://domain-with-untrusted-ssl-cert

下载并将输出重定向到日志文件

可以使用-o如下所示的选项在文件下载期间记录 wget 命令的输出:

$ wget -o download.log https://wordpress.org/latest.tar.gz

此后,您可以在下载过程中使用 tail 命令实时查看日志文件,如下所示:

$ tail -f download.log

限制下载重试

有时,您可能会遇到缓慢的带宽速度,这可能会阻止您下载文件。您可以使用 wget--tries=[no. of tries]选项设置下载重试次数,如下所示:

$ wget --tries=10 https://wordpress.org/latest.tar.gz

在上面的例子中,get 会在退出前重试下载 tarball 文件 10 次。

从 FTP 服务器下载

您还可以从 FTP 服务器下载文件,即使文件受密码保护。您需要做的就是在 wget 命令中传递 ftp 用户名和密码,如下所示:

$ wget --ftp-user=[ftp_user] --ftp-password=[ftp_password] ftp://ftp.ftp-site.com

更改 wget 用户代理

用户代理本质上是一个由浏览器发送到 Web 服务器的标头字段。如果您正在下载网页,wget 将模拟 Web 浏览器。有时,您会收到一条错误消息,表明您没有足够的权限访问服务器。发生这种情况时,可能是网站或 Web 服务器阻止了与特定“用户代理”关联的浏览器。这是您可以找到的用户代理数据库。

要更改用户代理,请使用以下语法:

$ wget -U "user agent" URL

例如,要在模拟 Google Chrome 74 版(最新版本)的同时下载网站 example.com,请使用:

$ wget -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "http://example.com"

递归下载

要下载一个网站,本地查看,你需要打开递归下载-r--recursive选项和链接转换为本地链接-k--convert-links选项。

例如:

$ wget -rk https://example.com

结论

正如您所观察到的,wget 是一个功能强大且灵活的工具,您可以使用它从 Internet 获取文件。在本教程中,我向您展示了使用 wget 的各种方法,以及如何通过 http、https 和 ftp 从 Web 服务器下载文件和网页。有关 wget 命令用法的更多信息,请访问手册页

13个用好Linux的建议
Linux命令后台运行
标签:
ajax-loader