`scp`(secure copy)命令用于在本地和远程系统之间,或两个远程系统之间安全地复制文件。它使用 SSH 协议进行数据传输,因此需要目标主机上的 SSH 服务可用,并且你需要有权限访问这些主机。
### 基本语法
```sh
scp [选项] 源文件 目标文件
```
- **源文件**:可以是本地文件路径或远程文件路径。
- **目标文件**:可以是本地文件路径或远程文件路径。
### 常用选项
- `-r`:递归复制整个目录。
- `-p`:保留文件的修改时间、访问时间和模式。
- `-q`:静默模式,不显示传输进度等信息。
- `-C`:启用压缩选项。
- `-P port`:指定远程主机的 SSH 端口号(默认22)。
- `-i identity_file`:指定私钥文件用于身份验证。
### 示例
#### 1. 从本地复制文件到远程主机
```sh
scp /path/to/local/file user@remote_host:/path/to/remote/directory/
```
#### 2. 从远程主机复制文件到本地
```sh
scp user@remote_host:/path/to/remote/file /path/to/local/directory/
```
#### 3. 复制整个目录到远程主机
```sh
scp -r /path/to/local/directory user@remote_host:/path/to/remote/directory/
```
#### 4. 使用特定端口复制文件
```sh
scp -P 2222 /path/to/local/file user@remote_host:/path/to/remote/directory/
```
#### 5. 使用私钥文件进行身份验证
```sh
scp -i /path/to/private_key.pem /path/to/local/file user@remote_host:/path/to/remote/directory/
```
#### 6. 保持文件属性并压缩传输
```sh
scp -rpC /path/to/local/file user@remote_host:/path/to/remote/directory/
```
#### 7. 在两台远程主机之间复制文件(通过本地主机中转)
```sh
scp user1@remote_host1:/path/to/remote1/file user2@remote_host2:/path/to/remote2/directory/
```
### 注意事项
1. **权限问题**:确保你有足够的权限读取源文件和写入目标位置。
2. **SSH 密钥认证**:如果频繁使用 `scp`,建议设置 SSH 密钥认证以避免每次输入密码。
3. **防火墙和网络配置**:确保防火墙规则允许 SSH 连接(通常为22端口),并且网络配置正确。
4. **大文件传输**:对于非常大的文件,考虑使用 `rsync` 或其他更高效的工具,因为它们支持断点续传等功能。
### 结合其他工具
- **`rsync`**:对于增量备份和同步,`rsync` 是一个更好的选择,因为它只传输更改的部分。
- **`sftp`**:如果你需要交互式文件传输或管理远程文件系统,可以考虑使用 `sftp`。
### 总结
`scp` 是一个强大且方便的命令行工具,适用于大多数简单的文件传输需求。通过结合不同的选项和技巧,你可以更加高效和安全地管理文件传输任务。
希望这些信息对你有所帮助!如果有任何进一步的问题或需要更多帮助,请随时告知。