scp(英文全拼: secure copy)命令主要功能是用于Linux系统之间复制文件或目录。
它是Linux系统下基于ssh登录协议进行安全的远程文件或目录的复制命令,在传输过程中是加密传输的,从而确保了数据传输的安全性。
语法:scp [参数] [源文件或目录] [远程服务器或目标路径]
参数:用于指定scp命令的行为,例如压缩复制、递归复制或保留文件属性等。
源文件或目录:是要复制的文件或目录。
远程服务器或目标路径:文件或目录要复制到的目标地址。
常用参数:
-r:递归复制目录
-P:指定远程主机的SSH端口
-p:保留文件的修改时间、访问时间和权限
-v:显示详细过程,有助于排查的问题(等效于debug)
-C:启动压缩,可以加快传输速度
其它参数:
-1:强制scp命令使用协议ssh1
-2:强制scp命令使用协议ssh2
-4:强制scp命令只使用IPv4寻址
-6:强制scp命令只使用IPv6寻址
-B:使用批处理模式(传输过程中不询问传输口令或短语)
-C:允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q:不显示传输进度条。
-r:递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
[root@CentOS7 ~]# scp test1.txt root@192.168.20.10:/root/test
在以上这个操作中:
test1.txt:代表本地文件(源文件)
root@192.168.20.10:代表远程主机的用户和地址
/root/test:代表远程主机上的目标路径(目标目录)
如果在复制过程中忘记填写用户了(如:192.168.20.10),这个也不要紧,复制时会默认使用当前登录的用户。如下所示:
[root@CentOS7 ~]# scp test1.txt 192.168.20.10:/root/testroot@192.168.20.10's password:
从以上操作可以看出,在没有输入用户的前提下,直接使用了当前登录用户进行复制。
如果你想从远程主机(源文件)上复制文件到本地的某一个目录下(目标目录)。如下操作:
[root@CentOS7 ~]# scp root@192.168.20.10:/root/test/test1.txt ./
在以上这个操作中:
root@192.168.20.10:/root/test/test1.txt:代表的是远生程主机上的文件路径
./:代表目标目录,可以根据实际需要进行更改
3、递归复制
如果想把某一个目录下面的文件和子目录一起复制到远程主机上(目标路径)。如下操作:
[root@CentOS7 ~]# scp -r /root/test root@192.168.20.10:/root
4、指定SSH端口复制
如果远程主机的SSH服务是在非默认端口(如:2222)上运行的话,可以使用-P参数来指定端口进行复制。如下操作:
[root@CentOS7 ~]# scp -P 2222 test1.txt root@192.168.20.10:/root/test
5、保留文件属性
如果想让被复制的文件复制到远程主机上,还要保留源文件的一些属性,如:文件的修改时间、访问时间和权限等,可以使用-p参数(注:小写p)。如下操作:
[root@CentOS7 ~]# scp -p test1.txt root@192.168.20.10:/root/test
[root@CentOS7 ~]# scp -C test1.txt root@192.168.20.10:/root/test
启动压缩的适用场景:
1、传输大文件
尤其是文本文件,如:纯文本文件、日志文件、代码文件、JSON文件等。
2、网络环境不好
当网络带宽成为瓶颈时,通过压缩来消耗CPU资源通常来说是值得的,因为压缩传输数据会变更的更小,传输更快。
3、未压缩的文件
不适用的场景:
1、已经压缩过的文件
如果所复制的文件已经压缩过了,再次使用-C参数来传输的话,传输效果是微乎其微的,反而会浪费客户端主机(远程主机)的CPU资源,反而它的传输速度会变慢。
7、启用加密复制
如果想让复制的文件在转输过程是更安全,可以使用-c参数(注:小写c)。如下操作:
[root@CentOS7 ~]# scp -c test1.txt root@192.168.20.10:/root/test
1、在使用scp进行复制时,要确保当前用户有足免的权限访问源文件和远程主机上的目录。
2、如果远程主机上的SSH服务没有启动或是配置的不正确,此时scp命令是无法正常工作的。
3、日常工作中使用-v参数(等效于debug),可以有效帮助你调试连接问题。
喜欢古诗词的同学们,可以移步关注「纸间有糖」