scp
(Secure Copy Protocol)是 Linux/Unix 系统中的命令行工具,用于在本地与远程主机之间,或两台远程主机之间安全地复制文件或目录。scp
使用 SSH(Secure Shell) 协议进行数据传输,确保数据在传输过程中加密。
基本语法
- 源路径:指定需要复制的文件或目录,可以是本地路径或远程路径。
- 目标路径:指定文件复制的目标,可以是本地路径或远程路径。
- 选项:控制
scp
的行为(如显示进度、递归复制等)。
常见用法
从本地传输到远程主机
1
| scp file.txt user@192.168.1.100:/home/user/
|
- 作用:将本地的
file.txt
文件复制到远程主机 192.168.1.100
的 /home/user/
目录。
从远程主机传输到本地
1
| scp user@192.168.1.100:/home/user/file.txt /local/directory/
|
- 作用:将远程主机
/home/user/file.txt
文件复制到本地的 /local/directory/
目录。
从一台远程主机传输到另一台远程主机
1
| scp 用户1@远程IP1:远程文件 用户2@远程IP2:目标路径
|
1
| scp user1@192.168.1.100:/home/user1/file.txt user2@192.168.1.101:/home/user2/
|
- 作用:将远程主机
192.168.1.100
的 /home/user1/file.txt
复制到另一台远程主机 192.168.1.101
的 /home/user2/
目录。
递归复制目录
1
| scp -r 本地目录 用户名@远程IP:远程路径
|
1
| scp -r /local/directory user@192.168.1.100:/home/user/
|
- 作用:将本地的
/local/directory
整个目录复制到远程主机的 /home/user/
。
指定端口号
- 使用
-P
选项指定远程主机的 SSH 端口号(注意:P
为大写)。
1
| scp -P 2222 file.txt user@192.168.1.100:/home/user/
|
- 作用:通过端口号
2222
将本地的 file.txt
复制到远程主机。
限制传输带宽
- 使用
-l
选项限制传输速率(单位为 Kbps)。
1
| scp -l 1000 file.txt user@192.168.1.100:/home/user/
|
- 作用:将本地的
file.txt
复制到远程主机,并限制传输速率为 1000 Kbps。
显示传输进度
- 使用
-v
或 -C
选项显示传输过程中的详细信息。
1
| scp -v file.txt user@192.168.1.100:/home/user/
|
- 作用:显示传输过程中使用的 SSH 配置、文件大小、进度等信息。
常用选项
选项 |
作用 |
-r |
递归复制目录。 |
-P |
指定远程主机的 SSH 端口号(注意:P 为大写)。 |
-l |
限制传输带宽(单位为 Kbps)。 |
-v |
显示传输的详细信息(调试模式)。 |
-C |
启用压缩,适用于慢速网络。 |
-q |
静默模式,不显示任何信息。 |
-o |
指定 SSH 配置选项(如密钥文件)。 |
示例说明
基本文件传输
1
| scp file.txt user@192.168.1.100:/home/user/
|
- 将本地
file.txt
复制到远程主机 /home/user/
目录。
复制到远程主机并重命名
1
| scp file.txt user@192.168.1.100:/home/user/newfile.txt
|
- 将本地
file.txt
复制到远程主机 /home/user/
并重命名为 newfile.txt
。
使用指定端口传输
1
| scp -P 2222 file.txt user@192.168.1.100:/home/user/
|
复制整个目录
1
| scp -r /local/directory user@192.168.1.100:/home/user/
|
- 递归复制本地目录
/local/directory
到远程主机目录 /home/user/
。
从远程主机下载文件
1
| scp user@192.168.1.100:/home/user/file.txt /local/directory/
|
- 从远程主机
/home/user/
下载 file.txt
到本地的 /local/directory/
。
从远程主机下载目录
1
| scp -r user@192.168.1.100:/home/user/directory /local/directory/
|
- 从远程主机递归下载目录
/home/user/directory
到本地的 /local/directory/
。
使用压缩加速传输
1
| scp -C file.txt user@192.168.1.100:/home/user/
|
注意事项
-
权限问题:
- 确保有足够的权限访问源文件和目标路径。
- 如果远程主机需要密码,
scp
会提示输入密码。
-
端口号:
- 如果远程主机的 SSH 使用非默认端口(22),必须用
-P
指定端口号。
-
SSH 配置:
- 如果需要使用密钥文件进行身份验证,可以通过
-o
指定。
- 示例:
1
| scp -i /path/to/private_key file.txt user@192.168.1.100:/home/user/
|
-
网络性能:
- 对于大文件传输,可以结合
-C
选项(压缩)和 -l
选项(限制带宽)优化传输。
-
文件路径:
- 确保路径正确,远程路径需要以
用户名@IP地址:路径
格式指定。
总结
操作 |
命令 |
从本地复制到远程主机 |
scp file.txt user@192.168.1.100:/home/user/ |
从远程主机复制到本地 |
scp user@192.168.1.100:/home/user/file.txt /local/directory/ |
递归复制目录 |
scp -r /local/directory user@192.168.1.100:/home/user/ |
指定端口 |
scp -P 2222 file.txt user@192.168.1.100:/home/user/ |
限制带宽 |
scp -l 1000 file.txt user@192.168.1.100:/home/user/ |
开启压缩 |
scp -C file.txt user@192.168.1.100:/home/user/ |
显示详细信息 |
scp -v file.txt user@192.168.1.100:/home/user/ |
使用密钥文件认证 |
scp -i /path/to/key file.txt user@192.168.1.100:/home/user/ |
scp
是一种简单高效的文件传输方式,但较大型传输任务推荐使用 rsync
。