scp即secure copy,安全拷贝的意思,使用方法与cp命令是差不多的,区别在于cp只能在本机上挪来挪去,而scp是用来跨机器拷贝的。
scp功能:跨机器拷贝文件或目录
延伸理解:既然说是跨机器拷贝文件或者目录,自然是可以上传也可以下载。
scp格式:上传:scp [参数] 被上传的文件或目录 远程机器的文件或目录(remote_username@remote_ip:remote_folder/remote_file)
下载:scp [参数] 远程机器的文件或目录(remote_username@remote_ip:remote_folder/remote_file) 被上传的文件或目录
为什么要使用scp命令,什么时候才会用到scp命令呢?
有的朋友可能会有疑问,我不是已经与filezilla、winscp客户端软件吗,为什么还需要使用scp命令来在机器上拷贝文件呢?原因自然是有的,我的理解是这样的:
-
如果使用那些可视化的客户端软件在两台linux机器上进行文件的传输,必然还要经过windows的中转,过程相比直接使用命令的话还是相当繁琐。
-
如果我们需要在shell脚本中动态的从一个机器上拷贝或者上传文件,就必须使用scp或者其他命令来实现了
好的,知道了为什么要使用,下面举例说明,为了方便,现在假使有两台机器,ip分别是10.139.57.168(以下简称168)、10.253.3.34(以下简称34),我们来看例子:
例一:把168机器上的"/alidata1/admin/WebTest/zhao/db.tar.gz"文件上传到34的“/biproject/task_file/zhao”目录下,我们需要在168机器上执行scp上传命令:
-bash-4.2$ ls db.tar.gz testdir -bash-4.2$ scp db.tar.gz data_webApp@10.253.3.34:/biproject/task_file/zhao data_webApp@10.253.3.34's password: db.tar.gz 100% 31 0.0KB/s 00:00 -bash-4.2$
赶紧跑到34上看一下,是否上传成功了呢?
[data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 zhao]$ ls [data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 zhao]$ ls db.tar.gz [data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 zhao]$
好,上传文件的功能完美解决。
例二:把168机器上的"/alidata1/admin/WebTest/zhao/testdir"目录上传到34的“/biproject/task_file/zhao”目录下,我们需要在168机器上执行scp上传命令:
-bash-4.2$ ls db.tar.gz testdir -bash-4.2$ scp -r testdir data_webApp@10.253.3.34:/biproject/task_file/zhao data_webApp@10.253.3.34's password: redis.conf 100% 0 0.0KB/s 00:00 http.conf 100% 0 0.0KB/s 00:00 -bash-4.2$
再到目标机器34上去瞅瞅呗:
[data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 zhao]$ ls db.tar.gz [data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 zhao]$ ls db.tar.gz testdir [data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 zhao]$ cd testdir/ [data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 testdir]$ ls http.conf redis.conf [data_webApp@GYB-T-XXX-ZATECH-DATABUSI-01 testdir]$
可以看到当在168上执行完了上传后再在34上ls的时候,testdir目录已经被上传过来了。
注意:scp的参数有很多,但是最常用的就是-r,-r参数是recursion(递归)的缩写,在scp操作对象时目录的时候,需要加上-r参数。
例三、通过-P指定远程机器端口
scp -r -P 9060 installs root@192.168.23.3:/root/
接下来就是如何使用scp命令来从远程机器上下载文件到本机了,我们看scp的命令格式:
scp格式:上传:scp [参数] 被上传的文件或目录 远程机器的文件或目录(remote_username@remote_ip:remote_folder/remote_file)
下载:scp [参数] 远程机器的文件或目录(remote_username@remote_ip:remote_folder/remote_file) 被上传的文件或目录
发现只是上次和下载的区别只是把后边两个参数的位置交换了一下,把远程机器写在后边就是上传,远程机器下载前边就是下载了,上边我举例说明了上传,下载和它仅仅这一点区别,我就不需要再演示一遍了吧,比着葫芦画瓢的事情,如果你连这也不会,还是找个没人的地方滴几滴痛泪吧。