Appearance
scp 命令:安全复制
1. 命令简介
scp
(Secure Copy)是一个基于 SSH 协议在网络上进行安全文件传输的命令行工具。它可以在本地主机和远程主机之间,或者两个远程主机之间复制文件和目录。scp 使用与 ssh 相同的认证方式,并确保数据传输的机密性和完整性。
2. 基本语法
bash
scp [选项] 源文件 目标文件
3. 常用选项
-r
:递归复制整个目录-p
:保留原文件的修改时间、访问时间和权限-q
:静默模式,不显示进度信息-C
:压缩传输的数据-P
:指定远程主机的端口号-i
:指定身份文件(私钥)-l
:限制带宽,单位 Kbit/s
4. 基础使用示例
从本地复制文件到远程服务器:
bashscp local_file.txt user@remote_host:/path/to/destination/
从远程服务器复制文件到本地:
bashscp user@remote_host:/path/to/remote_file.txt /local/directory/
复制整个目录:
bashscp -r local_directory/ user@remote_host:/path/to/destination/
在两个远程主机之间复制文件:
bashscp user1@host1:/path/to/file user2@host2:/path/to/destination/
5. 进阶使用技巧
使用非默认端口:
bashscp -P 2222 file.txt user@remote_host:/path/to/destination/
压缩传输数据:
bashscp -C large_file.txt user@remote_host:/path/to/destination/
保留文件属性:
bashscp -p file.txt user@remote_host:/path/to/destination/
使用特定的私钥文件:
bashscp -i ~/.ssh/custom_key file.txt user@remote_host:/path/to/destination/
6. 实用示例
复制多个文件:
bashscp file1.txt file2.txt user@remote_host:/path/to/destination/
限制传输速度:
bashscp -l 1000 large_file.txt user@remote_host:/path/to/destination/
使用通配符复制文件:
bashscp /path/to/source/*.txt user@remote_host:/path/to/destination/
在复制时重命名文件:
bashscp local_file.txt user@remote_host:/path/to/destination/new_name.txt
7. 注意事项
- scp 默认使用 SSH 端口(通常是 22)。
- 大文件传输可能需要较长时间,考虑使用
-C
选项压缩数据。 - 确保你有目标位置的适当权限。
- 使用公钥认证可以避免每次输入密码。
8. 相关命令
ssh
:安全 Shell 协议rsync
:远程文件同步工具sftp
:安全文件传输协议ssh-keygen
:生成 SSH 密钥对
9. 技巧与建议
使用 SSH 配置文件简化连接:
在~/.ssh/config
中设置主机别名,然后可以使用:bashscp file.txt myserver:/path/to/destination/
使用进度条显示传输进度:
bashscp -v file.txt user@remote_host:/path/to/destination/
结合 tar 命令传输大量小文件:
bashtar czf - directory | ssh user@remote_host "cd /path/to/destination && tar xzf -"
使用 scp 和管道组合:
bashecho "Hello, World!" | scp - user@remote_host:/path/to/destination/hello.txt
scp 是一个简单但强大的文件传输工具,它结合了文件复制的便利性和 SSH 的安全性。对于需要在不同主机之间安全传输文件的系统管理员和开发人员来说,scp 是一个不可或缺的工具。虽然有些情况下 rsync 可能更适合(例如,需要增量传输时),但对于大多数简单的文件传输任务,scp 仍然是首选工具。