2017.12.5 八周第二次课

10.28 rsync工具介绍

rsync 数据备份命令 remote sync 远程同步

该工具可以远程同步,还可以本地同步数据。rsync支持增量备份,rsync 不会像其他备份工具如 cp/scp 一样覆盖以前的数据(如果数据已经存在)。它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。

#yum install -y rsync

常见格式

Local: rsync [OPTION...] SRC... [DEST] 备份本地数据

#rsync -av 1.txt /tmp

#rsync -av 1.txt /tmp/2.txt

Access via remote shell:

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] 远程同步数据到本地

#rsync -av root@192.168.0.101:/tmp/1.txt /tmp/

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 远程拷贝数据,本地数据>远程

#rsync -av 123.txt 192.168.0.101:/date/ 不加user@默认是root

#rsync -av 123.txt thinkpad@192.168.1.101:/home/thinkpad

Pull 拉, 远程数据拉向本地

Push 推, 本地数据上传到远端

Access via rsync daemon:

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 相比于远程同步数据到本地,多了个冒号

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST 相比于远程拷贝数据,多了冒号

10.29/10.30 rsync常用选项

rsync -avL 常用

-a 常用

归档模式,表示以递归方式传输文件,保持所有属性,等同于 -rlptgoD,后面可以跟一个 --no-[OPTION] 表示这个关闭 -rlptgoD 中的某一个,例如 -a--no-l 等同于 -rptgoD

-r

对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r。

-v 常用

打印一些信息出来,比如速率,文件数量等

-I

保留软连接

-L

像对待常规文件一样处理软连接,如果是源机器有软连接文件,则加上该项后 会把软连接指向的目标文件拷贝到目标机器。即在拷贝同步软连接的时候,连软连接指向的文件一起拷贝。

-p (小写)

保持文件权限

-o

保持文件属主信息

-g

保持文件属组信息

-D

保持设备文件信息,很少接触

-t

保持文件时间信息

--delete 常用

删除那些目标中文件有,源目标上面没有的文件,A机器上面有1 2 3 4 5 6 7 8 9 0文件,B机器上也有。A机器经过一段时间,删除了1 2 3文件,那么在同步备份的时候,如果使用这个选项,B机器上的1 2 3 文件也会被删除。强制目标文件和原始文件一致。

--exclude=PATTERN 常用

指定排除不需要传输的文件,等号后面跟文件名,可以使通配符模式,如果有需要排除多个文件,每个文件前面都需要单独使用--exclude,--exclude="abc" --exclude="*.txt"

--progress == -P

在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等。

-u == --update

这个选项会把DET中比SRC还新的文件排除掉,不会覆盖。源机上和目标机器上都有1.txt,但是在目标机器上做了一些修改,不加-u ,同步数据的时候,较老的源机器上的数据会覆盖目标机器上较新的数据,加上-u,则不会覆盖较新的数据。即目标文件比源文件还要新,则忽略该文件。

    -v, --verbose               increase verbosity

    -q, --quiet                 suppress non-error messages

        --no-motd               suppress daemon-mode MOTD (see caveat)

    -c, --checksum              skip based on checksum, not mod-time & size

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

        --no-OPTION             turn off an implied OPTION (e.g. --no-D)

    -r, --recursive             recurse into directories

    -R, --relative              use relative path names

        --no-implied-dirs       don’t send implied dirs with --relative

    -b, --backup                make backups (see --suffix & --backup-dir)

        --backup-dir=DIR        make backups into hierarchy based in DIR

        --suffix=SUFFIX         backup suffix (default ~ w/o --backup-dir)

    -u, --update                skip files that are newer on the receiver

        --inplace               update destination files in-place

        --append                append data onto shorter files

        --append-verify         --append w/old data in file checksum

    -d, --dirs                  transfer directories without recursing

    -l, --links                 copy symlinks as symlinks

    -L, --copy-links            transform symlink into referent file/dir

        --copy-unsafe-links     only "unsafe" symlinks are transformed

        --safe-links            ignore symlinks that point outside the tree

    -k, --copy-dirlinks         transform symlink to dir into referent dir

    -K, --keep-dirlinks         treat symlinked dir on receiver as dir

    -H, --hard-links            preserve hard links

    -p, --perms                 preserve permissions

    -E, --executability         preserve executability

        --chmod=CHMOD           affect file and/or directory permissions

    -A, --acls                  preserve ACLs (implies -p)

    -X, --xattrs                preserve extended attributes

    -o, --owner                 preserve owner (super-user only)

    -g, --group                 preserve group

        --devices               preserve device files (super-user only)

        --specials              preserve special file

上面的需掌握 下面是实验

实验准备

[root@wangbin ~]# mkdir rsync

[root@wangbin ~]# mkdir test1

[root@wangbin ~]# cd test1

[root@wangbin test1]# touch 1 2 3

[root@wangbin test1]# ln -s /root/123.txt ./123.txt

[root@wangbin test1]# ls -l

total 0

-rw-r--r-- 1 root root 0 Feb 18 02:02 1

lrwxrwxrwx 1 root root 13 Feb 18 02:02 123.txt -> /root/123.txt

-rw-r--r-- 1 root root 0 Feb 18 02:02 2

-rw-r--r-- 1 root root 0 Feb 18 02:02 3

1、选项 -a

归档模式,表示以递归方式传输文件,保持所有属性,等同于 -rlptgoD,后面可以跟一个 --no-[OPTION] 表示这个关闭 -rlptgoD 中的某一个,例如 -a--no-l 等同于 -rptgoD

[root@wangbin ~]# rsync -a test1 test2

[root@wangbin ~]# ls test2

test1 目标目录已经存在,则备份成其子目录

[root@wangbin ~]# ls test2/test1/

1 123.txt 2 3 目标目录已经存在,则备份成其子目录

[root@wangbin ~]# rm -rf test2

[root@wangbin ~]# rsync -a test1 test2

[root@wangbin ~]# ls test

test1/ test2/

[root@wangbin ~]# ls test2

test1

[root@wangbin ~]# rm -rf test2

[root@wangbin ~]# rsync -a test1/ test2/ 目标目录必须加符号 /

[root@wangbin ~]# ls test2

1 123.txt 2 3

建议养成加 / 的习惯。-a 选项等于 -rlptgoD,后面可以跟选项 --no-[OPTION] 一并使用。

[root@wangbin ~]# rsync -av --no-l test1/ test2/

sending incremental file list

skipping non-regular file "123.txt" 由此看出,-l的作用是不备份连接文件。

sent 68 bytes received 12 bytes 160.00 bytes/sec

total size is 13 speedup is 0.16

加上-l 会把软连接文件拷贝过去,但是软连接的目标文件没有拷贝过去。

2、-L 选项 如果有软连接,把连接指向的文件也一起传输

向对待常规文件一样处理软连接,如果是SRC中有软连接文件,则加上该项后 会把软连接指向的目标文件拷贝到DST

#rm -rf test2

[root@wangbin ~]# touch 123.txt 若没有目标文件,则不拷贝

[root@wangbin ~]# rsync -avL test1/ test2/

sending incremental file list

created directory test2

./

1

123.txt

2

3

sent 227 bytes received 91 bytes 636.00 bytes/sec

total size is 0 speedup is 0.00

-L 会把 来源机器 中软连接的目标文件拷贝到目标机器目录中,如果没有目标文件,则提示没有参照物,不拷贝连接文件以及目标文件,其他不影响。

3、-u 选项 不去覆盖时间比较新的文件

这个选项会把 目标机器 中比 来源机器中 还新的文件排除掉,不会覆盖。即如果目标机器的文件比较新,则不会覆盖。在目标目录下创建新文件,来源文件下没有的文件,也不会覆盖(已实验成功)。

# ls -l test1/1 test2/1

-rw-r--r-- 1 root root 0 Feb 18 02:02 test1/1 【test1和test2里面的文件1创建时间一致】

-rw-r--r-- 1 root root 0 Feb 18 02:02 test2/1

# touch test2/1		【修改2下面的创建时间】

# ll test2/1			

-rw-r--r-- 1 root root 0 Feb 18 02:21 test2/1 【时间改变】

# rsync -a test1/1 test2/

# !ll

ll test2/1

-rw-r--r-- 1 root root 0 Feb 18 02:02 test2/1 【不加-u,则重新拷贝过去】

# !touch

touch test2/1

# !ll

ll test2/1

-rw-r--r-- 1 root root 0 Feb 18 02:22 test2/1

 # rsync -avu test1/ test2/		【加上-u选项,排除1文件,因为目标目录下的1文件的时间比来源目录下的文件时间新】

sending incremental file list

./

123.txt -> /root/123.txt

sent 88 bytes received 18 bytes 212.00 bytes/sec

total size is 13 speedup is 0.12

# ls -l test2/

total 0

-rw-r--r-- 1 root root 0 Feb 18 02:22 1

lrwxrwxrwx 1 root root 13 Feb 18 02:02 123.txt -> /root/123.txt

-rw-r--r-- 1 root root 0 Feb 18 02:02 3

4、--delete 选项 强制和来源文件一样

会删除目标目录下有,但是来源目录没有的文件,相当于重新拷贝一份了来源文件并且重命名;不加 --delete ,相当于把sorc下面的文件,拷贝到目标目录下,并不考虑目标目录下是否有其他文件存在。就是加上这个选项,来源文件没有的东西,即便目标这里有,也要删除掉。

# rm -rf test1/123.txt			【删除链接文件123.txt】

# rsync -av test1/ test2/			【重新备份文件】

sending incremental file list

./

sent 55 bytes received 15 bytes 140.00 bytes/sec

total size is 0 speedup is 0.00

 # ls test2						【test2目录下仍然有 123.txt】

1 123.txt 2 3

 # rsync -av --delete test1/ test2/	【增加--delete选项】

sending incremental file list

deleting 123.txt 【删除123.txt】

sent 52 bytes received 12 bytes 128.00 bytes/sec

total size is 0 speedup is 0.00

ls test2

1 2 3 【123.txt被删除 】

如果此时 test2 目录下还有文件4 5 6 7 等等,凡是和source目录下不一致的文件,全部会删除掉。

5、 --exclude 排除指定文件或目录

# touch test1/4

# rsync -av --exclude="4" test1/ test2/		【排除来源文件4,也可作用于目录】

sending incremental file list

./

sent 55 bytes received 15 bytes 140.00 bytes/sec

total size is 0 speedup is 0.00

 # ls test2/						【test2目录下并没有出现文件4】

1 2 3

 # touch test1/a.txt test1/b.txt

# rsync -av --exclude="*.txt" test1/ test2/	【可以使用通配符】

sending incremental file list

./

4

sent 108 bytes received 34 bytes 284.00 bytes/sec

total size is 0 speedup is 0.00

6、 --progress 或者 -P 显示进程选项

# rm -rf test2/

# rsync -av --progress --exclude="*.txt" test1/ test2/

sending incremental file list

created directory test2

./

1

       0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=3/5)

2

       0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=2/5)

3

       0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=1/5)

4

       0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=0/5)

sent 225 bytes received 91 bytes 632.00 bytes/sec

total size is 0 speedup is 0.00

--progress 会把当前进程的进度在屏幕上显示。对小型文件没有意义,对大型文件有用,可以看到拷贝的进程。

7、-z 压缩

#rsync -avz 。。。。。。

先对文件进行压缩,再进行传输,本地传输无需使用-z选项,在进程远程传输的时候,为了节省带宽,可以使用-z。但是压缩的过程管理员是没有办法感知的,传输完成后也无需解压,在目标机器上得到的文件,和不加-z的效果是一样的。

10.31 rsync通过ssh同步

参考 rsync 格式里面的格式 (一个冒号)

#rsync option... SRC [USER@]HOST:DEST 远程拷贝数据,本地数据>远程

#rsync -av 123.txt 192.168.0.101:/date/ 不加user@默认是root

#rsync -av 123.txt thinkpad@192.168.1.101:/home/thinkpad

#rsync option... [USER@] HOST:SRC DEST 远程同步数据到本地

如果不知道host,可以通过 #hostname 查看

一、将本地数据拷贝到远端

#yum install -y openssh-clients 【两台机器都安装 openssh-clients 工具】

[root@wangbin ~]# ls test1/

1 2 3 4 a.txt b.txt

[root@wangbin ~]# rsync -avL test1/ root@192.168.247.132:/tmp/test2

The authenticity of host '192.168.247.132 (192.168.247.132)' can't be established. RSA key fingerprint is 61:5f:aa:60:e7:a6:69:97:a1:24:f6:7d:09:bb:08:17. Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.247.132' (RSA) to the list of known hosts.

root@192.168.247.132's password:

sending incremental file list 【发送数据到远端】

created directory /tmp/test2

./

1

2

3

4

a.txt

b.txt

sent 327 bytes received 129 bytes 17.88 bytes/sec

total size is 0 speedup is 0.00

[root@thinkpad ~]# ls /tmp/test2/

1 2 3 4 a.txt b.txt

二、拷贝远端数据到本地

[root@wangbin ~]# rsync -avL root@192.168.247.132:/tmp/test2/ ./test3/

root@192.168.247.132's password:

receiving incremental file list 【接收,上面是发送 sending】

created directory ./test3

./

1

2

3

4

a.txt

b.txt

sent 128 bytes received 332 bytes 48.42 bytes/sec

total size is 0 speedup is 0.00

[root@wangbin ~]# ls test3

1 2 3 4 a.txt b.txt

NOTE:若对方机器的端口不是22,因为ssh默认走的是22端口,如果没有22端口,那么就没办法进行传输。此时查看对方机器的信息,netstat -lnp 查看可用的端口,查找可用的ssh端口,假设端口号是10022。 -e 指定端口

#rsync -av -e "ssh -p 10022" root@192.168.247.132:/tmp/test2/ ./test3/

测试在/etc/ssh/sshd_config 增加10022端口

/etc/init.d/sshd restart

三、使用密钥连同两个机器,相互传输数据不需要输入密码。

[root@wangbin ~]# ssh-keygen

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

[root@wangbin ~]# cat .ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3U0c26r3HSRnhkloK50BNZvYceRTcDU4nU5aJqQBTuQo+Cn36jPd9i/vzGt8FYe6Tal5OfXFaaPEC+poAleF6E7zPgfamHXk9SriZRgLRR6nDPZ6wI9mhCwdQ0DVKQ6/C4oHqrTxpf9E2gIlzs4cm1FK4cpBdNpG7ucDlWkHi7rv6RjtbgKY2a9jDiNEUp8bqJOc2if0kWRtC21ArmtM9rYIHrWjbltvGSjXxsc0xp0H+pUnnX2/pWJhQfOLaVseo0E2lLfpUEYF9LW7FwXnfqda+gfVmOEhUTqJ4d+UrHSBhoC+xCansjvpq4lQ4oZwp4unbLaKQzg41r2z34aoNQ== root@wangbin

复制上面的公钥,粘贴到另外一个Linux机器上

[root@thinkpad ~]# mkdir -p /home/user1/.ssh 【创建.ssh目录】

[root@thinkpad ~]# chmod 600 !$ 【修改.ssh目录的权限】

chmod 600 /home/user1/.ssh

[root@thinkpad ~]# vi /home/user1/.ssh/authorized_keys 【讲上面复制的信息粘贴到里面】

返回生成密钥对的机器

[root@wangbin ~]# ssh user1@192.168.247.132

user1@192.168.247.132's password: 【这里显示仍然需要密码,上述操作有问题,见下方】

问题在于存放的aothorized_keys的目录不对,应该是存放在B机器的/root/.ssh/authorized_keys

转载于:https://my.oschina.net/u/3461300/blog/1585201

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值