笔者刚接触到服务器这个概念,所以就类似于一个在深山老林中的人刚接触电脑一样,所以首先想介绍一下啥是服务器。然后再记录一下scp
的用法
一、科普
- 服务器是计算机的一种,它比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。服务器具有高速的CPU运算能力、长时间的可靠运行、强大的I/O外部数据吞吐能力以及更好的扩展性。根据服务器所提供的服务,一般来说服务器都具备承担响应服务请求、承担服务、保障服务的能力。服务器作为电子设备,其内部的结构十分的复杂,但与普通的计算机内部结构相差不大,如:cpu、硬盘、内存,系统、系统总线等。根据不同的用途,服务器也分为好多种(笔者搜“服务器百度百科”,然后下面就出来:网络服务器、云服务器、电脑服务器……)百度知道上面也有:web服务器,dns服务器,存储服务器,代理服务器,防火墙系统,email系统,ftp服务器……
- 超算、服务器、个人PC的区别:超级计算机指得是具有很强计算能力的计算机集群,一般包括好几千颗高性能的cpu,计算能力是最强的。而服务器的范围很广,但说白了也是一台高性能的电脑,用来专门对外提供网页,查询,存储或初级计算服务等等功能,可以是多cpu,也可以是单cpu,但规模和超级计算机比起来要差很多。而个人电脑就是只有一颗或多颗(很少有用多cpu作个人电脑的,费电)的普通电脑,可以完成上网,编程,看电影,玩游戏等。计算能力差,不适合作科学计算。
好了,现在笔者知道了,服务器、超算都是电脑,它们只不过性能更高。可以简单将服务器、超算、个人PC的性能做如下比较:
- 性能:个人PC<服务器<超算
- 价格:个人PC<服务器<超算
- 规模:个人PC<服务器<超算
ps:一分钱一分货的道理彰显无遗。
二、scp 简单使用
1、cp
超算和服务器一般都是linux系统,linux系统中拷贝文件的指令是cp
(copy file),其用法简单介绍如下所示:
cp [options] source dest #or
cp [options] source... directory
#example
cp -r test/ newtest #dir
cp ./a.sh ../ #file
参数说明:
- -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
- -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
- -f:覆盖已经存在的目标文件而不给出提示。
- -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
- -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
- -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
- -l:不复制文件,只是生成链接文件。
【注】r和R参数的区别:-r
的作用是递归,可复制目录,如果复制目录必须加此选项。-R
的作用仅仅是复制目录。两者功能上是等价的。
2、scp
Linux scp
(secure copy) 命令用于 Linux 之间复制文件和目录;scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
scp [options] file_source file_target
#example
scp usr1@IP1:dir/a.sh ./ #file
scp ./a.sh usr1@IP1:dir/ #file
scp -r usr1@IP1:dir/ ./ #dir
关于file_source
:
[[user@]host1:]file1
关于file_target
:
[[user@]host2:]file2
关于file_source
与file_target
间的空格:可加...
,也可不加
关于options
:
[-1246BCpqrv]
[-c cipher]
[-F ssh_config]
[-i identity_file]
[-l limit]
[-o ssh_option]
[-P port]
[-S program]
参数说明:
- -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)的选项。
3、一个小问题:
笔者在写这篇博文之前曾经遇到一个小问题,问题描述如下:笔者现在有两个服务器的号,
A IP1:usr1
B IP2:usr2
然后笔者想通过scp跨服务器拷贝文件,然后笔者尝试了如下命令:
在A端
scp a.sh usr2@IP2:dir2/ #can't
ping IP2 #can't
在B端
scp b.sh usr1@IP1:dir1/ #can
ping IP1 #can
也就是说,A的【开放性】要优于B,在B端将B的文件拷贝到A端可以,反之,从A端将A的文件拷贝到B端不可以。那么如何将A的文件拷贝到B端呢?可以在B端将A的文件拷贝到B端,命令如下:
在B端
scp usr1@IP1:dir1/a.sh ./
这样问题就迎刃而解了。
另外笔者发现,在windows下用cmd也可以scp
;关于【开放性】,笔者暂认为:个人PC<服务器<超算。
要用scp的话,考虑的优先级为:
个人PC>服务器>超算
关于IP查询:
ipconfig #cmd,找ipv4
ifconfig #linux,找inet