在Unix和Linux系统中,文件上传是日常运维和开发中常见的操作,涉及将本地文件传输到远程服务器或从远程服务器下载文件到本地,根据不同的场景和需求,Unix系统提供了多种命令行工具来实现文件上传功能,这些工具基于不同的协议(如FTP、SFTP、SCP、RSYNC等),各有特点和适用场景,以下将详细介绍几种常用的Unix文件上传命令,包括其基本用法、参数选项、优缺点及实际应用示例。

SCP(Secure Copy)命令
SCP是基于SSH(Secure Shell)协议的安全文件传输工具,用于在本地主机和远程主机之间 securely 传输文件,由于SCP通过加密连接传输数据,因此安全性较高,适合在不信任的网络环境中使用,其基本语法为:scp [选项] [源路径] [目标路径]
。
-
常用选项:
-r
:递归复制整个目录。-P
:指定远程主机的SSH端口(注意大写,避免与-p
文件时间戳选项混淆)。-p
:保留文件的修改时间、访问时间和权限。-C
:启用压缩传输,适用于大文件。-v
:详细模式,显示调试信息,便于排查连接问题。
-
使用示例:
- 上传本地文件到远程服务器:
scp local.txt user@remote:/home/user/
此命令将当前目录下的
local.txt
文件上传到远程服务器的/home/user/
目录,需输入用户密码。(图片来源网络,侵删) - 上传整个目录:
scp -r local_dir/ user@remote:/home/user/
- 指定端口上传:
scp -P 2222 local.txt user@remote:/home/user/
- 上传本地文件到远程服务器:
-
优缺点:
- 优点:基于SSH,安全性高;简单易用,无需额外配置。
- 缺点:不支持断点续传;大文件传输时可能因网络中断失败;不显示传输进度条(可通过
pv
工具配合显示)。
SFTP(SSH File Transfer Protocol)命令
SFTP是SSH的一部分,提供了交互式的文件传输功能,类似于FTP,但所有数据均通过SSH加密传输,SFTP更安全且功能更丰富,支持文件和目录的增删改查操作,其基本命令包括put
(上传)、get
(下载)、ls
(列表)、cd
(切换目录)等。
-
启动SFTP会话:
sftp user@remote
连接成功后,会进入
sftp>
命令行界面。(图片来源网络,侵删) -
常用上传操作:
- 上传单个文件:
put local.txt /home/user/
- 上传目录(需递归操作):
-r local_dir /home/user/
- 批量上传(使用通配符):
put *.txt /home/user/docs/
- 上传单个文件:
-
退出SFTP会话:输入
exit
或bye
。 -
优缺点:
- 优点:交互式操作,支持文件管理;加密传输,安全性高;支持断点续传(通过
reput
命令)。 - 缺点:相比SCP,命令稍复杂;传输速度可能略低于SCP(因需维护会话状态)。
- 优点:交互式操作,支持文件管理;加密传输,安全性高;支持断点续传(通过
RSYNC(Remote Sync)命令
RSYNC是一款强大的文件同步工具,支持本地和远程文件传输,以增量传输(仅同步变化部分)著称,适合大文件和目录的频繁同步,其基本语法为:rsync [选项] [源路径] [目标路径]
。
-
常用选项:
-a
:归档模式,保留文件属性(权限、时间戳等),相当于-rlptgoD
的组合。-v
:详细输出,显示传输过程。-z
:压缩传输数据,减少网络带宽占用。-P
:显示传输进度,并支持断点续传(结合--partial
选项)。--delete
:目标目录中多余的文件会被删除(确保源和目标完全一致)。
-
使用示例:
- 基本上传(需SSH密钥认证,避免重复输入密码):
rsync -avz local.txt user@remote:/home/user/
- 同步目录(删除目标多余文件):
rsync -avz --delete local_dir/ user@remote:/home/user/
- 通过SSH指定端口:
rsync -avz -e "ssh -p 2222" local.txt user@remote:/home/user/
- 基本上传(需SSH密钥认证,避免重复输入密码):
-
优缺点:
- 优点:增量传输效率高;支持排除文件(
--exclude
选项);可结合SSH实现安全传输。 - 缺点:首次传输全量文件时速度可能较慢;配置相对复杂,需提前设置SSH免密登录。
- 优点:增量传输效率高;支持排除文件(
FTP(File Transfer Protocol)命令
FTP是一种传统的文件传输协议,但因其数据传输未加密(用户名、密码和文件内容均明文传输),安全性较低,仅在可信网络环境中使用,Unix系统通常通过ftp
或lftp
(增强版FTP客户端)命令操作。
-
基本FTP操作:
- 连接远程服务器:
ftp remote.example.com
- 输入用户名和密码登录后,上传文件:
put local.txt
- 退出:
bye
。
- 连接远程服务器:
-
LFTP增强功能:
支持多线程传输、断点续传和加密协议(如FTPS),推荐替代传统FTP:lftp ftp://user:password@remote.example.com lftp> put local.txt
-
优缺点:
- 优点:兼容性好,支持大多数操作系统;操作简单直观。
- 缺点:安全性差,易受中间人攻击;功能单一,不支持目录比较和增量传输。
其他工具:WGET和CURL
虽然wget
和curl
主要用于下载文件,但也可通过特定参数实现上传功能,例如通过HTTP/HTTPS的PUT或POST方法上传文件到Web服务器。
-
CURL上传示例:
curl -T local.txt -u username:password https://example.com/upload/
-T
指定上传文件,-u
提供认证信息。 -
适用场景:适用于向Web应用或API接口上传文件,而非传统的服务器文件传输。
不同工具对比总结
工具 | 协议 | 安全性 | 速度 | 功能特点 | 适用场景 |
---|---|---|---|---|---|
SCP | SSH | 高 | 中等 | 简单、加密 | 小文件、快速传输 |
SFTP | SSH | 高 | 中等 | 交互式、支持断点续传 | 需要文件管理或频繁操作 |
RSYNC | SSH/本地 | 高 | 快(增量) | 增量同步、保留属性 | 大目录、定期备份 |
FTP | FTP | 低 | 中等 | 兼容性好 | 可信内网、旧系统 |
CURL | HTTP/HTTPS | 中等 | 依赖网络 | 支持Web上传 | 向Web服务上传文件 |
相关问答FAQs
Q1: SCP和SFTP有什么区别?如何选择?
A1: SCP基于SSH协议,专注于快速、安全的文件拷贝,适合一次性传输,不支持断点续传或交互式操作;SFTP是SSH的子协议,提供类似FTP的交互式命令行,支持文件管理、断点续传和权限操作,适合需要频繁修改远程文件的场景,若仅需快速上传/下载文件,可选SCP;若需复杂操作或断点续传,推荐SFTP。
Q2: 使用RSYNC上传文件时,如何避免每次输入密码?
A2: 可通过SSH密钥认证实现免密登录,首先在本地生成SSH密钥对(ssh-keygen
),然后将公钥(~/.ssh/id_rsa.pub
)追加到远程服务器的~/.ssh/authorized_keys
文件中(需确保远程服务器SSH服务开启密钥认证),配置完成后,RSYNC和SCP等命令即可直接传输文件而无需密码输入。