curl 下载是什么
curl 既能发任意请求,也能当下载器用:-o 指定保存名、-O 沿用 URL 里的文件名、-C - 从断点续传、--limit-rate 限速。相比 wget,curl 的下载能力偏基础,但胜在与调试选项同一套命令,脚本里取包、下载日志、拉取证书吊销列表都常用它。
基本信息
| 适用平台 | Linux/Unix/Windows 通用(curl 几乎无处不在) |
|---|---|
| 命令语法 | curl [-o 文件|-O] [-C -] [--limit-rate 速率] URL |
| 常用选项 | -o 指定输出名 -O 用 URL 文件名 -L 跟随重定向 -I 只看响应头 -f HTTP 错误返回非零 --retry 失败重试 --retry-delay 重试间隔 |
| 完整性 | curl 不校验内容,下载后要用 sha256sum 核对 |
| 静默约定 | -s 静默进度、-S 保留错误信息,脚本里通常写成 -sS |
典型使用场景
- 发布流程拉取安装包并校验哈希
- 大文件断点续传:网络中断后用 -C - 接着下
- 限速下载:避免占满生产带宽影响业务
- 脚本探测:-I 只看响应头确认资源是否存在与大小
- 自动化重试:加 --retry 应对临时网络抖动
常用示例
常用示例
curl -sS -O https://example.com/app.tar.gz # 沿用 URL 文件名
curl -sS -o app.tar.gz https://example.com/download/latest # 指定保存名
curl -sS -C - -o big.iso https://example.com/big.iso # 断点续传
curl -sS --limit-rate 500k -O https://example.com/data.bin # 限速 500KB/s
curl -sS -L -o app.tar.gz https://example.com/go # 跟随重定向后下载
curl -sSI https://example.com/app.tar.gz | head -n 8 # 只看响应头
curl -sSf --retry 3 --retry-delay 2 -O https://example.com/app.tar.gz # 失败重试
curl -sS -O https://example.com/app.tar.gz && sha256sum app.tar.gz # 下载后校验下载相关选项读法
| 选项 | 作用 | 注意 |
|---|---|---|
| -o 文件 | 指定保存文件名 | 最可控,脚本里优先用 |
| -O | 用 URL 最后一段作为文件名 | URL 带查询串时会存成怪名字 |
| -C - | 从上次中断的位置续传 | 需要服务端支持 Range |
| --limit-rate | 限制传输速率 | 单位可为 k 或 m |
| -I | 只取响应头不下载正文 | 用于探测是否存在与文件大小 |
| -L | 跟随 3xx 重定向 | 配合 -O 时文件名仍来自原始 URL |
| -f | HTTP 错误返回非零退出码 | 脚本判成败的关键开关 |
服务端不支持 Range 时 -C - 会从头下载或报错:先 curl -I 看响应头里有没有 Accept-Ranges: bytes,或在正式下载前用小文件试一次续传。
大文件下载完成后务必校验:curl 默认不校验完整性,网络中断重试或代理缓存都可能留下损坏文件。用发布方提供的 sha256 摘要核对,比「能解压」更可靠——压缩包损坏有时只在深层文件才暴露。
镜像站与发布页给的链接常带查询串和重定向:先 curl -sSI 看到最终地址、状态码与内容长度,再用 -o 明确命名下载。注意 -o 指定的文件已存在时会直接覆盖,脚本里应先判断文件是否存在、是否需要保留旧版本。