在Unix及类Unix操作系统中,下载文件是日常运维和开发中的常见需求,根据不同的场景(如是否支持交互、是否需要断点续传、是否需批量下载等),有多种命令可供选择,以下将详细介绍常用的文件下载命令,包括其基本用法、参数选项及适用场景。

wget命令
wget是Unix/Linux系统中最常用的下载工具之一,支持HTTP、HTTPS、FTP等多种协议,具有断点续传、递归下载、后台运行等功能,其基本语法为wget [选项] [URL]。
核心参数选项:
-r:递归下载,可下载整个网站或目录结构。-np:不下载父级目录,避免递归时下载多余文件。-nH:不创建以主机名命名的目录,保持文件结构简洁。-c:断点续传,若下载中断,可从断点继续下载。-b:后台运行,将日志输出至wget-log文件。-O:指定输出文件名,如wget -O newfile.zip http://example.com/file.zip。-P:指定保存目录,如wget -P /path/to/save http://example.com/file.zip。--limit-rate:限制下载速度,如wget --limit-rate=100k http://example.com/file.zip。--user/--password:认证用户名和密码,适用于需要权限的FTP/HTTP资源。
示例场景:
- 下载单个文件并重命名:
wget -O data.csv http://example.com/data.csv - 递归下载网站(仅下载指定目录):
wget -r -np -nH -k -L http://example.com/docs/ - 后台下载大文件:
wget -b http://example.com/large.iso
curl命令
curl是一个功能强大的传输工具,支持多种协议(HTTP、HTTPS、FTP、SCP等),可与脚本结合使用,适合需要灵活处理HTTP请求的场景,其基本语法为curl [选项] [URL]。

核心参数选项:
-o:指定输出文件名,如curl -o image.jpg http://example.com/image.jpg。-O:使用URL中的文件名保存,如curl -O http://example.com/file.zip。-C -:断点续传,需配合-L处理重定向。-L:跟随重定向,适用于短链接或跳转资源。-u:设置用户名和密码,如curl -u username:password ftp://example.com/file.zip。-x:指定代理服务器,如curl -x proxy.example.com:8080 http://example.com。-s:静默模式,不显示进度和错误信息,适合脚本调用。-I:仅获取HTTP头信息,用于检查资源状态。
示例场景:
- 下载文件并显示进度:
curl -O http://example.com/file.zip - 通过代理下载:
curl -x proxy.example.com:8080 -o file.zip http://example.com/file.zip - 结合脚本批量下载:
for url in $(cat urls.txt); do curl -O $url; done
scp命令
scp(secure copy)基于SSH协议,用于在本地与远程主机之间安全传输文件,需目标主机开启SSH服务,其基本语法为scp [选项] [源路径] [目标路径]。
核心参数选项:

-P:指定SSH端口,如scp -P 2222 file.txt user@remote:/path/to/。-r:递归复制目录,如scp -r local_dir user@remote:/path/to/。-p:保留文件权限、时间戳等属性。-C:启用压缩传输,适合大文件或目录。-i:指定私钥文件,如scp -i ~/.ssh/id_rsa file.txt user@remote:/path/to/。
示例场景:
- 从远程下载文件到本地:
scp user@remote:/path/to/file.txt ./ - 上传本地文件到远程:
scp file.txt user@remote:/path/to/ - 递归下载远程目录:
scp -r user@remote:/path/to/remote_dir ./local_dir
sftp命令
sftp(SSH File Transfer Protocol)提供交互式文件传输界面,基于SSH加密,支持文件上传、下载、删除等操作,适合需要频繁管理远程文件的场景,启动后可通过命令行操作,如get(下载)、put(上传)、ls(列表)等。
示例操作流程:
sftp user@remote sftp> get /remote/path/file.txt ./local_dir sftp> put /local/path/file.txt /remote/path/ sftp> exit
ftp命令
ftp是传统的文件传输协议工具,支持匿名或认证登录,但数据传输未加密,安全性较低,适用于不敏感的文件传输,基本操作包括get(下载)、put(上传)、mget(批量下载)等。
示例操作流程:
ftp ftp.example.com ftp> username ftp> password ftp> get file.txt ftp> mget *.txt ftp> quit
rsync命令
rsync主要用于文件同步和增量备份,支持本地与远程传输,可通过SSH加密,适合大文件或频繁更新的场景,其基本语法为rsync [选项] [源路径] [目标路径]。
核心参数选项:
-a:归档模式,保留权限、时间戳等属性。-v:显示详细传输过程。-z:压缩传输数据。-P:显示进度并支持断点续传。--delete:删除目标目录中多余的文件。
示例场景:
- 同步本地目录到远程:
rsync -avz local_dir/ user@remote:/path/to/ - 通过SSH同步远程文件到本地:
rsync -avz -e ssh user@remote:/remote_dir/ ./local_dir/
命令对比与选择
以下表格总结了各命令的适用场景及特点:
| 命令 | 支持协议 | 核心特点 | 适用场景 |
|---|---|---|---|
| wget | HTTP/HTTPS/FTP | 断点续传、递归下载、后台运行 | 网站爬取、批量下载、HTTP资源 |
| curl | 多协议 | 灵活HTTP处理、脚本友好 | API调用、短链接解析、代理下载 |
| scp | SSH | 安全加密、目录递归 | 远程服务器文件传输、敏感数据 |
| sftp | SSH | 交互式操作、文件管理 | 远程文件维护、频繁上传下载 |
| ftp | FTP | 匿名/认证登录、简单易用 | 不敏感文件传输、传统服务器 |
| rsync | 本地/远程 | 增量同步、高效备份 | 数据同步、定期备份、大文件传输 |
相关问答FAQs
Q1: wget和curl在下载文件时,哪个更适合脚本自动化?
A: curl更适合脚本自动化,因其提供更精细的HTTP请求控制(如自定义请求头、方法等),且-s静默模式可减少冗余输出;而wget更侧重于文件下载本身,递归和断点续传功能更强大,适合需要批量下载或离线下载的场景,调用API时推荐curl,下载整个网站时推荐wget。
Q2: 如何通过命令行下载需要用户认证的FTP文件?
A: 可使用wget或curl的认证参数,wget示例:wget --user=username --password=pass ftp://example.com/file.zip;curl示例:curl -u username:pass -o file.zip ftp://example.com/file.zip,若需安全传输,建议使用sftp(基于SSH)替代ftp,如sftp username@remote后使用get命令下载。
