在 Linux 系统中,文件下载是日常运维和开发中的常见需求,相较于图形界面的下载工具,命令行工具以其高效、稳定和可脚本化的优势备受青睐,curl 凭借其强大的功能、灵活的参数和广泛的支持,成为 Linux 环境下下载文件的首选工具之一,本文将详细介绍 curl 在 Linux 中的下载功能,从基础用法到高级技巧,帮助用户全面掌握这一实用工具。

curl 基础:认识与安装
curl 是一个利用 URL 语法在命令行下传输数据的工具,支持 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等多种协议,不仅可以下载文件,还能上传数据、模拟表单提交、与 API 交互等,在大多数 Linux 发行版中,curl 通常默认安装,用户可通过终端输入 curl --version 检查是否已安装,若未安装,可根据不同发行版使用包管理器进行安装:在基于 Debian/Ubuntu 的系统中,可通过 sudo apt update && sudo apt install curl 安装;在基于 RHEL/CentOS 的系统中,可使用 sudo yum install curl 或 sudo dnf install curl;在 Arch Linux 中,则可通过 sudo pacman -S curl 安装。
基础下载:单文件与简单操作
curl 最基础的用法是直接在命令后跟上 URL,即可下载文件,下载一个名为 example.txt 的文本文件:
curl http://example.com/example.txt
默认情况下,curl 会将文件内容输出到终端界面,而非保存为文件,若需保存文件,可通过 -o(小写)或 -O(大写)参数实现:
-o:指定保存的文件名,curl -o myfile.txt http://example.com/example.txt,文件将保存为当前目录下的myfile.txt;-O:使用 URL 中的默认文件名,curl -O http://example.com/path/to/example.txt,文件将保存为example.txt。
-L 参数常用于处理重定向(如 HTTP 301/302 跳转),确保下载到最终目标文件:
curl -L -O http://example.com/redirect-file.txt
断点续传与批量下载:提升效率
在网络不稳定或下载大文件时,断点续传功能尤为重要,curl 通过 -C - 参数实现断点续传,当下载中断后,再次执行相同命令即可从断点继续:
curl -C - -O http://example.com/large-file.zip
若需批量下载多个文件,可结合 for 循环或使用 -l 参数列出目录中的文件,下载同一域名下的多个文件:
for i in {1..5}; do
curl -O http://example.com/files/file$i.txt
done
或通过 -l 列出 FTP 目录中的文件后筛选下载:
curl -l ftp://example.com/pub/files/ | grep -E "\.txt$" | xargs -I {} curl -O ftp://example.com/pub/files/{}
身份验证与安全:保护下载资源
对于需要身份验证的资源,curl 支持多种认证方式,下载 HTTP 基本认证保护的文件:
curl -u username:password -O http://example.com/protected-file.txt
若密码较为敏感,可通过 --ask-password 参数交互式输入密码,避免命令历史记录泄露:

curl --ask-password -u username -O http://example.com/protected-file.txt
对于 HTTPS 资源,curl 默认会验证 SSL 证书,若需跳过证书验证(仅建议在测试环境使用),可通过 -k 或 --insecure 参数:
curl -k -O https://example.com/secure-file.txt
curl 支持通过 --cacert 指定自定义证书文件:
curl --cacert /path/to/ca.crt -O https://example.com/secure-file.txt
高级功能:代理、进度与自定义请求
在实际应用中,用户可能需要通过代理服务器下载文件,或查看下载进度,curl 通过 -x 参数指定代理,
curl -x http://proxy.example.com:8080 -O http://example.com/file.txt
若代理需要身份验证,可结合 -u 参数:
curl -x http://proxy.example.com:8080 -u proxyuser:proxypass -O http://example.com/file.txt
下载大文件时,可通过 或 --progress-bar 参数显示实时进度条:
curl -# -O http://example.com/large-file.zip
curl 还支持自定义 HTTP 请求头,例如模拟浏览器 User-Agent:
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" -O http://example.com/file.txt
或添加自定义请求头:
curl -H "X-Custom-Header: value" -O http://example.com/api/data.json
错误处理与日志记录:排查问题
下载过程中,若遇到错误,可通过 -v 或 --verbose 参数输出详细日志,包括请求头、响应头和连接信息,便于排查问题:
curl -v -O http://example.com/file.txt
若仅需查看响应状态码,可通过 -w 参数格式化输出,

curl -w "%{http_code}\n" -o /dev/null -O http://example.com/file.txt
%{http_code} 会输出 HTTP 状态码,/dev/null 表示不保存文件内容,仅获取状态码。
对于重复性下载任务,可通过 -s 参数屏蔽进度信息,结合 >> 将日志输出到文件:
curl -s -w "%{time_total}\t%{http_code}\n" -o /dev/null http://example.com/file.txt >> download.log
与其他工具结合:扩展应用场景
curl 的强大之处在于其可与其他 Linux 工具结合,实现更复杂的功能,结合 grep 筛选下载链接:
curl -s http://example.com/files.html | grep -oE 'href="([^"]+\.zip)"' | cut -d'"' -f2 | xargs -I {} curl -O http://example.com/{}
或通过 jq 解析 JSON 响应并下载指定文件:
curl -s https://api.example.com/files | jq -r '.[].url' | xargs -I {} curl -O {}
在 Shell 脚本中,curl 更是实现自动化任务的核心工具,例如定时下载备份文件、监控 API 响应等。
作为 Linux 环境下的“瑞士军刀”,curl 以其丰富的功能和灵活的参数,为文件下载和数据处理提供了高效的解决方案,从简单的单文件下载到复杂的批量任务、身份验证和错误排查,curl 能够满足不同场景下的需求,掌握 curl 的使用技巧,不仅能提升工作效率,更能让用户在命令行世界中游刃有余,无论是系统管理员还是开发人员,curl 都值得成为工具箱中不可或缺的一员,通过不断实践和探索,用户可以进一步发掘 curl 的潜力,将其应用于更广泛的自动化和运维场景中。











