日期:2014-05-16  浏览次数:20713 次

如何在linux下用rsync同步文件以及它的用法和scp的用法

如何在linux下用rsync同步文件以及它的用法和scp的用法
2010年06月06日
  root@legend-laptop:/home/legend/httpd~/cgi-bin# rsync -vub root@192.168.0.16:/root/httpd~/cgi-bin/* .将0.16上cgi-bin下的文件同步到当前文件夹(v代表可见信息,b代表如果有同名文件且已更新,就创建备份,u只是同步更新文件)特别注意,如果当前文件已有其他东西,而cgi-bin下没有,则不影响这些东西,并不是说同步了两边文件夹就要一模一样。
  使用 scp 指令
  可以使用 scp 指令来透过一个安全且加密的连线在机器间传输档案,就如同 rcp 指令。
  传输一个本机档案到远端机器的一般语法如下:
  scp localfile username@tohostname:/newfilename
  localfile 代表来源档案,而 username@tohostname:/newfilename 代表目的地。
  如要传输本机档案 shadowman 到您在 penguin.example.net 主机中的帐号,请在 shell 提示符号下输入以下指令(使用您的使用者名称取代 username):
  scp shadowman username@penguin.example.net:/home/username
  这将会传输本机档案 shadowman 到 penguin.example.net 主机上的 /home/username/shadowman。
  如果要传输一个远端的档案到本机系统,一般的语法如下:
  scp username@tohostname:/remotefile /newlocalfile
  remotefile 代表来源档案,而 newlocalfile 代表目的地。
  还可以指定多重的档案当作来源档案,例如要传输 /downloads 目录的内容到远端机器 penguin.example.net 上一个既存的目录称为 uploads,请在 shell 提示符号下输入以下指令:
  scp /downloads/* username@penguin.example.net:/uploads/
  附:
  一旦您的网络配置好,会有一些用于传输文件的选项。cp是用来拷贝本地挂载的文件系统的。在不信任的网络上拷贝文件应该使用 scp (secure copy),实际上 Knoppix 不会让您使用任何别的方式。scp 使用 ssh 来传输加密的文件,让您可以不用设置 NFS 或 Samba 就可以移动文件。在网络上接收文件的机器上您还需要有一个 ssh 服务器。下面这个命令是拷贝整个目录:
  # scp -rp /mnt/hda5/home/carla 192.168.1.5:/home/carla/tmp
  接下来所有您要做的就是在两台机器上设置相同的帐户。用 root 是最简单的,但是有潜在的危险。当然,您可以在系统上创建所需要的帐号,使用 useradd和passwd命令。然后像前面的示例那样运行 scp 命令,就可以了。
  您第一次连接的时候,将得到一条消息,"The authenticity of host X can't be established...are you sure you want to continue connecting?"回答"yes",它将向你询问 SSH 服务器的 root 口令,然后您就可以任意操作了。以非 root 用户身份移动文件:
  # scp -rp /mnt/hda5/home/carla carla@192.168.1.5:/home/carla/tmp
  scp
  使用 scp 在远程机器上 copy 档案
  例如:
  copy 本地的档案到远程的机器上
  scp /etc/lilo.conf k@net67.ee.oit.edu.tw:/home/k
  会将本地的 /etc/lilo.conf 这个档案 copy 到 net67.ee.oit.edu.tw,使用者 k 的家目录下。
  copy远程机器上的档案到本地来
  scp k@net67.ee.oit.edu.tw:/etc/lilo.conf /etc
  会将 net67.ee.oitdu.tw 中 /etc/lilo.conf 档案 copy 到本地的 /etc 目录下。
  保持从来源 host 档案的属性
  scp -p k@net67.ee.tw:/etc/lilo.conf /etc
  在此必须注意使用者的权限是否可读取远程上的档案,若想知道更多关于 scp 的使用方法,可去看看 scp 的使用手册。
  ssh-keygen
  产生公开钥 (pulib key) 和私人钥 (private key),以保障 ssh 联机的安性,当 ssh 连 shd 服务器,会交换公开钥上,系统会检查 /etc/ssh_know_hosts 内储存的 key,如果找到客户端就用这个 key 产生一个随机产生的session key 传给服务器,两端都用这个 key 来继续完成 ssh 剩下来的阶段。
  它会产生 identity.pub、identity 两个档案,私人钥存放于identity,公开钥 存放于 identity.pub 中,接下来使用 scp 将 identity.pub copy 到远程机器的家目录下.ssh下的authorized_keys。 .ssh/authorized_keys(这个 authorized_keys 档案相当于协议的 rhosts 档案),之后使用者能够不用密码去登入。RSA的认证绝对是比 rhosts 认证更来的安全可靠。
  执行:
  scp identity.pub k@linux1.ee.oit.edu.tw:.ssh/authorized_keys
  若在使用 ssh-keygen 产生钥匙对时没有输入密码,则如上所示不需输入密码即可从 net67.ee.oit.edu.tw 去登入 linux1.ee.oit.edu.tw。在此,这里输入的密码可以跟帐号的密码不同,也可以不输入密码。 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的"Rsync算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
  Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配置文件。Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。
  Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具。
  Rsync的基本特点如下:
  1.可以镜像保存整个目录树和文件系统;
  2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
  3.无须特殊权限即可安装;
  4.优化的流程,文件传输效率高;
  5.可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接;
  6.支持匿名传输。 Rsync只所以同步文件的速度相当快,是因为"Rsync同步算法"能在很短的时间内计算出需要备份的数据,关于Rsync的同步算法描述如下:
  假定在1号和2号两台计算机之间同步相似的文件A与B,其中1号对文件A拥有访问权,2号对文件B拥有访问权。并且假定主机1号与2号之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成:
  1、2号将文件B分割成一组不重叠的固定大小为S字节的数据块,最后一块可能会比S 小。
  2、2号对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验。
  3、2号将这些校验结果发给1号。
  4、1号通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),来寻找与文件B的某一块