在Linux环境下从服务器下载文件是日常运维和开发工作中常见的操作,掌握多种下载方法能够根据不同场景(如文件大小、服务器类型、网络环境等)选择最优方案,本文将详细介绍基于Linux的文件下载技术,涵盖常用命令、参数配置、高级场景处理及常见问题解决方案。

基础下载命令:wget与curl
Linux中最常用的下载工具是wget和curl,二者均支持HTTP、HTTPS、FTP等协议,但功能侧重点有所不同。
wget:简洁高效的下载工具
wget(Web Get)以非交互式设计著称,适合后台下载和批量操作,其核心优势在于支持断点续传、递归下载及镜像站点。
基本语法:
wget [选项] [URL]
常用参数:
-O:指定本地保存文件名,如wget -O newfile.txt http://example.com/file.txt;-P:设置下载目录,如wget -P /tmp/ http://example.com/file.zip;-c:断点续传,若下载中断后再次执行,会从断点继续,避免重复下载;-r:递归下载,可获取整个网站资源(需配合-l限制层级,如wget -r -l 2 http://example.com);--limit-rate:限速下载,如wget --limit-rate=100k http://example.com/largefile.iso(单位可为k/m/g);--user/--password:认证下载,如wget --user=admin --password=123 http://example.com/private/。
示例:
下载并重命名文件,同时限制下载速度:

wget -O data_backup.tar.gz --limit-rate=500k http://server.com/backup/data.tar.gz
curl:灵活的数据传输工具
curl支持更多协议(如SMTP、SCP等),且能直接与API交互,适合需要处理响应头或上传/下载同时进行的场景。
基本语法:
curl [选项] [URL]
常用参数:
-o:指定输出文件(与wget -O类似),如curl -o image.jpg http://example.com/image.jpg;-L:跟随重定向,若URL发生跳转,curl会自动跟踪;-u:设置认证信息,如curl -u username:password http://example.com/protected/;-C -:断点续传(与wget -c功能一致);-X:指定请求方法(如GET/POST),如curl -X POST -d "param=value" http://example.com/api。
示例:
通过HTTPS下载文件并跟随重定向,同时输出响应头:
curl -I -L -o result.html https://example.com/redirect-page
SCP与SFTP:安全文件传输(SSH协议)
若服务器通过SSH协议访问,需使用scp(Secure Copy)或sftp(Secure File Transfer Protocol)进行加密传输,避免明文泄露。

scp:基于SSH的远程复制
scp通过SSH协议传输文件,语法类似cp,但需指定远程主机信息。
基本语法:
scp [选项] [用户@主机:]源路径 [用户@主机:]目标路径
常用参数:
-P:指定SSH端口(默认22),如scp -P 2222 user@server:/file.txt /local/;-r:递归复制目录,如scp -r user@server:/remote_dir /local_dir/;-C:启用压缩,适合传输大文件;-p:保留文件权限、时间戳等属性。
示例:
从远程服务器下载目录到本地,并保留文件属性:
scp -rp user@192.168.1.100:/data/project /home/localuser/
sftp:交互式文件传输
sftp是SSH的子协议,提供类似FTP的交互式命令行界面,支持上传、下载、删除等操作,适合需要频繁管理远程文件的场景。
基本语法:
sftp [用户@主机]
常用交互命令:
get:下载文件,如get remote_file.txt local_file.txt;put:上传文件,如put local_file.txt /remote/path/;ls/cd:列出/切换远程目录;mkdir:创建远程目录;bye:退出会话。
示例:
通过sftp登录服务器并下载文件:
sftp user@192.168.1.100 sftp> get /remote/path/file.zip /local/path/ sftp> bye
高级场景处理
大文件下载与断点续传
对于大文件(如ISO镜像、数据库备份),网络中断可能导致下载失败,此时可结合wget -c或curl -C -实现断点续传,若服务器不支持断点续传,可尝试分片下载(如使用axel多线程工具):
axel -n 8 -o largefile.iso http://example.com/largefile.iso # 8线程下载
通过代理服务器下载
若本地网络需通过代理访问服务器,需配置代理参数:
- wget:
wget --http-proxy=proxy:8080 --https-proxy=proxy:8080 http://example.com/file - curl:
curl --proxy proxy:8080 http://example.com/file
批量下载文件
若需下载多个文件(如网页中的图片、日志文件列表),可结合wget的-i参数(从文件读取URL列表)或xargs:
# 从url_list.txt批量下载 wget -i url_list.txt # 通过正则匹配下载网页中的所有jpg图片 curl -s http://example.com | grep -oE 'src="([^"]*\.jpg)"' | cut -d'"' -f2 | xargs -n1 curl -O
工具对比与选择
下表总结了wget、curl、scp、sftp的适用场景及特点:
| 工具 | 协议支持 | 核心优势 | 适用场景 |
|---|---|---|---|
| wget | HTTP/HTTPS/FTP | 非交互式、支持递归/镜像 | 批量下载、后台任务、网站镜像 |
| curl | 多协议(HTTP/HTTPS/FTP/SCP等) | 灵活处理响应头、支持API交互 | API调用、需处理响应数据、混合协议 |
| scp | SSH | 基于SSH加密、简单易用 | 单文件/目录传输、安全拷贝 |
| sftp | SSH | 交互式操作、支持文件管理 | 远程文件维护、频繁上传下载 |
相关问答FAQs
Q1:下载过程中出现“certificate verify failed”错误如何解决?
A:该错误通常是由于HTTPS证书无效或CA证书缺失导致,可通过以下方式解决:
- 忽略证书验证(不推荐,存在安全风险):
wget --no-check-certificate https://example.com; - 更新CA证书:在Debian/Ubuntu系统中运行
sudo apt update && sudo apt install ca-certificates,CentOS中运行sudo yum update ca-certificates; - 手动指定证书路径:
curl --cacert /path/to/cacert.pem https://example.com。
Q2:如何通过SSH密钥认证实现免密下载?
A:若需通过scp/sftp免密传输,需配置SSH密钥认证:
- 本地生成SSH密钥对(若无):
ssh-keygen -t rsa -b 4096; - 将公钥上传到服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server; - 执行下载命令时无需密码:
scp -r user@server:/remote/path /local/path/。
注意:确保服务器SSH配置(/etc/ssh/sshd_config)中开启了PubkeyAuthentication yes。
