小小白祈祷中...

scpSecure Copy Protocol)是 Linux/Unix 系统中的命令行工具,用于在本地与远程主机之间,或两台远程主机之间安全地复制文件或目录。scp 使用 SSH(Secure Shell) 协议进行数据传输,确保数据在传输过程中加密。


基本语法

1
scp [选项] 源路径 目标路径
  • 源路径:指定需要复制的文件或目录,可以是本地路径或远程路径。
  • 目标路径:指定文件复制的目标,可以是本地路径或远程路径。
  • 选项:控制 scp 的行为(如显示进度、递归复制等)。

常见用法

从本地传输到远程主机

1
scp 本地文件 用户名@远程IP:远程路径
  • 示例
1
scp file.txt user@192.168.1.100:/home/user/
  • 作用:将本地的 file.txt 文件复制到远程主机 192.168.1.100/home/user/ 目录。

从远程主机传输到本地

1
scp 用户名@远程IP:远程文件 本地路径
  • 示例
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/ 目录。

递归复制目录

  • 使用 -r 选项递归复制整个目录。
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 端口号 源路径 目标路径
  • 示例
1
scp -P 2222 file.txt user@192.168.1.100:/home/user/
  • 作用:通过端口号 2222 将本地的 file.txt 复制到远程主机。

限制传输带宽

  • 使用 -l 选项限制传输速率(单位为 Kbps)。
1
scp -l 带宽限制 源路径 目标路径
  • 示例
1
scp -l 1000 file.txt user@192.168.1.100:/home/user/
  • 作用:将本地的 file.txt 复制到远程主机,并限制传输速率为 1000 Kbps。

显示传输进度

  • 使用 -v-C 选项显示传输过程中的详细信息。
1
scp -v 源路径 目标路径
  • 示例
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/
  • 使用端口号 2222 传输文件。

复制整个目录

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/
  • 使用压缩传输文件,提高慢速网络的传输效率。

注意事项

  1. 权限问题

    • 确保有足够的权限访问源文件和目标路径。
    • 如果远程主机需要密码,scp 会提示输入密码。
  2. 端口号

    • 如果远程主机的 SSH 使用非默认端口(22),必须用 -P 指定端口号。
  3. SSH 配置

    • 如果需要使用密钥文件进行身份验证,可以通过 -o 指定。
    • 示例:
      1
      scp -i /path/to/private_key file.txt user@192.168.1.100:/home/user/
  4. 网络性能

    • 对于大文件传输,可以结合 -C 选项(压缩)和 -l 选项(限制带宽)优化传输。
  5. 文件路径

    • 确保路径正确,远程路径需要以 用户名@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