命令简介

scp是Secure Copy的缩写,是一个基于SSH的安全远程文件复制工具。它可以在本地和远程主机之间复制文件或目录,并且支持递归复制。

命令语法

1
2
scp [options] source_file_or_directory user@host:target_path
scp [options] user@host:source_file_or_directory target_path

参数说明

参数 说明 备注
-r 递归复制整个目录
-p 保留文件的修改时间、访问时间和模式
-q 静默模式,不显示复制进度
-C 启用压缩,可以加快传输速度
-P port 指定远程主机的SSH端口 默认为22
-4 只使用IPv4地址
-6 只使用IPv6地址
-c cipher 指定要使用的加密算法

命令实例

基本用法

1.从本地复制文件到远程主机

1
scp local_file.txt user@remote_host:/path/to/target

上面的命令将本地的local_file.txt文件复制到远程主机的/path/to/target目录中。

2.从远程主机复制文件到本地

1
scp user@remote_host:/path/to/source/file.txt .

该命令将从远程主机的/path/to/source/file.txt复制到本地当前目录。

3.递归复制整个目录

1
scp -r local_directory user@remote_host:/path/to/target

上面的命令将本地的local_directory目录及其内容递归复制到远程主机的/path/to/target路径下。

4.保留文件元数据

1
scp -p user@remote_host:/path/to/source/file.txt .

该命令在复制文件时将保留文件的修改时间、访问时间和模式。

5.压缩传输以加快速度

1
scp -C local_file.tar.gz user@remote_host:/path/to/target

上面的命令在传输local_file.tar.gz文件时将启用压缩,可以加快传输速度。

高级用法示例

1.使用scp和ssh-agent进行无密码复制

1
2
3
4
5
6
# 启动ssh-agent并添加私钥
eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa

# 使用scp复制文件
scp local_file.txt user@remote_host:/path/to/target

上面的示例展示了如何结合使用ssh-agent和scp实现无密码文件复制。首先启动ssh-agent并添加私钥,然后使用scp进行文件传输,无需再次输入密码。

2.使用scp进行文件同步

1
2
3
4
5
6
7
8
#!/bin/bash

# 源目录和目标目录
src_dir="/path/to/source"
dest_host="user@remote_host:/path/to/target"

# 使用rsync实现增量同步
rsync -avz --delete "$src_dir/" "$dest_host"

上面的脚本使用rsync命令实现增量文件同步。它将本地的/path/to/source目录与远程主机的/path/to/target目录进行同步,只传输新的或已修改的文件。通过这种方式,我们可以高效地将本地文件同步到远程主机上。

通过以上示例,我们可以看到scp命令在远程文件传输方面非常实用和高效。它不仅可以在本地和远程主机之间安全地复制单个文件,还可以递归复制整个目录。同时,它还提供了一些有用的选项,如保留文件元数据、启用压缩等,以提高传输效率和可靠性。

此外,我们还可以将scp与其他工具(如ssh-agent和rsync)结合使用,实现无密码文件复制、增量文件同步等高级功能。这些功能在自动化部署、备份等场景中都非常有用。总之,scp是一个强大而实用的远程文件传输工具,在Linux系统管理中扮演着重要的角色。