八周二次课(5月14日)

10.28 rsync工具介绍

rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。

使用rsync -av /etc/passwd /tmp/1.txta选项就是包含了rtplgoD选项 ,v 是可视化,可以看到拷贝的过程

[root@localhost ~]# rsync -av /etc/passwd /tmp/1.txt
sending incremental file list
passwd

sent 1471 bytes  received 31 bytes  3004.00 bytes/sec
total size is 33397  speedup is 20.0
[root@localhost ~]# rsync -av /etc/passwd [email protected]:/tmp/1.txt同时支持远程去拷贝,同步

rsync 格式 SRC(源文件) DEST(目标目录)
rsync [OPTION] ... SRC DEST
rsync [OPTION] ... SRC [user@]host:DEST
rsync [OPTION] ... [user@]host:SRC DEST
rsync [OPTION] ... SRC [user@]host::DEST
rsync [OPTION] ... [user@]host::SRC DEST

10.29/10.30 rsync常用选项

rsync常用选项
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
R 如果目标目录不存在, 可以创建目标主机的级联路径

rsync -av /root/sc /tmp/dest/ 同步目录约定要加斜杠

[root@localhost ~]# ls
111          1.txt      2.txt      aikerlinux         biji.txt    test
123          1.txt~     2.txt.bak  anaconda-ks.cfg.1  get-pip.py
1_heard.txt  1.txt.bak  3.txt      awk                grep
1_sorft.txt  234        4.txt      bb.txt             sed
[root@localhost ~]# ls 111
12.tx~  12.txt  12_txt.swp  222  4913  aiker3
[root@localhost ~]# ls -l 111
总用量 16
-rw-r--r--. 1 root root     0 3月  23 15:29 12.tx~
-rw-r--r--. 1 root root    65 3月  23 15:32 12.txt
-rw-r--r--. 1 root root 12288 3月  23 15:29 12_txt.swp
drwxr-xr-x. 2 root root     6 3月  23 15:23 222
-rw-r--r--. 1 root root     0 3月  23 15:29 4913
lrwxrwxrwx. 1 root root    11 3月  24 21:17 aiker3 -> /tmp/aiker2
[root@localhost ~]# ls /tmp/
1.cap
1.txt
my.ipt
systemd-private-fab301f859c4489e8be3f5afe72fed8b-vmtoolsd.service-ItQGyG
[root@localhost ~]# 

把/root/111/目录 同步到 /tmp/111_dest/ 下并且改名 111_dest
-av的作用就是 拷贝目录、时间属性、属主属组,软链接,通通拷贝到111_test目录下去吗

[root@localhost ~]# rsync -av /root/111/ /tmp/111_dest/
sending incremental file list
created directory /tmp/111_dest
./
.12.txt.swp
.12.txt.swx
12.txt
12.tx~
12_txt.swp
4913
aiker3 -> /tmp/aiker2
222/

sent 12774 bytes  received 136 bytes  25820.00 bytes/sec
total size is 12364  speedup is 0.96
[root@localhost ~]# 

下面来对比下俩个目录下的文件,软链接也同步过去了,这就时一个小写的l ,

[root@localhost ~]# ls -l 111/
总用量 16
-rw-r--r--. 1 root root     0 3月  23 15:29 12.tx~
-rw-r--r--. 1 root root    65 3月  23 15:32 12.txt
-rw-r--r--. 1 root root 12288 3月  23 15:29 12_txt.swp
drwxr-xr-x. 2 root root     6 3月  23 15:23 222
-rw-r--r--. 1 root root     0 3月  23 15:29 4913
lrwxrwxrwx. 1 root root    11 3月  24 21:17 aiker3 -> /tmp/aiker2
[root@localhost ~]# ls -l /tmp/111_dest/
总用量 16
-rw-r--r-- 1 root root     0 3月  23 15:29 12.tx~
-rw-r--r-- 1 root root    65 3月  23 15:32 12.txt
-rw-r--r-- 1 root root 12288 3月  23 15:29 12_txt.swp
drwxr-xr-x 2 root root     6 3月  23 15:23 222
-rw-r--r-- 1 root root     0 3月  23 15:29 4913
lrwxrwxrwx 1 root root    11 3月  24 21:17 aiker3 -> /tmp/aiker2
[root@localhost ~]# 

-L 是同步软链接时把源文件给同步

[root@localhost ~]# rsync -avL /root/111/ /tmp/111_dest/
sending incremental file list
symlink has no referent: "/root/111/aiker3"

sent 141 bytes  received 13 bytes  308.00 bytes/sec
total size is 12353  speedup is 80.21
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]
[root@localhost ~]# ls -l 111
总用量 16
-rw-r--r--. 1 root root     0 3月  23 15:29 12.tx~
-rw-r--r--. 1 root root    65 3月  23 15:32 12.txt
-rw-r--r--. 1 root root 12288 3月  23 15:29 12_txt.swp
drwxr-xr-x. 2 root root     6 3月  23 15:23 222
-rw-r--r--. 1 root root     0 3月  23 15:29 4913
lrwxrwxrwx. 1 root root    11 3月  24 21:17 aiker3 -> /tmp/aiker2
[root@localhost ~]# touch /tmp/aiker2   (由于之前的软链接文件已损坏,所以创建一个软链接文件)
[root@localhost ~]# ls -l 111
总用量 16
-rw-r--r--. 1 root root     0 3月  23 15:29 12.tx~
-rw-r--r--. 1 root root    65 3月  23 15:32 12.txt
-rw-r--r--. 1 root root 12288 3月  23 15:29 12_txt.swp
drwxr-xr-x. 2 root root     6 3月  23 15:23 222
-rw-r--r--. 1 root root     0 3月  23 15:29 4913
lrwxrwxrwx. 1 root root    11 3月  24 21:17 aiker3 -> /tmp/aiker2
[root@localhost ~]# 

-再来试下

[root@localhost ~]# rsync -avL /root/111/ /tmp/111_dest/
sending incremental file list
aiker3

sent 193 bytes  received 32 bytes  450.00 bytes/sec
total size is 12353  speedup is 54.90
[root@localhost ~]# 

[root@localhost ~]# ls -l /tmp/111_dest/
总用量 16
-rw-r--r-- 1 root root     0 3月  23 15:29 12.tx~
-rw-r--r-- 1 root root    65 3月  23 15:32 12.txt
-rw-r--r-- 1 root root 12288 3月  23 15:29 12_txt.swp
drwxr-xr-x 2 root root     6 3月  23 15:23 222
-rw-r--r-- 1 root root     0 3月  23 15:29 4913
-rw-r--r-- 1 root root     0 3月  13 22:27 aiker3
[root@localhost ~]# 
[root@localhost ~]# ls -l 111
总用量 16
-rw-r--r--. 1 root root     0 3月  23 15:29 12.tx~
-rw-r--r--. 1 root root    65 3月  23 15:32 12.txt
-rw-r--r--. 1 root root 12288 3月  23 15:29 12_txt.swp
drwxr-xr-x. 2 root root     6 3月  23 15:23 222
-rw-r--r--. 1 root root     0 3月  23 15:29 4913
lrwxrwxrwx. 1 root root    11 3月  24 21:17 aiker3 -> /tmp/aiker2
[root@localhost ~]# 

-在aiker2里面写入一些东西

[root@localhost ~]# echo "12133keidkd" > /tmp/aiker2

-再重新拷贝下,再看下这个aiker3文件

[root@localhost ~]# rsync -avL /root/111/ /tmp/111_dest/
sending incremental file list
aiker3

sent 209 bytes  received 32 bytes  482.00 bytes/sec
total size is 12365  speedup is 51.31
[root@localhost ~]# ls -l /tmp/111_dest/
总用量 20
-rw-r--r-- 1 root root     0 3月  23 15:29 12.tx~
-rw-r--r-- 1 root root    65 3月  23 15:32 12.txt
-rw-r--r-- 1 root root 12288 3月  23 15:29 12_txt.swp
drwxr-xr-x 2 root root     6 3月  23 15:23 222
-rw-r--r-- 1 root root     0 3月  23 15:29 4913
-rw-r--r-- 1 root root    12 3月  13 22:32 aiker3
[root@localhost ~]# ls -l /tmp/111_dest/aiker3
-rw-r--r-- 1 root root 12 3月  13 22:32 /tmp/111_dest/aiker3
[root@localhost ~]# cat !$
cat /tmp/111_dest/aiker3
12133keidkd
[root@localhost ~]# 
  • [ ] 这就是-L的作用,它可以把软链接所指向的源文件给拷贝过去,

--delete 删除DEST中SRC没有的文件
-111目录 和 111_dest 目录下面的文件是一样的,现在在后者目录创建一个新的文件 new.txt的文件

[root@localhost ~]# ls 111/
12.tx~  12.txt  12_txt.swp  222  4913  aiker3
[root@localhost ~]# ls /tmp/111_dest/
12.tx~  12.txt  12_txt.swp  222  4913  aiker3

[root@localhost ~]# touch /tmp/111_dest/new.txt
[root@localhost ~]# 

-对于源文件111目录来讲,不管你多不多其他文件,只要你对方目录下面有我的文件就可以,但是有时候要求比较严谨,不允许添加任何文件,需要和111目录文件保持一致,-delete 把111_test 中 111目录下没有的文件 给过滤掉

[root@localhost ~]# rsync -avL --delete /root/111/ /tmp/111_dest/
sending incremental file list
./
deleting new.txt

sent 157 bytes  received 16 bytes  346.00 bytes/sec
total size is 12365  speedup is 71.47
[root@localhost ~]# 
[root@localhost ~]# ls !$
ls /tmp/111_dest/
12.tx~  12.txt  12_txt.swp  222  4913  aiker3
[root@localhost ~]# 
  • [ ] 过程中有一个deleting new.txt 可以看到把这个new.txt文件给删除了 ,问了和源文件 统一

--exclude 过滤指定文件,如--exclude "logs" 会把文件名包含logs的文件或者目录过滤掉不同步
-做之前把之前111_dest/目录里的文件删掉

[root@localhost ~]# rm -rf /tmp/111_dest/*

-现在我要做一个过滤,把所有的txt文件全部过滤出来,不需要你拷贝txt文件,

[root@localhost ~]# rsync -avL --exclude "*.txt" /root/111/ /tmp/111_dest/

sending incremental file list
./
12.tx~
12_txt.swp
4913
aiker3
222/

sent 12605 bytes  received 95 bytes  25400.00 bytes/sec
total size is 12300  speedup is 0.97
[root@localhost ~]# 

[ ] 没有出现12.txt ,因为添加了--exclude *.txt
--include 还可以多个添加,再加一个把以aiker开头的文件也过滤掉

[root@localhost ~]# !rm
rm -rf /tmp/111_dest/*

[root@localhost ~]# rsync -avL --exclude "*.txt" --exclude "aiker*" /root/111/ /tmp/111_dest/
sending incremental file list
./
12.tx~
12_txt.swp
4913
222/

sent 12535 bytes  received 76 bytes  25222.00 bytes/sec
total size is 12288  speedup is 0.97
[root@localhost ~]# 
  • -P(大P)显示同步过程,比如速率,比-v更加详细
    
    [root@localhost ~]# !rm
    rm -rf /tmp/111_dest/*
    [root@localhost ~]# rsync -avP  /root/111/ /tmp/111_dest/
    sending incremental file list
    ./
    12.txt
          65 100%    0.00kB/s    0:00:00 (xfer#1, to-check=5/9)
    12.tx~
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=4/9)
    12_txt.swp
       12288 100%   11.72MB/s    0:00:00 (xfer#3, to-check=3/9)
    4913
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=2/9)
    aiker3 -> /tmp/aiker2
    222/

sent 12696 bytes received 98 bytes 8529.33 bytes/sec
total size is 12364 speedup is 0.97
[root@localhost ~]#


-u加上该选项后,如果DEST中的文件比SRC新,则不同步

[root@localhost ~]# cd /tmp/111_dest/
[root@localhost 111_dest]# ls
12.tx~ 12.txt 12_txt.swp 222 4913 aiker3
[root@localhost 111_dest]# vim 4913

kdkkdkdkdkdkdkdkkd
lalslslslslslslsls
aaaaaaaaaaaaaaaaaa
~

~
~

-- 插入 --


[root@localhost 111_dest]# rsync -avP  /root/111/ /tmp/111_dest/
sending incremental file list
./
4913
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=2/9)

sent 212 bytes  received 35 bytes  494.00 bytes/sec
total size is 12364  speedup is 50.06
[root@localhost 111_dest]# 

-正常拷贝,更新 目标4913文件里的内容 被源文件4913给覆盖了,所以里面东西没有了

[root@localhost 111_dest]# cat 4913
[root@localhost 111_dest]# 

-现在因为目标4913 文件更加新,有一个特殊情况,就是想要目标目录的文件更新一些,有些特殊原因,没有办法编辑111目录下的4913文件,我只需要更新我的目标目录 ,备份目录下的文件就可以了
-如果不加特殊选项u 那也就意味着,所编辑的4913 要被覆盖掉,需要加一个u选项,就可以起到保护的作用,保护目标目录下面给我们更改 更新股的文件,但是、/root/111/4913 依然还是旧的
-使用rsync -avPu /root/111/ /tmp/111_dest/

[root@localhost 111_dest]# vim 4913
[root@localhost 111_dest]# 

[root@localhost 111_dest]# rsync -avPu  /root/111/ /tmp/111_dest/
sending incremental file list
./

sent 173 bytes  received 16 bytes  378.00 bytes/sec
total size is 12364  speedup is 65.42
[root@localhost 111_dest]# cat 4913
kdkkdkdkdkdkdkdkkd
lalslslslslslslsls
aaaaaaaaaaaaaaaaaa
[root@localhost 111_dest]# cat /root/111/4913
[root@localhost 111_dest]# 

-z 传输时压缩 rsync -avPz /root/111/ /tmp/111_dest/ (远程传输,尤其是文件很多的时候,加上-z 可以节省带宽和增加速度的)

[root@localhost 111_dest]# rsync -avPz  /root/111/ /tmp/111_dest/
sending incremental file list
4913
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=2/9)

sent 206 bytes  received 32 bytes  476.00 bytes/sec
total size is 12364  speedup is 51.95
[root@localhost 111_dest]# 

10.31 rsync通过ssh同步

rsync通过ssh方式同步
rsync -av test1/192.168.202.132:/tmp/test2/
rsync -av -e "ssh -p 22" test1/ 192.168.202.132:/tmp/test2/
rsync通过服务的方式同步
要编辑配置文件/etc/rsyncd.conf
启动服务rsync --daemon
格式:rsync -av test1/192.168.202.130::module/dir/

现在有俩台终端1,终端2 俩台机器是可以互相平通

[root@localhost ~]# ping 192.168.202.132
PING 192.168.202.132 (192.168.202.132) 56(84) bytes of data.
64 bytes from 192.168.202.132: icmp_seq=1 ttl=64 time=1.14 ms
64 bytes from 192.168.202.132: icmp_seq=2 ttl=64 time=0.362 ms
64 bytes from 192.168.202.132: icmp_seq=3 ttl=64 time=0.502 ms
^C
 192.168.202.132 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.362/0.669/1.143/0.340 ms
[root@localhost ~]# 

用终端1,把1下面的/etc/passwd 同步到 2终端的 /tmp/aiker.txt下

[root@localhost ~]# rsync /etc/passwd 192.168.202.132:/tmp/aiker.txt
[email protected]'s password: 
bash: rsync: 未找到命令
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(605) [sender=3.0.9]
[root@localhost ~]# 

这边有一个报错信息,rsync未找到命令,默认下,是没有这命令的,需要安装一些

在终端2下面安装下

[root@aiker ~]# yum install -y rsync
已加载插件:fastestmirror
Running transaction
  正在安装    : rsync-3.0.9-17.el7.x86_64                                  1/1 
  验证中      : rsync-3.0.9-17.el7.x86_64                                  1/1 

已安装:
  rsync.x86_64 0:3.0.9-17.el7                                                  

完毕!
[root@aiker ~]# 

再去终端1下面同步 -av 显示过程

[root@localhost ~]# rsync -av /etc/passwd 192.168.202.132:/tmp/aiker.txt
[email protected]'s password: 
sending incremental file list
passwd

sent 1471 bytes  received 31 bytes  429.14 bytes/sec
total size is 1397  speedup is 0.93
[root@localhost ~]# 

来cat一下同步的文件

[root@aiker ~]# cat /tmp/aiker.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
aiker:x:1000:1005::/home/aiker:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1004:1005::/home/user3:/bin/bash
user4:x:1006:1005::/home/aiker111:/sbin/nologin
user5:x:1007:1007::/home/user5:/bin/bash
user6:x:1008:1010::/home/user6:/bin/bash
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
[root@aiker ~]# 

这个叫做拉文件,rsync -avP 192.168.202.132:/tmp/aiker.txt,把文件拉过来
第一种叫推文件 , rsync -av /etc/passwd 192.168.202.132:/tmp/aiker.txt 把文件推过去

[root@localhost ~]# rsync -avP 192.168.202.132:/tmp/aiker.txt /tmp/[email protected]'s password: 
receiving incremental file list
aiker.txt
        1397 100%    1.33MB/s    0:00:00 (xfer#1, to-check=0/1)

sent 30 bytes  received 1479 bytes  335.33 bytes/sec
total size is 1397  speedup is 0.93
[root@localhost ~]# 

指定端口

[root@localhost ~]# rsync -avP -e "ssh -p 22" /etc/passwd 192.168.202.132:/tmp/aiker.txt
[email protected]'s password: 
sending incremental file list

sent 31 bytes  received 12 bytes  12.29 bytes/sec
total size is 1397  speedup is 32.49
[root@localhost ~]# 

ssh 方式传输数据

[root@localhost ~]# ssh -p 22 192.168.202.132
[email protected]'s password: 
Last login: Thu Sep 14 00:02:08 2017 from 192.168.202.1
[root@aiker ~]# 登出
Connection to 192.168.202.132 close

转载于:https://blog.51cto.com/235571/2113799

你可能感兴趣的:(八周二次课(5月14日))