Linux日常運維管理技巧(四)

Linux文件同步工具-rsync

rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大的工具,其命令也有很多功能特色選項,我們下面就對它的選項一一進行分析說明。

eg.

rsync -av /etc/passwd /tmp/1.txt ##本機同步:A目錄同步到B目錄,並改名爲1.txt。##

rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt ##遠程同步:本機的A同步到遠程的B,或相反##

rsync格式
rsync [OPTION] … SRC DEST
命令 + 選項 + 源目錄文件 + 目標目錄
rsync [OPTION] … SRC [user@]host:DEST
命令 + 選項 + 源目錄文件 + 遠程目標目錄(user@可省略)
rsync [OPTION] … [user@]host:SRC DEST
命令 + 選項 + 遠程目標目錄 + 本地目錄文件
rsync [OPTION] … SRC [user@]host::DEST
命令 + 選項 + 源目錄文件 + 遠程客戶端IP::服務端的模塊名/目標目錄
rsync [OPTION] … [user@]host::SRC DEST
命令 + 選項 + 遠程客戶端IP::服務端的模塊名/目標目錄 + 源目錄文件

rsync常用選項

-a , --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD

-r , --recursive 對子目錄以遞歸模式處理,同步目錄時要加上,類似cp時的-r選項

-v , --verbose 詳細模式輸出,同步時顯示一些信息,讓我們知道同步的過程

-l , --links 保留軟鏈結

-L , --copy-links 想對待常規文件一樣處理軟鏈結,加上該選項後,同步軟鏈接時會把源文件給同步

-p , --perms 保持文件權限,保持文件的權限屬性

-o , --owner 保持文件屬主信息,保持文件的屬主

-g , --group 保持文件屬組信息

-D , --devices 保持設備文件信息

-t , --times 保持文件時間屬性

--delete 刪除DEST中SRC沒有的文件

--exclude 過濾指定文件,如--exclude “logs”會把文件名包含logs的文件或者目錄過濾掉,不同步

-P 等同於 --partial,顯示同步過程,比如速率,比-v更加詳細

-u , --update加上該選項後,如果DEST中的文件比SRC新(mtime要新),則不同步

-z , --compress 對備份的文件在傳輸時進行壓縮處理

實例

第一次用這個rsync命令前,先安裝包

[root@zyshanlinux-001 ~]# yum install -y rsync

同步目錄(目錄後記得加/),並改名

  [root@zyshanlinux-001 ~]# rsync -av /root/009/ /tmp/009_dest/
  sending incremental file list
  created directory /tmp/009_dest
  ./
  004.txt
  011.txt.bak
  test01
  008/
  008/005.txt
  010/
  
  sent 382 bytes  received 143 bytes  1,050.00 bytes/sec
  total size is 0  speedup is 0.00

軟鏈接也同步

選項-L可以把軟鏈接指向的源文件同步過去,並且覆蓋了選項-l

選項--delete刪除與源目錄文件不一樣的目標目錄文件

  [root@zyshanlinux-001 ~]# touch /tmp/009_dest/new.txt
  [root@zyshanlinux-001 ~]# ls /tmp/009_dest/
  004.txt  008  010  011.txt.bak  new.txt  test01
  [root@zyshanlinux-001 ~]# rsync -av --delete /root/009/ /tmp/009_dest/
  sending incremental file list
  deleting new.txt
  ./
  
  sent 216 bytes  received 32 bytes  496.00 bytes/sec
  total size is 0  speedup is 0.00
  [root@zyshanlinux-001 ~]# ls /tmp/009_dest/
  004.txt  008  010  011.txt.bak  test01

選項--exclude過濾以txt結尾的文件,再同步

  [root@zyshanlinux-001 ~]# ls /tmp/009_dest/
  004.txt  008  010  011.txt.bak  test01
  [root@zyshanlinux-001 ~]# rm -rf /tmp/009_dest/*
  [root@zyshanlinux-001 ~]# 
  [root@zyshanlinux-001 ~]# rsync -avL --exclude "*.txt" /root/009/ /tmp/009_dest/
  sending incremental file list
  ./
  011.txt.bak
  test01
  008/
  010/
  
  sent 253 bytes  received 65 bytes  636.00 bytes/sec
  total size is 0  speedup is 0.00
  [root@zyshanlinux-001 ~]# ls /tmp/009_dest/
  008  010  011.txt.bak  test01
  
  [root@zyshanlinux-001 ~]# rm -rf /tmp/009_dest/*
  [root@zyshanlinux-001 ~]# rsync -avL --exclude "*.txt" --exclude "test*" /root/009/ /tmp/009_dest/
  sending incremental file list
  ./
  011.txt.bak
  008/
  010/
  
  sent 189 bytes  received 46 bytes  470.00 bytes/sec
  total size is 0  speedup is 0.00

選項-P 顯示同步過程,比如速率,比-v更加詳細,大文件非常有用可以看到傳輸過程

  [root@zyshanlinux-001 ~]# !rm
  rm -rf /tmp/009_dest/*
  [root@zyshanlinux-001 ~]# rsync -avP /root/009/ /tmp/009_dest/
  sending incremental file list
  ./
  004.txt
                0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/7)
  011.txt.bak
                0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=4/7)
  test01
                0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=3/7)
  008/
  008/005.txt
                0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=0/7)
  010/
  
  sent 382 bytes  received 107 bytes  978.00 bytes/sec
  total size is 0  speedup is 0.00

選項-u 加上該選項後,如果DEST中的文件比SRC新,則不同步

  [root@zyshanlinux-001 009_dest]# vim test01
  [root@zyshanlinux-001 009_dest]# cat !$
  cat test01
  123
  456
  789
  [root@zyshanlinux-001 009_dest]# rsync -avPu /root/009/ /tmp/009_dest/
  sending incremental file list
  ./
  
  sent 216 bytes  received 21 bytes  474.00 bytes/sec
  total size is 0  speedup is 0.00
  [root@zyshanlinux-001 009_dest]# cat test01
  123
  456
  789

推文件:把本地的文件同步到遠程目錄

  [root@zyshanlinux-001 ~]# rsync -av /etc/passwd 192.168.106.130:/tmp/zyshan.txt
  [email protected]'s password: 
  sending incremental file list
  passwd
  
  sent 1,404 bytes  received 35 bytes  261.64 bytes/sec
  total size is 1,312  speedup is 0.91
  #########################################################
  [root@zyshanlinux-02 ~]# cat /tmp/zyshan.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
  ...

拉文件:把遠程目錄的文件同步到本地

  [root@zyshanlinux-001 ~]# rsync -avP 192.168.106.130:/tmp/zyshan.txt /tmp/123.txt
  [email protected]'s password: 
  receiving incremental file list
  zyshan.txt
            1,312 100%    1.25MB/s    0:00:00 (xfr#1, to-chk=0/1)
  
  sent 43 bytes  received 1,408 bytes  263.82 bytes/sec
  total size is 1,312  speedup is 0.90

如果不是22端口,則選用-e選項,指定端口

  [root@zyshanlinux-001 ~]# rsync -avP -e "ssh -p 22" /etc/passwd 192.168.106.130:/tmp/zyshan.txt
  [email protected]'s password: 
  sending incremental file list
  
  sent 45 bytes  received 12 bytes  1.48 bytes/sec
  total size is 1,312  speedup is 23.02

直接連接遠程主機

  [root@zyshanlinux-001 ~]# ssh -p 22 192.168.106.130
  [email protected]'s password: 
  Last login: Mon Jun 18 10:17:02 2018 from 192.168.106.1
  [root@zyshanlinux-02 ~]# exit
  登出
  Connection to 192.168.106.130 closed.

rsync 通過服務的方式同步

要編輯配置文件/etc/rsyncd.conf

port=873log file=/var/log/rsync.logpid file=/var/run/rsyncd.pidaddress=192.168.106.128

[test]path=/tmp/rsyncuse chroot=truemax connections=4read only=no

list=trueuid=rootgid=rootauth users=testsecrets file=/etc/rsyncd.passwdhosts allow=192.168.106.130

  rsyncd.conf配置文件詳解 
  
  port:指定在哪個端口啓動rsyncd服務,默認是873端口。
  log file:指定日誌文件。
  pid file:指定pid文件,這個文件的作用涉及服務的啓動、停止等進程管理操作。
  address:指定啓動rsyncd服務的IP。假如你的機器有多個IP,就可以指定由其中一個啓動rsyncd服務,如果不指定該參數,默認是在全部IP上啓動。
  []:指定模塊名,裏面內容自定義。
  path:指定數據存放的路徑。
  use chroot true|false:表示在傳輸文件前首先chroot到path參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但缺點是需要以roots權限,並且不能備份指向外部的符號連接所指向的目錄文件。默認情況下chroot值爲true,如果你的數據當中有軟連接文件,阿銘建議你設置成false。
  max connections:指定最大的連接數,默認是0,即沒有限制。
  read only ture|false:如果爲true,則不能上傳到該模塊指定的路徑下。
  list:表示當用戶查詢該服務器上的可用模塊時,該模塊是否被列出,設定爲true則列出,false則隱藏。
  uid/gid:指定傳輸文件時以哪個用戶/組的身份傳輸。
  auth users:指定傳輸時要使用的用戶名。
  secrets file:指定密碼文件,該參數連同上面的參數如果不指定,則不使用密碼驗證。注意該密碼文件的權限一定要是600。格式:用戶名:密碼
  hosts allow:表示被允許連接該模塊的主機,可以是IP或者網段,如果是多個,中間用空格隔開。 
  當設置了auth users和secrets file後,客戶端連服務端也需要用用戶名密碼了,若想在命令行中帶上密碼,可以設定一個密碼文件
  rsync -avL [email protected]::test/test1/  /tmp/test8/ --password-file=/etc/pass 
  其中/etc/pass內容就是一個密碼,權限要改爲600

啓動服務rsync --daemon

格式:rsync -av test1/ 192.168.133.130::module/dir/

Linux系統日誌

/var/log/messages 是linux系統的總日誌

  [root@zyshanlinux-001 ~]# ls /var/log/messages
  /var/log/messages
  [root@zyshanlinux-001 ~]# less !$
  less /var/log/messages
  [root@zyshanlinux-001 ~]# du -sh !$
  du -sh /var/log/messages
  2.0M    /var/log/messages

/etc/logrotate.conf 日誌切割配置文件

  [root@zyshanlinux-001 ~]# ls /var/log/messages*
  /var/log/messages           /var/log/messages-20180527  /var/log/messages-20180610
  /var/log/messages-20180521  /var/log/messages-20180603
  [root@zyshanlinux-001 ~]# logrotate^C
  [root@zyshanlinux-001 ~]# cat /etc/logrotate.conf
  # see "man logrotate" for details
  # rotate log files weekly
  weekly
  
  # keep 4 weeks worth of backlogs
  rotate 4
  
  # create new (empty) log files after rotating old ones
  create
  
  # use date as a suffix of the rotated file
  dateext
  
  # uncomment this if you want your log files compressed
  #compress
  
  # RPM packages drop log rotation information into this directory
  include /etc/logrotate.d
  
  # no packages own wtmp and btmp -- we'll rotate them here
  /var/log/wtmp {
      monthly
      create 0664 root utmp
      minsize 1M
      rotate 1
  }
  
  /var/log/btmp {
      missingok
      monthly
      create 0600 root utmp
      rotate 1
  }
  
  # system-specific logs may be also be configured here.

指定切割日誌,腳本定義切割日誌後讓系統在新的日誌上正常寫入

  [root@zyshanlinux-001 ~]# cat !$
  cat /etc/logrotate.d/syslog
  /var/log/cron
  /var/log/maillog
  /var/log/messages
  /var/log/secure
  /var/log/spooler
  {
      missingok
      sharedscripts
      postrotate
      /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
      endscript
  }

參考:https://my.oschina.net/u/2000675/blog/908189

dmesg命令 把系統硬件相關日誌列出來,保存在內存中並不是一個文件

  [root@zyshanlinux-001 ~]# dmesg
  ...
  [root@zyshanlinux-001 ~]# dmesg -c  ##清除內存中的硬件日誌,當重啓系統或出現問題硬件日誌又會生成##

/var/log/dmesg 系統啓動的日誌,記錄的一些信息,和dmesg命令沒有關係的

  [root@zyshanlinux-001 ~]# ls /var/log/dmesg
  /var/log/dmesg

last命令 查看正確的登錄歷史,調用的文件/var/log/wtmp(二進制文件,不能用cat看)

  [root@zyshanlinux-001 ~]# last
  root     pts/0        192.168.106.1    Mon Jun 18 08:19   still logged in   
  reboot   system boot  3.10.0-693.el7.x Mon Jun 18 08:18 - 11:46  (03:28)    
  root     tty1                          Fri Jun 15 22:04 - 22:04  (00:00)    
  root     pts/0        192.168.106.1    Fri Jun 15 20:12 - 22:03  (01:51)    
  reboot   system boot  3.10.0-693.el7.x Fri Jun 15 20:11 - 22:04  (01:52)[root@zyshanlinux-001 ~]# last
  root     pts/0        192.168.106.1    Mon Jun 18 08:19   still logged in   
  root     tty1                          Mon May  7 04:37 - crash  (-6:-24)   
  reboot   system boot  3.10.0-693.el7.x Mon May  7 04:36 - 19:57 (2+15:21)   
  
  wtmp begins Mon May  7 04:36:08 2018

lastb命令查看登錄失敗的用戶,對應的文件時/var/log/btmp

  [root@zyshanlinux-001 ~]# lastb
  root     tty1                          Sun Jun 10 11:47 - 11:47  (00:00)    
  
  btmp begins Sun Jun 10 11:47:04 2018
  [root@zyshanlinux-001 ~]# ls /var/log/btmp
  /var/log/btmp

/var/log/secure 安全日誌

  [root@zyshanlinux-001 ~]# ls /var/log/secure
  /var/log/secure
  [root@zyshanlinux-001 ~]# cat !$
  cat /var/log/secure
  Jun 10 23:05:17 zyshanlinux-01 sshd[1250]: error: Received disconnect from 192.168.106.1 port 14605:0:
  Jun 10 23:05:17 zyshanlinux-01 sshd[1250]: Disconnected from 192.168.106.1 port 14605
  Jun 10 23:05:17 zyshanlinux-01 sshd[1250]: pam_unix(sshd:session): session closed for user root
  Jun 10 23:05:32 zyshanlinux-01 polkitd[551]: Registered Authentication Agent for unix-process:2138:4212583 (system bus name :1.117 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
  Jun 18 08:19:20 zyshanlinux-001 sshd[1369]: pam_unix(sshd:session): session opened for user root by (uid=0)

screen工具

虛擬屏幕(虛擬終端)

遠程運行腳本輸入命令,斷網了就會令命令失敗;

解決辦法有2種。

1、後臺運行,輸出日誌,缺點:不能實時看到運行的情況

爲了不讓一個任務意外中斷 命令:nohup command &

2、screen是一個虛擬終端

  [root@zyshanlinux-001 ~]# yum install -y screen

screen的操作

  [root@zyshanlinux-001 ~]# screen
  [detached from 2763.pts-0.zyshanlinux-001]  ##Ctrl+a+d把虛擬終端放到後臺##
  [root@zyshanlinux-001 ~]# screen -ls  ##看看在後臺運行的所有終端##
  There is a screen on:
      2763.pts-0.zyshanlinux-001  (Detached)
  1 Socket in /var/run/screen/S-root.
  
  [root@zyshanlinux-001 ~]# screen -r 2763  ##打開指定id的虛擬終端##
  [screen is terminating]
  [root@zyshanlinux-001 ~]# screen -ls ##結束虛擬終端,exit就登出虛擬終端##
  No Sockets found in /var/run/screen/S-root.
  
  [root@zyshanlinux-001 ~]# 

給screen定義名字,方便數量多了知道哪個screen運行什麼東西

  [root@zyshanlinux-001 ~]# screen -ls
  There are screens on:
      2862.pts-0.zyshanlinux-001  (Detached)
      2847.pts-0.zyshanlinux-001  (Detached)
  2 Sockets in /var/run/screen/S-root.
  
  [root@zyshanlinux-001 ~]# screen -S "test_screen"  ##選項-S啓動一個自定義名字的screen##
  [detached from 2903.test_screen]
  [root@zyshanlinux-001 ~]# screen -ls
  There are screens on:
      2903.test_screen    (Detached)
      2862.pts-0.zyshanlinux-001  (Detached)
      2847.pts-0.zyshanlinux-001  (Detached)
  3 Sockets in /var/run/screen/S-root.
  
  [root@zyshanlinux-001 ~]# screen -r test_screen  ##可以用id或者自定義名字啓動screen##

擴展

  1. Linux日誌文件總管logrotate http://linux.cn/article-4126-1.html

  2. xargs用法詳解 http://blog.csdn.net/zhangfn2011/article/details/6776925

發佈了57 篇原創文章 · 獲贊 22 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章