zoukankan      html  css  js  c++  java
  • Rsync,Linux日志及Screen工具介绍

    第十六次课 Rsync,Linux日志及Screen工具介绍


    目录
    一、rsync工具介绍
    二、rsync常用选项
    三、rsync通过ssh同步
    四、 rsync通过服务同步
    五、linux系统日志
    六、screen工具
    七、扩展


    一、rsync工具介绍

    Rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,同时可以对上传部分先进行压缩,因此rsync效率很高。rsync可以复制显示目录属性及文件,而且可以选择性地压缩及递归复制。但是rsync每次执行rsync命令都会遍历目标目录,如果文件数达到了一定规模,每次遍历就会消耗很多资源。

    Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 会打开一个 873 的服务通道 (port) ,等待对方 Rsync 连接。连接时, Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

    Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS 。

    Rsync 的基本特点如下:

    1.可以镜像保存整个目录树和文件系统;

    2.可以很容易做到保持原来文件的权限、时间、软硬链接等;

    3.无须特殊权限即可安装;

    4.优化的流程,文件传输效率高;

    5.可以使用 rcp 、 ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;

    6.支持匿名传输。

    核心算法介绍:

    假定在名为α和β的两台计算机之间同步相似的文件 A 与 B ,其中α对文件 A 拥有访问权,β对文件 B 拥有访问权。并且假定主机α与β之间的网络带宽很小。那么 rsync 算法将通过下面的五个步骤来完成:

    1.β将文件 B 分割成一组不重叠的固定大小为 S 字节的数据块。最后一块可能会比 S 小。

    2.β对每一个分割好的数据块执行两种校验:一种是 32 位的滚动弱校验,另一种是 128 位的 MD4 强校验。

    3.β将这些校验结果发给α。

    4.α通过搜索文件 A 的所有大小为 S 的数据块 ( 偏移量可以任选,不一定非要是 S 的倍数 ) ,来寻找与文件 B 的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。

    5.α发给β一串指令来生成文件 A 在β上的备份。这里的每一条指令要么是对文件 B 经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件 B 的任何一个数据块匹配上的。

    如系统中不存在rsync命令,需要安装rsync包。

    [root@lanquark chap04]# yum -y install rsync
    
    

    rsync命令格式

    1.rsync [OPTION]... SRC DEST
    2.rsync [OPTION]... SRC [USER@]host:DEST
    3.rsync [OPTION]... [USER@]HOST:SRC DEST
    4.rsync [OPTION]... [USER@]HOST::SRC DEST
    5.rsync [OPTION]... SRC [USER@]HOST::DEST
    6.rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

    对应于以上六种命令格式, rsync 有六种不同的工作模式:

    1. 拷贝本地文件。当 SRC 和 DES 路径信息都不包含有单个冒号 ":" 分隔符时就启动这种工作模式。

    2. 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将本地机器的内容拷贝到远程机器。当 DST 路径地址包含单个冒号 ":" 分隔符时启动该模式。

    3. 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将远程机器的内容拷贝到本地机器。当 SRC 地址路径包含单个冒号 ":" 分隔符时启动该模式。

    4. 从远程 rsync 服务器中拷贝文件到本地机。当 SRC 路径信息包含 "::" 分隔符时启动该模式。

    5. 从本地机器拷贝文件到远程 rsync 服务器中。当 DST 路径信息包含 "::" 分隔符时启动该模式。

    6. 列远程机的文件列表。这类似于 rsync 传输,不过只要在命令中省略掉本地机信息即可。


    二、rsync常用选项

    rsync常用选项
    -a 归档模式,表示以递归方式传输文件,并保持所有文件属性。包含-rtplgoD参数选项
    -r 同步目录时要加上,类似cp时的-r选项
    -v 详细输出模式,传输时的进度等信息
    -l 保留软连接
    若是拷贝的原目录里面有一个软链接文件,那这个软链接文件指向到了另外一个目录下
    在加上-l,它会把软链接文件本身拷贝到目标目录里面去
    -L 加上该选项后,同步软链接时会把源文件给同步
    -p 保持文件的权限属性
    -o 保持文件的属主
    -g 保持文件的属组
    -D 保持设备文件信息
    /dev/sdb1 这样的设备文件有它的特殊性,如果不加-D 可能拷贝过去就是一个非常普通的文件,不能当设备来用
    -t 保持文件的时间属性
    --delete 删除DEST中SRC没有的文件
    --exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
    -P 显示同步过程,比如速率,比-v更加详细
    -u 加上该选项后,如果DEST中的文件比SRC新,则不同步
    update
    -z 传输时压缩

    同步本地文件

    //把/etc/passwd文件拷贝到/tmp下并改名为1.txt
    [root@lanquark ~]# rsync -av /etc/passwd /tmp/1.txt
    sending incremental file list
    passwd
    
    sent 1291 bytes  received 31 bytes  2644.00 bytes/sec
    total size is 1217  speedup is 0.92
    

    同步目录

    [root@bluequark ~]# ls dir1/
    a  c  d
    [root@bluequark ~]# ls /tmp/
    1.txt
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-chronyd.service-jv2Bpr
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vgauthd.service-oCGr69
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vmtoolsd.service-1dlYNS
    yum_save_tx.2018-06-17.14-37.9ILO4c.yumtx
    yum_save_tx.2018-06-17.14-38.XuyzIC.yumtx
    [root@bluequark ~]# rsync -av /root/dir1/ /tmp/dir_test/
    sending incremental file list
    created directory /tmp/dir_test
    ./
    a
    c
    d
    
    sent 204 bytes  received 112 bytes  632.00 bytes/sec
    total size is 0  speedup is 0.00
    [root@bluequark ~]# ls /tmp/dir_test/
    a  c  d
    
    

    rsync远程命令同步/拷贝

    //将192.168.1.211 /tmp/1.txt同步到192.168.1.215的 /tmp/1.txt
    [root@lanquark ~]# rsync -avz /tmp/1.txt 192.168.1.215:/tmp/1.txt
    root@192.168.1.215's password: 
    sending incremental file list
    1.txt
    
    sent 577 bytes  received 31 bytes  93.54 bytes/sec
    total size is 1217  speedup is 2.00
    //在192.168.1.215验证
    [root@bluequark ~]# ls -l /tmp/1.txt 
    -rw-r--r--. 1 root root 1217 Jun 10 10:56 /tmp/1.txt
    

    -l参数保留软链接

    //-a选项默认包含-l
    [root@bluequark dir1]# ln -s /etc/passwd /root/dir1/passwd.soft
    [root@bluequark dir1]# ll
    total 0
    -rw-r--r--. 1 root root  0 Jun 18 08:02 a
    -rw-r--r--. 1 root root  0 Jun 18 08:02 c
    -rw-r--r--. 1 root root  0 Jun 18 08:02 d
    lrwxrwxrwx. 1 root root 11 Jun 18 08:07 passwd.soft -> /etc/passwd
    [root@bluequark dir1]# rsync -av /root/dir1/ /tmp/dir_test/
    sending incremental file list
    ./
    passwd.soft -> /etc/passwd
    
    sent 132 bytes  received 22 bytes  308.00 bytes/sec
    total size is 11  speedup is 0.07
    [root@bluequark dir1]# ls -l /tmp/dir_test/
    total 0
    -rw-r--r--. 1 root root  0 Jun 18 08:02 a
    -rw-r--r--. 1 root root  0 Jun 18 08:02 c
    -rw-r--r--. 1 root root  0 Jun 18 08:02 d
    lrwxrwxrwx. 1 root root 11 Jun 18 08:07 passwd.soft -> /etc/passwd
    

    -L参数拷贝软链接所指定的源文件

    [root@bluequark dir1]# ls /tmp/
    1.txt
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-chronyd.service-jv2Bpr
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vgauthd.service-oCGr69
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vmtoolsd.service-1dlYNS
    yum_save_tx.2018-06-17.14-37.9ILO4c.yumtx
    yum_save_tx.2018-06-17.14-38.XuyzIC.yumtx
    [root@bluequark dir1]# ls -l 
    total 0
    -rw-r--r--. 1 root root  0 Jun 18 08:02 a
    -rw-r--r--. 1 root root  0 Jun 18 08:02 c
    -rw-r--r--. 1 root root  0 Jun 18 08:02 d
    lrwxrwxrwx. 1 root root 11 Jun 18 08:07 passwd.soft -> /etc/passwd
    [root@bluequark dir1]# rsync -avL /root/dir1/ /tmp/dir_test/
    sending incremental file list
    created directory /tmp/dir_test
    ./
    a
    c
    d
    passwd.soft
    
    sent 1,178 bytes  received 131 bytes  2,618.00 bytes/sec
    total size is 901  speedup is 0.69
    [root@bluequark dir1]# ls -l /tmp/dir_test/
    total 4
    -rw-r--r--. 1 root root   0 Jun 18 08:02 a
    -rw-r--r--. 1 root root   0 Jun 18 08:02 c
    -rw-r--r--. 1 root root   0 Jun 18 08:02 d
    -rw-r--r--. 1 root root 901 May  8 09:46 passwd.soft
    
    

    删除目标中源文件中没有的内容

    [root@bluequark ~]# ls /tmp/dir_test/
    a  c  d  e  g  passwd.soft
    [root@bluequark ~]# ls dir1
    a  c  d  passwd.soft
    [root@bluequark ~]# rsync -av --delete /root/dir1/ /tmp/dir_test/
    sending incremental file list
    deleting g
    deleting e
    ./
    passwd.soft -> /etc/passwd
    
    sent 132 bytes  received 28 bytes  320.00 bytes/sec
    total size is 11  speedup is 0.07
    //验证
    [root@bluequark ~]# ls /tmp/dir_test/
    a  c  d  passwd.soft
    [root@bluequark ~]# ls dir1/
    a  c  d  passwd.soft
    
    

    过滤指定文件,如txt文件

    [root@bluequark dir1]# ls 
    a  a.txt  b.txt  c  c.txt  d  d.txt  e.txt  passwd.soft
    [root@bluequark dir1]# ls /tmp/dir_test/
    a  c  d  passwd.soft
    [root@bluequark dir1]# rsync -av --exclude "*.txt" /root/dir1/ /tmp/dir_test/
    sending incremental file list
    ./
    
    sent 133 bytes  received 19 bytes  304.00 bytes/sec
    total size is 11  speedup is 0.07
    [root@bluequark dir1]# ls /tmp/dir_test/
    a  c  d  passwd.soft
    

    多次过滤文件(指定多个exclude)

    [root@bluequark dir1]# ls 
    a  a.txt  b.txt  c  c.txt  d  d.txt  e.txt  f  passwd.soft
    [root@bluequark dir1]# ls /tmp/dir_test/
    a  c  d  passwd.soft
    [root@bluequark dir1]# rsync -av --exclude "*.txt" --exclude f /root/dir1/ /tmp/dir_test/
    sending incremental file list
    ./
    
    sent 129 bytes  received 19 bytes  296.00 bytes/sec
    total size is 11  speedup is 0.07
    [root@bluequark dir1]# ls /tmp/dir_test/
    a  c  d  passwd.soft
    
    

    增量更新

    [root@bluequark dir1]# touch new_file
    [root@bluequark dir1]# ls 
    a  a.txt  b.txt  c  c.txt  d  d.txt  e.txt  f  new_file  passwd.soft
    [root@bluequark dir1]# ls /tmp/dir_test/
    a  c  d  passwd.soft
    [root@bluequark dir1]# rsync -av --exclude "*.txt" --exclude f /root/dir1/ /tmp/dir_test/
    sending incremental file list
    ./
    new_file
    
    sent 197 bytes  received 38 bytes  470.00 bytes/sec
    total size is 11  speedup is 0.05
    [root@bluequark dir1]# ls /tmp/dir_test/
    a  c  d  new_file  passwd.soft
    

    -P参数显示传输过程信息(也可使用--progress)

    [root@bluequark dir1]# ls /tmp/
    1.txt
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-chronyd.service-jv2Bpr
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vgauthd.service-oCGr69
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vmtoolsd.service-1dlYNS
    yum_save_tx.2018-06-17.14-37.9ILO4c.yumtx
    yum_save_tx.2018-06-17.14-38.XuyzIC.yumtx
    [root@bluequark dir1]# rsync -avP /root/dir1/ /tmp/dir_test/
    sending incremental file list
    created directory /tmp/dir_test
    ./
    a
                  0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=10/12)
    a.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=9/12)
    b.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=8/12)
    c
                  0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=7/12)
    c.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=6/12)
    d
                  0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=5/12)
    d.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#7, to-chk=4/12)
    e.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#8, to-chk=3/12)
    f
                  0 100%    0.00kB/s    0:00:00 (xfr#9, to-chk=2/12)
    new_file
                  0 100%    0.00kB/s    0:00:00 (xfr#10, to-chk=1/12)
    passwd.soft -> /etc/passwd
    
    sent 655 bytes  received 248 bytes  1,806.00 bytes/sec
    total size is 11  speedup is 0.01
    [root@bluequark dir1]# ls /tmp/
    1.txt
    dir_test
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-chronyd.service-jv2Bpr
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vgauthd.service-oCGr69
    systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vmtoolsd.service-1dlYNS
    yum_save_tx.2018-06-17.14-37.9ILO4c.yumtx
    yum_save_tx.2018-06-17.14-38.XuyzIC.yumtx
    

    -u参数,如果DEST中的文件比SRC新,则不同步

    [root@bluequark dir1]# ls
    a  a.txt  b.txt  c  c.txt  d  d.txt  e.txt  f  new_file  passwd.soft
    [root@bluequark dir1]# ls /tmp/dir_test/
    a  a.txt  b.txt  c  c.txt  d  d.txt  e.txt  f  new_file  passwd.soft
    [root@bluequark dir1]# echo -e '11111\n222222' >/tmp/dir_test/new_file 
    [root@bluequark dir1]# cat /tmp/dir_test/new_file 
    11111
    222222
    [root@bluequark dir1]# rsync -avu /root/dir1/ /tmp/dir_test/
    sending incremental file list
    
    sent 255 bytes  received 12 bytes  534.00 bytes/sec
    total size is 11  speedup is 0.04
    [root@bluequark dir1]# cat /tmp/dir_test/new_file 
    11111
    222222
    

    -z参数压缩传输内容

    [root@bluequark dir1]# rm -rf /tmp/dir_test/
    [root@bluequark dir1]# rsync -avzP /root/dir1/ /tmp/dir_test/
    sending incremental file list
    created directory /tmp/dir_test
    ./
    a
                  0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=10/12)
    a.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=9/12)
    b.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=8/12)
    c
                  0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=7/12)
    c.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=6/12)
    d
                  0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=5/12)
    d.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#7, to-chk=4/12)
    e.txt
                  0 100%    0.00kB/s    0:00:00 (xfr#8, to-chk=3/12)
    f
                  0 100%    0.00kB/s    0:00:00 (xfr#9, to-chk=2/12)
    new_file
                  0 100%    0.00kB/s    0:00:00 (xfr#10, to-chk=1/12)
    passwd.soft -> /etc/passwd
    
    sent 625 bytes  received 248 bytes  1,746.00 bytes/sec
    total size is 11  speedup is 0.01
    
    

    三、rsync通过ssh同步

    将本地文件传输到远程主机。两台主机均需安装rsync工具(推/push)

    [root@bluequark dir1]# ifconfig ens32
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.215  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::4b8:26ea:7a81:1309  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:23:78:9a  txqueuelen 1000  (Ethernet)
            RX packets 84128  bytes 66006284 (62.9 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 14985  bytes 1268977 (1.2 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    [root@bluequark dir1]# rsync -avz /root/dir1/ root@192.168.1.211:/tmp/
    The authenticity of host '192.168.1.211 (192.168.1.211)' can't be established.
    ECDSA key fingerprint is SHA256:4YmqUS7zJyKrQPtb2UWWzGDE1GLENRUqVRRhsEF77MM.
    ECDSA key fingerprint is MD5:10:39:f7:f6:d3:0e:5e:8a:37:e6:42:05:55:ec:5a:a4.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.1.211' (ECDSA) to the list of known hosts.
    root@192.168.1.211's password: 
    sending incremental file list
    ./
    a
    a.txt
    b.txt
    c
    c.txt
    d
    d.txt
    e.txt
    f
    new_file
    passwd.soft -> /etc/passwd
    
    sent 555 bytes  received 215 bytes  102.67 bytes/sec
    total size is 11  speedup is 0.01
    
    //在192.168.1.211上验证
    [root@lanquark ~]# ls /tmp/
    1.cap  c.txt       new_file
    1.txt  d           passwd.soft
    a      d.txt       systemd-private-5dc4d8c670554b30ad5a839536759825-chronyd.service-yivMCy
    a.txt  e.txt       systemd-private-5dc4d8c670554b30ad5a839536759825-vgauthd.service-uYg2rs
    b.txt  f           systemd-private-5dc4d8c670554b30ad5a839536759825-vmtoolsd.service-JaTMim
    c      mysql.sock
    
    

    将远程主机主机上的文件复制到本地(拉/pull)

    //远程主机192.168.1.211
    [root@lanquark ~]# ifconfig ens32
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.211  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::5114:2b77:d59a:bc78  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:2f:92:ee  txqueuelen 1000  (Ethernet)
            RX packets 294449  bytes 70104448 (66.8 MiB)
            RX errors 0  dropped 26  overruns 0  frame 0
            TX packets 36584  bytes 3889091 (3.7 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@lanquark ~]# ls 
    1.sh  2.sh  anaconda-ks.cfg  datafile  demo  download  download1  employees  iptables-script  iptables_cmd.sh  unixshellfromsamplle
    //本地主机192.168.1.215
    [root@bluequark dir1]# ifconfig ens32
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.215  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::4b8:26ea:7a81:1309  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:23:78:9a  txqueuelen 1000  (Ethernet)
            RX packets 84872  bytes 66189563 (63.1 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 15262  bytes 1304652 (1.2 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    [root@bluequark ~]# ls
    1.txt  anaconda-ks.cfg  dir1
    
    //将192.168.1.211:/root/下的sh文件复制到本地的/root目录下
    [root@bluequark ~]# rsync -avPz root@192.168.1.211:/root/*.sh /root/
    root@192.168.1.211's password: 
    receiving incremental file list
    1.sh
                293 100%  286.13kB/s    0:00:00 (xfr#1, to-chk=2/3)
    2.sh
                105 100%  102.54kB/s    0:00:00 (xfr#2, to-chk=1/3)
    iptables_cmd.sh
                481 100%  469.73kB/s    0:00:00 (xfr#3, to-chk=0/3)
    
    sent 68 bytes  received 633 bytes  155.78 bytes/sec
    total size is 879  speedup is 1.25
    [root@bluequark ~]# ls
    1.sh  1.txt  2.sh  anaconda-ks.cfg  dir1  iptables_cmd.sh
    

    参数-e 指定端口传输文件

    ////指定对方侦听的22端口,就可以连接对面的22端口。
    [root@bluequark ~]# rsync -avP -e "ssh -p 22" /root/1.txt root@192.168.1.211:/root/1.txt
    root@192.168.1.211's password: 
    sending incremental file list
    1.txt
              1,217 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)
    
    sent 1,302 bytes  received 34 bytes  296.89 bytes/sec
    total size is 1,217  speedup is 0.91
    
    //ssh命令可以通过-p参数指定对方打开的ssh端口(默认是22,但是往往出于安装原因会改为其他不知道端口)
    [root@bluequark ~]# ssh -p 22 192.168.1.211
    root@192.168.1.211's password: 
    Last login: Sun Jun 17 10:59:56 2018 from 192.168.1.9
    [root@lanquark ~]# ifconfig ens32
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.211  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::5114:2b77:d59a:bc78  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:2f:92:ee  txqueuelen 1000  (Ethernet)
            RX packets 295044  bytes 70302481 (67.0 MiB)
            RX errors 0  dropped 26  overruns 0  frame 0
            TX packets 36739  bytes 3912332 (3.7 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    [root@lanquark ~]# exit
    logout
    Connection to 192.168.1.211 closed.
    [root@bluequark ~]# ifconfig ens32
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.215  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::4b8:26ea:7a81:1309  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:23:78:9a  txqueuelen 1000  (Ethernet)
            RX packets 86013  bytes 66421505 (63.3 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 15782  bytes 1371799 (1.3 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    ssh免密同步(密钥验证)

    //如192.168.1.215需要免密码实现到192.168.1.211的rsync复制,可以通过密钥认证的方式
    //生成密钥对
    [root@bluequark ~]# ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:2mOnhHP91zMzyG9YkK//7tgJkklfXtqxNCJu+Z06Qzw root@bluequark.com
    The key's randomart image is:
    +---[RSA 2048]----+
    |                 |
    |                 |
    |              .  |
    |             o   |
    |        S  o..o=.|
    |       + .o *E===|
    |      + * oBooB+.|
    |       = +..oB+O+|
    |        .   .+OO@|
    +----[SHA256]-----+
    //将公钥复制到192.168.1.211,并将公钥内容添加到/root/.ssh/authorized_keys文件
    [root@bluequark ~]# ssh-copy-id 192.168.1.211
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@192.168.1.211's password: 
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh '192.168.1.211'"
    
    [root@bluequark ~]# ssh 192.168.1.211
    Last login: Mon Jun 18 20:55:57 2018 from 192.168.1.215
    
    [root@lanquark ~]# rsync -av 192.168.1.211:/etc/passwd /tmp/mypasswd
    receiving incremental file list
    passwd
    
    sent 30 bytes  received 1296 bytes  884.00 bytes/sec
    total size is 1217  speedup is 0.92
    [root@lanquark ~]# ls /tmp/
    1.cap  b.txt  d.txt     mypaswd      systemd-private-5dc4d8c670554b30ad5a839536759825-chronyd.service-yivMCy
    1.txt  c      e.txt     mysql.sock   systemd-private-5dc4d8c670554b30ad5a839536759825-vgauthd.service-uYg2rs
    a      c.txt  f         new_file     systemd-private-5dc4d8c670554b30ad5a839536759825-vmtoolsd.service-JaTMim
    a.txt  d      mypasswd  passwd.soft
    
    

    四、 rsync通过服务同步

    服务端配置

    1.新建rsync的配置文件

    //以192.168.1.211作为服务端,192.168.1.215作为客户端
    //在192.168.1.211上新建rsync服务端的配置文件
    [root@lanquark ~]# touch /etc/rsyncd.conf
    [root@lanquark ~]# ls -l /etc/rsyncd.conf 
    -rw-r--r--. 1 root root 458 Jun 18 21:28 /etc/rsyncd.conf
    [root@lanquark ~]# vim /etc/rsyncd.conf 
    添加如下内容
    uid = rsync
    gid = rsync
    use chroot = no
    timeout = 600 
    max connections = 2000
    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
    host allow = 192.168.1.0/24
    hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    [backup]
    path = /backup
    comment = for data backup by kennminn  
    

    2.创建rsync用户及共享目录/backup

    [root@lanquark ~]# useradd rsync -M -s /sbin/nologin
    [root@lanquark ~]# id rsync
    uid=5004(rsync) gid=5004(rsync) groups=5004(rsync)
    [root@lanquark ~]# mkdir /backup
    [root@lanquark ~]# chown -R rsync /backup
    

    3.创建密码文件

    [root@lanquark ~]# echo "rsync_backup:123456" > /etc/rsync.password
    [root@lanquark ~]# chmod 600 /etc/rsync.password
    [root@lanquark ~]# cat /etc/rsync.password 
    rsync_backup:123456
    

    4.以守护进程方式启动:rsync --daemon

    [root@lanquark ~]# rsync --daemon
    //验证是否启动,rsync守护进程默认监听873端口
    [root@lanquark ~]# netstat -nltup | grep :873
    tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      13571/rsync         
    tcp6       0      0 :::873                  :::*                    LISTEN      13571/rsync         
    或
    [root@lanquark ~]# ps -ef | grep rsync | grep -v grep
    root      13571      1  0 21:50 ?        00:00:00 rsync --daemon
    

    5.加入开机自启动

    [root@lanquark ~]# echo "rsync --daemon" >> /etc/rc.local
    [root@lanquark ~]# cat /etc/rc.local
    #!/bin/bash
    # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
    #
    # It is highly advisable to create own systemd services or udev rules
    # to run scripts during boot instead of using this file.
    #
    # In contrast to previous versions due to parallel execution during boot
    # this script will NOT be run after all other services.
    #
    # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
    # that this script will be executed during boot.
    
    touch /var/lock/subsys/local
    rsync --daemon
    
    

    至此,服务器端设置完毕

    客户端设定

    1.创建密码文件

    [root@lanquark ~]# echo "123456" >>/etc/rcync.password
    [root@lanquark ~]# cat /etc/rcync.password 
    123456
    [root@lanquark ~]# chmod 600 /etc/rsync.password
    

    客户端设置完成。

    验证

    //在客户端192.168.1.215上往服务器推送目录dir2
    [root@bluequark ~]# rsync -avz dir2/ rsync_backup@192.168.1.211::backup --password-file=/etc/rsync.password
    sending incremental file list
    ./
    1.sh
    2.sh
    iptables_cmd.sh
    
    sent 657 bytes  received 75 bytes  488.00 bytes/sec
    total size is 879  speedup is 1.20
    //在服务端查看
    [root@lanquark ~]# ls /backup/
    1.sh  2.sh  iptables_cmd.sh
    
    //从服务端往下拉文件
    [root@bluequark ~]# rsync -avz rsync_backup@192.168.1.211::backup /tmp/backup/ --password-file=/etc/rsync.password 
    receiving incremental file list
    created directory /tmp/backup
    ./
    1.sh
    1.txt
    2.sh
    iptables_cmd.sh
    
    sent 143 bytes  received 786 bytes  1,858.00 bytes/sec
    total size is 879  speedup is 0.95
    [root@bluequark ~]# ls /tmp/backup/
    1.sh  1.txt  2.sh  iptables_cmd.sh
    
    

    QA

    //错误:no route to host
    [root@bluequark ~]# rsync -avz rsync_backup@192.168.1.211::backup /tmp/backup/ --password-file=/etc/rsync.password 
    rsync: failed to connect to 192.168.1.211 (192.168.1.211): No route to host (113)
    //解决,在firewalld防火墙添加规则即可
    [root@lanquark ~]# firewall-cmd --zone=public --add-service=rsyncd
    success
    [root@bluequark ~]# telnet 192.168.1.211 873
    Trying 192.168.1.211...
    Connected to 192.168.1.211.
    Escape character is '^]'.
    @RSYNCD: 30.0
    ^]
    telnet> quit
    Connection closed.
    [root@bluequark ~]# rsync -avz rsync_backup@192.168.1.211::backup /tmp/backup/ --password-file=/etc/rsync.password 
    receiving incremental file list
    
    sent 64 bytes  received 185 bytes  498.00 bytes/sec
    total size is 879  speedup is 3.53
    
    

    五、linux系统日志

    Linux系统中会有很多的日志文件,这些文件可以帮助我们了解很多系统的重要事件。这些文件一般都存放在/var/log目录中。常见的日志文件有:

    1./var/log/messages:这个文件相当重要,几乎系统发生的所有错误信息或重要信息都会记录在这个文件中,包含系统启动时的引导消息及系统运行时的其他状态消息。

    2./var/log/secure:记录系统的安全信息,如ssh、ftp、pop3

    3./var/log/dmesg:记录系统在启动时核心检测过程所生产的各项信息

    4./var/log/lastlog:记录系统上所有用户最后一次登录系统的信息,lastlog命令就是利用该文件的内容来显示数据的。

    5./var/log/wtmp:记录用户登录系统及退出系统的信息,该文件是经过处理的,无法直接查看,可以使用相关命令来查看,如last和ac命令

    6./var/log/boot.log:记录守护进程启动和停止相关的日志信息

    7./var/log/faillog:记录登录失败时的用户信息

    8./var/log/cron:记录与定时任务crontab相关的日志信息

    9./var/log/httod/,/var/log/news/,/var/log/samba/*:各个服务的日志文件,记录各自的服务产生的日志信息

    syslogd服务可以帮助我们主动收集到设备的各种信息,并将其保存在服务器上,当出现问题时可以省去手动收集信息的麻烦,方便快捷的从syslogd服务中读取各种信息进行分析排错。

    在centos7中已经用rsyslogd取代了syslogd。rsyslod是加强版的syslogd,且完美兼容syslogd。

    rsyslogd的主要配置文件:/etc/rsyslog.conf

    [root@bluequark ~]# cat /etc/rsyslog.conf 
    # rsyslog configuration file
    
    # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
    # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
    
    
    #### RULES ####
    
    # Log all kernel messages to the console.
    # Logging much else clutters up the screen.
    #kern.*                                                 /dev/console
    
    # Log anything (except mail) of level info or higher.
    # Don't log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    
    # The authpriv file has restricted access.
    authpriv.*                                              /var/log/secure
    
    # Log all the mail messages in one place.
    mail.*                                                  -/var/log/maillog
    ...中间略...
    
    # Log cron stuff
    cron.*                                                  /var/log/cron
    
    # Everybody gets emergency messages
    *.emerg                                                 :omusrmsg:*
    
    # Save news errors of level crit and higher in a special file.
    uucp,news.crit                                          /var/log/spooler
    
    # Save boot messages also to boot.log
    local7.*                                                /var/log/boot.log
    
    
    # ### end of the forwarding rule ###
    

    配置日志记录的规则语法格式如下

    服务名[.=!]信息等级 记录方式

    服务名

    ID 服务名 说明
    0 kern 内核日志信息
    1 user 用户日志信息
    2 mail 邮件系统日志信息
    3 daemon 系统守护进程日志信息
    4 auth 安全管理日志信息
    5 syslog syslogd守护进程日志信息
    6 lpr 打印服务日志信息
    7 news 新闻组服务日志信息
    8 uucp uucp系统日志信息
    9 cron cron守护进程日志信息
    10 authpriv 私有的安全管理日志信息
    11 ftp ftp守护进程
    12-15 local0-local7 系统保留
    16-23 保留给系统本地使用

    信息等级

    ID 信息等级 说明
    0 emerg或panic 系统不可用,死机
    1 alert 警告事件,可能会影响到系统的运行,必须立即采取行动纠正事件
    2 cri 严重错误,比error更严重的错误,如硬件故障
    3 error或err 错误信息,如某些服务无法启动。需仔细检查错误原因
    4 warning 警告信息,但不会影响系统的进程
    5 notice 比info更应注意的信息,需特别处理
    6 info 基本信息,主要是一些提示信息
    7 debug 程序调试信息

    连接符

    服务名与信息等级之间有一个连接符。与后面的信息等级结合使用可以表示服务要记录哪些级别的日志信息。

    1.:记录高于等于该等级的信息
    2.=:只记录等于该等级的信息
    3.!:记录除了该等级外的所有信息

    配置文件/etc/sysconfig/rsyslog主要用来配置是否接收其他主机的日志信息。

    [root@bluequark ~]# cat /etc/sysconfig/syslog
    cat: /etc/sysconfig/syslog: No such file or directory
    [root@bluequark ~]# cat /etc/sysconfig/rsyslog
    # Options for rsyslogd
    # Syslogd options are deprecated since rsyslog v3.
    # If you want to use them, switch to compatibility mode 2 by "-c 2"
    # See rsyslogd(8) for more details
    SYSLOGD_OPTIONS=""
    //若想要让本机接收其他主机发送的日志文件,可以将SYSLOGD_OPTION的内容设为"-c 0 -r"
    //SYSLOGD_OPTION="-c 0 -r"
    

    日志文件如果不定期清理,可能会导致出现内容过多,容量过大,甚至填满整个磁盘空间的问题。Linux系统提供了一个logrotate工具,与cron配合使用可以很方便地管理日志信息。

    logrotate是按计划运行的。配置文件:/etc/logrotate.conf(主配置文件)和/etc/logrotate.d目录下的文件

    [root@bluequark ~]# cat /etc/logrotate.conf 
    # see "man logrotate" for details
    # rotate log files weekly
    # 所有的文件每星期进行一次rotate的工作
    weekly
    
    # keep 4 weeks worth of backlogs
    # 转储的文件保留4个
    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
    # 读取/etc/lorotate.d目录下的文件来执行rotate工作
    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.
    
    

    logrotate配置文件的相关参数说明

    参数 说明
    compress 通过gzip压缩转储后的文件
    nocompress 不需要压缩时,使用这个参数
    copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
    nocopytruncate 备份日志文件但是不截断
    create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
    nocreate 不建立新的日志文件
    delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
    nodelaycompress 覆盖delaycompress选项,转储同时压缩
    errors address 转储时错误信息发送到指定的email
    ifempty 即使是空文件也转储,这个是logrotate的默认选项
    noifempty 如果是空文件,则不转储
    mail address 把转储的日志文件发送到指定的email地址
    nomail 转储时不发送日志文件
    olddir directory 转存后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统中
    noolddir 转储后的日志文件和当前日志放在一个目录下
    prerotate/endscript 在转储以前需要执行的命令可以放入这两个关键字之间,这两个关键字必须单独成行
    postrotate/endscript 在转储以后需要执行的命令可以放入这两个关键字之间,这两个关键字必须单独成行
    daily 指定转储周期为每天
    weekly 指定转储周期为每周
    monthly 指定转储周期为每月
    rotate count 日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
    tabootex[+]list 让logrotate不转储指定扩展名的文件,默认扩展名是.rpm-orig,.rpmsave,v和~
    size 当日志文件达到指定大小才转储,size可指定byte(默认)及KB或MB

    dmesg命令

    dmesg命令,会把系统硬件相关的日志列出来。这个日志是保存在内存中的,并不是一个文件

    假如你的网卡有问题了,硬盘损坏了,都会记录在这个日志中

    dmesg -c //清空当前日志,但是一重启这个系统,又会生成这些日志

    /var/log/dmesg日志文件

    这个日志文件和 dmesg命令 没有任何关联

    它是系统启动的一个日志,记录的信息

    last命令

    默认情况下last读取/var/log/wtmp文件中的信息。

    [root@bluequark ~]# last
    root     pts/0        192.168.1.9      Mon Jun 18 07:59   still logged in   
    root     pts/0        192.168.1.9      Mon Jun 18 07:46 - 07:58  (00:12)    
    root     tty1                          Sun Jun 17 14:30   still logged in   
    root     tty1                          Sat Jun 16 10:02 - 14:30 (1+04:27)   
    reboot   system boot  3.10.0-693.el7.x Wed Jun 13 11:47 - 13:21 (5+01:34)   
    root     tty1                          Tue Jun 12 14:20 - 15:35  (01:15)    
    reboot   system boot  3.10.0-693.el7.x Tue Jun 12 14:20 - 13:21 (5+23:01)   
    root     tty1                          Tue May  8 09:54 - 09:59  (00:04)    
    reboot   system boot  3.10.0-693.el7.x Tue May  8 09:51 - 13:21 (41+03:29)  
    
    wtmp begins Tue May  8 09:51:58 2018
    
    

    -n参数指定记录数

    [root@bluequark ~]# last -n 5
    root     pts/0        192.168.1.9      Mon Jun 18 07:59   still logged in   
    root     pts/0        192.168.1.9      Mon Jun 18 07:46 - 07:58  (00:12)    
    root     tty1                          Sun Jun 17 14:30   still logged in   
    root     tty1                          Sat Jun 16 10:02 - 14:30 (1+04:27)   
    reboot   system boot  3.10.0-693.el7.x Wed Jun 13 11:47 - 13:23 (5+01:35)   
    
    wtmp begins Tue May  8 09:51:58 2018
    

    lastb命令,查看登录失败的用户,对应的文件时/var/log/btmp 日志

    /var/log/btmp是二进制文件,不能直接cat

    [root@bluequark ~]# lastb
    
    btmp begins Wed Jun 13 11:47:29 2018
    
    

    lastlog显示当前系统上的所有用户最后一次登录系统的时间。(读取/var/log/lastlog)

    [root@bluequark ~]# lastlog
    Username         Port     From             Latest
    root             pts/0    192.168.1.9      Mon Jun 18 07:59:04 -0400 2018
    bin                                        **Never logged in**
    daemon                                     **Never logged in**
    adm                                        **Never logged in**
    lp                                         **Never logged in**
    sync                                       **Never logged in**
    shutdown                                   **Never logged in**
    halt                                       **Never logged in**
    mail                                       **Never logged in**
    operator                                   **Never logged in**
    games                                      **Never logged in**
    ftp                                        **Never logged in**
    nobody                                     **Never logged in**
    systemd-network                            **Never logged in**
    dbus                                       **Never logged in**
    polkitd                                    **Never logged in**
    postfix                                    **Never logged in**
    sshd                                       **Never logged in**
    chrony                                     **Never logged in**
    kennminn                                   **Never logged in**
    

    六、screen工具

    Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

    会话恢复

    只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

    多窗口

    在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

    系统默认没有安装screen工具,可用yum工具安装

    [root@bluequark ~]# yum -y install screen
    
    

    常见用法

    screen直接回车就进入了虚拟终端

    ctrl a组合键再按d退出虚拟终端,但不是结束

    screen -ls 查看虚拟终端列表

    screen -r id 进入指定的终端

    screen -S w1

    screen -r w1

    //进入虚拟终端
    [root@bluequark ~]# screen 
    
    //screen -ls 查看虚拟终端列表
    [root@bluequark ~]# screen -ls
    There is a screen on:
            6273.pts-0.bluequark    (Attached)
    1 Socket in /var/run/screen/S-root.
    
    //退出虚拟终端ctrl+a;d
    
    //[root@bluequark ~]# screen 
    [detached from 6273.pts-0.bluequark]
    
    //进入指定终端
    [root@bluequark ~]# screen -r 6273
    
    [root@bluequark ~]# screen -ls
    There is a screen on:
            6273.pts-0.bluequark    (Attached)
    1 Socket in /var/run/screen/S-root.
    
    [root@bluequark ~]# 
    
    //取名firest
    [root@bluequark ~]# screen -S first
    [root@bluequark ~]# screen -ls
    There are screens on:
            6289.first      (Attached)
            6273.pts-0.bluequark    (Attached)
    2 Sockets in /var/run/screen/S-root.
    
    

    需求,执行一个脚本,需要一天一夜,而且脚本会输出一些东西出来,这就意味着这个脚本不能中途断开,保证脚本不中断,有两种方法:

    方法一:把这个任务丢到后台去,然后加一个日志的输出

    命令nohup command &——>nohup 加执行命令 加日志 再加一个&符号

    这时即使你的终端断开,依旧会在后台执行——>但虽然解决了任务中断的问题,但是没有办法实时查看输出的内容

    方法二:screen工具,可以把要执行的命令,放到这个终端里,然后在退出pts/0之前,可以把screen丢到后台去,随时用, 随时查看

    screen可以执行多个虚拟终端,同时运行,若想进入到其中一个,指定id即可

    但是时间久了,有可能会忘记某一个screen是运行的是什么(因为名字是相同的)

    我们可以给screen作业的名称

    screen -S "test_screen"

    screen -r 后可以加id号,可以是screen作业的名称


    七、扩展

    扩展

    1. Linux日志文件总管logrotate http://linux.cn/article-4126-1.html
    2. xargs用法详解 http://blog.csdn.net/zhangfn2011/article/details/6776925
  • 相关阅读:
    经典排序之 计数排序
    经典算法 总结
    经典排序之 二路归并排序
    经典排序之 堆排序
    经典排序之 插入排序
    经典排序之 冒泡排序
    经典排序之 选择排序
    经典排序之 快速排序
    两个队列实现一个栈
    Java Web系列:JDBC 基础
  • 原文地址:https://www.cnblogs.com/minn/p/9197048.html
Copyright © 2011-2022 走看看