28.rsync工具介绍
用来同步的工具,很重要和实用,在工作中可能每天都用到,yum install -y rsync
不仅可以实现文件通过远程从A机器传输到B机器,也可以在本机的目录间同步
1)需求:
现有两个目录A/B,A目录的数据在不断更新,需要每小时都把A目录拷贝到B目录一次
使用rsync工具实现增量的拷贝,只同步有变更过的文件
29-30.rsync常用工具
1)-a选项,实际上-a选项包含了下面介绍的其他选项的功能如r/t/p/g/l/o/D,所以平时使用-a选项就足够了
-r,同步目录的时候要加,类似cp目录时的-r选项
-l,保留软连接,把软连接的文件本身拷贝到目标目录中去
-p (perm),保留文件权限
-o,保留文件属主,如果对方没有该属主,就显示uid
-g,保留文件属组
-D, 保留设备文件信息
-t,保留文件的时间属性,atime/ctime/mtime
2)-v (verb),显示同步过程的信息,如拷贝的哪些文件,用了多少时间,拷贝了多少字节,传输的时间速度
3)-L,会同步软链接的源文件
4)--delete, 会删除DEST(目标目录)中SRC(源目录)没有的文件
5)--exclude, 用来过滤指定文件,支持通配
6)-P,显示同步过程,比如速率,比-v更加详细
7)-u (update), 如果DEST中的文件比SRC新,则不同步
例如A目录中1、2、3三个文件,B目录中有1、2、4三个文件,1、2文件是之前同步过的,但是我们后来改动了B目录中的1文件,所以mtime比A目录中的1文件新,那么再次同步A到B时,B中的1文件将会被保留不被同步
8)-z (zip),传输的时候压缩,目的为了快速,节省带宽,传输之前压缩,传输之后自动解压缩
可以用于远程传输或者传输文件较多较大时使用
我们用下图的root下面的111目录做实验
我们可以看到111/目录下有文件,子目录和软链接
rsync -av /root/111/ tmp/111_dest/
我们可以发现软链接emma.1.txt也被同步过来了
如果我们加上-L选项,可以发现111目录中的emma.1.txt源文件被同步过来了
-L的作用就是把软连所指向的源文件拷贝到目标文件、目录中
--delete, 我们在/tmp/111_dest下新创建一个文件为new.txt,而/root/111/中没有这个文件,再使用rsync -avL --delete /root/111/ /tmp/111_dest/同步,可以看见同步过程删除了111_dest中new.txt,再ls /tmp/111_dest看,发现new.txt被删除掉了
--exclude, 如果我们同步的时候想要过滤掉/root/111目录中的txt结尾的文件,就可用rsync -avL --exclude "*.txt" /root/111/ /tmp/111_dest/, 再用ls /tmp/111_dest看,发现所有txt结尾的文件都被过滤掉了只保留了123目录
--exclude支持多个条件并列,写成--exclude --exclude
-P, 可以显示出速率,如果同步文件很大时可以看得出传输的速率
-u, 可以不覆盖目标文件中新修改的文件,如我们修改了/tmp/111_dest中的1.txt,再同步加-u选项,使用cat查看/root/111/1.txt 和/tmp/111_dest/1.txt,可以发现后者仍然保留没有被覆盖
文件的新是以mtime为准的
31.rsync通过ssh同步
1)A机器到B机器通过ssh的方式进行传输
语法 rsync -option (av,L,--delete...) SRC ip address:DEST 称作推文件,把本机的文件同步到远程的其他机器上去
例如我们想要把/root/111/同步到远程ip为192.168.224.130的/tmp/emma1目录下就可以写成
rsync -av /root/111/ 192.168.224.130:/tmp/emma1,然后输入对方机器的密码
我们也可以把远程机器的文件拉回来,写成rsync -av 192.168.224.130:/tmp/emma1 /root/111/,输入对方机器的密码
2)可以指定连接对方远程的端口
-e “ssh -p 端口号”
rsync -av -e "ssh -p 22" /root/111/ 192.168.224.130:/tmp/emma1, 就可以连接对方的22端口来进行同步
注:ssh -p 端口号 ip地址,输入密码,可以远程登录到另外一台机器上
我们也可以通过修改ssh的配置文件来修改ssh端口/etc/ssh/sshd_config,可以找到port改成想要的端口,然后再重启sshd服务 systemctl restart sshd
32-33.rsync通过服务同步
1)首先由两台机器192.168.224.128和192.168.224.130
192.168.224.128作为服务端,192.168.224.130作为客户端
在192.168.224.128新建配置文件
touch /etc/rsyncd.conf, 然后添加如下模板内容
port=873
port:指定在哪个端口启动rsyncd服务,默认是873端口。
如我我们指定了端口不是873,那么在同步时需要加选项--port 端口, 例如我们指定端口为8730,那么同步时就要加端口--port 8730
log file=/var/log/rsync.log
指定日志文件
pid file=/var/run/rsyncd.pid
指定pid文件,这个文件的作用涉及服务的启动、停止等进程管理操作。
address=192.168.224.128
指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动rsyncd服务,如果不指定该参数,默认是在全部IP上启动。
[test]
[]:指定模块名,里面内容自定义。
path=/tmp/rsync
指定数据存放的路径,也就是模块的路径
use chroot=true
安全参数
表示在传输文件前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,阿铭建议你设置成false。
max connections=4
指定最大的连接数,默认是0,即没有限制。
如果有很多客户端连接服务端,就可有队max connection进行限定
read only=no
read only ture|false:如果为true,则不能上传到该模块指定的路径下,客户端无法推送数据到服务端。
list=true
表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。
uid=root
gid=root
指定传输文件时以哪个用户/组的身份传输。
auth user=test
指定传输时要使用的用户名
secrets file=/etc/rsyncd.passwd
指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意该密码文件的权限一定要是600。编辑/etc/rsyncd.passwd 格式:用户名:密码
再进行同步的时候就要写成rsync -av /tmp/emma.ln.txt [email protected]::test/emma.ln-02.txt, 然后手动输入密码
如果不想在同步的时候手动输入密码,那就需要在客户端创建一个文件例如/ect/rsyncd_pass.txt, 编辑这个文件内容只需要服务端上的密码无需加用户名了(权限也为600),保存,同步的命令需要加新的参数写成
# rsync -av /tmp/emma.ln.txt --passwd-file=/ect/rsyncd_pass.txt [email protected]::test/emma.ln-02.txt
hosts allow=192.168.224.130
表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。
2)在服务端启动服务# rsync --daemon, 我们可以用ps aux |grep rsync和netstat -lntp 来查看服务是否启动和873端口是否被监听
注:停止rsync服务用killall rsync
3)在服务端创建目录/tmp/rsync,并且把权限设置为777, chmod 777 /tmp/rsync
4)然后我们就可以在客户端192.168.224.130推文件给192.168.224.128的服务端了
[root@localhost ~]# rsync -av /tmp/emma.ln.txt 192.168.224.128::test/emma.ln-02.txt
highlight 部分要写/etc/rsyncd.conf中自定义模块的名字
注:正常情况就同步过去了,但有时会出现如下的error message
"rsync: failed to connect to 192.168.224.128 (192.168.224.128): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]"
那首先要先看是否能正常通信 # ping 192.168.224.128
如果可以ping通,我们就要看873端口是否开放,使用命令# telnet 192.168.224.128 873
如果ping不通就可以查看是否是iptables的关系,如果是就可以systemctl stop firewalld,先禁掉防火墙
一般情况就没问题了
34.Linux系统日志 http://note.youdao.com/noteshare?id=03dd889bca1ed99aa058125d29e60d00
Linux系统中会有很多的日志文件,这些文件可以帮助我们了解很多系统的重要事件。这些文件一般都存放在/var/log目录中
1)/var/log/messages, 系统的日志,很重要
系统日志有个自动切割的功能(logrotate),当日志大小到一定程度,会被切割; 所以当我们ls /var/log/messages*的时候可以看到下图
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。https://my.oschina.net/u/2000675/blog/908189
我们可以看一下logrotate的默认配置文件
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
RPM包的日志文件被切割在/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/wtmp-记录用户正确登录和退出系统的信息,文件二进制文件无法cat, 可以用#last查看
配置文件对这些信息每月切割一次,权限为664,属主为root,属组为utmp
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
/var/log/btmp-记录错误的登录信息,如果遇到暴力破解,可以发现这里的信息异常,同样不可以用cat查看,用命令# blast
配置文件对这些信息每月切割一次,权限为664,属主为root,属组为utmp
# system-specific logs may be also be configured here.
2)#dmesg
这个命令可以显示出系统终于硬件相关信息,保存内存
如果硬盘或网卡有损坏,在这里就有显示如error等等信息
用-c可以清空硬件日志,但是系统重启之后就会再次自动生成
3)/var/log/dmesg
与命令#dmesg没有任何关系,就为记录系统启动信息的日志
4)/var/log/secure
记录系统安全,如ssh登录,ftp数据传输等等
35.screen工具
现在有个以需求就是要执行一个脚本,脚本的执行时间很长但是中间不可以间断,有两种方法
1)把任务丢到后台去,并把输出追加到日志中
语法 nohup command log&
这种做法保证了任务不会被中断,但是无法实时查看
2)screen工具
相当于一种虚拟终端,可以实现任务不被打断,且可以实时调出查看也可以实时退出
yum install -y screen
在命令行中写screen,直接回车就可以进入虚拟终端,为了做实验我们创建3个虚拟终端
Ctrl a然后在按d,就可以退出虚拟终端,但是没有结束
screen -ls,可以查看虚拟列表
如下图我们创建的三个虚拟终端
如果我们想要再次进入未结束的虚拟终端可以# screen -r id
但是有个问题,时间长了之后很难记住哪个id的虚拟终端在运行什么任务
我们就可以给虚拟终端自定义名字,screen -S 自定义的名字,再次进入终端可以-r id也可以-r 自定义的名字
如果想要彻底结束终端,在终端里面输入# exit就可以了