cp 和 scp 命令详解
在 Linux 和类 Unix 系统中,cp 和 scp 是两个常用的文件传输命令。cp 用于本地文件的复制,而 scp 用于在网络之间安全地传输文件。本文将详细讲解这两个命令的基础用法、高级功能以及注意事项,并配以示例代码。
一、cp 命令详解
1. 基本用法
cp(copy)命令用于复制文件或目录。
语法
cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录
常用选项
-r:递归复制目录。-i:覆盖文件前询问用户。-v:显示复制过程。-p:保留文件属性(如时间戳、权限等)。-a:归档模式,等效于-dpR,常用于备份。
示例
- 复制单个文件:
cp file1.txt file2.txt - 递归复制目录:
cp -r dir1/ dir2/ - 覆盖文件前询问:
cp -i file1.txt file2.txt - 保留文件属性:
cp -p file1.txt file2.txt
2. 进阶用法
- 复制多级目录到目标目录
cp -r /path/to/source /path/to/destination - 只复制更新的文件(类似于
rsync的功能):cp -u file1.txt /destination/ - 复制并保留软链接:
cp -d linkfile /destination/
注意事项
- 如果目标文件已存在且未使用
-i,cp会直接覆盖。 - 如果没有指定
-r,cp无法复制目录。
二、scp 命令详解
1. 基本用法
scp(secure copy)命令用于通过 SSH 在两台主机之间传输文件。
语法
scp [选项] 源路径 用户@目标主机:目标路径
scp [选项] 用户@源主机:源路径 目标路径
常用选项
-r:递归复制目录。-P:指定远程主机的 SSH 端口。-i:指定私钥文件。-C:启用压缩。-q:静默模式,抑制输出。
示例
- 从本地复制到远程:
scp file1.txt user@remote:/path/to/destination/ - 从远程复制到本地:
scp user@remote:/path/to/source/file1.txt /local/destination/ - 指定端口和私钥:
scp -P 2222 -i ~/.ssh/id_rsa file1.txt user@remote:/path/to/destination/ - 递归复制目录:
scp -r dir1/ user@remote:/path/to/destination/
2. 进阶用法
- 批量传输文件
scp file1.txt file2.txt user@remote:/path/to/destination/ - 限制带宽
使用
-l限制传输速率,单位为 kbps:scp -l 500 file1.txt user@remote:/path/to/destination/ - 传输大文件并显示进度
默认情况下,
scp显示传输进度条:scp bigfile.iso user@remote:/path/to/destination/
3. 配置免密登录
使用 scp 命令进行免密传输,通常通过设置 SSH 公钥认证 实现。
步骤
-
生成 SSH 密钥对 在本地机器上生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"-t rsa:指定使用 RSA 算法。-b 4096:设置密钥长度为 4096 位。-C:添加注释(通常是邮箱地址)。
按提示操作:
- 如果已有密钥文件,可以选择覆盖或保留。
- 可以设置密码短语,但如果希望完全免密,可以直接按回车跳过。
-
将公钥传输到远程主机
-
使用
ssh-copy-id命令将公钥添加到远程主机的~/.ssh/authorized_keys文件中:ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host-i指定公钥文件路径。user@remote_host是远程主机的用户名和地址。
-
如果远程主机不支持
ssh-copy-id,可以手动复制公钥:- 查看公钥内容:
cat ~/.ssh/id_rsa.pub - 登录远程主机,将公钥内容追加到
~/.ssh/authorized_keys文件中:echo "your_public_key_content" >> ~/.ssh/authorized_keys - 确保权限正确:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
- 查看公钥内容:
-
-
测试免密登录 在本地尝试登录远程主机,检查是否需要输入密码:
ssh user@remote_host如果无需输入密码,则免密配置成功。
-
scp 免密使用 完成配置后,
scp命令即可实现免密传输:scp file.txt user@remote_host:/path/to/destination/
注意事项
- 确保公钥权限正确:
- 本地的私钥文件
~/.ssh/id_rsa的权限应设置为600。chmod 600 ~/.ssh/id_rsa
- 本地的私钥文件
- 远程主机配置:
- 检查远程主机的 SSH 配置文件(通常为
/etc/ssh/sshd_config),确保以下参数已启用:PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys - 修改后需重启 SSH 服务:
sudo systemctl restart sshd
- 检查远程主机的 SSH 配置文件(通常为
- 安全性:
- 使用强密码保护私钥文件,防止泄露。
- 如果免密配置涉及多个主机,可以考虑使用 SSH 配置文件
~/.ssh/config简化操作。
三、cp 和 scp 的对比
| 特性 | cp | scp |
|---|---|---|
| 作用范围 | 本地 | 网络(本地与远程之间) |
| 支持递归复制 | 是 | 是 |
| 支持压缩传输 | 否 | 是(需使用 -C 选项) |
| 安全性 | 无特殊安全保障 | 使用 SSH 提供加密 |
| 典型用途 | 本地文件和目录复制 | 安全的远程文件传输 |
四、总结
cp 和 scp 是 Linux 用户必备的文件操作工具。通过掌握它们的基础用法和进阶功能,可以大大提升文件管理和传输的效率。对于本地文件管理,cp 是首选,而在需要跨网络安全传输时,scp 则是理想工具。
延伸阅读
- 使用
rsync实现高效文件同步。 - 学习
ssh的高级配置技巧。
希望本文能帮助你更好地理解和使用 cp 和 scp 命令!