rcp 命令用于在本地和远程系统之间复制文件和目录。它是 "remote copy" 的缩写,是早期 Unix 系统中常用的远程文件传输工具。rcp 使用 rsh(remote shell)进行数据传输,但由于安全性考虑,在现代系统中已被更安全的工具如 scp 和 rsync 所取代。
rcp [选项] 源文件 目标文件
常用形式:
# 复制到远程系统
rcp 本地文件 用户名@远程主机:路径
# 从远程系统复制
rcp 用户名@远程主机:远程文件 本地路径
# 递归复制目录
rcp -r 本地目录 用户名@远程主机:路径
# 使用scp(加密传输)
scp file.txt user@remotehost:/path/
# 使用rsync(更高效,支持加密)
rsync -avz file.txt user@remotehost:/path/
# 使用sftp(交互式文件传输)
sftp user@remotehost
put file.txt
# 复制单个文件到远程主机的家目录
rcp file.txt username@remotehost:
# 复制文件到远程主机的指定目录
rcp file.txt username@remotehost:/tmp/
# 复制时保留文件属性
rcp -p file.txt username@remotehost:/backup/
# 从远程主机复制文件到当前目录
rcp username@remotehost:file.txt .
# 从远程主机复制文件到指定目录
rcp username@remotehost:/var/log/messages /tmp/
# 复制远程主机的多个文件
rcp username@remotehost:'file1.txt file2.txt' .
# 复制整个目录到远程主机
rcp -r myproject/ username@remotehost:projects/
# 从远程主机复制整个目录
rcp -r username@remotehost:logs/ ./backup/
# 递归复制并保留文件属性
rcp -rp data/ username@remotehost:backup/
# 从一个远程主机复制到另一个远程主机
rcp user1@host1:file.txt user2@host2:/tmp/
# 这需要两台主机都信任执行命令的本地主机
要使 rcp 正常工作,需要进行以下配置:
# 在 ~/.rhosts 文件中添加信任的主机
# 格式:主机名 用户名
remotehost.example.com localuser
# 或者使用 /etc/hosts.equiv 进行系统级配置
# 注意:这些配置存在安全风险
# 检查rsh服务是否运行
ps aux | grep rsh
# 在现代系统中,可能需要手动启用
sudo systemctl enable rsh.socket
sudo systemctl start rsh.socket
# 或者使用xinetd配置
# 编辑 /etc/xinetd.d/rsh
# 在受保护的内部网络中备份配置文件
rcp -p /etc/nginx/nginx.conf backup@backupserver:/configs/webserver/
# 复制日志文件到中央日志服务器
rcp /var/log/app/*.log loguser@logserver:/incoming/logs/
# 同步网站文件到多个服务器
for server in web01 web02 web03; do
rcp -r /var/www/html/ admin@$server:/var/www/
done
#!/bin/bash
# 批量分发数据文件到计算节点
DATA_FILE="dataset_$(date +%Y%m%d).tar.gz"
NODES=("node01" "node02" "node03" "node04")
# 压缩数据
tar -czf "$DATA_FILE" /data/raw/
# 分发到所有节点
for node in "${NODES[@]}"; do
echo "复制到 $node..."
rcp "$DATA_FILE" compute@$node:/shared/data/
done
echo "数据分发完成"
# 复制文件到远程主机(使用SSH加密)
scp file.txt user@remotehost:/path/
# 从远程主机复制文件
scp user@remotehost:/path/file.txt .
# 递归复制目录
scp -r directory/ user@remotehost:/path/
# 使用特定端口
scp -P 2222 file.txt user@remotehost:/path/
# 保留文件属性
scp -p file.txt user@remotehost:/path/
# 同步目录(更高效,只传输差异)
rsync -avz localdir/ user@remotehost:remotedir/
# 使用SSH密钥认证
rsync -avz -e "ssh -i /path/to/key" localdir/ user@remotehost:remotedir/
# 删除目标端多余文件
rsync -avz --delete localdir/ user@remotehost:remotedir/
# 显示进度信息
rsync -avz --progress largefile.txt user@remotehost:/tmp/
| 工具 | 加密 | 效率 | 功能 | 推荐程度 |
|---|---|---|---|---|
rcp |
❌ 无加密 | ⭐️⭐️⭐️⭐️ | 基础文件复制 | ❌ 不推荐 |
scp |
✅ SSH加密 | ⭐️⭐️⭐️ | 安全文件复制 | ⭐️⭐️⭐️⭐️ |
rsync |
✅ SSH加密 | ⭐️⭐️⭐️⭐️⭐️ | 增量同步、压缩等 | ⭐️⭐️⭐️⭐️⭐️ |
sftp |
✅ SSH加密 | ⭐️⭐️⭐️ | 交互式文件操作 | ⭐️⭐️⭐️⭐️ |
# rcp 命令
rcp file.txt user@host:/path/
# 转换为 scp
scp file.txt user@host:/path/
# rcp 递归复制
rcp -r dir/ user@host:/path/
# 转换为 scp
scp -r dir/ user@host:/path/
# rcp 保留属性
rcp -p file.txt user@host:/path/
# 转换为 scp
scp -p file.txt user@host:/path/
#!/bin/bash
# 将使用rcp的脚本迁移到scp
# 旧的rcp脚本
# rcp -r /backup/* backup@backupserver:/storage/
# 新的scp脚本
scp -r /backup/* backup@backupserver:/storage/
# 或者更好的,使用rsync
rsync -avz --progress /backup/ backup@backupserver:/storage/