1. rsync通过服务同步

在远程主机上建立一个rsync的服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。


实验测试:

  1. 找两台主机,一个IP是172.16.111.100,另一个是172.16.111.110。

  2. 在100主机上建立并配置rsync的配置文件/etc/rsyncd.conf,如下所示:


虚拟机1操作

# vi /etc/rsyncd.conf    (把以下内容编辑到rsyncd.conf文件里)

port=873

log file=/var/log/rsync.log

pid file=/var/run/rsyncd.pid

address=172.16.111.100

[test]

path=/tmp/rsync

use chroot=true

max connections=4

read only=no

list=true

uid=root

gid=root

#auth users=test

#secrets file=/etc/rsyncd.passwd

hosts allow=172.16.111.110

# rsync --daemon        启动服务,如果地址不在默认目录下,启动服务时需要添加地址

# ps aux |grep rsync    检测服务是否启动

root       4009  0.0  0.0 114656   524 ?        Ss   18:18   0:00 rsync --daemon

root       4017  0.0  0.0 112676   976 pts/0    S+   18:20   0:00 grep --color=auto rsync

# netstat -lntp  检查监听的端口

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      771/sshd            

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1019/master         

tcp        0      0 172.16.111.100:873      0.0.0.0:*               LISTEN      4009/rsync          

tcp6       0      0 :::22                   :::*                    LISTEN      771/sshd            

tcp6       0      0 ::1:25                  :::*                    LISTEN      1019/master 


虚拟机2操作

# telnet 172.16.111.110 873       检测端口是否通信

# iptables -nvL                            查看iptables

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         

10951   16M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED

    4   286 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           

   15   868 INPUT_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

   15   868 INPUT_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

   15   868 INPUT_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID

    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

# systemctl stop firewalld     关闭firewalld服务

# iptables -nvL                      查看服务已关闭

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         


Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination   

# rsync -avP /tmp/ccj.txt 172.16.111.100::test/ccj-02.txt       同步文件并更改名称,如果这里需要输入密码,可以在虚拟机1里把配置文件密码注释掉

sending incremental file list

aming.txt

        1386 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)


sent 1459 bytes  received 27 bytes  2972.00 bytes/sec

total size is 1386  speedup is 0.93


虚拟机1操作,验证文件同步成功。

# ls /tmp/rsync/

ccj-02.txt


上面的 port,log file,pid file,address都属于全局配置。[]内的test是模块名,以下属于模块配置。一个配置文件可以有多个不同模块。各个参数含义如下:

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 test@172.16.111.100::test/test1/ /tmp/test8/ --password-file=/etc/pass,其中/etc/pass内容就是一个密码,权限要改为600



2. linux系统日志

日志记录了系统每天发生的各种各样的事情,比如监测系统状况、排查系统故障等,你可以通过日志来检查错误发生的原因,或者受到***时***留下的痕迹。日志的主要功能是审计和监测,还可以实时的监测系统状态,监测和追踪侵入者等。


/var/log/messages 是核心的系统日志,包含了系统启动时的引导消息,以及系统运行时的其他状态信息,I/0错误、网络错误和其他系统错误都会记录到这个文件中来。通常情况下,/var/log/messages是做故障诊断时首先要查看的文件。


日志切割配置文件

系统上有很多服务,如果都把服务日志放到这个文件/var/log/messages里那岂不是会很大,所以系统有一个日志轮询的机制,每星期切换一个日志,切换后的日志名字类似于messages-20180131,会存放在/var/log/目录下面,连同messages一共有5个这样的日志文件,这里的20180131就是日期,它表示日志切割的年月日。它的配置文件是/etc/logrotate.conf(如果没有特殊要求,请不要修改这个配置文件),示例如下:

# 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.

备注:/var/log/messages是由rsyslogd这个守护进程产生的,如果停止这个服务则系统不会产生/var/log/messages,所以这个服务不要停止。rsyslogd服务的配置文件为/etc/rsyslog,conf,这个文件定义了日志的级别,若没有特殊需求,这个配置文件是不需要修改的。



dmesg

dmesg 这个命令显示系统的启动信息,在开机时启动,并存储在内存中。如果某个硬件有问题(如网卡),可以在这里看到,示例如下。


# dmesg |head

[    0.000000] Initializing cgroup subsys cpuset

[    0.000000] Initializing cgroup subsys cpu

[    0.000000] Initializing cgroup subsys cpuacct

[    0.000000] Linux version 3.10.0-514.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41 UTC 2016

[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-514.el7.x86_64 root=UUID=cec56a03-0f96-43bf-8516-0027999cbe76 ro crashkernel=auto rhgb quiet.UTF-8

[    0.000000] Disabled fast string operations

[    0.000000] e820: BIOS-provided physical RAM map:

[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable

[    0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved

[    0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved



安全日志

last命令 用来查看登录linux的系统信息,示例如下:


# last

root     pts/0        172.16.111.1     Tue Dec  5 15:58   still logged in   

root     tty1                          Tue Dec  5 15:57   still logged in   

reboot   system boot  3.10.0-514.el7.x Tue Dec  5 15:53 - 19:43 (1+03:50)   

root     tty1                          Tue Dec  5 15:44 - 15:53  (00:09)    

reboot   system boot  3.10.0-514.el7.x Tue Dec  5 15:43 - 15:53  (00:09)    

root     tty1                          Tue Dec  5 15:42 - 15:43  (00:00)    

reboot   system boot  3.10.0-514.el7.x Tue Dec  5 15:38 - 15:43  (00:05)    

root     tty1                          Tue Dec  5 15:34 - 15:37  (00:03)    

reboot   system boot  3.10.0-514.el7.x Tue Dec  5 15:33 - 15:37  (00:04)    

root     tty1                          Tue Dec  5 15:29 - 15:30  (00:01)    

reboot   system boot  3.10.0-514.el7.x Tue Dec  5 15:28 - 15:37  (00:09)    

root     tty1                          Tue Dec  5 15:19 - 15:23  (00:03)    

root     pts/0        192.168.4.84     Thu Nov 30 14:00 - down  (5+01:22)   

reboot   system boot  3.10.0-514.el7.x Thu Nov 30 14:00 - 15:23 (5+01:22)   

reboot   system boot  3.10.0-514.el7.x Thu Nov 30 13:56 - 13:58  (00:02)    

root     tty1                          Thu Nov 30 13:40 - 13:55  (00:15)    

reboot   system boot  3.10.0-514.el7.x Thu Nov 30 13:30 - 13:55  (00:25)    

root     pts/0        192.168.4.84     Wed Nov 29 19:58 - crash  (17:31)    

root     pts/0        192.168.4.84     Wed Nov 29 19:33 - 19:58  (00:24) 

last命令实际读取的是/var/log/wtmp文件,但这个文件不能直接用cat,vi,vim,head,tail查看。


/var/log/secure


/var/log/secure记录的也是和登录有关的信息,如ssh登录失败的信息在这里都可以记录到。


# ls /var/log/secure

/var/log/secure



3. screen工具

有时我们要执行一个命令或者脚本,需要几小时甚至几天,在这个过程中,如果中途断网或出现其他意外情况怎么办?以下两种方法就是来避免这状况发生的。


nohup

首先写一个sleep.sh脚本,然后把它放到后台执行,示例如下:


# nohup /usr/local/sbin/sleep.sh &

上例中,直接在sleep.sh后面加&虽然可以在后台运行,但是当退出该终端时,这个脚本很有可能也会退出,所以在前面加上nohup就没有问题了,执行后在当前目录下生成一个nohup的文件,它的作用就是防止进程意外中断,并且会把输出信息记录到nohup文件中。



screen工具的使用

screen是一个虚拟终端,简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,screen中有会话的概念,用户可以在一个screen会话中创建多个screen会话窗口,在每一个screen窗口中就像操作一个真实的ssh连接窗口一样。


操作示例:

首先screen安装  yum install -y screen

# screen   打开一个会话

[detached from 4151.pts-0.gary-tao]

# screen

[detached from 4186.pts-0.gary-tao]

# screen

[detached from 4207.pts-0.gary-tao]

# screen -ls

There are screens on:

    4207.pts-0.ccj (Detached)

    4186.pts-0.ccj (Detached)

    4151.pts-0.ccj (Detached)

3 Sockets in /var/run/screen/S-root.


# screen -r 4207         退出后想再次进入会话,加-r,4207表示会话窗口编号,如果只打开一个窗口,后面可以省略编号


解释说明:退出一个会话按Ctrl+A键,再按d退出该screen会话(只是退出,并没有结束,结束screen会议要按Ctrl+D键或输入exit)。


备注:当你在某个需要长时间运行的命令或者脚本时,就打开一个screen会话,然后运行该任务,按Ctrl+A键再按d退出会话,这样不影响终端窗口上的任何操作。