rsync工具介绍
- rsync 是一个同步工具
- 能够用来备份数据,本机备份,或者远程备份都行
- 功能相似 cp 命令
- 案例,要把 a目录 的文件拷贝到 b目录
- 每一个小时拷贝一次
- a目录是一个不断增长新文件的目录
- 若是使用 cp 命令来拷贝,有两种方法
- 第一种方法是,每一个小时,使用cp把a目录整个拷贝一遍
- 第二种方法是,把a目录里面,每一个小时内新增的文件cp到b目录
- 目录内容少的时候还没问题,一旦目录内容多了起来
- 第一种方法,整个目录复制一遍太耗费时间
- 第二种方法,找出新增文件复制过去
- 可是文件多了之后,是很难找出哪些文件是新增的,哪些不是,难以辨认
- rsync 的好处是,能够自动对比两个目录内文件的差异
- 把a目录有,b目录没有的文件拷贝过去
- 或者把a目录时间变动了,b目录时间没有变动的同名文件,拷贝过去
- 时间变动说明被修改了,被修改了的文件,也会被拷贝到 b目录
- 这样就能够很方便的让两个目录内的内容同步
- 比cp命令方便,也节省时间
- rsync 也可让不一样机器内的文件进行同步
- 也就是远程同步

- 如图,rsync -av /etc/passwd /tmp/1.txt
- 命令的意思是,把 /etc/passwd 这个文件复制到 /tmp/ 目录下面
- 而且更名为 1.txt
- 参数 a 的做用比较复杂,后面再说,参数 v 就是可视化的意思
- 参数 v 能够看到拷贝的过程,就是拷贝过程系统会有信息输出
- 好比上图,执行命令后,下面出现的跟文件有关的信息
- 若是不使用 v 参数,这些信息就不会显示

- 如图,rsync -av /etc/passwd root@192.168.133.130:/tmp/1.txt
- 这是远程同步的命令
- 意思是把 /etc/passwd 文件 远程复制到 ip为192.168.133.130的另一台机器上
- root@ 就是复制到这台机器的 root 用户下面
- ip后面接冒号 : + 复制的文件路径
- 复制的文件路径是 /tmp/ ,而后把文件更名为 1.txt
- 下面是一些文件传输的信息
- 这样就远程同步了 passwd文件给 192.168.133.130 的 root用户
- 存放的路径是 /tmp/ ,而且文件重命名为 1.txt

- 如图,还能够不写 对方的用户名
- 若是不写对方的用户名,则默认是当前终端的用户
- 例如,我如今使用 root用户执行 这条命令
- 我不写对方的用户名,则默认发送给对方的 root用户
- 若是我如今使用 cat用户执行这条命令
- 则默认发送给对方的 cat用户,可是若是对方没有 cat用户
- 那么就会发生错误

- 上图是 rsync 的一些格式
- 以 rsync 开头,[OPTION] 是rsync的一些选项
- SRC 表明源文件或目录
- DEST 表明目标文件或目录

- 这个格式就是把 源目录或文件 同步到 目标目录或文件

- 这个格式就是把 源目录或文件 远程同步到 目标地址的目录或文件
- 这个格式里面,user@ 能够不写,若是不写
- 默认用户就是当前终端的用户名,若是目标机器不存在当前终端的用户名
- 那么同步会发生错误

- 这个格式是把 远程目标文件或目录 与 本机目录或文件的位置 对调
- 先写 远程目标文件或目录,再写 本机目录或文件
- 意思是把 远程目标文件或目录 同步到 本机的文件或目录
rsync经常使用选项

- 如图,rsync 的 -a 选项,实际上包含了 - r t p l g o D 这么多的选项
- 因此通常使用的时候,使用 -a 选项就足够了
- a 选项里面的 r 选项表示拷贝目录的意思
- cp命令里面,若是不使用 -r 选项,就只能拷贝文件,不能拷贝目录
- 加上 -r 就既能够拷贝文件,也能够拷贝目录
- a 选项里面的 r 选项也是同样的意思,可让rsync命令
- 既能够同步目录,也能够同步文件,否则的话只能同步文件了
- v 选项表示可视化,使用 -v 选项
- 可让rsync命令同步的时候,显示一些信息,看到同步的过程
- 选项 -l 和 -L
- 选项 l 表示同步的时候,软连接文件也会一块儿同步
- 若是不使用 l 选项,软连接文件就不会一块儿同步
- 可是有一个问题,软连接文件通常都是指向本机另一个地址的文件的
- 可是同步到另一台机器后,这个软连接文件指向的那个地址的文件不必定存在
- 这样,这个软连接文件就会变成损坏的状态
- 若是使用 -L 选项的话
- rsync 同步的时候,就会把软连接文件指向的源文件也一块儿同步到另外一台机器上
- 选项 -p 是保持文件的权限属性
- 就是 rwx 权限,在本机是怎样的权限
- 同步到另外一台机器就是怎样的权限
- 若是不使用这个选项,同一个文件同步到另外一台机器
- 可能会出现不同的权限
- 选项 -o 是保持文件的属主
- 意思是,好比一个文件的全部者在本机是 xyz
- 同步到另一台机器上时,全部者也仍然是 xyz
- 若是另一台机器上面没有 xyz 这个用户的时候
- 全部者就会使用 xyz 的 uid
- 好比本机用户 xyz 的uid 是 1008
- 同步一个属于 xyz用户的文件到另一台机器
- 可是另一台机器没有 xyz这个用户
- 那么这个同步过去的文件的全部者就是 1008 这个uid
- 而不是某个具体的用户名称
- 选项 -g 保持文件属组
- 意思是同步到另外一台机器的文件或目录
- 所属组不变,跟 -o 选项差很少
- 选项 -t 保持文件的时间属性
- 如字面意思,文件在本机的 mtime,ctime,atime
- 同步到另外一台机器的时候,这三个时间属性不变

- 选项 --delte 意思是把目标目录中,源目录中没有的文件删除
- 举例说明,如今有两个目录 a ,b
- 目录a 里面有 1,2,3 这三个文件
- 目录b 里面有 4,5 这两个文件
- 个人目的是把 目录a 的内容同步到 目录b 里面去
- 让 目录a 与 目录b 的内容保持一致
- 若是不使用 --delte选项直接同步 目录a 到 目录b
- 那么就会把 1,2,3 这三个文件复制到 目录b 里面去
- 那么 目录b 的内容就变成了 1,2,3,4,5
- 这显然不符合要求
- 若是在同步的时候,加上 --delte 选项的话
- rsync 命令就会把 目录a中没有,目录b中有的文件删除
- 好比 4,5 这两个文件在目录a中是不存在的
- 选项 --delte 就会把 4,5 删除
- 这样就能够保证 目录a 和 目录b 里面的内容是一致的

- 选项 --exclude 能够过滤文件或者目录
- 好比有时候,同步一个程序到另一台电脑
- 可是这个程序里面有一个日志文件,或者放日志文件的目录
- 可是本机程序的日志文件或者目录,在另一台机器上没什么用处
- 同步过去既浪费时间也浪费存储空间,就没有必要了
- 这种时候可使用 --exclude 选项来把 文件或目录过滤掉
- 好比 --exclude "logs" 就能够把名称包含 logs 的文件或者目录过滤掉,不一样步

- 选项 -P (大写p) 也是能够显示同步过程的信息
- 可是比 -v 显示的信息更加的详细

- 选项 -u 是update的简写,意思是 若是目标目录的同名文件比源目录中的文件新,就不一样步
- 新 通常是指 mtime,一个文件若是被修改编辑,那么mtime就会改变
- 举例,a目录 与 b目录 是常常进行同步的两个目录
- 那么按道理 a目录的内容 跟b目录的内容 应该是一致的
- 可是由于某些缘由,b目录中的某个文件须要修改一下才行
- 而后操做人员就直接修改了 b目录中的某个文件
- 这样这个文件的 mtime 就比 a目录中的同名文件的 mtime 要新了
- 而后又须要把 a目录 同步到 b目录
- 可是并不但愿 以前在b目录中修改过的文件 被a目录中旧的同名文件替换掉
- 这时候就可使用 -u 选项
- 由于 b目录的文件修改以后的mtime 比 a目录同名文件要新
- 选项 u 可使 源目录中 mtime 不够新的同名文件不一样步到目标目录

- 选项 -z 可让同步传输的文件进行压缩处理
- 就是数据在传输前压缩一下,传输过去后会被解压缩
- 这样能够节省一些带宽

- 上图是一个使用 -L 的案例
- rsync -avL /root/111/ /tmp/111_dest/
- 命令的意思是把 /root/111/ 目录 同步到 /tmp/111_dest/ 目录

- 如图查看 /root/111/ 目录下的文件,能够看到,aming3 是一个软连接文件
- 实际的文件地址是 /tmp/aming2

- 如图,执行同步命令以后,查看 /tmp/111_dest/ 目录下的文件
- 能够看到 aming3 再也不是一个软连接文件了,而是变成了真正的文件

- 如图,cat 查看 aming3 的内容,发现 aming3 的内容与 aming2的内容是一致的
- 选项 -L 的做用是把软连接文件的源文件也一块儿拷贝
- 从这个案例能够知道,L 选项的实际做用效果
- 是把原来的软连接变成了源文件
- 实际就是把源文件复制一份,可是文件名称改成软连接的名称,而后同步过去
- 这就是 -L 的实际做用效果
- 选项 -a 里面包含了选项 -l , l 是把软连接文件也同步过去的意思
- 当 -l 与 -L 同时存在的时候, -L 的效果就把 -l 的效果覆盖掉了

- 上图能够看到 111/ 目录下的文件

- 上图能够看到 /tmp/111_dest/ 目录下的文件,跟 111/ 目录下是一致的
- 而后 touch 1个 new.txt 文件在 /tmp/111_dest/ 目录下面
- 这样 /tmp/111_dest/ 目录 就比 111/ 目录要多一个 new.txt 文件了

- 上图是一个使用 --delete 选项的案例
- rsync -avL --delete /root/111/ /tmp/111_dest/
- 就是把 111/ 目录的文件同步到 111_dest/ 目录去
- 若是 111_dest 目录存在一些文件是 111/ 目录没有的
- 就把这些文件删除
- 刚才在 111_dest/ 目录新建了 new.txt文件,这是 111/ 目录没有的文件
- 因此在同步 111/ 目录到 111_dest/ 目录的时候,就会把 new.txt 删除
- 上图能够看到,信息显示 deleting new.txt
- 查看目录,new.txt 文件也被删除了
- 这就是 --delete 选项的做用

- 这是一个选项 --exclude 的案例
- rsync -avL --exclude "*.txt" /root/111/ /tmp/111_dest/
- 这样就把 111/ 目录中,除去 .txt 后缀的文件外,都同步到 111_dest/ 目录了
- 选项 --exclude 是过滤的意思, *.txt 就是以 .txt 结尾的文件名称
- 符号 * 是通配符,表明任意长度字符

- 如图,选项 --exclude 支持写多个
- 上图写了 2 个 --exclude 选项,过滤了 .txt结尾 和 包含aming 的名称的文件
- 这样就能够同时过滤多个条件

- 如图,这是一个选项 -P 的案例
- 选项 -P 能够显示比 -v 更详细的同步信息
- 图中能够看到有 传输的百分比,传输速度,时间等等信息,比 -v 详细的多

- 上图是选项 u 的一个案例
- 111/ 目录里面的 4913 文件 与 111_dest/ 目录下的 4913 文件的内容不一样
- 111_dest/ 目录的 4913 文件添加了新的内容
- 因此 111_dest/ 目录的 4913 文件的 mtime 比较新
- 执行 rsync -avpu /root/111/ /tmp/111_dest/
- 由于有 u 选项, 111/ 目录的 4913 的 mtime
- 比 /tmp/111_dest/ 目录的 4913 的 mtime 要旧
- 因此并不会被同步过去
- 选项 u 就是若是目标目录的同名文件 mtime 比较新
- 就不会把源目录的同名旧文件同步过去
- 下面分别查看两个目录的 4913 文件
- 能够看到,两个 4913 的内容是不一样的
- 若是把旧文件同步过去的话,两个文件的内容应该是相同的

- 如图,这是选项 z 的案例,这里看不出什么效果
- 选项z 可把传输的文件进行压缩,这样能够节省带宽
- 若是要传输的文件量很大的话,使用 z 选项效果就比较明显
rsync经过ssh同步

- 如今在 aming01 虚拟机上面使用 ssh 同步
- rsync /etc/passwd 192.168.133.132:/tmp/aming.txt
- 意思是把本机的 passwd 文件同步到192.168.133.132这台机器上去
- 存放在192.168.133.132机器上面的 /tmp/ 目录里,文件重命名为 aming.txt
- 如图,传输过程发现错误,bash: rsync: 未找到命令
- 这个错误的意思是 192.168.133.132这台机器上面没有 rsync 命令存在
- 这说明对面机器没有安装 rsync 包
- 经过 ssh 同步的时候,双方机器都要安装 rsync 包才行

- 如图,使用 yum install -y rsync 安装 rsync 包

- 如图,安装完包,从新同步一下
- 这些命令后,须要输入密码,密码是对方机器的root密码
- 输入密码回车后,传输完成,此次没有报错了

- 如图,除了本机同步别的机器外,还可让别的机器同步本机
- 本机同步别的机器叫作 推文件,就是把本机文件推出去
- 别的机器同步本机叫作 拉文件,就是把远程的文件拉过来
- rsync -avP 192.168.133.132:/tmp/aming.txt /tmp/123.txt
- 经过把远程机器的ip地址文件地址 与 本机文件地址 反着写
- 就是把 本机文件地址写在后面,这样就能够把 远程的文件 拉到本机
- 这里命令的意思是从 192.168.133.132机器,把/tmp/aming.txt文件
- 同步到本机的 /tmp/ 目录,并重命名文件为 123.txt
- 从远程拉文件过来,也是须要输入对方机器的root密码的

- 如图,这是指定端口同步数据
- 由于有时候对方机器的端口并非默认的端口22,也多是别的端口
- 这种时候就须要设置指定的端口来链接对方机器
- rsync -avP -e "ssh -p 22" /etc/passwd 192.168.133.132:/tmp/aming.txt
- 这条命令里面, -e "ssh -p 22" 就是指定端口的选项
- 这里指定了 22 端口来链接
- "ssh -p 22" 是一条命令, -e 选项就是能够处理这条命令的选项
- 除了这种方法外

- 如图,能够直接使用 ssh -p 22 192.168.133.132 登陆对方机器
- 这个命令能够指定端口登陆对方机器,要输入对方root密码
- 登陆进去后,就不须要指定端口同步,直接在对方机器这些同步命令
- 把对方机器的文件拉到本机
rsync经过服务同步
- rsync 有两种同步方式,一种是经过ssh
- 另一种是经过 服务 的方式来同步
- 经过服务的方式同步,首先须要开启一个服务
- 服务的架构是cs架构,分为客户端,服务端
- 服务端要开启 rsync 服务,还要监听一个端口,默认是873
- 不过这个端口能够自定义
- 开启服务后,客户端就能够经过这个端口跟服务端通讯

- 启动服务以前,须要先编辑配置文件
- /etc/rsyncd.conf 是默认的配置文件路径
- 使用默认配置文件路径的话,编辑好后,直接启动就行了
- 配置文件也能够放在别的路径,可是若是放在别的路径
- 启动服务的时候,就须要加一个指定配置文件路径的选项
- 指定配置文件路径后,系统就会自动到这个路径去加载配置文件
- 因此通常来讲仍是使用默认配置文件路径最方便
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.64.128
[test]
path=/root/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.64.130
- 上面是 rsyncd.conf 配置文件的模板

- 用 vi 打开 /etc/rsyncd.conf 配置文件

- 如图,打开rsyncd.conf文件能够看到里面有不少注释的信息
- 这些注释的信息也是模板信息
- 这里另起一行,把上面的模板代码复制到注释信息的下面,而后保存退出

- 执行上图命令 rsync --daemon 启动服务

- 使用 pa aux |grep rsync 查看 rsync 服务是否启动
- 这里看到已经启动了

- 使用 netstat -lntp 查看监听的端口
- 能够看到,192.168.133.130:873 这个ip地址的873端口被监听了
- 这个ip地址是在配置文件里面指定的,若是不指定ip地址
- 这里的地址就会变成 0.0.0.0 意思是全网段的873端口都会被监听
- 可是咱们只须要监听一台机器的873端口,而不是全部机器
- 这样服务端就算完成了


- 还有一个问题,上图配置文件里面的 path 原本的路径是 /root/rsync
- 可是这样不安全,如今修改成 /tmp/rsync 而后保存退出

- 由于 /tmp/rsync 目录不存在,因此须要 mkdir 建立一下

- 目录 /tmp/rsync 修改权限为 777 ,这样方便测试

- 上图是一个路由失败的案例
- 通常遇到这种状况,能够查看一下端口状况

- 上图是安装 telnet 工具包

- 上图是使用 telnet 测试873端口是否接通
- 这里说明端口不通
- 使用命令 iptables -nvL 查看防火墙

- 如图,发现 firewalld 打开了,多是firewalld 阻止了同步链接
- 可使用 systemctl stop firewalld 关闭firewalld 防火墙
- 再使用 iptables -nvL 查看状况

- 把两台机器的 firewalld 都关闭,再测试端口,如图,测试成功

- 查看完端口状况,想退出的话使用 ctrl + ](右方括号) 回车
- 而后输入命令 quit 回车,能够看到 connection closed 就表示退出了

- 如图,同步的时候须要输入用户名跟密码
- 这里把这两行注释掉,同步的时候就不须要输入用户名跟密码了
- auth users=test 这一行是定义用户名,用户名就是test
- secrets file=/etc/rsyncd.passwd 这一行是定义密码
- /etc/rsyncd.passwd 就是密码文件的路径
- 如今这两行被注释掉,保存退出,再同步就不须要输入用户名密码了

- 如图, 192.168.133.130::test/aming-02.txt 就是目标目录
- 这里须要使用两个冒号 :: 后面跟模块名称 test 而后是路径信息
- 经过服务方式同步,这里都是使用两个冒号 :: ,看到这个就知道是服务同步
- test是在服务端配置文件里面定义的模块
- 模块实际上就是一个目录,配置文件里面也定义了这个模块的目录路径
- 这是 rsync 服务的一种结构
- 使用服务同步,指定一个模块,就会把内容同步到这个模块目录里面
- 好比这里就会把 aming.txt 传输到 test模块对应的目录里面
- 后面没有指定路径,若是有指定其它目录的话,会在test对应目录里面建立
- 这里指定了文件名称,那么 aming.txt传输到test对应目录后就会被重命名为aming-02.txt

- 如图,这是另一个案例,若是没有把配置文件里面的用户名和密码注释掉的话
- 同步命令就须要输入
- 能够看到, test@192.168.64.128 这里的 test就是配置文件定义的用户名称
- test@ 就是规定的格式,这样就算输入了用户名
- 下面 password 要求输入用户名对应的密码
- 按照模板 密码 保存在 /etc/rsyncd.passwd 文件里面
- 可是实际上这个文件是不存在的,须要本身建立
- 那么就 touch /etc/rsyncd.passwd 而后内容也须要本身编辑
- 内容的格式就是 用户名:密码 这样的格式
- 好比如今有一个用户名是 test ,对应的密码自定义为 1234
- 那么编辑内容就输入
test:1234
而后保存退出就能够了


- 如图,把 192.168.133.130地址的机器,test/ 模块整个目录,同步到本机的 /tmp/test/目录
- 下面显示信息,出现错误,/12.txt 没有传输过来

- 到 192.168.133.130 机器查看test模块内的文件
- 发现 12.txt 是 软连接文件
- 若是直接同步,通常是没有问题的
- 可是若是使用 -L 选项的话,就会出现问题
- 由于 L 选项会把软连接文件的源文件同步过去
- 可是 服务端配置文件里面的 chroot 的值是true,就不能把模块目录之外的文件同步过去

- 如图,use chroot=true ,应该修改成 use chroot=false
- 这样在使用 -L 选项的时候就不会出现错误
- use chroot=true 的效果是把 模块的目录当作根目录
- 因此 模块目录之外的文件就不能被同步
- 而这个软连接的源文件并不在模块目录内,而是在外面
- 因此,chroot=true的时候,就不能把软连接的源文件传输过去
- 选项 -L 执行失败,出现错误
- 修改 chroot 的值,不须要重启服务也会生效
- 若是修改同步端口号的话,就须要重启一下服务才能生效

- 如图,killall rsync 就是把rsync服务kill掉
- 而后使用 rsync --daemon 从新启动服务
- 由于更改端口号的话,就须要关闭服务,从新启动,才会加载新的端口号

- 更改端口号以后,执行同步命令,系统报错
- 这是由于,默认的端口号就是 873 端口,而如今更改了端口号
- 那么在执行同步命令的时候就须要指定更改的端口号才能同步成功
- rsync -avLP --port 8730 192.168.133.130::test/ /tmptest/
- 这里 --port 就是指定端口号的选项,后面接端口号 8730

- 上图是配置文件里面的选项的解释
- read only 决定了其它机器是否能够上传数据到服务器
- true 就是不能够上传,false就是能够上传数据,通常来讲都是用 false

- 上图是 list 的做用
- 使用命令 rsync --port=8730 192.168.133.130::
- 双冒号 :: 后面不加任何模块名称
- list的值若是为true,那么下面就会返回该机器的全部模块名称
- 能够看到,下面出现test,表示该机器目前只有一个 test 模块

- 把配置文件 list 的值改成 false,而后再执行一次上图命令
- 能够看到,没有任何信息返回,就是不会列出模块名称的列表
- 这就是 list 的做用
- 这个设置的做用主要是为了安全考虑,防止别人得到服务器的模块名称列表
- 若是别人得到服务器模块名称列表,又没有限制特定ip才能够访问,或者别的安全措施
- 那么任何人均可以上传数据到服务器里面,若是有人上传病毒之类的就很差了
- 设置list让别人没法或者模块名称列表就能够有效预防别人上传随意上传数据到服务器

- 如图,配置文件的 uid ,gid 表示这个模块同步的用户权限
- 就是这个模块读写文件的权限,这里修改成 nobody
- nobody是一个权限很低的用户

- 如图,从本机推送/tmp/test/目录到 192.168.133.130机器的 test模块目录
- 由于 test模块的用户权限是 nobody,权限很低,不能读写目录,因此推送失败

- 从新修改 uid,gid 为 root,这样test模块就拥有root权限了
- 读写文件或者目录拥有root权限,那么基本能够读写任何文件目录都不会失败了

- 如图,test模块有root权限后,再执行命令
- 就没有错误信息了

- 配置文件里面,有这两行信息,这是用来定义用户名跟密码的
- 这两行信息也能够不写,这样同步的时候就不须要输入用户名跟密码了
- 不过为了安全,通常来讲仍是要设置一下
- 这里设置了用户名跟密码后,还须要在服务端建立一个密码文件
- 位置就在 /etc/ 目录下, 名称为 rsyncd.passwd
- 这个是默认的路径跟文件名称,也能够更改成别的路径文件名称
- 在密码路径那里设置正确的路径文件名称就行了
- 假设用户名为 tom 密码为 123
- rsyncd.passwd 里面就写入 tom:123 这样的信息
- 这样就算把 用户名密码登记在密码文件里面了

- 如图,若是以为同步的时候,输入密码太麻烦,能够在客户端也创建一个密码文件
- 而后在同步命令中使用密码文件,这样就会自动输入文件中的密码,不须要手动输入
- 图中,--password-file 就是使用密码文件的选项
- 后面 /etc/rsync_pass.txt 就是密码文件的路径
- 可是服务端和客户端的密码文件内容是不一样的
- 服务端的内容是 tom:123 这样的用户名对应密码
- 客户端的内容就写 123 就这样单纯写密码进去就能够了,不须要写用户名
- 若是写了用户名反而出错
- 密码文件的权限应该配置为 600

- 如图,hosts allow 是配置文件中,容许哪些 ip 链接到服务端的设置
- 这里设置了 192.168.133.132 就表示只有这个 ip能够链接到服务端
- 若是要容许多个ip 能够按照这个格式 1.1.1.1 2.2.2.2 来写
- 就是用 空格作分隔,后面接着写其它ip

- 或者直接写 192.168.133.0/24 这个网段,就能够容许这个网段的ip链接服务端
linux 系统日志
- 常常遇到一些故障,除了看错误信息以外,还能够查看系统日志
- 好比有一些服务启动不了之类的,没有任何错误信息提示
- 这时候能够查看系统日志,日志都有记录启动不了的信息之类的
- 也就是日志会记录不少不会在操做时提示的信息
- 经过查看这些信息可以更好的分析故障缘由


- 日志 /var/log/messages 是linux系统总的日志
- 除了某些服务定义了单独的日志文件,否则的话
- 全部的日志信息基本上都记录在 /var/log/messages 文件里面
- 这个日志就是系统日志

- 查看 messages日志信息
- 这个日志文件,系统会不断的往里面写入日志信息
- 随着时间增长,日志文件会不断的增大
- 因此系统有一个日志切割机制,日志文件增加到必定程度就会被切割

- 如图,查看 /var/log/ 目录下面名称以 messages开头的文件
- 发现,除了messages文件之外,还有另外4个格式为 messages-日期 的文件
- 这些就是从messages文件切割下来的文件
- 都是系统自动切割的
- 系统里面有一个服务叫作 logrotate ,这个服务就是用来自动切割日志文件的
- logrotate服务有一个配置文件,叫作 logrotate.comf
- cat 查看 /etc/logrotate.conf 配置文件的内容

- 如图,看配置文件里面的内容,带 # 的是注释说明
- 第一行 see "man logrotate" for details
- 意思是使用 man logrotate 命令能够查看详细信息
- 而后第一行没有 # 号的内容是 weekly
- 由于 weekly 没有#,表这是会被程序执行的命令
- weekly 意思是每周切割一次
- 第二个命令, rotate 4 意思是总共切割四个
- 通常来讲,是每周切割一次,一个月切割4次,保留4个文件
- 不过机器可能不是每周都开机,因此时间上也可能会有跳跃
- 反正 rotate 4 就是切割4个的意思
- 若是切割了 第五个,会把前面的删除,总之最终只保留4个
- 第三个命令是 create 意思是切割日志文件后,建立新的文件
- 应该是新建一个文件,切割的内容放入新建的文件里面的意思
- 第四个命令是 dateext 意思是文件后缀名格式
- dateext == date ext 其实就是日期的意思

- 如图,能够看到,切割文件的后缀名都是在 messages 后面加上 -20131013 之类的日期
- dateext就是指定了建立的切割日志文件的后缀名是这种格式
- 第五个 compress 是被注释掉了,意思是是否要压缩
- 这里注释掉了,意思就是切割文件不压缩
- 若是把注释符号 # 去掉,让 compress 生效
- 那么切割的日志文件就会被压缩,这样能够节省空间
- 有须要的话能够这样作,可是压缩后不方便查看

- 第六个 include /etc/logrotate.d 意思是包含这个目录
- 这个目录下面还有一些配置文件存在
- 第七个 /var/log/wtmp 和 第八个 /var/log/btmp
- 这两个也是日志文件,写在这里表示服务也会对这两个日志文件进行切割
- 大括号 {} 里面的内容就是对这两个日志文件进行切割的方式
- monthly 意思是每月切割一次
- rotate 1 意思是只切割 1个日志文件,好比下个月切割了一个日志
- 就会把上个月的删除,总之只保留 1个切割文件
- create 0600 root utmp 意思是建立切割文件的权限设置
- 新建的切割日志文件的权限是 0600,全部者是 root,所属组是 utmp

- 查看 /etc/logrotate.d 目录能够看到有一些配置文件在里面

- cat 查看 syslog 配置文件内容
- 能够看到 /var/log/cron,/var/log/maillog,/var/log/messages 等信息
- 系统服务会对什么文件进行日志切割就是在这里定义的
- 系统服务就会对这里设置的这些文件进行切割的操做
- 这里定义了 /var/log/messages ,因此rotate服务会对这个文件进行操做

- 系统切割了日志文件之后,如何肯定要向哪一个日志文件写入新的内容呢?
- 上图的 脚本就是系统如何判断应该向哪一个日志文件写入信息
- linux系统的服务写一个文件的时候,是按照文件句柄来写的,而不是按照文件名称
- 文件句柄也能够理解为 inode ,这是判断文件惟一性的标识
- 因此日志文件被切割后,系统新建一个 /var/log/messages 文件
- 并不会自动的把新的日志信息写入 /var/log/messages 文件
- 由于这个 messages 文件是新建的,跟旧的 messages文件并非同一个文件
- 这时候须要从新启动服务,让服务从新加载 新的 messages 文件
- messages日志文件是由 syslogd 服务决定的
- 因此须要 /bin/kill -HUP .... 从新加载这个服务
- 这样服务就重新指定了新的 messages日志文件,就会向新建的日志文件写入信息了

- 有一个命令 dmesg
- 输入命令回车以后

- 如图,执行命令后会出现不少信息
- 这些信息是电脑硬件的日志信息
- 这些日志信息是保存在内存中的,而不是在硬盘里面,因此并非一个文件
- 系统的日志信息主要是查看软件的错误信息
- 使用 dmesg 能够查看硬件的信息
- 也就是说,若是是网卡或者别的什么硬件损坏致使的问题
- 能够在这个硬件日志信息里面查找到相关信息
- 通常来讲,有 error 关键字的都是硬件的错误信息
- 这样能够很快肯定是否是哪一个硬件出问题致使故障
- 使用命令 dmesg -c 就能够把内存中的硬件日志信息清空

- 系统里面有一个 /var/log/dmesg 日志文件
- 这个日志文件是系统启动信息的日志文件
- 跟 dmesg 命令查看的硬件日志文件没有什么关系

- 还要一个命令 last
- last 命令能够查看 正确的登陆 日志信息
- 这些登陆信息都是成功登陆的,不包括错误的登陆日志信息

- last 命令调用的是 /var/log/wtmp 文件
- 这个文件是一个二进制文件,没法用 cat 查看内容
- 只能使用 last 命令查看内容

- lastb 命令是跟 last 对应的一个命令
- last命令显示的是正确登陆的日志信息
- lastb 命令显示的是 失败的登陆 日志信息
- 登陆失败的信息 可使用 lastb 查看
- lastb 调用的是 /var/log/btmp 文件
- 这也是一个二进制文件,只能使用 lastb 查看内容

- 日志文件 /var/log/secure 是安全日志
- 这个日志文件不是二进制的,因此能够直接查看内容
- 这个日志记录了登陆验证成功,或者失败等等信息
- 若是有人暴力破解想登陆本机,这个日志就会不断的录入相关的信息
- 不过,无论是成功仍是失败的信息,都会记录在这里面

- 上图是远程链接这台机器,登陆失败,而后日志信息就多了一条
- Failed password for root from.... 这样的密码错误登陆失败的信息
- 总结,这几个日志信息就是大部分时候会用到的
screen工具

- 假设执行一个须要很长时间的脚本
- 好比须要执行一天一晚上的脚本
- 若是经过远程终端来执行,万一网络断开
- 脚本就终止了,又须要重头开始
- 为了不这个情况,能够把这个任务放到后台执行
- 这样就算前台的远程终端网络断开,也不影响后台的任务执行
- 而后还须要加一个日志的输出,方便后续查看任务的运行情况
- 使用 nohup 命令就能够作到这一点
- 格式是 nohup + 命令+写入日志信息的文件 + &
- 可是任务放到后台后,就没法随时查看任务执行状况
- screen 就是一种虚拟终端
- 把要执行的任务放到 screen 终端里面
- 而后把 screen 终端调到后台去
- 须要查看任务执行状况的时候
- 使用远程链接来链接主机
- 再从主机后台把 screen 终端调出来查看任务
- 这样就算远程终端断开,也不会影响任务执行

- 首先,yum install -y screen 安装screen包

- 输入 screen 而后回车

- 如图,使用screen命令后,就进入一个新的虚拟终端
- 可是看不出跟原来的终端有什么区别

- 执行一个不断运行的命令 vmstat 1 每秒都会出现新的信息
- 然是使用 ctrl+a (两个键一块儿按住),而后再按 d

- 如图,这样就从screen终端跳出到远程终端了
- 而 screen 终端已经被调到后台了
- 远程终端出现一条信息 detached from 12674.pts-0.tom-01
- 这条信息里面,有用的信息是 12674,这是刚才的screen终端的号码
- 若是要将刚才的 screen 终端从后台调出来,须要用到这个号码

- 如图,若是不记得screen号码是多少
- 可使用 screen -ls 查看有哪些screen 存在
- 这里也能够看到 screen 终端的号码

- 如图,使用 screen -r 12674 就能够把12674终端从后台调出来
- 格式就是 screen -r 终端号码

- 如图,终端从新被调出来了

- 如图,若是想把这个screen终端取消掉
- 就在 screen终端里面使用 exit 命令就会退出终端
- 这个screen终端就被取消掉了

- 如图,使用 screen -ls 查看,没有任何终端存在了

- 如图,反复输入 screen 而后调到后台去
- 重复了 3 次,这样后台就有了 3个 screen终端

- 如图,使用 screen -ls 查看,能够看到有3个终端的信息
- 每一个终端都是不一样的号码
- 若是想进入其中一个终端,就使用 screen -r 终端号码
- 就能够进入对应终端号码的screen终端了
- 可是有一个问题,若是有不少screen终端,时间长了之后
- 不知道哪一个终端是干吗的,从上图的终端名称来看
- 根本没法区分不一样终端在作什么

- 如图,使用 -S(大写) 选项能够自定义screen终端的名称
- 这里自定义了一个 test_screen 终端

- 如图,screen -ls 查看,能够看到screen名称为 test_screen的终端

- 如图,若是想返回 screen终端,除了使用终端号码以外
- 还可使用 screnn -r 终端名称 的方式来返回终端