在Linux服务器的日常运维中,从网络上下载文件、拉取脚本或同步数据是再寻常不过的操作。虽然现在的服务器上大多可以使用`curl`,但Wget依然是大多数运维人员最喜欢的命令行下载工具。
Wget全称是"World Wide Web"与"Get"的结合,它支持HTTP、HTTPS和FTP协议,最大的特点是非交互式——它可以在用户退出系统后于后台继续运行,并且具备极其强大的断点续传和递归下载能力。无论是编写自动化部署脚本,还是从海外源拉取大型依赖包,Wget都是不可或缺的利器。
本文将从最基础的下载命令开始,逐步拆解Wget的核心进阶用法与排错技巧。
基础操作:下载与保存
最简单的用法就是直接跟上目标文件的URL:
wget https://example.com/software.tar.gz
执行后,Wget会将文件下载到当前目录,并在终端显示实时进度条(包含已下载大小、速度、预计剩余时间)。
自定义保存文件名(`-O`)
如果原链接的文件名是一串无意义的字符(如`download.php?id=123`),你可以强制重命名:
wget-O custom_name.tar.gz https://example.com/download.php?id=123
*(注:`-O`后面跟大写字母O。如果是下载多个文件,使用小写`-o`则是将下载日志输出到指定文件,而非显示在屏幕上。)*
断点续传(`-c`)
下载几个G的大型数据集时,网络一旦中断,重新开始会让人崩溃。使用`-c`参数,Wget会检测当前目录下的同名文件,并从中断的地方继续下载:
wget-c https://example.com/large_dataset.zip
这是Wget最核心的救命功能,强烈建议在下载大文件时默认带上这个参数。
运维实战:限速、后台与自动化
1.限制下载速度(`--limit-rate`)
在生产服务器上,如果无限制地使用带宽拉取文件,可能会挤占正常业务流量。使用`--limit-rate`控制速度,单位支持k(KB/s)和m(MB/s):
wget--limit-rate=2m https://example.com/video.mp4
2.后台静默下载(`-b`)
当你需要下载超大文件,且不想一直守着终端窗口时,加上`-b`参数让其转入后台:
wget-b https://example.com/huge_file.iso
Wget会在当前目录创建一个`wget-log`文件,你可以随时用`tail-f wget-log`查看下载进度。
3.忽略SSL证书错误(`--no-check-certificate`)
有时候下载内部测试服务器的文件,由于使用的是自签名证书,Wget会报错并拒绝下载。如果确认目标安全,可以强制跳过证书校验:
wget--no-check-certificate https://internal.test.com/patch.zip
4.设置重试与超时(`--tries`/`--timeout`)
在跨国网络环境(如从国内服务器下载美国源站的文件)时,链路不稳定容易导致连接超时。默认重试次数是20次,你可以自定义时间和次数:
wget--tries=3--timeout=15 https://example.com/file.zip
这表示单次连接超过15秒无响应就判定超时,总共重试3次。
高级进阶:伪装请求与递归镜像
1.自定义请求头(Header)与User-Agent
很多海外站点会拦截默认的Wget请求。你可以伪装成浏览器来绕过封锁:
wget--user-agent="Mozilla/5.0(Windows NT 10.0;Win64;x64)"https://example.com/protected_file.zip
或者携带特定的Referer请求头:
wget--referer=https://google.com https://example.com/file.zip
2.下载需要认证的站点
如果是HTTP基础认证,可以通过参数直接传入账号密码:
wget--http-user=admin--http-password=yourpassword https://example.com/secure/
3.递归镜像整个目录(慎用)
Wget可以像爬虫一样,将目标站点的特定目录全部抓取到本地(常用于离线备份文档):
wget-r-np-k-p https://example.com/docs/
`-r`:递归下载
`-np`:不追溯父目录(避免无限抓取)
`-k`:下载完成后,将HTML里的绝对链接转换为相对链接,方便离线浏览。
`-p`:下载页面所需的所有资源(图片、CSS)。
避坑指南:如何写出稳妥的自动化脚本?
在编写自动化脚本(如Shell或Python)时,直接`wget`是有风险的。如果文件404或者网络断开,脚本可能会挂起。建议加入以下习惯:
1.使用`-q`(安静模式)并判断退出状态码:
if wget-q https://example.com/file.zip;then
echo"下载成功,继续下一步"
else
echo"下载失败,终止脚本"
exit 1
fi
2.配合代理下载:如果服务器处于内网环境,可以用`export http_proxy=...`设置环境变量,或者在wget中使用`-e use_proxy=yes`。
下载速度的最终瓶颈:网络底座与I/O
熟练掌握Wget的参数后,你会发现,决定大文件下载效率的,往往不再是工具本身,而是服务器的底层网络和存储性能。
如果你在Jtti的服务器上使用`wget`从海外源拉取大模型权重或大型数据集,你的下载速度会直接受限于国际出口的带宽质量和丢包率。普通国际线路在晚高峰时,极容易因为丢包导致TCP频繁重传,Wget进度条会卡住甚至直接超时。
Wget虽然只是命令行里的一行指令,但它背后的效率取决于你把它架在什么样的网络基石上。从`-c`的断点续传到`-b`的后台静默,这些技巧能让你的运维工作更加从容;而配合Jtti的高速网络与NVMe磁盘,则能让你的每一次下载都快人一步。访问Jtti官网,查看适合高并发下载与大流量业务的高性能云服务器方案。