wget 是一个功能强大的命令行工具,用于从网络上下载文件,支持 HTTP、HTTPS 和 FTP 等多种协议,它以其灵活的参数、断点续传功能和批量下载能力而广受 Linux 用户和系统管理员的青睐,本文将详细介绍 wget 命令的使用方法,包括基本语法、常用参数、实际应用场景以及一些高级技巧,帮助用户高效地完成文件下载任务。

wget 命令的基本语法非常简单,其格式为 wget [选项] [URL]。[选项] 是用于控制下载行为的参数,[URL] 是要下载文件的链接,最简单的使用方式是直接输入 wget https://example.com/file.zip,这会下载文件并保存在当前目录下,文件名与 URL 中的文件名一致,wget 会自动显示下载进度,包括已下载大小、总大小、下载速度和剩余时间等信息,让用户实时了解下载状态。
为了满足不同的下载需求,wget 提供了丰富的参数选项,以下是一些最常用且实用的参数:
| 参数 | 功能描述 |
|---|---|
-O 或 --output-document= |
指定下载文件的保存名称,wget -O newname.zip https://example.com/file.zip |
-P 或 --directory-prefix= |
指定文件保存的目录,wget -P /path/to/dir https://example.com/file.zip |
-c 或 --continue |
断点续传,如果下载中断,可以从上次停止的地方继续下载,适用于大文件或不稳定网络 |
-b 或 --background |
在后台执行下载任务,释放终端,适合长时间下载 |
-r 或 --recursive |
递归下载,可以下载整个网站或目录结构 |
-np 或 --no-parent |
递归下载时不返回上级目录,防止下载过多无关文件 |
-A 或 --accept= |
指定只下载特定扩展名的文件,-A pdf,jpg 只下载 PDF 和 JPG 文件 |
-q 或 --quiet |
静默模式,不显示任何输出,适合脚本中使用 |
-i 或 --input-file= |
从指定文件中读取 URL 列表进行批量下载,文件中每行一个 URL |
--limit-rate= |
限制下载速度,--limit-rate=100k 限制速度为 100KB/s |
-U 或 --user-agent= |
设置 User-Agent 头,用于模拟浏览器访问,防止被网站屏蔽 |
在实际应用中,这些参数经常组合使用以实现复杂的下载任务,要下载一个网站上的所有 PDF 文件,并限制下载速度,可以使用命令:wget -r -np -A pdf --limit-rate=200k https://example.com/docs/,这条命令会递归下载 https://example.com/docs/ 目录下的所有 PDF 文件,不返回上级目录,并将下载速度限制在 200KB/s,对于批量下载,如果有一个包含多个 URL 的文件 urls.txt,可以使用 wget -i urls.txt 来一次性下载所有文件。
wget 还支持通过 HTTP 认证下载受保护的文件,如果目标资源需要用户名和密码,可以使用 --http-user 和 --http-password 参数。wget --http-user=myuser --http-password=mypass https://example.com/protected/file.zip,对于 HTTPS 网站,wget 会自动验证 SSL 证书的有效性,以确保连接安全,如果需要忽略证书验证(不推荐,存在安全风险),可以使用 --no-check-certificate 参数。

wget 的另一个强大功能是镜像整个网站,使用 -m 或 --mirror 参数可以开启镜像模式,它会自动启用递归下载、时间戳保持、递归层级限制等选项,完整地复制一个网站的结构。wget -m https://example.com 会将 https://example.com 的所有内容下载到本地,并保持目录结构一致,这对于网站备份或离线浏览非常有用。
在编写自动化脚本时,wget 的静默模式和退出码功能尤为重要,使用 -q 参数可以隐藏所有输出,而通过检查 wget 的退出码可以判断下载是否成功,wget 在成功完成下载后退出码为 0,如果出现错误(如文件不存在、网络问题等),则会返回非零的退出码,在 Shell 脚本中可以这样使用:wget -q https://example.com/file.zip && echo "Download successful" || echo "Download failed",这种结构使得 wget 能够无缝集成到自动化流程中。
wget 还支持通过代理服务器进行下载,如果系统环境变量中设置了 http_proxy 或 https_proxy,wget 会自动使用它们,也可以通过参数直接指定代理,wget -e use_proxy=yes -e http_proxy=proxy.example.com:8080 https://example.com/file.zip,这对于在需要通过代理访问内网或特定网络的场景下非常有用。
相关问答FAQs:

问题1:wget 下载时提示“SSL certificate problem: unable to get local issuer certificate”,如何解决?
解答:这个错误通常是因为 wget 无法验证目标网站的 SSL 证书的有效性,可能是因为缺少本地根证书颁发机构(CA)的证书,解决方法有两种:一是暂时忽略证书验证(不推荐,存在安全风险),使用 wget --no-check-certificate https://example.com/file.zip 命令;二是安装或更新系统的 CA 证书包,例如在基于 Debian/Ubuntu 的系统上可以使用 sudo apt install ca-certificates 命令安装,在基于 RedHat/CentOS 的系统上可以使用 sudo yum install ca-certificates 命令安装,安装完成后,wget 就能够正确验证证书了。
问题2:如何使用 wget 下载一个网页中的所有图片?
解答:要下载网页中的所有图片,可以结合 wget 的递归下载和文件过滤功能,使用 wget -r -np -l1 --accept=jpg,jpeg,png,gif -H https://example.com 命令,参数解释如下:-r 表示递归下载,-np 表示不返回上级目录,-l1 将递归深度限制为 1 层(只下载当前页面的资源),--accept=jpg,jpeg,png,gif 指定只下载这些扩展名的图片文件,-H 允许下载跨域主机(如果图片链接指向其他域名)的文件,这样 wget 就会抓取指定网页及其在同一域名下的所有图片文件。
