在Linux系统中,SFTP(Secure File Transfer Protocol)是一种基于SSH的安全文件传输协议,它通过加密传输和认证机制确保数据传输的安全性,广泛应用于服务器管理、文件备份等场景,与传统的FTP相比,SFTP提供了更强的安全性和更丰富的功能,本文将详细介绍Linux环境下SFTP命令的使用方法、常用操作及实用技巧。

SFTP连接与登录
使用SFTP之前,需确保目标服务器已启用SSH服务(SFTP依赖SSH协议),通过终端执行sftp命令即可连接远程服务器,基本语法为:
sftp [用户名]@[服务器地址] [-p 端口号]
以用户root连接IP为168.1.100的服务器(默认端口22):
sftp root@192.168.1.100
若SSH服务非默认端口,需通过-p参数指定,如-p 2222,连接成功后,会显示sftp>提示符,进入SFTP交互式环境。
首次连接时,若服务器主机密钥未本地记录,系统会提示确认(输入yes即可),后续连接将不再提示,若需避免交互式输入,可在~/.ssh/config中配置主机别名,
Host server1
HostName 192.168.1.100
User root
Port 22
之后可直接通过sftp server1连接。

文件传输基础命令
SFTP支持本地(以l前缀标识)和远程(无前缀)文件系统操作,常用传输命令包括:
上传文件
put [本地文件] [远程文件]:上传本地文件到远程服务器,若未指定远程路径,默认保存在当前远程目录。sftp> put /local/path/file.txt /remote/path/file.txt
mput [本地文件模式]:批量上传本地文件,支持通配符。sftp> mput *.txt # 上传所有.txt文件
下载文件
get [远程文件] [本地文件]:从远程服务器下载文件到本地。sftp> get /remote/path/file.txt /local/path/file.txt
mget [远程文件模式]:批量下载远程文件,支持通配符。sftp> mget *.log # 下载所有.log文件
传输进度与状态
传输过程中,可通过progress命令开启实时进度显示,默认关闭:
sftp> progress sftp> put large_file.zip # 开启后显示传输速度和剩余时间
目录与文件管理
SFTP提供了丰富的目录和文件管理命令,操作逻辑与Linux命令行类似:
目录操作
ls [远程路径]:列出远程目录内容,支持-l(详细列表)、-a(显示隐藏文件)选项。sftp> ls -l /remote/path
cd [远程路径]:切换远程工作目录,cd ~可返回用户主目录。lcd [本地路径]:切换本地工作目录(区别于cd)。mkdir [远程目录名]:在远程服务器创建目录。rmdir [远程目录名]:删除远程空目录。
文件操作
rm [远程文件]:删除远程文件。rename [旧文件名] [新文件名]:重命名远程文件。chmod [权限] [文件名]:修改远程文件权限,如chmod 755 script.sh。chown [用户:组] [文件名]:修改远程文件所有者(需足够权限)。
文件属性查看
通过ls -l可查看远程文件的详细信息,包括权限、所有者、大小、修改时间等,本地文件属性可通过ll(ls -l的别名)查看。
常用目录与文件操作命令对比
| 功能 | 远程命令 | 本地命令(需l前缀) |
|---|---|---|
| 列出文件 | ls [-l] |
ll [-l] |
| 切换目录 | cd [路径] |
lcd [路径] |
| 创建目录 | mkdir [目录名] |
lmkdir [目录名] |
| 删除文件 | rm [文件名] |
lrm [文件名] |
高级操作与实用技巧
批量传输与断点续传
- 批量传输:
mput和mget支持通配符,但需注意文件名中包含空格时需用引号括起,如mput "file name*.txt"。 - 断点续传:若传输中断(如网络波动),重新执行
put或get命令时,SFTP会自动检测已传输部分并续传,无需手动处理。
同步目录
通过get -r和put -r可递归传输整个目录:

sftp> put -r /local/dir /remote/dir # 上传整个目录 sftp> get -r /remote/dir /local/dir # 下载整个目录
直接执行远程命令
在SFTP环境中,可通过![命令]执行本地终端命令,![命令]执行远程服务器命令(需通过SSH预先执行)。
sftp> !ls /local/path # 查看本地目录 sftp> !pwd # 查看本地当前路径
脚本化SFTP操作
通过-b参数可指定脚本文件,实现非交互式批量操作,创建脚本sftp_script.txt:
put /local/file1.txt /remote/file1.txt get /remote/file2.txt /local/file2.txt exit
执行命令:
sftp -b sftp_script.txt user@server
常见问题与解决方案
- 连接失败:检查服务器SSH服务状态(
systemctl status sshd)、防火墙规则(开放22端口或自定义端口),以及用户名和密码是否正确。 - 权限不足:确保当前用户对目标文件或目录有读写权限,可通过
chmod或chown调整。 - 传输中断:检查网络连接稳定性,若文件过大,可分割传输或使用
rsync替代(需服务器支持)。 - 无法上传/下载:确认磁盘空间是否充足,以及SELinux或AppArmor安全策略是否阻止了操作。
SFTP凭借其安全性和易用性,成为Linux环境下文件传输的首选工具,掌握基本命令(如put、get、ls)和高级技巧(如批量传输、脚本化操作),可大幅提升工作效率,在实际应用中,建议结合SSH密钥认证(避免密码泄露),并通过配置文件简化连接操作,以实现更高效、安全的文件管理。



















