0%

Linux 的 scp 命令

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
2
3
$ scp src_file user@192.168.100.123:~/dest_file
user@192.168.100.123's password:
src_file 100% 44 20.0KB/s 00:00

命令执行后,会提示输入远程机器的密码,后面会显示传输成功的文件。

目录传输

而传输一个目录不加任何参数的话,会报错如下:

1
2
3
$ scp src_dir user@192.168.100.123:~/dest_dir
user@192.168.100.123's password:
src_dir: not a regular file

提示要传输的不是常规的文件,需要加上参数-r递归传输如下:

1
2
3
4
5
6
7
$ scp src_dir user@192.168.100.123:~/dest_dir
user@192.168.100.123's password:
a 100% 75 35.1KB/s 00:00
b 100% 48KB 14.7MB/s 00:00
c 100% 581 326.4KB/s 00:00
d 100% 48KB 15.3MB/s 00:00
e 100% 278MB 130.7MB/s 00:02

显示详细进度

对于小文件而言,没有问题,但是如果文件比较大,比如有几个GB,那么此时-v参数就会比较有帮助:

1
2
3
4
5
$ scp a user@192.168.100.123:~/b
user@192.168.100.123's password:
a 0% 0 0.0KMB/s --:-- ETA
a 30% 110MB 130.7MB/s 00:02
a 100% 278MB 130.7MB/s 00:02

会实时更新传输的进度。

保持初始状态

加上-p参数就会保留文件的修改时间,访问时间和访问权限:

1
$ scp -p a user@192.168.100.123:~/b

这个对于有些对时间很有控制欲的人很有帮助。

所以最常用的用法是(文件和文件夹均适用):

1
$ scp -rvp filename/directory user@192.168.100.123:~/
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道