在Linux系统中,从服务器下载文件是日常运维和开发中常见的操作,根据服务器环境的不同(如是否支持SSH、FTP、HTTP/S等协议),可以选择多种工具和方法,以下将详细介绍几种主流的下载方式,包括命令行工具的使用、参数配置、常见场景处理及注意事项。

通过SSH协议下载(适用于Linux/Unix服务器)
SSH(Secure Shell)协议不仅用于远程登录,还可通过其文件传输协议(SFTP)或SCP(Secure Copy)实现安全高效的文件下载,这两种方式均基于SSH加密传输,适合在服务器与客户端之间传输敏感或大文件。
使用SCP(Secure Copy)命令
SCP是SSH内置的文件复制工具,语法简单,适合快速传输单个文件或目录,基本语法为:
scp [选项] [用户名@]服务器地址:/文件路径 [本地路径]
常用参数说明:
| 参数 | 功能描述 |
|------|----------|
| -P | 指定SSH端口(默认22),需大写 |
| -r | 递归复制整个目录 |
| -p | 保留文件修改时间、权限等属性 |
| -C | 启用压缩传输,适合网络环境较差时 |
示例操作:

-
下载单个文件:
scp -P 2222 user@192.168.1.100:/home/user/data.txt ~/Downloads/
(通过2222端口将服务器上的
data.txt下载到本地Downloads目录) -
下载整个目录:
scp -r -C user@192.168.1.100:/var/www/project/ ~/local_project/
(启用压缩并递归下载
project目录)
(图片来源网络,侵删)
注意事项:
- 需确保服务器已开启SSH服务,且客户端有目标文件的读取权限。
- 若服务器使用密钥认证,需通过
-i参数指定私钥文件路径,如scp -i ~/.ssh/id_rsa user@host:/file /local/path。
使用SFTP(SSH File Transfer Protocol)
SFTP是更安全的文件传输协议,基于SSH实现,支持交互式操作,类似于FTP但无需额外配置服务,基本命令如下:
操作步骤:
- 连接服务器:
sftp user@192.168.1.100
- 登录后进入交互模式,常用命令:
ls:列出服务器当前目录文件cd /path:切换服务器目录get /remote/path/file [local/path]:下载文件get -r /remote/dir/ [local/dir]:下载目录exit:退出SFTP
示例:
sftp user@192.168.1.100 sftp> cd /home/user/documents sftp> get report.pdf ~/Documents/ sftp> exit
优势:
- 支持断点续传(通过
-a参数)、文件权限保留等高级功能。 - 可与脚本结合实现自动化传输,如通过
batch mode(非交互模式)执行命令文件。
通过FTP/SFTP协议下载(适用于传统服务器)
若服务器仅支持FTP(File Transfer Protocol),需使用ftp或lftp工具,FTP协议本身不加密,存在安全隐患,建议优先选择SFTP(通过SSH实现加密)。
使用ftp命令(基础工具)
ftp ftp.example.com Connected to ftp.example.com. Name (ftp.example.com:local_user): username 331 Please specify the password. Password: ******** ftp> ls ftp> get file.zip local: file.zip remote: file.zip 226 Transfer complete. ftp> bye
缺点:
- 不支持加密传输,密码可能被窃听。
- 功能有限,无法断点续传。
使用lftp(增强型FTP工具)
lftp支持多协议(FTP、HTTP、SFTP等),支持断点续传、队列下载等功能,推荐替代传统ftp。
示例:
lftp ftp.example.com -u username,password lftp ftp.example.com:> get -c large_file.zip # -c启用断点续传 lftp ftp.example.com:> exit
通过HTTP/HTTPS协议下载(适用于Web服务器)
若服务器文件可通过HTTP/HTTPS访问(如Nginx/Apache托管的资源),可直接使用wget或curl工具下载。
使用wget(非交互式下载工具)
wget支持后台下载、断点续传、递归下载网页资源等功能,适合脚本自动化。
常用参数:
| 参数 | 功能描述 |
|------|----------|
| -c | 断点续传 |
| -b | 后台下载 |
| -r | 递归下载(如整站镜像) |
| -O | 指定本地保存文件名 |
示例:
- 下载单个文件:
wget -c https://example.com/files/archive.zip -O archive.zip
- 递归下载网站(限制深度):
wget -r -l 2 -p https://example.com/dir/
使用curl(灵活的网络传输工具)
curl支持多种协议,可显示下载进度、自定义请求头等,适合需要精细控制的场景。
示例:
-
下载并显示进度:
curl -L -o output.txt https://example.com/data.txt
(
-L跟随重定向,-o指定输出文件) -
通过认证下载:
curl -u username:password https://example.com/protected.zip
高级场景处理
-
批量下载:
- 结合
find命令和xargs:ssh user@server "find /path -name '*.log' -type f" | xargs -I {} scp user@server:"{}" ~/logs/ - 使用
wget的-i参数读取URL列表文件:wget -i urls.txt
- 结合
-
限速下载:
wget --limit-rate=100k:限制下载速度为100KB/s。scp -l 800:限制带宽为800Kbit/s(SCP的-l参数单位为Kbit/s)。
-
代理环境下载:
- 通过
curl使用代理:curl -x http://proxy:8080 -o file https://example.com/file
- 通过
注意事项
- 权限问题:确保服务器对目标文件有读取权限,本地用户有写入权限。
- 网络稳定性:大文件传输建议使用断点续传(如
wget -c),避免网络中断导致重传。 - 安全性:避免使用明文FTP,优先选择SFTP/HTTPS;定期更新SSH密钥。
相关问答FAQs
Q1: 如何通过SSH免密登录后自动下载文件?
A1: 可通过SSH密钥认证实现免密登录,结合scp或sftp脚本自动化,步骤如下:
- 生成SSH密钥对:
ssh-keygen -t rsa(默认生成~/.ssh/id_rsa和id_rsa.pub)。 - 将公钥上传至服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server。 - 编写脚本(如
download.sh):scp -r user@192.168.1.100:/remote/path /local/path
- 赋予执行权限:
chmod +x download.sh,直接运行即可。
Q2: 下载大文件时如何监控实时进度?
A2: 不同工具可通过不同方式监控进度:
scp:默认不显示进度,可通过pv工具管道显示(需安装pv):scp user@server:/large/file - | pv > local_file
wget:默认显示实时进度条,或通过-q静默模式后手动查看日志。sftp:交互模式下使用progress命令开启进度显示。
