在Linux系统中,将文件从远程服务器导出到本地是日常运维和开发中常见的操作,尤其在管理远程服务器、备份数据或迁移文件时,实现这一目标的核心命令包括scp
、rsync
、sz
(基于Zmodem协议)以及通过ssh
管道结合>
重定向等方法,以下将详细介绍这些命令的使用场景、语法、参数及注意事项,帮助用户根据实际需求选择最合适的导出方式。

基于SSH的安全文件传输:scp
与rsync
scp
(secure copy)是利用SSH协议进行文件传输的基础命令,适合一次性、小批量文件的导出,其特点是简单直接且加密传输,基本语法为scp [选项] [用户@]远程主机:远程文件路径 本地路径
,将远程服务器168.1.100
上/home/user/data.txt
文件导出到本地当前目录,可执行scp user@192.168.1.100:/home/user/data.txt .
,若需传输整个目录,需添加-r
选项,如scp -r user@192.168.1.100:/home/user/local_folder ./
。scp
的常用参数还包括-P
(指定非默认SSH端口,如-P 2222
)、-p
(保留文件修改时间、权限等属性)以及-C
(启用压缩,适合传输大文件),需注意,scp
在传输大量小文件时效率较低,且不支持断点续传。
对于需要增量同步、断点续传或高效传输大量文件的场景,rsync
是更优选择。rsync
通过差异化算法仅传输变化部分,节省带宽和时间,其基本语法为rsync [选项] [用户@]远程主机:远程文件路径 本地路径
,增量同步远程目录到本地,可用rsync -avz user@192.168.1.100:/home/user/ ./local_folder
,其中-a
(归档模式,保留权限、时间等属性)、-v
(显示详细过程)、-z
(压缩传输)为常用组合。rsync
的独特优势在于--partial
(支持断点续传)、--delete
(保持本地与远程目录一致,删除多余文件)以及--bwlimit
(限速传输,避免占用过多带宽),若需在后台执行,可结合nohup
或screen
工具,如nohup rsync -avz user@192.168.1.100:/data/ ./ &
。
交互式终端文件传输:sz
与rz
在通过SSH终端直接操作远程服务器时,若需快速导出单个或少量文件,可使用sz
(send Zmodem)命令,该命令依赖终端支持Zmodem协议,传输前需确保本地终端工具(如Xshell、SecureCRT)已启用Zmodem功能,执行sz filename
后,终端会弹出文件保存对话框,用户选择本地路径即可完成下载。sz
支持批量传输,如sz file1.txt file2.txt folder/
,也可通过-y
选项覆盖同名文件、-b
指定二进制传输模式,对于上传操作,对应命令为rz
(receive Zmodem),执行后选择本地文件即可上传至远程服务器,此方法无需额外配置,适合临时、小文件的快速传输,但依赖终端工具,且不适合自动化脚本。
通过SSH管道与重定向导出文件
对于需要将远程命令执行结果直接保存到本地文件的场景,可通过SSH管道结合>
或tee
命令实现,将远程服务器上的数据库导出并保存到本地,可执行ssh user@192.168.1.100 "mysqldump -u root -p database_name" > local_backup.sql
,此时系统会提示输入远程服务器密码,执行结果将重定向到本地文件local_backup.sql
,若需在远程和本地同时保留文件,可结合tee
命令:ssh user@192.168.1.100 "cat /remote/file.txt" | tee local_file.txt
,此方法灵活性高,适合处理命令输出流,但需注意密码明文传输的安全风险,建议使用SSH密钥认证或配置sshpass
工具(需安装)实现非交互式登录,如sshpass -p 'password' scp user@192.168.1.100:/file.txt .
。

不同场景下的命令选择与对比
场景 | 推荐命令 | 优势 | 局限性 |
---|---|---|---|
单次小文件传输 | scp |
简单易用,SSH加密 | 无断点续传,大量文件效率低 |
大文件/目录增量同步 | rsync |
高效,支持断点续传、增量传输、带宽控制 | 参数稍复杂,需两端安装rsync |
终端交互式快速下载 | sz |
无需命令,直接弹出保存对话框 | 依赖终端工具,不适合自动化 |
远程命令结果本地保存 | ssh+> |
灵活处理命令输出流 | 密码安全风险,需配合密钥或sshpass |
常见问题与注意事项
- 权限问题:确保本地用户对目标目录有写权限,远程用户对源文件有读权限,可通过
chmod
调整权限,或使用sudo
(需配置sudoers
文件允许远程用户无密码执行特定命令)。 - 网络中断处理:使用
rsync --partial
可避免传输中断后重新开始;若使用scp
,可通过Ctrl+C
终止后手动续传,或改用rsync
。 - 防火墙与端口:若远程服务器SSH端口非默认22,需在命令中通过
-P
指定(如scp -P 2222
),并确保防火墙开放该端口。 - 大文件传输优化:对于超大文件,可开启压缩(
scp -C
或rsync -z
)并限制带宽(rsync --bwlimit=1000
),避免占用过多网络资源。
相关问答FAQs
Q1: 使用scp
传输文件时提示“Permission denied”,如何解决?
A: 此问题通常由权限不足引起,可从两方面排查:① 确认远程用户对源文件有读权限,执行ls -l /path/to/file
检查文件所有者及权限组,若属主非当前用户,可通过sudo chown user:group file
修改所有者;② 检查本地目标目录写权限,执行ls -ld /local/path
,若权限不足,用chmod 755 /local/path
调整,若远程服务器启用SELinux,需执行getsebool -a | grep ssh
检查ssh_sysadm_login
等布尔值,必要时通过setsebool -P ssh_sysadm_login on
启用。
Q2: 如何通过rsync
只同步远程服务器上新增或修改的文件,并排除特定目录?
A: rsync
可通过--include
和--exclude
选项灵活过滤文件,结合-u
(更新模式)避免覆盖本地较新文件,同步远程/data
目录到本地/backup
,排除temp
子目录,只同步修改过的文件,命令为:rsync -avzu --exclude='temp' user@remote:/data/ /backup/
,其中-u
确保仅当远程文件比本地新时才传输;若需排除多个目录,可多次使用--exclude
,或通过--exclude-from=/path/to/exclude_file.txt
指定排除规则文件(每行一个规则)。
