rsync命令基础使用详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync命令基础使用详解相关的知识,希望对你有一定的参考价值。

1.什么是rsync ?

Rsync是一个功能强大的增量备份,复制工具,rsync能够复制删除,增量同步本地和远程的文件或者目录,在本地复制方面能够替代cp 远程复制能够替代scp但是优于scp,本地和远程清空目录或者文件内容等又能够代替rm 而且效率比rm 更高。还能通过将其配置为守护进程,使其远程客户端推送或者拉取数据不需要二次写入密码。

2.rsync命令几个常用基本参数和使用格式

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

-r, --recursive 对子目录以递归模式处理

-l, --links 保留软链结

-p, --perms 保持文件权限

-t, --times 保持文件时间信息

-g, --group 保持文件属组信息

-o, --owner 保持文件属主信息

-D, --devices 保持设备文件信息

--delete 删除那些DSTSRC没有的文件

--password-file=FILE

    这个参数可以让我们指定一个密码文件,通过密码文件直接远程连接拉取或者推送要备份的数据,这个密码文件只需要写入一个密码,而且rsync只会读取第一行的内容。这种方法避免了交互模式下需要手动输入密码的操作,能够实现定时任务备份。

 

Rsync基本操作格式为 rsync 参数 /复制对象目录(复制谁) /目标目录(复制到哪里)

期中如果复制对象或者目录是远程的文件 下需要使用 ip:文件 格式默认省略了 [email protected]:文件

例如:rsync  -a     /app/hello/    172.16.1.41:/oldboy_dir/

            参数    复制的对象      复制到哪里

3.本地复制操作,等同cp

复制文件 使用-a 保持源文件的属性信息以及递归复制文件夹

rsync -a /etc/sysconfig/ /app

 

注意:使用这个命令需要注意的地方是目录后面的/的使用,如下使用/代表,只复制目录下的所有文件,不包括当前文件夹。

[[email protected] app]# ls

[[email protected] app]# rsync -a /etc/sysconfig/ /app

[[email protected] app]# ls

acpid       ip6tables         network          sandbox

atd         ip6tables-config  networking       saslauthd

auditd      ip6tables.old     network-scripts  selinux

authconfig  iptables          ntpd             smartmontools

cbq         iptables-config   ntpdate          sshd

clock       iptables.old      prelink          sysstat

console     irqbalance        quota_nld        sysstat.ioconf

cpuspeed    kdump             raid-check       system-config-firewall

crond       kernel            readahead        system-config-firewall.old

grub        keyboard          readonly-root    udev

i18n        modules           rngd

init        netconsole        rsyslog

不加/重新复制,进行测试,首先删除掉app文件夹下所有内容

[[email protected] app]# rsync -a /etc/sysconfig /app

[[email protected] app]# ls

sysconfig

可以看到,已经复制此目录以及目录下的所有文件。

 

4.远程复制,等同于scp命令的使用

环境:

nfs01 服务器和:172.16.1.31

backup服务器两台:172.16.1.41

目标:在nfs01服务器操作 将本地/etc/passwd 复制到backup服务器的/tmp

nfs01端:

[[email protected] app]# rsync -a /etc/passwd 172.16.1.41:/tmp

The authenticity of host '172.16.1.41 (172.16.1.41)' can't be established.

RSA key fingerprint is b1:20:60:4f:cc:f2:b4:bf:66:4a:c1:12:54:78:93:74.

Are you sure you want to continue connecting (yes/no)? yes

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

[email protected]'s password:

[[email protected] app]#

Backup端:

[[email protected] tmp]# ls

passwd

[[email protected] tmp]#

 

5.远程删除目录和文件,相当于rm

远程操作和本地操作,一样可行,这里演示远程操作清空文件内容和目录

首先测试一下文件的内容情况,清空文件或目录首先要创建一个空的文件或者目录来进行数据覆盖。这里操作删除需要使用--delete参数配合

清空一个文件:

创建一个空的文件null.txt

Back服务器:清空前

[[email protected] oldboy_dir]# ls

a  b  c  d  e  hh  tmp

[[email protected] oldboy_dir]# cat a

hello

Nfs01服务器:清空

[[email protected] app]# touch null.txt

[[email protected] app]# ls

null.txt

[[email protected]]#rsync -a (--delete) /app/null.txt 172.16.1.41:/oldboy_dir/a   

[email protected]'s password:

[[email protected] app]#

Back服务器:清空后

[[email protected] oldboy_dir]# ls

a  b  c  d  e  hh  tmp

[[email protected] oldboy_dir]# cat a

[[email protected] oldboy_dir]#

可以看到已经清空 而且测试的结果不使用--delete也是可以清空文件内容的,但清空目录必须使用--delete

清空一个目录:

创建一个空的目录null

[[email protected] app]# mkdir null

[[email protected] app]#

Back服务器:清空前

[[email protected] oldboy_dir]# ls

a  b  c  d  e  hh  tmp

Nfs01服务器:清空

[[email protected] app]# rsync -a --delete /app/null/ 172.16.1.41:/oldboy_dir/

[email protected]'s password:

[[email protected] app]#

Back服务器:清空后

[[email protected] oldboy_dir]# ls

[[email protected] oldboy_dir]#

已经清空

 

6.配置rsync服务器

默认linux中是没有rsync的配置文件的。需要我们自自己创建,默认识别的配置文件是/etc/rsyncd.conf

创建它并写入配置:如下

#rsync_config

#created by HQ at 2017

##rsyncd.conf start##

 

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 172.16.1.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

[backup]

comment = "backup dir by oldboy"

path = /backup

 

详解配置文件:

uid = rsync #指定rsync进程启动的虚拟用户名

gid = rsync #指定rsync进程用户组

use chroot = no #是否修改根路径 安全配置,没多大用

max connections = 200 #rsyn最大连接数 rsyn最多可以同时链接过来的数量

timeout = 300     #超时时间,达到这个时间没有响应之后自动踢出用户,解除占用

pid file = /var/run/rsyncd.pid #指定pid存放的路径

lock file = /var/run/rsync.lock #指定socket信息存放的路径

log file = /var/log/rsyncd.log #指定日志文件存放的路径

ignore errors             #忽略错误警告

read only = false         #是否只读模式

list = false              #是否列出目录

hosts allow = 172.16.1.0/24  #白名单

hosts deny = 0.0.0.0/32      #黑名单

auth users = rsync_backup    #指定可以连接的用户名

secrets file = /etc/rsync.password   #指定用户账号密码的配置文件

[backup]   #模块的名字,相当于一个变量或者容器

comment = "backup dir by oldboy" #注释

path = /backup        #备份或者拉取数据的路径

创建配置文件中指定的用户信息:touch /etc/rsync.password

echo 'rsync_backup:oldboy123'>/etc/rsync.password

 

注意:这里需要指定600权限,否则会出现错误。

chmod 600 /etc/rsync.password

 

创建rsync的用户和用户组

Useradd -M -s /sbin/nologin rsync

 

创建备份目录

mkdir /backup

 

/backup rsync权限

chown rsync.rsync /backup

 

启动rsync服务端进程

rsync --daemon

 

查看进程是否产生:

[[email protected] oldboy_dir]# ps -ef |grep rsync

root       3482      1  0 12:40 ?        00:00:00 rsync --daemon

root       3891   3606  0 16:41 pts/0    00:00:00 grep rsync

 

到这里已经配置好服务器端。

 

rsync客户端链接服务器端使用格式

Pull: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]

      [OPTION...]   ---命令相关参数  

      [[email protected]]       ---远程连接认证用户身份信息,认证用户为一个虚拟用户,不需要进行创建

      HOST::       ---远程主机地址信息,或者可以写为远程主机名称信息

      SRC...        ---要进行远程传输备份的远程模块信息

      [DEST]        ---把远程数据备份到本地什么位置

     

Push: rsync [OPTION...] SRC... [[email protected]]HOST::DEST

      [OPTION...]   ---命令相关参数  

      [[email protected]]       ---远程连接认证用户身份信息,认证用户为一个虚拟用户,不需要进行创建

      HOST::       ---远程主机地址信息,或者可以写为远程主机名称信息

      SRC...        ---本地要进行远程传输复制的文件或目录信息

      DEST          ---要进行远程传输备份的远程模块信息

 

7.测试rsync客户端连接服务器端

Backup服务器:推送数据前

[[email protected] backup]# ls

[[email protected] backup]#

Nfs01服务器:推送数据

[[email protected] app]# rsync -a --delete /app/null/ 172.16.1.41:/oldboy_dir/

[email protected]'s password:

[[email protected] app]# rsync -avz /etc/hosts [email protected]::backup

Password:

sending incremental file list

hosts

 

sent 201 bytes  received 27 bytes  41.45 bytes/sec

total size is 371  speedup is 1.63

Backup服务器:推送数据后

[[email protected] backup]# ls

hosts

[[email protected] backup]#

已经接收到推送过来的数据。

在这里我们输入的密码是oldboy123 不再是root的密码了。也指定了固定的用户,虽然数据内容安全方面得到了加密,但是每次输入密码也是非常麻烦的,在rsync工具中,可以使用非交互式来进行文件的备份功能。

在客户端nfs01服务器创建一个文件,里面存放oldboy123这个密码:

 

[[email protected] /]# cat rsync.passwd

oldboy123

设置权限为600 不设置会出问题。

[[email protected] /]# ll rsync.passwd

-rw------- 1 root root 10 Nov 28 14:25 rsync.passwd

 

免输入密码进行备份测试:

Backup服务器:备份前

[[email protected] backup]# ls

[[email protected] backup]#

Nfs01客户端:备份

[[email protected] /]# rsync -avz /tmp [email protected]::backup --password-file=/rsync.passwd

sending incremental file list

tmp/

tmp/a.out

tmp/passwd

 

sent 139 bytes  received 50 bytes  378.00 bytes/sec

total size is 0  speedup is 0.00

 

Backup服务器:备份前

[[email protected] backup]# tree

.

└── tmp

    ├── a.out

    └── passwd

 

1 directory, 2 files

 

至此,rsync的基本用法已经介绍完。


以上是关于rsync命令基础使用详解的主要内容,如果未能解决你的问题,请参考以下文章

rsync命令详解2

rsync命令详解1

Rsync命令参数详解

Rsync命令参数详解

Rsync命令参数详解

Linux rsync 命令参数详解