提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
使用linux 下grep 命令筛选登录日志
linux_Centos7虚拟机
注:本实验最好用root用户登录,否则可能会出现没有权限访问日志文件的情况
grep 即 global search regular expression(RE) and print out the line,意为全面搜索正则表达式并把它按行打印出来。简言之,grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
因此,本实验中可以使用grep命令进行日志筛选。
grep命令的常用格式为:grep [选项] ”模式“ [文件]
常用选项:
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)。
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o :只显示被模式匹配到的字符串。
–color :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
Linux用户登录信息放在三个文件中:
1 /var/run/utmp:记录当前正在登录系统的用户信息,
2 /var/log/wtmp:记录当前正在登录和历史登录系统的用户信息,
3 /var/log/btmp:记录失败的登录尝试信息,
但这三个文件都是二进制数据文件,不能像筛选一般文本文件一样来筛选它们。取而代之的是,可以将其内容输出成为文本格式,然后再用grep命令进行筛选,本实验使用wtmp文件筛选用户成功登录的信息。
实验步骤如下:
①/var/log/wtmp文件原本为二进制乱码:
②将/var/log/wtmp文件转为一般文本文件并查看:
utmpdump /var/log/wtmp > test_wtmp.txt
sudo vim test_wtmp.txt
③用grep命令筛选出所有以root用户成功登录的记录,并输出那一行:
grep 'root' test_wtmp.txt
注:此处原本想用同样的方法打开btmp文件,但是系统btmp文件为空,原因不明,因此失败的登录情况从secure文件中筛选查看。
/var/log/secure是linux的安全日志, 一般用来记录安全相关的信息,记录最多的是哪些用户登录服务器的相关日志,如果该文件很大,说明有人在暴力破解你的 root 密码。
①用命令 sudo vim /var/log/secure 可以查看该文件:
这个日志中的记录可以分为几个字段来描述这些事件信息:
1、事件的日期和时间
2、事件的来源主机 ( 通常是写主机名 )
3、产生这个事件的程序[进程号]
4、实际的日志信息
②常见信息:
session opened for user root # 表示root用户开启了会话(也就是开启了终端)
session closed for user root # 表示root用户关闭了会话(也就是关闭了终端)
password check failed for users # 登录失败
③用grep命令筛选出所有用户登录失败的记录,并输出那一行:
grep ' password check failed for user' secure
可以使用定时运行备份脚本(.sh)的方法对日志文件进行定期备份,脚本主要实现的功能是把旧的日志文件复制一份放到新的路径下,然后改个名字就可以了。
一个简单的备份脚本如下:
#!/bin/bash
#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/root/logbackup
#日期 针对日志的话 我这里是第二天凌晨0点保存前一天的日志文件
dd=`date -d "yesterday" +%Y-%m-%d`
#源文件日志路径
bean_dir=/opt/spring/logs
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
#简单写法cp -r /opt/spring/logs/demo.info.$dd.0.log /root/logbackup/backup_log-$dd.log
# 我的源文件名 demo.info.2021-01-01.0.log 这里根据自己的日志文件名称进行修改
cp -r $bean_dir/demo.info.$dd.0.log $backup_dir/backup_log-$dd.log
#写创建备份日志
echo "create $backup_dir/backup_log-$dd.log" >> $backup_dir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.log | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.log | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
#删除最早生成的备份,只保留number数量的备份
rm $delfile
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
更多步骤可以参考https://blog.csdn.net/weixin_44577669/article/details/122405534
①环境变量一般是指操作系统中指定操作系统运行环境的一些参数。它相当于一个指针,想要查看变量的值,需要加上“$”。
②在Linux中的变量,按作用的范围分可以分为环境变量和本地变量:环境变量:相当于全局变量,存在于所有的Shell中,具有继承性;本地变量:相当于局部变量只存在当前Shell中,本地变量包含环境变量,非环境变量不具有继承性。
按生存周期分可以分为永久变量和暂时变量:永久:需要修改配置文件,变量永久生效;暂时:使用export定义,关闭Shell后失效。
③常见的环境变量有:
PATH:该变量指定命令的搜索路径。它表示在当前目录下执行的每一条指令的搜索路径,每个目录以冒号隔开。当执行一条指令时,系统就会从系统文件中去寻找,找到了就执行;否则不执行。
HOME:该变量指定用户的主工作目录,即用户登录到Linux系统时,默认的目录。
HISTSIZE:该变量指定保存历史命令的数目。
环境变量通俗讲是操作系统或程序执行时候默认设定的参数,比如path路径变量就是当要执行某个命令或程序的时候默认寻找的路径。
环境变量有很多种类,其中,永久变量通过修改配置文件来设置,配置之后变量永久生效;而临时性变量使用命令如export等命令设置,设置之后马上生效。当关闭shell的时候失效(这种主要用于测试比较多)。此外,用户变量(局部变量)修改的设置只对某个用户的路径或执行起作用,而系统变量(全局变量)影响范围是整个系统。
显示所有环境变量:
env
下面以配置MySQL进入环境变量为例介绍几种修改环境变量的方法:
①export PATH
使用export命令直接修改PATH的值【立即生效。当前终端有效,窗口关闭后无效。仅对当前用户有效】
export PATH=/home/uusama/mysql/bin:$PATH
②vim ~/.bashrc
通过修改用户目录下的~/.bashrc文件进行配置【使用相同的用户打开新的终端时生效,或者手动source ~/.bashrc生效。永久有效。仅对当前用户有效】
vim ~/.bashrc
# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin
③vim ~/.bash_profile
和修改~/.bashrc文件类似,也是要在文件最后加上新的路径即可【使用相同的用户打开新的终端时生效,或者手动source ~/.bash_profile生效。永久有效。仅对当前用户有效】
vim ~/.bash_profile
# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin
④vim /etc/bashrc
该方法是修改系统配置,需要管理员权限(如root)或者对该文件的写入权限【新开终端生效,或者手动source /etc/bashrc生效。永久有效。对所有用户有效】
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/bashrc
vim /etc/bashrc
# 在最后一行加上
export PATH=$PATH:/home/uusama/mysql/bin
做实验不给实验步骤,是老师在培养我们的创新意识,想让我们自由发(bai)挥(lan)。他真的,我哭死 :(