往服务器传输文件(SCP/Rsync/SFTP/tar)
1. 需求说明
有时,我们需要往服务器上传一些文件,如 SSL证书、网站配置 等。这时就需要在本地计算机和服务器系统之间进行文件传输,这里分别介绍几种常见的方式。
2. 常用工具
2.1. SCP命令
2.1.1. SCP介绍
SCP(Secure Copy)是基于 SSH 协议的文件传输命令,使用与 SSH 相同的认证方式和安全加密。其主要特点为简单、直接。
- 工作原理:在 SSH 连接的基础上进行文件复制。
- 优点:
- 几乎所有 Linux 系统都自带,无需额外安装。
- 命令简单直观,易于上手。
- 传输是加密的,安全性好。
- 缺点:
- 效率较低:尤其是传输大量小文件时,因为它不进行增量传输,每次都是全量拷贝。
- 功能单一:缺少高级功能,如断点续传、实时同步等。
- 无法查看传输进度:在传输大文件时,无法直观地看到进度百分比(虽然可以通过
-v参数看到细节,但不直观)。
2.1.2. 安装方法
在绝大多数 Linux 发行版中,SCP 已经作为 OpenSSH 客户端的一部分被预装。
1. 检查是否安装:
scp
# 如果提示command not found则说明未安装,如果提示usage: XXX说明已安装,可正常使用。
2. 安装SCP:
如果未安装(极少情况),可以通过包管理器安装 OpenSSH 客户端。
- CentOS/RHEL/Alibaba Cloud Linux:
sudo yum install openssh-clients
# 或者使用 dnf(新版本)
sudo dnf install openssh-clients
- Ubuntu/Debian:
sudo apt update
sudo apt install openssh-client
2.1.3. 基本语法
# 上传本地文件到服务器
scp -r /本地/目录/路径/ username@服务器IP:/远程/目录/路径/
# 从服务器下载文件到本地
scp -r username@服务器IP:/远程/目录/路径/ /本地/目录/路径/
2.1.4. Demo演示
# 上传整个目录
scp -r /home/user/documents/ root@192.168.1.100:/var/www/html/
# 上传多个特定文件
scp file1.txt file2.jpg file3.zip root@192.168.1.100:/tmp/
2.2. Rsync命令
2.2.1. Rsync介绍
Rsync(Remote Synchronization) 意为远程同步,它是一款功能强大的文件同步工具,支持本地和跨网络的文件同步,通过增量同步机制,仅传输有变化的部分,从而显著提升同步效率。其核心优势在于增量同步。
- 工作原理:通过比较源和目标文件的差异,只传输文件中被修改的部分,从而极大提高效率。
- 优点:
- 高效:增量传输,节省带宽和时间,特别适合备份和同步大量文件。
- 功能丰富:支持保留文件属性(权限、时间戳等)、排除特定文件、断点续传、压缩传输等。
- 灵活性高:既可以作为远程命令使用(基于 SSH),也可以以守护进程模式运行(用于大规模备份)。
- 缺点:
- 命令参数比 SCP 复杂,学习曲线稍高。
- 默认情况下,传输大量小文件时,比较差异的过程可能比 SCP 直接传输稍慢(但传输阶段更快)。使用
-W参数可以关闭增量检测,变成类似 SCP 的全量拷贝。
2.2.2. 安装方法
Rsync非常流行,但可能在某些极简系统镜像中未预装。
1. 检查是否安装:
rsync --version
2. 安装Rsync:
如果未安装,使用包管理器安装:
- CentOS/RHEL/Alibaba Cloud Linux:
sudo yum install rsync
# 或
sudo dnf install rsync
- Ubuntu/Debian:
sudo apt update
sudo apt install rsync
2.2.3. 基本语法
# 同步本地目录到服务器
rsync -avz -e ssh /本地/目录/路径/ username@服务器IP:/远程/目录/路径/
# 从服务器同步到本地
rsync -avz -e ssh username@服务器IP:/远程/目录/路径/ /本地/目录/路径/
2.2.4. 常用参数
-a:归档模式,保留文件属性-v:显示详细过程-z:压缩传输-P:显示进度和断点续传
2.2.5. Demo演示
# 同步文件并显示进度
rsync -avzP -e ssh /home/user/backup/ root@192.168.1.100:/backup/
2.3. SFTP批量传输
2.3.1. SFTP介绍
SFTP(SSH File Transfer Protocol) 是基于SSH的文件传输协议,也是一个工具。但它提供了一个交互式的文件管理环境,类似于FTP,但更加安全。
- 工作原理:通过 SSH 连接建立一个安全的“通道”,在此通道内进行文件列表、上传、下载、删除、创建目录等操作。
- 优点:
- 交互式操作:可以像在本地一样浏览远程服务器目录结构,再决定上传或下载哪些文件,非常灵活。
- 功能全面:不仅限于传输,还包括完整的文件管理功能(重命名、删除、修改权限等)。
- 安全性高:所有操作都在加密的 SSH 连接中进行。
- 缺点:
- 不适合完全自动化:虽然支持批处理脚本,但其交互式本性在编写全自动脚本时不如 SCP 和 Rsync 直接。
- 传输效率:与 SCP 类似,通常不如 Rsync 高效。
2.3.2. 安装方法
和 SCP 一样,SFTP 客户端也是 OpenSSH 套件的一部分。只要你能够使用 SSH 连接服务器,就可以使用 SFTP。
- 检查是否安装:能使用
ssh命令,就能使用sftp命令。
sftp
# 如果提示命令未找到,则安装openssh-client(方法同SCP)
2.3.3. 交互式SFTP
sftp username@服务器IP
sftp> put -r /本地/目录/*
sftp> exit
2.3.4. 非交互式SFTP脚本
#!/bin/bash
sftp username@服务器IP <<EOF
put -r /本地/目录/*
bye
EOF
2.4. tar命令
2.4.1. tar介绍
TAR是Tape ARchive的缩写,最初用于将文件备份到磁带。现在的主要功能是:
- 打包:将多个文件或目录合并成单个文件(归档文件),后缀通常是
.tar。 - 压缩:配合压缩算法(如 gzip、bzip2)减小归档文件的大小,生成
.tar.gz,.tar.bz2等文件。
核心功能特点
- 保留文件属性:可以保留文件的权限、所有者、时间戳等元数据。
- 处理目录结构:递归地处理整个目录树。
- 流式处理:可以将打包/压缩的结果直接通过管道输出,非常适合网络传输。
2.4.2. 安装方法
在绝大多数 Linux 发行版中,tar 是预装的核心工具之一。
1. 检查是否已安装:
tar --version
2. 安装tar:
如果极少数情况未安装,可以使用包管理器安装。
- CentOS/RHEL/Alibaba Cloud Linux:
sudo yum install tar
# 或
sudo dnf install tar
- Ubuntu/Debian:
sudo apt update
sudo apt install tar
2.4.3. 基本语法
# 压缩并传输
tar czf - /本地/目录/ | ssh username@服务器IP "cd /远程/目录/ && tar xzf -"
# 从服务器获取并解压
ssh username@服务器IP "tar czf - /远程/目录/" | tar xzf - -C /本地/目录/
3. 比较 SCP/Rsync/SFTP/tar
| 特性 | SCP | Rsync | SFTP | tar + SSH 管道 |
|---|---|---|---|---|
| 核心功能 | 简单加密复制 | 智能增量同步 | 交互式文件管理 | 流式打包传输 |
| 传输效率 | 低 | 非常高(增量) | 中 | 高(无中间文件) |
| 带宽使用 | 高(全量) | 低(只传变化部分) | 高(全量) | 中(全量但压缩) |
| 自动化程度 | 高 | 非常高 | 中(需脚本) | 高 |
| 交互性 | 无 | 无 | 高(可浏览) | 无 |
| 保留属性 | 是 | 是(可配置) | 是 | 是 |
| 断点续传 | 否 | 支持 | 部分客户端支持 | 否 |
| 适用场景 | 传几个小文件 | 同步大量文件/备份 | 探索性上传下载 | 迁移大目录/数据库 |
| 易用性 | 非常简单 | 参数复杂需学习 | 直观易上手 | 命令复杂 |