Linux scp命令
linux scp
命令主要用于远程复制传输文件。
官方定义为:
scp — secure copy (remote file copy program)
是安全拷贝的缩写,主要是因为scp
使用了ssh
的安全机制。
scp
应该是接触Linux的第一个用于在2台以上的服务器上做数据传输的不二命选,当然,ftp
除外了。
语法
语法看着挺复杂:
1 | $ scp [-12346BCpqrv] [-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 [options] file_source file_target |
差不多有20个参数,不过常用的有如下几个:
- -p:保留原文件的修改时间,访问时间和访问权限。
- -r: 递归复制整个目录。
- -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
无参数传输
默认情况下,传输一个文件不需要任何参数:
1 | $ scp src_file user@192.168.100.123:~/dest_file |
命令执行后,会提示输入远程机器的密码,后面会显示传输成功的文件。
目录传输
而传输一个目录不加任何参数的话,会报错如下:
1 | $ scp src_dir user@192.168.100.123:~/dest_dir |
提示要传输的不是常规的文件,需要加上参数-r
递归传输如下:
1 | $ scp src_dir user@192.168.100.123:~/dest_dir |
显示详细进度
对于小文件而言,没有问题,但是如果文件比较大,比如有几个GB,那么此时-v
参数就会比较有帮助:
1 | $ scp a user@192.168.100.123:~/b |
会实时更新传输的进度。
保持初始状态
加上-p
参数就会保留文件的修改时间,访问时间和访问权限:
1 | $ scp -p a user@192.168.100.123:~/b |
这个对于有些对时间很有控制欲的人很有帮助。
所以最常用的用法是(文件和文件夹均适用):
1 | $ scp -rvp filename/directory user@192.168.100.123:~/ |