10.32/10.33 rsync通过服务同步
rsync还可以通过服务的方式同步,这种方式首先需要开启一个服务,服务是cs架构的,也就是客户端和服务端。服务端要开启一个rsync服务,并且需要监听一个端口,默认是873端口,这个端口是可以自定义的,然后客户端可以通过这个端口与服务端进行通信,得以传输数据。
启动服务之前要编辑配置文件,这个配置文件的路径是:/etc/rsyncd.conf ,配置的信息不一定必须要写在这个路径的文件里,也可以写在其他的文件里,不过在开启服务的时候就得加上--configfile=配置文件的路径,加上这个参数是为了指定配置文件的路径,如果是写在/etc/rsyncd.conf文件里,则不需要指定配置文件的路径。
rsyncd.conf文件配置样例:
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.77.130
[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=192.168.77.132 1.1.1.1 2.2.2.2 192.168.77.0/24
把配置样例粘贴到/etc/rsyncd.conf文件里:
保存退出后,启动服务:
检测一下服务是否已启动:
检查一下监听的端口:
在tmp目录下创建rsync目录,并设置为777权限:
现在我要在在另一台机器同步文件过来,得执行下面这条命令:
rsync -avP /tmp/1.txt 192.168.77.130::test/123.txt
如果出现以上错误就ping一下另一台机器是否能通,能ping通的话就检查一下端口是否能通。
telnet命令可以检测某个端口是否是通的,如果没有这个命令的话就安装一下:
安装命令:yum install -y telnet
检测端口:
端口不通的话,检测一下是否是iptables的问题:
这是没问题的,那么就检测另一台机器的iptables:
显示以上这种信息,就证明是这台机器的iptables问题。
停掉这台机器的firewalld服务:
现在再回到另一台机器检测一下端口:
显示以上结果则表示没问题的。
Ctrl + ]再输入quit退出端口检测:
处理完以上问题后,就可以执行rsync命令了:
如果不想输入密码的话,就把配置文件里这这两行注释掉:
现在就可以不需要密码传输文件了:
在充当服务端的机器上就能看到同步的文件了:
同样的我们也可以从服务端上同步文件:
use chroot为true的情况下,你要同步的目录里有软链接的话,并且你rsync命令里加上了-L选项的话,那么同步此目录的时候,软链接文件会同步失败。
例如我在源目录里创建了一个软链接文件:
然后如果我rsync命令里不加-L选项进行同步的话,是不会出问题的:
但是如果加了-L就会出现错误:
如果修改了端口号的话,那么在同步的时候需要加上--port选项指定端口号。
例如我在配置文件里端口号更改为8730:
重启一下服务,端口才会更新:
加上--port选项指定端口号:
列出服务端的可用模块:
如果list为false的话,这个是列不出来的。
在同步时需要输入用户和密码的话,就把刚刚注释的auth users和secrets file恢复,然后在auth users行指定用户名,secrets file行指定用户的密码文件路径:
然后给test用户指定一个密码,需要编辑一下test用户的密码文件:
vim /etc/rsyncd.passwd
内容格式如下:
然后把此文件的权限改为600:
这时候再同步的话就需要输入test用户名和密码了:
但是这样挺麻烦的每次都需要输入密码,但是跳过密码又不太安全,这时候要想解决这个问题,可以在客户端上也创建一个密码文件,这个密码文件里保存着test用户的密码,在使用rsync命令同步的时候只要加上--password-file=密码文件路径,这个参数即可不需要输入密码:
创建密码文件:vi /etc/rsync_pass.txt
内容格式,直接写上密码即可:
然后把此文件的权限也改为600:
这时候再同步的话就不需要输入test用户的密码了:
hosts allow这一行是用于指定允许连接你服务端的IP,指定多个则空一格即可,也可以指定IP端。
10.34 linux系统日志
因为Linux系统最常用于作为服务器的操作系统,所以在系统中会存在着相当多的服务,有时候当一个服务启动不了或者出现一些问题,就可以去查看日志文件,日志往往会记录着服务启动、运行、停止的信息,还有错误信息,有时候报错不一定会显示在屏幕上,而是会显示在日志里,所以要学会查看日志。
我们先来看看Linux系统里有哪些重要的日志:
第一个是/var/log/messages,这个日志是Linux系统里一个汇总的日志,很多信息都记录在这个日志里,如果服务没有指定单独的日志文件的话,都会记录在这个日志里,其实这就是个系统日志。
在Linux系统里会有一个日志切割机制,当日志文件大小增涨到一定的程度,就会对这个日志进行切割:
这些日志切割是由logrotate服务来完成的,为了防止日志文件大小无限制的增加,所以会有这样的一个切割机制。
/etc/logrotate.conf是logrotate服务的配置文件,内容如下:
其他配置文件:
syslog文件内容:
Linux服务写文件的时候是根据文件的inode号去写的,而不是根据文件名,所以需要重新加载服务。
dmesg命令会把系统里硬件相关的日志列出来,这个日志是保存在内存中的,并不是一个文件:
硬盘、网卡等等硬件出问题了,都会记录在这个日志里
dmesg -c可以清空这些日志内容,清空时会再打印一遍。
第二个是/var/log/dmesg 日志文件,这个日志和dmesg 命令没有关联,这是一个系统启动日志,会记录系统启动时的相关信息:
last命令,用来查看系统正确的登录历史,这个命令调用的是/var/log/wtmp文件,这个文件是二进制文件,所以要用last来查看:
和last命令对应的是lastb命令,这个命令则是查看系统登录失败的历史信息,同样的这个命令也会调用一个文件,这个文件是/var/log/btmp文件,这也是一个二进制文件:
当你的系统被人暴力破解的时候,这里就会记录很多日志信息。
/var/log/secure是一个安全日志:
无论系统登录成功或者失败的信息都会被记录到这个日志文件里:
如果登录失败就会有这样一个信息,还会把IP给记录下来:
10.35 screen工具
screen是一个虚拟的终端,我们假设一个需求要执行一个脚本,这个脚本执行时间很长可能要一天一夜,而且这个脚本会输出一些信息出来,所以不能中断,为了保证脚本执行的过程不中断,有两个办法可以解决这个问题,第一个办法是丢到后台里去然后加一个日志的输出,这个方式虽然解决了任务中断的问题,但是我们却无法实时在屏幕上查看到任务的输出信息。第二个办法就是使用screen虚拟终端,把这个脚本放到虚拟终端去执行。
screen安装命令:yum install -y screen
安装完之后,执行screen命令,就会进入到虚拟终端。
现在我在虚拟终端里执行vmstat命令,每秒输出一次信息:
然后再把这个命令的进程扔到后台里,会退回到真实终端并且会打印一个信息出来,表示有个进程在虚拟终端里运行着:
Ctrl + a之后再按d,可以将一个进程扔到后台里去。
screen -ls命令可以列出在虚拟终端里运行着的进程:
想要返回到虚拟终端里的话,使用screen -r 然后加上进程的id即可:
exit可以关闭screen虚拟终端,同样的会有一行信息:
screen可以有多个,也就是可以执行多次screen命令产生多个虚拟终端,使用screen -lsn可以列出这些虚拟终端的数量:
同样的想要进入哪个screen,指定它的id即可:
但是有一个问题,就是时间久了之后可能会忘记这个screen是干什么用的了,因为它们除了id之外名字都是一样的。这时候就需要使用到-S选项,这个选项可以自定义screen的名字:
这样使用screen -ls列出这些screen的是时候就知道是干嘛的了:
这时候使用screen -r 命令就可以指定screen名称来进入这个screen:
扩展
1. Linux日志文件总管logrotate
http://linux.cn/article-4126-1.html
2. xargs用法详解
http://blog.csdn.net/zhangfn2011/article/details/6776925