wget适合单纯下载(支持重试、断点续传),curl适合需控制请求头、认证或调试;wget默认保留文件名并自动处理重定向,curl需显式指定-o/-o输出。

直接用 wget 或 curl,别犹豫——wget 更适合单纯下载文件(尤其带重试、断点续传),curl 更适合需要控制请求头、登录态或调试场景。
用 wget 下载单个文件最稳
它默认保留远程文件名,自动处理重定向,还自带断点续传。常见坑是没加 -O 却误以为文件名可自定义,结果下出一堆 index.html。
- 基础下载:
wget https://example.com/file.zip→ 保存为file.zip - 改名保存:
wget -O archive.tar.gz https://example.com/v6.4.5.tar.xz - 断点续传(必须本地已有同名不完整文件):
wget -c https://example.com/big.iso - 限速防占满带宽:
wget --limit-rate=2m https://example.com/debian.iso - 静默模式(脚本里避免干扰输出):
wget -q https://example.com/status.json
用 curl 下载要显式指定输出
curl 默认把响应体打到终端,不写 -o 或 -O 就等于“白下”。它对 cookie、header、POST 的支持更原生,但纯下载反而多一步。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 按远程名保存:
curl -O https://example.com/script.sh→ 保存为script.sh - 自定义名保存:
curl -o config.yml https://api.example.com/v1/config - 带认证下载:
curl -u "user:pass" -O https://private.example.com/secret.pdf - 跳过 SSL 错误(仅测试环境):
curl -k -O https://self-signed.example.com/file - 失败时不输出内容(脚本判断用):
curl -f -s -o /dev/null https://health.example.com
批量下载多个文件得靠文本列表
别手敲几十条命令。wget -i 和 curl -K 都支持从文件读 URL,但 wget 更常用、容错更强。
- 准备 URL 列表(每行一个):
printf "%s\n" "https://a.com/1.jpg" "https://a.com/2.jpg" > urls.txt - 批量下载(自动重试 + 进度):
wget -i urls.txt -t 3 -nv - 如果 URL 带空格或特殊字符,
wget会报错;先用sed 's/ /%20/g' urls.txt > safe_urls.txt编码再下 -
curl批量需配合 shell 循环:while read u; do curl -s -f -o "$(basename "$u")" "$u"; done ,但无内置重试逻辑
下载网页本身(HTML)容易忽略编码和重定向
直接 wget http://site.com 可能下到乱码或跳转后的页面,尤其含中文路径或服务端强制 HTTPS 时。
- 保存 HTML 并保持可读性:
wget -E -H -k -p http://site.com(启用 HTML 转换、跨域抓取、相对链接修复、加载资源) - 只取 HTML 源码不存附件:
wget -q -O page.html http://site.com - 处理 301/302 跳转后的内容:
wget -L -O final.html http://short.url(-L必须加) - 遇到 gzip 压缩返回却显示乱码?加上
--compression=auto(wget ≥1.21)或用curl -H "Accept-Encoding: identity" -o page.html
真正麻烦的从来不是“能不能下”,而是服务器是否允许你下——robots.txt 限制、User-Agent 拦截、Referer 校验、登录态缺失。这些不会报错,只会给你一个空文件或 403 页面。先用 curl -I 看响应头,再决定要不要加 --user-agent、--referer 或 --load-cookies。










