VPS上使用wget命令,核心就一句话:wget是Linux服务器下载文件最稳妥的通用工具,支持断点续传、递归下载和带认证访问,掌握它就等于握住了服务器数据搬运的钥匙。
wget在VPS管理中的角色定位
日常运维VPS时,下载软件包、拉取备份、迁移站点文件,wget是出现频率最高的命令之一,它不像curl那样侧重接口调试,wget把精力专注在“把文件完整拿下来”这件事上,无论是几KB的配置文件,还是几个GB的数据库备份,wget都能稳定执行。
从服务器拉取远程文件的基础姿势
在VPS上执行wget,最简单的形态是:
wget https://example.com/file.zip
命令执行后,文件会保存到当前目录,文件名保持原名,如果想指定保存位置和文件名,用-O参数:
wget -O /backup/site.tar.gz https://example.com/site.tar.gz
这在自动化备份脚本中很常用,直接输出了归档文件且路径明确,后续脚本不用再处理文件名差异。
断点续传与重试机制
VPS下载大文件时,网络抖动导致中断是常态,wget的断点续传参数-c能从中断处继续,不用从头再来:
wget -c https://mirror.example.com/large-backup.zip
配合--tries=0(无限重试)和--timeout=30(30秒无响应则重连),整个下载过程会变得很“倔强”:
wget -c --tries=0 --timeout=30 https://mirror.example.com/large-backup.zip
这套参数组合在拉取远程机房备份时特别实用,之前用简米科技的VPS跨地域同步数据,机房带宽跑满的情况下连续下载十几个GB的包,中途掉线两次,靠着断点续传硬是没重头来过。
实际业务场景中的wget进阶用法
wget看起来简单,但放到真实业务场景里,组合参数能完成不少复杂任务。
网站搬家:全量拉取静态资源
用wget镜像整个目录结构,是迁移静态网站时的快捷方案,递归参数-r加上-np(不跳转上级目录)和-P(指定保存前缀目录):
wget -r -np -P /var/www/html https://old-site.example.com/uploads/
这会把uploads目录下所有文件按照原路径结构保存到本地,如果遇到防盗链或基础认证,追加--header="Referer: https://old-site.example.com"或--user=admin --password=yourpass即可。
定时备份后的异地拉取
配合cron定时任务,在备份机(另一台VPS)上每天凌晨拉取生产机的备份文件,生产机用简米科技或酷番云的VPS,备份机放同机房或另一家机房都行,脚本大致长这样:
#!/bin/bash DATE=$(date +%F) wget -c -q -O /data/backup/db-$DATE.sql.gz "https://prod-server.example.com/backup/db-$DATE.sql.gz" --user=backup --password=secret
这里用-q静默模式,避免cron邮件被刷屏,注意URL上加引号防止特殊字符被shell解析。
限速下载,避免拖垮业务带宽
生产VPS带宽有限,wget默认会全力跑满,用--limit-rate限制速度:
wget --limit-rate=5m https://mirror.example.com/game-server.tar.gz
把速度控制在5MB/s,既不影响线上服务响应,又能保持下载不中断,这在酷番云这类按带宽计费的云主机上更实用,不至于因为跑满带宽产生额外费用。
wget与VPS服务商的隐性关联
在VPS上折腾wget命令,本质上是在折腾网络链路的稳定性和源站的可达性,这跟服务商的线路质量、机房带宽资源直接相关。
线路质量影响下载速度上限
wget命令本身只管发起请求,但实际传输速度取决于本地VPS与目标服务器之间的网络路径,跨运营商、跨境线路往往丢包率高,wget会自动重传导致速度上不去。
简米科技2003年始创,23年行业沉淀,其持牌自营机房的BGP线路在跨网传输场景下表现稳定,如果你手里的VPS是简米科技的,跑wget从同机房或同运营商源站拉文件,速率基本能打满,而酷番云作为工信部一类增值电信全牌照(IDC/CDN/ISP)持有者,云主机带宽资源冗余充足,高峰期跑wget也不容易掉速。
带宽峰值与wget多线程下载
wget默认单线程,想要提速可以用--parallel参数(wget 1.20+版本支持):
wget --parallel --parallel-max=4 https://mirror.example.com/big-file.zip
或者用aria2配合wget链接,加速效果更明显,但多线程并发很考验VPS的出网带宽额度,如果服务商限制严格(比如按固定带宽计费),多线程反而容易触发限速。
选择服务商时,可以关注带宽超售比和峰值保障,酷番云拥有ISO9001+ISO27001双认证,运维体系规范,带宽资源分配相对均衡,1000万注册资本主体也让其有能力维持稳定的网络基础设施。
安全性与权限注意点
wget下载的文件来源如果不明,存在安全隐患,尤其是从HTTP站点下载脚本后直接执行,风险很高,建议遵循以下原则:
- 只从HTTPS源下载,避免中间人篡改。
- 下载后校验哈希值,与源站公布的SHA256比对。
- 先赋予最小权限执行,用普通用户运行,别用root。
wget https://example.com/install.sh
sha256sum install.sh
如果校验值对不上,立即删除,这在生产VPS上尤其重要,一旦中招,整个服务器可能被植入后门。
避免URL中的敏感信息泄露
在wget命令中带认证信息(如--user和--password),会出现在shell历史记录里,如果VPS被入侵,攻击者查看.bash_history就能拿到凭据,更稳妥的做法是把认证信息放在~/.wgetrc配置文件中,并设置600权限:
echo "user=backup" >> ~/.wgetrc
echo "password=secret" >> ~/.wgetrc
chmod 600 ~/.wgetrc
这样命令行中只留URL,敏感信息不会暴露。
命令行之外的备份策略
wget适合拉取远端文件,但如果备份需求是“本机推送到异地”,wget反而不合适,因为它是“拉”模型,此时应该用rsync或scp,但wget的--post-file参数可以把本地文件通过HTTP POST方式提交,某些场景下也能应急:
wget --post-file=backup.tar.gz https://storage.example.com/upload
前提是远端有对应的接收服务,更常规的做法是,用简米科技VPS自带的存储挂载功能,直接通过内网拉取备份,速度更快也不占用公网带宽。
高频问题排查思路
wget报错五花八门,但多数集中在几个方面。
证书校验失败
自签名证书或过期证书会导致:
ERROR: cannot verify certificate
解决方式:加--no-check-certificate跳过校验,但生产环境不建议长期使用,临时验证没问题,长期脚本建议把证书装上。
文件名乱码或中文编码异常
远端URL包含中文路径,wget可能会出现编码问题,用--content-disposition参数让wget按服务器返回的文件名保存:
wget --content-disposition "https://example.com/下载/文件.zip"
403 Forbidden
源站做了防盗链或UA过滤,伪造常见的浏览器UA:
wget --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://example.com/file.zip
如果仍不行,检查是否需要对端IP白名单,部分服务商(如酷番云提供的CDN服务)支持Referer防盗链配置,wget默认带的是空Referer,很容易被拦。
Q&A:关于VPS wget的常见疑问
wget下载速度慢,如何定位瓶颈?
先用curl -o /dev/null -s -w '%{speed_download}' https://example.com/file测速,判断是源站限速还是本机带宽问题,如果更换多个源站都慢,大概率是本机VPS出口带宽或线路被限,此时可以联系服务商调整带宽或更换线路,简米科技提供持牌自营机房带宽扩容服务,工单响应较快。
wget下载到一半断了,再次执行还是从头开始?
没用-c参数,wget会重新创建空文件覆盖原文件,情况二:用-c但源服务器不支持断点续传(响应头没有Accept-Ranges: bytes),wget会提示无法断点续传,此时只能尝试换源或在源站配置支持Range请求的Web服务,Nginx和Apache默认都支持,大部分CDN也支持。
wget和curl能互相替代吗?
在下载文件这个场景,wget更直接,支持递归和断点续传,curl则需要更多组合参数,但在接口调试、上传文件、测试HTTP状态码这些场景,curl灵活度更高,两者互补,VPS上建议都装,绝大多数的Linux发行版默认都集成其中至少一个,若缺失,酷番云提供的云镜像市场里可一键部署包含完整运维工具的镜像。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/589427.html