Linux日志分析及常用命令总结

日志文件

在Linux系统下,日志默认存放位置目录为:/var/log/
系统日志配置文件:/etc/rsyslog.conf

相关文件关系如下表:

日志文件 文件说明
/var/log/cron 记录了系统定时任务相关的日志
/var/log/cups 记录打印信息的日志
/var/log/dmesg 记录了系统在开机时内检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/maillog 记录邮件信息
/var/log/message 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/btmp 记录错误登录日志,这个文件是二进制文件,不能直接vim查看,而要使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登陆时间的日志,这个文件是二进制文件,不能直接vim,而要使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vim,而需要使用last命令来查看
/var/run/utmp 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vim,而要使用w,who,users等命令来查询
/var/log/secure 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中

比较重要的几个日志:
登录失败日志:/var/log/btmp,对应命令:lastb
最后一次登录:/var/log/lastlog,对应命令:lastlog
登录成功记录:/var/log/wtmp,对应命令:last
登录日志记录:/var/log/secure
目前登录用户信息:/var/run/utmp,对应命令:w、who、users

grep、awk、sort、uniq等命令

grep

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
grep参数:
-a 不要忽略二进制数据。
-i:在搜索的时候忽略大小写
-n:显示结果所在行号
-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数
-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v:输出不带关键字的行(反向查询,反向匹配)
-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配
-Ax:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after
-Bx:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before
-Cx:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context
-e:实现多个选项的匹配,逻辑or关系
-q:静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到。
-P:表示使用兼容perl的正则引擎。
-E:使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep

awk

1
awk是一种编程语言,用于linux下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其他命令的输出。

更多作为脚本来使用。

awk处理数据的方式:

逐行扫描文件,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定动作,则把匹配的行显示到标准输出(屏幕)。如果没有指定模式,则所有被操作所指定的行都被处理。

参数 说明 备注
-f 从脚本文件中读取awk命令 常用
-F 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F: (–field-separator) 常用
-v 赋值一个用户定义变量

sort

1
可针对文本文件的内容,以行为单位来排序

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
参数说明
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-u 意味着是唯一的(unique),输出的结果是去完重了的。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
·+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help 显示帮助。
--version 显示版本信息。
[-k field1[,field2]] 按指定的列进行排序

uniq

使用说明:

这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取

1
2
3
4
5
6
7
-c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。
-d 只显示重复行。
-u 只显示文件中不重复的各行。
-n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。
+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。
-fn 与- n相同,这里n是字段数。
-sn 与+n相同,这里n是字符数。