换服务器或添加服务器时常会用到两台服务器之间复制文件,这个时候就可以使用scp命令。


scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。


两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。

scp一般有六种使用方法:

本地复制远程文件:(把远程的文件复制到本地)

scp root@www.test.com:/val/test/test.tar.gz /val/test/test.tar.gz

远程复制本地文件:(把本地的文件复制到远程主机上)

scp /val/test.tar.gz root@www.test.com:/val/test.tar.gz

本地复制远程目录:(把远程的目录复制到本地)

scp -r root@www.test.com:/val/test/ /val/test/

远程复制本地目录:(把本地的目录复制到远程主机上)

scp -r /val/ root@www.test.com:/val/

本地复制远程文件到指定目录:(把远程的文件复制到本地)

scp root@www.test.com:/val/test/test.tar.gz /val/test/

远程复制本地文件到指定目录:(把本地的文件复制到远程主机上)

scp /val/test.tar.gz root@www.test.com:/val/


注意:前面的一个是待复制的文件或目录,后面的一个是指定复制到哪里。如:

scp /val/test.tar.gz root@www.test.com:/val/test.tar.gz

中的前面 /val/test.tar.gz 是要复制的文件,后面root@www.test.com:/val/test.tar.gz是指定复制到哪里和对应的文件名。如果两个对换则功能相反。如果要复制的是目录则使用  -r 参数递归复制目录。



当同时有多个服务器的文件要复制到本地目录:

scp root@192.168.0.1:/var/cp1.tar.gz root@192.168.0.2:/var/cp2.tar.gz /var/tmp/


注意:最后面的一个必需是目录,前面的必须是文件,才能成功批量复制,复制中会提示多次输入密码。


[root@localhost ~]# scp --help
usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2


命令参数:
-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)的选项。