日常运维-rsync、日志
一、rsync介绍
-
rsync介绍
rsync是一个同步工具,在日常的运维中常会用到。它可以本地同步,也实现可以远程两台机器同步。
比如有个需求:有A、B目录两个目录,A目录文件一直在不定时的增加,想要把A目录里面的数据拷贝到B目录下去。并且要求每小时拷贝一次,如果用cp来实现只能覆盖,并且浪费磁盘IO。这种情况就可以使用rsync,它可以增量的同步。
-
rsync安装
yum -y install rsync
-
rsync命令格式
rsync [OPTION] … SRC DEST
//OPTION为参数,SRC源,DEST目标rsync [OPTION] … SRC [user@]host:DEST
//远程拷贝,如果不写user就默认使用当前的用户rsync [OPTION] … [user@]host:SRC DEST
// 反向拷贝,把远程机器上的文件或目录拷到本地rsync [OPTION] … SRC [user@]host::DEST
// 多了:: ,后面在讲rsync [OPTION] … [user@]host::SRC DEST
-
rsync常用选项
二、rsync使用示例
-
/etc/passwd 拷贝到/tmp/目录下并且改名为1.txt
rsync -av /etc/passwd /tmp/1.txt
-a :包含-rtplgodD选项
-v:可视化显示
-
远程拷贝
rsync -av /etc/passwd root@47.106.84.56:/tmp/
-
rsync同步目录
rsync -av /root/test/ /tmp/test_dest/
同步目录时,文件结尾不能少了"/"
-
软连接拷贝
加上-L 参数后,会把参数 -l 的含义给覆盖掉。-L会把软链接所指向的源文件给拷贝过去
rsync -avL /root/test/ /tmp/test_dest/
-
删除目标中源文件中没有的内容
rsync -av --delete /root/test/ /tmp/test_dest/
test_dest目标目录中有666.txt,但是源目录test目录中没有这个文件
执行完同步后,666.txt被删除
-
过滤文件同步
过滤掉所有.txt文件
rsync -av --exclude "*.txt" /root/test/ /tmp/test_dest/
也可以支持多重多虑
rsync -avL --exclude "*.txt" --exclude="11*" /root/test/ /tmp/test_dest/
-
-P参数,详细的显示同步过程
rsync -avP /root/test/ /tmp/test_dest/
-
-u参数 ,目标中的文件比源新,则不同步
修改/tmp/test_dest/111.py文件
加上-u参数,再执行同步发现111.py并没有被之前的文件覆盖掉
rsync -avu /root/test/ /tmp/test_dest/
-
-z 参数,压缩传输
如果传输文件比较大可以加上这个参数
rsync -avz /root/test/ /tmp/test_dest/
三、rsync通过ssh同步
-
ssh远程同步条件
两台机器,可以ping通 并且都安装了rsrnc包
-
远程同步示例
rsync -av /etc/passwd 193.112.38.222:/tmp/test222
193.112.38.222:是目标机器ip,输入密码就可以同步了
-
将远程机器上的文件拉取到本地
rsync -av 193.112.38.222:/tmp/test222 /tmp/test333
-
指定端口进行传输
如果对方机器不是默认的22端口,可以-e指定端口进行传输
rsync -av -e "ssh -p 22" /etc/passwd 193.112.38.222:/tmp/test222
四、rsync通过服务同步
rsync通过服务的方式同步,首先需要开启一个服务。它是C/S架构,开启rsync daemo服务,默认端口是873。daemon模式是守护进程。
开启服务后,客户端就可以通过873端口进行通信。
-
服务配置文件:
配置文件地址是 /etc/rsyncd.conf。(也可以更改路径,但是在更改路径后,就需要在启动服务的时候,去rsync --daemon//conf=后跟路径)
-
配置文件样例
port=873 log file=/var/log/rsync.log pid file=/var/run/rsyncd.pid address=172.18.11.153 [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.133.132 1.1.1.1 2.2.2.2 192.168.133.0/24
-
配置文件解释:
参数名 解释 port 指定rsync服务端口,默认是873 log file 指定日志文件 pid file 指定pid文件 address 指定rsync启动服务的ip,如有多个ip就可以指定其中一个ip启动。如果不指定改参数,默认是全部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 --daemon
-
检查服务
netstat -lntp |grep 873
ps -aux |grep rsync
-
测试
rsync -av /tem/test11111.txt 172.18.11.153::test/tmp/test2222.txt
::为模块名,也就是配置文件中[test]
-
rsync传输时设置用户名密码
1、配置文件中指定用户名和密码文件
auth users=test secrets file=/etc/rsyncd.passwd
2、编辑/etc/rsyncd.passwd
密码格式为:test:wxy123
修改权限为600
chmod 600 /etc/rsyncd.passwd
3、测试
rsync -avP /tmp/test/ test@172.18.11.153::test/
-
客户端设置密码文件
在rsync传输文件的时候,在写shell脚本输入密码不好,这时候在客户端也定义一个密码文件
1、设置密码文件
vim /etc/rsync_pass.txt
格式:客户端只写一个密码即可
并修改权限为600
chmod 600 /etc/rsync_pass.txt
2、测试
rsync -avP /tmp/test/ --password-file=/etc/rsync_pass.txt test@172.18.11.153::test/
这里需要加上--password-file=/etc/rsync_pass.txt
五、系统日志
-
系统日志
/var/log/messages 是linux的系统总日志,
系统中日志会有自动切割机制,增长到一定级别就会自动切割:
-
切割机制的配置文件
/etc/logrotate.conf
参数解释:
weekly //每周切割一次
rotate 4 //4周一次轮换
create //创建新的
compress //是否需要压缩,默认是注释的
-
/etc/logrotate.d/syslog 这个会给cron,maillog,messages,secure,spooler这几个日志进行切割
Linux系统有一个特点,一个服务写一个文件的时候,并不是按照文件名去写的,而是根据inode来写的
-
dmesg命令
1、dmesg会把系统的硬件日志列出来
2、这个个日志是保存在内存中的,并不是一个文件
3、dmesg -c 清空当前日志
4、/var/log/dmesg这个日志文件和dmesg命令没哟任何关联,它是系统启动的一个日志
-
last命令
1、last命令是调用的/var/log/wtmp 日志
2、日志内容包含:用户、登录终端、源IP、时间、登录时长
3、/var/log/wtmp日志是-个二进制文件,不能直接查看的,只能用last命令去查看
-
lastb 命令查看登录失败的用户
1、lastb命令是调用的/var/log/btmp 日志
2、日志内容包含:用户、登录终端、登录IP、时间、登录时长
3、/var/log/btmp日志也是-个二进制文件,不能直接查看的,只能用lastb命令去查看
4、如果服务器被暴力登录(被黑),这个日志一般会有很多条记录
-
安全日志
/var/log/secure 这个日志会记录系统的登录信息,成功失败都会记录。如果系统有可能被暴力可以查看这个日志
六、screen工具
screen它是虚拟的一个屏幕,也可以理解为一个虚拟的终端。
-
使用需求
需求:执行一个脚本,时间很长 ,并且这个脚本会输出一些信息。要保证这个脚本不能中断。
解决方法:
1、nohup command & 把脚本丢到后台,并加一个日志。但是这样没办法实时的查看输出信息
2、screen工具,可以把要执行的命令,放到这个终端里,然后在退出pts/0之前,可以把screen丢到后台去,随时用, 随时查看 。
-
screen安装
yum install -y screen
-
使用
安装完成后直接输入screen命令,会进入到screen,进入到一个窗口,这个窗口就是一个虚拟终端
虚拟终端,执行vmstat 1命令,然后 ctrl+a键 再按 d键 ,就把screen丢到后台了
执行screen -ls 命令,列出当前所有的session
执行screen -r 再加查看到的id 命令,再回到虚拟终端
screen -r 1558
想要退出screen ,直接exit即可
创建一个自定义名字的screen,加上-S选项,可以指定自定义的名字
screen -S wxy
七、课堂笔记
-
日志切割logrotate详解:https://linux.cn/article-4126-1.html
-
xargs详解:https://blog.csdn.net/gb4215287/article/details/78037520