rsync — a fast, versatile, remote (and local) file-copying tool

rsync可以实现增量备份,也支持本地和远程复制。

安装软件:yum install -y rsync

1、例子:

本地复制

[root@localhost test]# rsync -av 1.cap 1.bak   //a保留属性,v详细信息
sending incremental file list
1.cap
sent 1167 bytes  received 31 bytes  2396.00 bytes/sec
total size is 1094  speedup is 0.91

远程复制

[root@localhost test]# rsync -av -e "ssh -p 22" 192.168.0.105:/root/test/file ./    //-e "ssh -p 22" 指定端口
root@192.168.0.105's password:
receiving incremental file list
file
sent 30 bytes  received 1048 bytes  308.00 bytes/sec
total size is 971  speedup is 0.90

2、rsync格式

Local:  rsync [OPTION...] SRC... [DEST]

Access via remote shell:   (ssh协议)

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

     Push: rsync [OPTION...] SRC... [USER@]HOST:DEST   本地到远程

Access via rsync daemon:    (rsync自己的协议)

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

           rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

     Push: rsync [OPTION...] SRC... [USER@]HOST::DEST    本地到远程

           rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

3、rsync的选项

Options

-v, --verbose               increase verbosity

[root@localhost test]# rsync -v file vfile
file
sent 1039 bytes  received 31 bytes  2140.00 bytes/sec
total size is 971  speedup is 0.91
[root@localhost test]# ll
total 8
-rw-r--r--. 1 root root 971 Apr 15 16:31 file
-rw-r--r--. 1 root root 971 Apr 15 16:32 vfile

-q, --quiet                 suppress non-error messages

[root@localhost test]# rsync -q file qfile
[root@localhost test]# ll
total 12
-rw-r--r--. 1 root root 971 Apr 15 16:31 file
-rw-r--r--. 1 root root 971 Apr 15 16:33 qfile
-rw-r--r--. 1 root root 971 Apr 15 16:32 vfile

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

[root@localhost test]# rsync -a file afile
[root@localhost test]# ll
total 20
-rw-r--r--. 1 root root 971 Apr 15 16:31 afile
-rw-r--r--. 1 root root 971 Apr 15 16:31 file

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

[root@localhost test]# rsync -a --no-t file notfile
[root@localhost test]# ll
-rw-r--r--. 1 root root  971 Apr 15 16:31 file
-rw-r--r--. 1 root root  971 Apr 15 16:42 notfile

-r, --recursive             recurse into directories

[root@localhost test]# rsync -r dir1 rdir
[root@localhost test]# ll
drwxr-xr-x. 3 root root 4096 Apr 15 16:36 dir1
drwxr-xr-x. 3 root root 4096 Apr 15 16:38 rdir

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

[root@localhost test]# rsync -av file ufile
sending incremental file list
file
sent 1043 bytes  received 31 bytes  2148.00 bytes/sec
total size is 971  speedup is 0.90
[root@localhost test]# echo "add a line" >> ufile
[root@localhost test]# rsync -u file ufile   //不会覆盖目的文件
[root@localhost test]# cat ufile |tail -1
add a line

-l, --links                 copy symlinks as symlinks

[root@localhost test]# rsync -l softfile 192.168.0.105:/root/copy/lfile
root@192.168.0.105's password:
[root@client copy]# ll
lrwxrwxrwx. 1 root root   4 Apr 15 09:04 lfile -> file  //不可用

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

[root@localhost test]# rsync -L softfile 192.168.0.105:/root/copy/Lfile
root@192.168.0.105's password:
[root@client copy]# ll
-rw-r--r--. 1 root root 971 Apr 15 09:03 Lfile  //其实是拷贝源文件的内容

-p, --perms                 preserve permissions

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

-g, --group                 preserve group

-D                              same as --devices --specials

-t, --times                  preserve modification times                                    

-- delete                    extraneous files from destination dirs

[root@localhost test]# cd old
[root@localhost old]# touch aa bb cc
[root@localhost test]# cd new
[root@localhost new]# touch aa bb cc dd
[root@localhost test]# rsync -av --delete old/ new/
sending incremental file list
./
deleting dd
aa
bb
cc
sent 171 bytes  received 72 bytes  486.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# ls new
aa  bb  cc  //删除目的文件中比源文件多的内容

-P                          same as --partial --progress

[root@localhost test]# rsync -P new/* Pnew/    //文件数量、速度等信息
aa
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=2/3)
bb
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=1/3)
cc
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=0/3)
sent 154 bytes  received 69 bytes  446.00 bytes/sec
total size is 0  speedup is 0.00

--exclude  过滤出不需要复制的内容

[root@localhost test]# rsync -av --exclude=aa new/ exnew/
sending incremental file list
created directory exnew
./
bb
cc
sent 125 bytes  received 53 bytes  356.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# ls exnew/
bb  cc


4、rsync ssh的方式拷贝(不安全,会泄露密码)

[root@localhost test]# rsync -avL ./* root@192.168.0.105:/root/test/
root@192.168.0.105's password:

由于需要输入密码所以不适合写到脚本中,但可以通过创建秘钥对,让两台机器产生信任关系从而不用输入密码
如果ssh端口不是22,那么需要写成这样的形式:rsync -av "--rsh=ssh -p port” /dir1/ 192.168.0.101:/tmp/dir2/


5、rsync deamon方式(较安全,不会知道对方的密码,也不可执行任何命令)
需要在一台机器上开启rsync服务,形成C/S的方式
1)【服务端】配置文件 /etc/rsyncd.conf ,内容如下:

port=873
log file=/var/log/rsync.log #指定日志
pid file=/var/run/rsyncd.pid #指定pid,每一个进程都有一个pid的文件
#address=192.168.0.10 #当机器有多个IP,可以定义绑定的ip。默认监听所有IP。
#以上部分为全局配置部分,以下为模块内的设置
[test] #为模块名,自定义
path=/root/rsync # 指定该模块对应在哪个目录下,共享路径
use chroot=true #是否限定在该目录下,默认为true,当有软连接时,需要改为fasle
max connections=4 # 指定最大可以连接的客户端数
read only=no #是否为只读,只读时不可上传内容到此目录下
list=true #是否可以列出共享模块名
uid=root #以哪个用户的身份来传输
gid=root #以哪个组的身份来传输
auth users=test #指定验证用户名,是虚拟用户不是系统用户,可以不设置
secrets file=/etc/rsyncd.passwd #指定密码文件,如果设定验证用户,这一项必须设置
hosts allow=192.168.0.101 192.168.0.105 #设置可以允许访问的主机,可以是网段

密码文件/etc/rsyncd.passwd权限为600内容格式为:username:password

[root@localhost test]# vim /etc/rsyncd.passwd
[root@localhost test]# chmod 600 /etc/rsyncd.passwd
[root@localhost test]# rsync --daemon
[root@localhost test]# rsync 192.168.0.103::
test
[root@localhost test]# cat /etc/rsyncd.passwd
rsuser:123456

启动服务的命令是:rsync --daemon
2默认去使用/etc/rsyncd.conf这个配置文件,也可以指定配置文件 rsync --daemon --config=/etc/rsyncd2.conf
可使用的选项有: rsync --daemon –help
几个测试点:port, use chroot, log file, secrets file, hosts allow, list
rsync 192.168.0.102::  列出用户模块

[root@client copy]# rsync 192.168.0.103::
test

6. curl命令解析
curlLinux系统命令行下用来简单测试web访问的工具,几个常用的选项你要掌握
curl -xip:port www.baidu.com # -x可以指定ip和端口,省略写hosts,方便实用
curl -Iv http://www.qq.com # -I 可以把访问的内容略掉,只显示状态码,-v可以显示详细过程
curl -u user:password http://123.com # -u可以指定用户名和密码
curl http://study.lishiming.net/index.html -O #可以下载,还可以使用 -o 自定义名字 curl -o index2.html http://study.lishiming.net/index.html
200 正常   404远程url不存在    401        403禁止访问

502        503代理       500服务器有问题    301 302重定向


7. 几个会用到的和网络相关的命令
ping
telnet www.lishiming.net 80
traceroute www.baidu.com
dig @8.8.8.8 study.lishiming.net
nc -z -w2 www.baidu.com 1-1024 # -w2 表示 2s超时 port 这里可以只写一个端口,也可以写一个范围。 使用nc扫描端口时,必须要加 -z 否则不显示结果。另外,如果想把不开放的端口也显示出来,可以加一个 -v