在linux系统中,scp是利用ssh协议进行加密传输的远程拷贝命令,适合在服务器之间安全地复制文件和目录。掌握scp的使用可以大幅提升运维效率。

scp基本语法
scp的命令格式主要分为三种情况,分别是从本地复制到远程、从远程复制到本地、以及远程复制到另一个远程主机。
- 本地到远程:scp [参数] 本地文件 远程用户@远程主机:远程路径
- 远程到本地:scp [参数] 远程用户@远程主机:远程文件 本地路径
- 远程到远程:scp [参数] 用户1@主机1:文件 用户2@主机2:路径
常用参数说明
| 参数 | 作用 |
|---|---|
| -P | 指定远程主机的ssh端口,注意是大写P |
| -r | 递归复制整个目录 |
| -p | 保留文件的修改时间、访问时间和权限 |
| -C | 启用压缩传输,节省带宽 |
实际使用例子
本地文件传到远程
将本机 /home/test.txt 拷贝到 192.168.0.1 的 /tmp 目录,使用端口 2222:
scp -P 2222 /home/test.txt root@192.168.0.1:/tmp/
远程目录下载到本地
从 127.0.0.1 递归拉取 /var/log 到本地当前目录:
scp -r -P 22 root@127.0.0.1:/var/log ./
远程到远程拷贝
把主机A的文件直接传到主机B,不经过本地中转:
scp root@192.168.0.1:/data/a.zip root@192.168.0.2:/backup/
注意事项
使用scp时要确保远程主机的ssh服务正常,并且你有相应的读写权限。如果自定义了ssh端口,必须加上-P参数,否则会连接默认22端口导致失败。对于包含空格的路径,建议使用引号包裹,例如 /home/my file.txt 写成 "/home/my file.txt"。
scp传输基于ssh认证,可配置密钥登录避免每次输入密码,更适合脚本化自动同步。
简单脚本示例
下面用一个bash脚本展示如何批量拷贝本地文件到远程并保留属性:
#!/bin/bash
# 定义远程信息
REMOTE_USER="root"
REMOTE_HOST="192.168.0.1"
REMOTE_DIR="/opt/upload"
# 拷贝当前目录下所有txt并保留属性
for f in *.txt; do
scp -p "$f" ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/
done
通过上述示例可以看出,linux高级拷贝命令scp怎么使用并不复杂,只要分清源和目标的写法,配合少量参数就能完成大多数跨主机文件传输任务。