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 刪除那些DST中SRC沒有的文件
--password-file=FILE
這個參數可以讓我們指定一個密碼文件,通過密碼文件直接遠程連接拉取或者推送要備份的數據,這個密碼文件只需要寫入一個密碼,而且rsync只會讀取第一行的內容。這種方法避免了交互模式下需要手動輸入密碼的操作,能夠實現定時任務備份。
Rsync基本操作格式為 rsync 參數 /復制對象目錄(復制誰) /目標目錄(復制到哪裏)
期中如果復制對象或者目錄是遠程的文件
例如:rsync -a /app/hello/ 172.16.1.41:/oldboy_dir/
參數 復制的對象 復制到哪裏
3.本地復制操作,等同cp
復制文件 使用-a 保持源文件的屬性信息以及遞歸復制文件夾
rsync -a /etc/sysconfig/ /app
註意:使用這個命令需要註意的地方是目錄後面的/的使用,如下使用/代表,只復制目錄下的所有文件,不包括當前文件夾。
[root@nfs01 app]# ls
[root@nfs01 app]# rsync -a /etc/sysconfig/ /app
[root@nfs01 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文件夾下所有內容
[root@nfs01 app]# rsync -a /etc/sysconfig /app
[root@nfs01 app]# ls
sysconfig
可以看到,已經復制此目錄以及目錄下的所有文件。
4.遠程復制,等同於scp命令的使用
環境:
nfs01 服務器和:172.16.1.31
backup服務器兩臺:172.16.1.41
目標:在nfs01服務器操作 將本地/etc/passwd 復制到backup服務器的/tmp中
nfs01端:
[root@nfs01 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:
[root@nfs01 app]#
Backup端:
[root@backup tmp]# ls
passwd
[root@backup tmp]#
5.遠程刪除目錄和文件,相當於rm
遠程操作和本地操作,一樣可行,這裏演示遠程操作清空文件內容和目錄
首先測試一下文件的內容情況,清空文件或目錄首先要創建一個空的文件或者目錄來進行數據覆蓋。這裏操作刪除需要使用--delete參數配合
清空一個文件:
創建一個空的文件null.txt
Back服務器:清空前
[root@backup oldboy_dir]# ls
a b c d e hh tmp
[root@backup oldboy_dir]# cat a
hello
Nfs01服務器:清空
[root@nfs01 app]# touch null.txt
[root@nfs01 app]# ls
null.txt
[root@nfs01app]#rsync -a (--delete) /app/null.txt 172.16.1.41:/oldboy_dir/a
[email protected]'s password:
[root@nfs01 app]#
Back服務器:清空後
[root@backup oldboy_dir]# ls
a b c d e hh tmp
[root@backup oldboy_dir]# cat a
[root@backup oldboy_dir]#
可以看到已經清空 而且測試的結果不使用--delete也是可以清空文件內容的,但清空目錄必須使用--delete
清空一個目錄:
創建一個空的目錄null
[root@nfs01 app]# mkdir null
[root@nfs01 app]#
Back服務器:清空前
[root@backup oldboy_dir]# ls
a b c d e hh tmp
Nfs01服務器:清空
[root@nfs01 app]# rsync -a --delete /app/null/ 172.16.1.41:/oldboy_dir/
[email protected]'s password:
[root@nfs01 app]#
Back服務器:清空後
[root@backup oldboy_dir]# ls
[root@backup 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
查看進程是否產生:
[root@backup 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...] [USER@]HOST::SRC... [DEST]
[OPTION...] ---命令相關參數
[USER@] ---遠程連接認證用戶身份信息,認證用戶為一個虛擬用戶,不需要進行創建
HOST:: ---遠程主機地址信息,或者可以寫為遠程主機名稱信息
SRC... ---要進行遠程傳輸備份的遠程模塊信息
[DEST] ---把遠程數據備份到本地什麽位置
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
[OPTION...] ---命令相關參數
[USER@] ---遠程連接認證用戶身份信息,認證用戶為一個虛擬用戶,不需要進行創建
HOST:: ---遠程主機地址信息,或者可以寫為遠程主機名稱信息
SRC... ---本地要進行遠程傳輸復制的文件或目錄信息
DEST ---要進行遠程傳輸備份的遠程模塊信息
7.測試rsync客戶端連接服務器端
Backup服務器:推送數據前
[root@backup backup]# ls
[root@backup backup]#
Nfs01服務器:推送數據
[root@nfs01 app]# rsync -a --delete /app/null/ 172.16.1.41:/oldboy_dir/
[email protected]'s password:
[root@nfs01 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服務器:推送數據後
[root@backup backup]# ls
hosts
[root@backup backup]#
已經接收到推送過來的數據。
在這裏我們輸入的密碼是oldboy123 不再是root的密碼了。也指定了固定的用戶,雖然數據內容安全方面得到了加密,但是每次輸入密碼也是非常麻煩的,在rsync工具中,可以使用非交互式來進行文件的備份功能。
在客戶端nfs01服務器創建一個文件,裏面存放oldboy123這個密碼:
[root@nfs01 /]# cat rsync.passwd
oldboy123
設置權限為600 不設置會出問題。
[root@nfs01 /]# ll rsync.passwd
-rw------- 1 root root 10 Nov 28 14:25 rsync.passwd
免輸入密碼進行備份測試:
Backup服務器:備份前
[root@backup backup]# ls
[root@backup backup]#
Nfs01客戶端:備份
[root@nfs01 /]# 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服務器:備份前
[root@backup backup]# tree
.
└── tmp
├── a.out
└── passwd
1 directory, 2 files
至此,rsync的基本用法已經介紹完。
rsync命令基礎使用詳解