rcp、scp和rsync

scp、rcp和rsync这三个工具的区别,

rcp 是不加密的,scp是rcp的加强版;

scp 相当于是复制黏贴,如果有的话是覆盖,把文件全部复制黏贴过去,当文件修改后还是把所有文件复制黏贴过去,比较耗时间,不智能,scp是加密的;

rsync 是复制,如果有重复的文件,会直接跳过,而且它有自己的算法优化,第一次是把所有文件同步过去,当文件修改后只把修改的文件同步过去,叫做增量同步,所以用rsync做文件的复制要scp的速度快。

1.scp命令用于Linux之间复制文件和目录,scp是securcopy的缩写,scp是Linux系统工具下基于ssh登陆进行安全的远程文件拷贝命令;

2. scp它可以把文件拷贝到远程去,也可以本地拷贝到本地,scp相当于是复制黏贴,如果有的话是覆盖,比较耗时间,不智能;

3. scp a/a.txt  a/b.txt  ip地址:/目标路径/ 这样是把A目录下的a.txt、b.txt 同步到B服务器上的/目标路径/目录下;

4. scp -r a/   192.168.1.12:/tmp/a/ 这里-r减r表示目录,192.168.1.12 表示目标机器ip,:表示是固定格式字符,/tmp/b/表示目标路径,这条命令是把a目录下的文件拷贝到目标路径的b目录下去,相当于给它改了个名字,当然也可以写/a/;

5. 在ip地址前面不指定用户的名字,那么默认就是当前root用户;

6. scp -r a/   root@192.168.1.12:/tmp/a/  在其他用户下要拷贝到root用户下 就要给它指定用户,用@符号分隔;

7. scp -r 192.168.1.12:/tmp/a/   ./a/ 这样是从远程把目录拷贝到当前目录下,它支持从远程拷贝到本地;

8. 这是scp,查看它用哪个安装包先which scp查看绝地路径, 再rpm -qf  /usr/bin/scp查看。

 

rsync 

1. rsync它叫做远程同步工具,它也可以本地拷贝到本地,它最大的优势是远程拷贝,并且可以增量同步,rsync它的命令格式几乎跟scp命令格式一样;

2. rsync  a/a.txt  a/b.txt  a/c.txt  目标主机ip:目标路径(新名字) 这里当此目标路径下已经有了a/a.txt和a/b.txt ,那么这里a/c.txt就属于新增文件,那么它在同步的时候就只同步这个a/c.txt文件,这就叫做增量同步,也就是同步时只对增加和修改的文件进行同步;

3. rsync它不对删除的文件进行同步,例如 如果两台服务器上都有一个相同的文件夹,其中一台服务器删除了文件夹中的一个文件,那么同步发送给另一个服务器这个文件夹后,另一个服务器的这个文件夹中被删的这个文件夹还在,不会被删除;

4. rsync /tmp/1.txt  /tmp/2.txt 这样不加任何选项本地拷贝到本地的源和目标;

5. rsync /tmp/1.txt  username@192.168.1.12.:/tmp/2.txt 这样是本地的文件推送到远程上面去,/tmp/1.txt是本地的文件,username是远程的用户,用@符号,192.168.1.12.是远程用户的ip,/tmp/2.txt是远程的路径,这么也可以理解成上传;

6. rsync username@192.168.1.12:/tmp/2,txt   /tmp/1.txt 这样是把远程的文件同步到我们本地上,下载下来;

7. rsync /tmp/1.txt username@192.168.1.12::test/1.txt 这里的test后面会讲到;

8. rsync username@192.168.1.12::test/1.txt    /tmp/1.txt 这样也是把远程的文件同步到我们本地上,下载下来,一个:和两个::它们是有区别的;

rsync的一些选项,rsync几乎每天都会用,比较重要

1. rsync -a 这个a里面包含(-r、-v、-l、-p、-t、-g、-o、-D)它是这么多综合的选项,它们分别的含义 -r表示目录,-v表示可视化,-l表示保留软连接,-p表示保持文件的权限,-t表示保持文件的time,-g表示保持所属组,-o表示所属主,减大D -D表示保持设备文件信息;

2. rsync -av 这两个选项是用的最多的,也可以说是通用的;

3. rsync -av /tmp/1.txt   /root/yang.txt 这里是把本地的/tmp/1.txt 发送到/root/yang.txt/下,给它改了个名字叫yang.txt,这样发送文件会把详细信息都显示出来;

4. -l 减小l 它会原封不动的把一个软连接拷贝到另外一个远程的目录下去;

5. rsync -a  --no-l  -v usr/    /tmp/123/ 这里--no-l 表示从a选项中刨除小l的选项;

6. -L 减大L 它会把真正的源文件拷贝过去,大L的目的就是把软连接对应的源文件给它同步过来;

7. rsync -avLz  usr/  /tmp/123/ 这里加z选项表示再传输的过程中压缩,这样会加快同步速度;

8. rsync -avu  usr/  /tmp/123/这里加u选项表示在备份文件被修改之后,用源文件同步备份文件时,防止源文件覆盖已经被修改的备份文件;

9. rsync -av  --delete  usr/  /tmp/123/这里--delete 表示同步的时候让文件保持一致,比如/tmp/下的文件比usr/下多,那么usr/下文件同步到/tmp/123/下后并不能做到两个文件一直,只能把usr/下的文件同步过来,所以加上--delete把不一致的文件删除掉,保持文件一致; 

10. rsync -av --evclude="*.txt"  usr/  /tmp/123/ 这里--evclude表示过滤所有txt的文件不给它同步,过滤要使用等于号,它支持通配符号,还可以同时写多个表达式;

11. rsync -avP  --bwlimit=100  usr/  /tmp/123/ 这里大P等于是--Progress这个选项它比-v看的更清楚一些,能看到实时的传输速度,--bwlimit=100 表示指定传输同步的速度限制每秒100kb;

 

ssh方式

1. 推:rsync -avzPL /root/usr/ 192.168.31.112:/tmp/usr/ 这里表示把usr下的文件拷贝到远程的usr下,拷贝真实文件,去掉大L会拷贝软连接过去,z是传输过程中压缩,传输过去之后自动解压;

2. 拉:rsync -avPL 192.168.31.112:/tmp/usr/   ./usr   这里表示把远程的备份文件拷贝过来;

3. 修改prot端口 vi /etc/ssh/ssd_config 修改prot的端口号,注意自定义端口号不能小于1024,因为1-1024是留给系统用的,ssh不支持那么小的端口号,改完以后运行/etc/init.d/sshd restart 重启生效;

4. strace 用来追踪一个文件执行的进程,当文件没有日志记录的情况下使用;

5. rsync -avPL -e "ssh -p 2200" 192.168.31.112:/tmp/usr/    /usr/ 这里-e “ssh -p 2200"表示指定端口号;

 

密钥方式

 1. 上面这是通过ssh方式去同步,要输入密码;ssh同步必须要输入密码,但是我们要写脚本的话就不能手动输入密码了,那我们就要使用密钥方式;

2. 用ssh-keygen 生成密钥对,然后一直回车就是表示不存在公钥的密码,让他生成公钥和私钥;

3. 用cat .ssh/id_rsa.pub查看生成的公钥字符串,复制拷贝到对方机器上去的指定目录下,没有目录的话要先mkdir创建.ssh ,然后vi 打开.ssh/authorized_keys把生成的公钥复制进来保存,再给它更改权限chmod 600 .ssh/authorized_keys ,再用setenforce 0 关闭防火墙,这时候再去同步就不用输入密码了; 

 

另外一种方式cs架构,客户端服务端

1. 使用vi /etc/rsync.conf 写一个配置文件启动服务,这个配置文件不用重启服务直接保存后就生效;

写入

log file=/var/log/rsync.log 表示指定日志;

pid file=/var/run/rsyncd.pid 表示指定pid;

address=192.168.0.10 表示可以定义绑定的ip;

以上部分为全局配置部分,以下为模块内的设置;

[test] 表示模块名,可以自定义;

path=/tmp/rsync 表示该模块对应在哪个目录下;

use chroot=true 表示是否限定在该目录下,默认为true,当有软连接时。需要改为fasle;

max connections=4 表示指定最大可以连接的客户端数;

read only=no 表示是否为只读;

list=true 表示是否可以列出模块名;

uid=root 表示以哪个用户的身份去传输;

gid=root 表示以哪个组的身份来传输;

auty users=test 表示指定验证用户名,可以不设置;

secrete file=/etc/rsyncd.passwd 表示指定密码文件,如果设定验证用户,这一项必须设置;

hosts allow=192.168.0.10 表示只允许哪个机器去连我;

2. 前面这些配置写好wq保存退出后,执行rsync --daemon 给它启动;

3. ps aux |grep rsync 查看有没有启动;

4. netstat -lnp |grep 873 查看有没有监听873端口;

 

实验客户端与服务端通信;

5. rsync -av 3.txt  192.168,31,112::test/4,txt 这样是把客户端的目标推送过来到服务端,如果服务端缺少目录,要给它先创建好,因为它不会自己去创建;

6. rsync -avL 192.168.31.112::test/     ./yang/ 这样是把服务端上的原文件拉到客户端同步过来,这时候因为是被限制在了指定目录下,所被限制的文件做了软连接是过不去的,再另外创建一个新的软连接,新的指向,就可以过去了,这就是chroot的作用;

7. 如果read only=yes 给它修改为只读的,那么文件会同步失败;

8. 如果list=no 把模块名改为no,这样就看不到模块名,相对安全。

 

--password-file=执行的脚本文件     ,要把密码写入这个执行脚本的文件,这个命令可以在写脚本的时候使用,不用手动输入密码。

 

使用inode号删除文件方法:

ls -i 加文件名 查看inode号;

find 文件名 -inum 加inode号 找出这个文件;

find 文件名 -inum 加inode号  |xargs rm -f 。