【每天学习一点新知识】Linux日志分析

目录

1.历史文件命令

2. 用户登录日志

3.系统日志 

4.Linux日志查看技巧 

| grep 检索过滤

Uniq命令:检查以删除文本文件重复出现的行/列;当重复的两行不相邻时不起作用,需要结合排序命令sort

 sort 命令:将内容以行为单位进行排序,默认以ASCII码排序

cut命令:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定File参数,cut命令将读取标准输入。

AWK命令:处理文本文件的命令

5.补充


1.历史文件命令

  • #root用户的命令日志位置(bash环境下)

/root/.bash_history

  • #每个用户下都有一个隐藏的.bash_history

/home/<account>/.bash_history

  • 或者直接在命令行使用

# cat .bash_history

  • 查看历史命令

# history

  • 清除历史命令(需要在bash情况下才能生效,否则就会报错)

# history -c(可以清空本次登入的所有输出命令,但不清空.bash_history文件,所以下次登录后,旧命令仍会出现)

  • #root用户的命令日志位置(在zsh环境下

/root/.zsh_history

  • 清除历史命令(在zsh环境下

# rm -rf /root/.zsh_history(这个是把文件删掉了,且-rf一般不可恢复,慎用)
# echo "" > .zsh_history

2. 用户登录日志

/var/log/lastlog (每个用户最后的登录信息)
/var/log/wtmp (每个用户登录/注销、系统启动/停机)
/var/log/utmp (当前登录的用户信息)
/var/log/vtmp (所有登录失败的信息)

以/var/log/wtmp 为例,打开是乱码(二进制流文件)

 last -f /var/log/wtmp 格式化输出这个二进制流文件

3.系统日志 

/var 目录存放系统常态性变换的文件,如缓存、登录文件、程序运行产生的文件等。

/var/log下存放日志文件

  • 查看计划任务运行的相关情况,包括运行日期

#cat /var/log/cron

  • 查看安装日志

#cat /var/log/yum.log 查看安装日志

  • 查看每次主机引导启动时加载的内容

#cat /var/log/boot.log 每次主机引导启动时加载的内容

4.Linux日志查看技巧 

  • | grep 检索过滤

“-E”通过指定参数大E的方式,以正则表达式的方式来检索内容

# cat /var/log/secure | grep -E “192.168.222.1.*9952 ssh2”

或使用egrep命令,可以不用-E,直接正则表达式

# cat /var/log/secure | egrep “192.168.222.1.*9952 ssh2”

“-e”通过指定参数e的方式,设置多个检索条件,但是是或的关系

cat /var/log/secure | grep -e “Accepted” -e “Failed”

多个| grep 可以实现与的条件检索

cat /var/log/secure | grep -e “Accepted” -e “Failed” | grep “34406”

“-v”表示否定,相当于not

cat /var/log/secure | grep -e “Accepted” -e “Failed” | grep -v “34406”

我的kali里没有secure这个日志,这里用boot.log代替

cat boot.log | grep -e "Started" 

cat boot.log | grep "Started" | grep "Daily" 

cat boot.log | grep -e "Started" -e "Daily" 

  • Uniq命令:检查以删除文本文件重复出现的行/列;当重复的两行不相邻时不起作用,需要结合排序命令sort

Uniq -c可以统计该行出现的次数

Cat testfile | sort | uniq -c

在testfile文件里随机写入下面内容

 该命令就会帮我们统计次数,那如果不使用sort排序会怎样呢?

不使用sort,我们可以看到,它无法将不相邻的相同内容统计到一起

 

 sort 命令:将内容以行为单位进行排序,默认以ASCII码排序

sort -n 按照数值大小排序

sort -r 按照相反的顺序进行排序

  • cut命令:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定File参数,cut命令将读取标准输入。

-d :自定义分隔符,默认为制表符

-f :指定显示哪个区域

-c :以字符为单位进行分割

# cut -d “ ” -f 11 /var/log/secure | egrep “^[1-9].*[1-9]$”

#cat secure | grep “Failed ” | cut -d “ “ -f 12 | sort | uniq -c

以boot.log为例,先按OK筛选,再按照" "分割,显示出第六块内容(为什么是第六块?因为[ OK ]之间都有两个空格)

cat boot.log | grep "OK" | cut -d " " -f 6

  • AWK命令:处理文本文件的命令

-F 指定分隔符(默认空格),fs是一个字符串或一个正则表达式

# awk -F “ ” ‘$6==”Accepted”{print $11}’ /var/log/secure
($6==”Accepted”:分割后的第6块内容若等于Accepted)
({print $11} :则输出第11块的数据内容)

注意一下这里是$4(就是代表以空格分割的第四块内容)

cat boot.log | grep "OK" | awk -F " " '{print $4}'

 

结合一下uniq和sort就可以完成统计

cat boot.log | grep "OK" | awk -F " " '{print $4}' | sort | uniq -c

5.补充

补充一写我不太熟悉的linux命令吧

  • 查看/etc/profile的前10行内容

# head -n 10 /etc/profile

  • 查看/etc/profile的最后5行内容

# tail -n 5 /etc/profile

  • 输出您所在目录的绝对路径

# pwd

  • 删除文件rm

# rm file.txt 常规删除文件
# rm -r emptydir/ 删除空目录
# rm -rf mydir/ 删除目录及目录下的所有文件(慎用)

  • mv移动文件路径或重命名

# mv file.txt /home/myfiles
# mv oldname.txt newname.txt

  • 查看命令手册(man+命令名)

# man mkdir

  • 更新指定文件的访问和修改时间

# touch -m 文件名(将该文件的时间修改为当前时间修改更改)

# touch newfile(创建一个空文件)

  •  chmod更改权限

r (只读)\w (写入)\x (执行)

r=4,w=2,x=1

# chmod 777 file(看下图应该很好理解)

  •  查看当前shell会话正在运行的进程

# ps

  • 查看系统信息

# uname -a

猜你喜欢

转载自blog.csdn.net/m0_51683653/article/details/129795927