SCP 命令详解:跨机器文件传输的高效工具
scp
(Secure Copy)是基于 SSH 协议的跨机器文件传输命令,具有安全性高、使用简单的特点,常用于服务器之间或本地与服务器之间的文件同步。本文将详细介绍 scp
的用法、参数及实战技巧。
scp 基本语法与核心参数
基本语法
1 | scp [参数] 源文件 目标路径 |
- 源文件 / 目标路径格式:
- 本地路径:直接使用绝对路径(如
/home/user/file.txt
)或相对路径(如./docs
)。 - 远程路径:
用户名@主机地址:文件路径
(如root@192.168.1.100:/var/log
)。
- 本地路径:直接使用绝对路径(如
核心参数
参数 | 作用 |
---|---|
-r |
递归复制目录(必须用于目录传输,否则仅复制文件) |
-v |
显示详细传输过程(便于调试) |
-P 端口 |
指定 SSH 端口(默认 22,非默认端口需指定) |
-i 私钥文件 |
使用指定的 SSH 私钥进行认证(适用于密钥登录) |
-l 限速 |
限制传输速率(单位:Kbit/s,如 -l 800 限制为 100KB/s) |
-p |
保留文件的修改时间、权限等元数据 |
常见传输场景示例
本地文件 → 远程服务器
1 | # 传输单个文件到远程目录 |
远程服务器 → 本地
1 | # 从远程下载单个文件到本地 |
远程服务器 → 远程服务器
直接在两台远程服务器之间传输文件(无需经过本地中转):
1 | scp -r root@server1:/data/backup root@server2:/data/restore/ |
结合 SSH 密钥认证传输
若已配置 SSH 密钥登录,可通过 -i
参数指定私钥,避免输入密码:
1 | # 使用私钥传输文件 |
实用技巧与注意事项
显示传输进度
加上-v
参数可查看详细过程,或使用pv
工具显示进度条(需先安装pv
):1
pv large_file.iso | scp -v -B - root@server:/tmp/
避免重复传输
scp
会覆盖目标文件,若需增量传输(仅传输变化的文件),可使用rsync
命令(功能更强大):1
rsync -avz /local/path root@server:/remote/path # 增量同步,速度更快
传输大文件的注意事项
对于 GB 级大文件,建议使用-l参数限制速率,避免占用全部带宽:
1
scp -l 4000 large_file.tar.gz root@server:/data/ # 限制为 500KB/s
若传输中断,可使用rsync —partial续传:
1
rsync --partial -avz large_file.tar.gz root@server:/data/
权限与所有权
默认情况下,传输后的文件所有者为目标路径的登录用户。
使用-p参数保留原文件的修改时间、权限等属性:
1
scp -p -r /etc/nginx root@server:/etc/ # 保留权限和时间戳
v1.3.10