Linux日志分析
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。 本文简介一下Linux系统日志及日志分析技巧。
Linux日志简介
linux日志配置
Linux 系统中的日志一般存放在目录“/var/log/”下,具体的日志功能如下:
- 日志默认存放位置:
/var/log/ |
- 查看日志配置情况:
more /etc/rsyslog.conf |
常见linux日志文件说明
| 日志文件 | 说明 |
|---|---|
/var/log/message |
1. 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一2. message 是记录系统重要信息的日志。这个日志文件中会记录 Linux 系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件(也记录了某个用户切换到 root 权限的日志) |
/var/log/secure |
1. 与安全相关的日志信息 2. 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如 SSH 登录,su 切换用户,sudo 授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/auth.log |
包含系统授权信息,包括用户登录和使用的权限机制等 |
/var/log/user.log |
记录所有等级用户信息的日志 |
/var/log/wtmp |
1. linux登录日志2. 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接 vi,而需要使用 last 命令来查看 |
/var/log/btmp |
1. 记录错误登录日志,也就是登录失败的日志 2. 这个文件是二进制文件,不能直接 vi查看,而要使用lastb命令查看 |
/var/log/lastlog |
1. 最后一次登录的日志 2. 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接 vi,而要使用lastlog命令查看 |
/var/log/utmp |
1. 记录当前已经登录的用户信息 2. 这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接 vi,而要使用w,who,users等命令来查询 |
/var/log/cron |
记录了系统定时任务相关的日志 |
/var/log/cups |
记录打印信息的日志 |
/var/log/spooler |
与UUCP和news设备相关的日志信息 |
/var/log/mailog |
记录邮件信息 |
/var/log/syslog |
它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息。 |
/var/log/dmesg |
记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/kern.log |
包含内核产生的日志,有助于在定制内核时解决问题 |
/var/log/boot.log |
守护进程启动和停止相关的日志消息 |
/var/log/daemon.log |
包含各种系统后台守护进程日志信息 |
注:
- 比较重要的日志:
登录失败记录:/var/log/btmp //
lastb最后一次登录:/var/log/lastlog //
lastlog登录成功记录: /var/log/wtmp //
last登录日志记录:/var/log/secure
目前登录用户信息:/var/run/utmp //
w、who、users历史命令记录:
history仅清理当前用户:
history -c
- 上述表格从上往下重要性递减
- 补充:查看邮件相关日志:
ls -al /var/spool/mail
cat /var/spool/mail/root可发现针对 80 端口的攻击行为(当
web访问异常时,及时向当前系统配置的邮箱地址发送报警邮件)
ubuntu日志说明
Ubuntu系统的日志信息保存路径为:/var/log/,如:
auth - 安全验证日志 |
/var/log/ 目录日志文件说明
[1] -
alternatives.log- 记录更新替代信息.[2] -
apport.log- 记录应用程序崩溃信息.[3] -
apt/- 记录 apt-get 安装卸载软件的信息.[4] -
auth.log- 记录用户登录及身份认证信息.[5] -
boot.log- 记录系统启动时的日志信息.[6] -
btmp- 记录所有系统失败启动信息,如登录系统失败的用户、时间、IP 等信息.[7] -
cpus/- 记录所有打印信息的日志.[8] -
dist-upgrade/- 记录更新方式为dist-upgrade的信息.[9] -
dmesg- 内核缓冲信息(kernel ringbuffer). 如,系统启动时,显示屏幕上的与硬件有关的信息.[10] -
dpkg.log- 记录安装或dpkg命令清除软件包的日志.[11] -
debug- 调试日志信息.[12] -
faillog- 记录用户登录失败信息以及错误登录命令.[13] -
fontconfig.log- 与字体配置有关的信息.[14] -
fsck- 文件系统日志.[15] -
kern.log- 记录内核产生的日志,有助于在定制内核时解决问题.[16] -
lastlog- 记录所有用户的最近信息,如最后一次用户成功登录的时间、登录 IP 等信息. 需要用lastlog命令查看内容.[17] -
syslog- 记录的是系统日志服务.[18] -
wtmp- 记录用户登录系统的信息,以及使用命令查看该文件的用户信息等.[19] -
Xorg.*.log- 记录 Xorg 显示服务的日志信息.
其他
1. /var/log/yum.log
软件安装升级卸载日志:
yum install gcc |
Linux日志分析工具和命令
Linux下常用的shell命令如:find、grep 、egrep、awk、sed
tail
这个是我最常用的一种查看方式
#命令格式: tail[必要参数][选择参数][文件] |
用法如下:
tail -n 10 test.log #查询日志尾部最后10行的日志; |
如果一次性查询的数据量太大,可以进行翻页查看,例如:
tail -n 4700 aa.log |more -1000
#可以进行多屏显示(ctrl + f 或者 空格键可以快捷键)
grep
grep 是 Linux 中一个常用的命令行工具,用于在文本文件中搜索匹配指定模式的行。
grep "error" logfile.txt |
基本语法
基本搜索:
grep pattern file,在文件中搜索包含指定模式的行。例如,grep "error" logfile.txt将在logfile.txt文件中搜索包含 “error” 的行。忽略大小写:使用
-i选项可以忽略模式的大小写。例如,grep -i "error" logfile.txt将在不区分大小写的情况下搜索 “error”。正则表达式搜索:
grep支持使用正则表达式进行高级搜索。例如,grep "^[A-Za-z]+$" file.txt将搜索只包含字母的行。反向搜索:使用
-v选项可以反向搜索,即只输出不匹配模式的行。例如,grep -v "debug" logfile.txt将输出不包含 “debug” 的行。统计匹配行数:使用
-c选项可以统计匹配到的行数而不输出具体内容。例如,grep -c "error" logfile.txt将输出匹配到 “error” 的行数。
1. grep显示前后几行信息:
标准unix/linux下的grep通过下面參数控制上下文:
grep -C 5 foo file:显示file文件里匹配foo字串那行以及上下5行grep -B 5 foo file:显示foo及前5行grep -A 5 foo file:显示foo及后5行- 查看grep版本号的方法是:
grep -V
2. grep 查找含有某字符串的所有文件
grep -rn "hello,world!" |
head
跟tail是相反的head是看前多少行日志
head -n 10 test.log #查询日志文件中的头10行日志; |
cat
#cat 是由第一行到最后一行连续显示在屏幕上。一次显示整个文件 : |
注意:> 意思是创建,>>是追加。千万不要弄混了。
cat其他参数参考tail
tac
在 Linux 中,tac 命令是一个文本处理工具,它的功能是将文件的内容从最后一行开始反向输出到第一行。简而言之,tac 就是 cat 命令的反向版本,因为 “tac” 是 “cat” 倒过来拼写。
以下是一些基本的 tac 命令用法:
反向输出文件内容:
tac filename
从第 N 行开始反向输出:
tac -n filename
使用前后文模式输出(类似于
less -R):tac -r filename
输出文件的最后 N 行(类似于
tail -n):tac -n +N filename
输出文件的最后 N 个字符:
tac -c N filename
结合管道使用:
tac filename | grep "pattern"
反向输出多个文件:
tac file1 file2 file3
tac 命令在处理日志文件或者需要查看文件末尾内容时非常有用。例如,查看日志文件的最后几行,可以使用 tac 结合 head 命令来实现:
tac filename | head -n 10 |
这将输出文件的最后 10 行。
tac 命令在日志审计方面的应用主要体现在其能够快速地反向输出文件内容,这对于查看日志文件尤其有用。由于日志文件通常是按照时间顺序记录信息,使用 tac 可以方便地查看最新的日志条目,而不需要滚动到文件的末尾 。
more
more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。more命令从前向后读取文件,因此在启动时就加载整个文件。
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)
more的语法:more 文件名
Enter 向下n行,需要定义,默认为1行 |
sed
这个命令可以查找日志文件特定的一段 , 根据时间的一个范围查询,可以按照行号和时间范围查询
- 按照行号
sed -n '5,10p' filename #这样你就可以只查看文件的第5行到第10行。 |
- 按照时间段
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log |
less
less命令在查询日志时,一般流程是这样的
less log.log |
#less与more类似,使用less可以随意浏览文件,而more仅能向前移动,不能向后移动,而且 less 在查看之前不会加载整个文件。 |
常用命令参数
-b <缓冲区大小> 设置缓冲区的大小 |
tee
tee 命令是一个常用的 Unix 和类 Unix 系统(如 Linux 和 macOS)中的命令行工具。它用于读取标准输入(stdin)的数据,并同时将数据写入到标准输出(stdout)和一个或多个文件中。tee 命令的名字来源于它的功能类似于“T”形管,可以同时向多个方向传输数据。
基本语法
tee [选项]... [文件]... |
选项
-a,--append:追加模式。默认情况下,tee会覆盖文件内容。使用-a选项,tee会将数据追加到文件末尾,而不是覆盖。-b:不处理换行符(用于二进制模式)。-i:忽略中断信号(即使收到中断信号,tee也会继续执行)。-p:与-i相同,忽略中断信号。
示例
- 这个命令会将字符串 “Hello, World!” 写入到
output.txt文件中,并且同时在终端显示。
echo "Hello, World!" | tee output.txt |
- 追加内容到文件:
echo "Additional line" | tee -a output.txt |
- 从文件读取并同时写入到另一个文件:
cat input.txt | tee copy.txt |
- 同时写入多个文件:
echo "Multiple files" | tee file1.txt file2.txt |
注意事项
- 当使用
tee命令写入文件时,如果没有指定文件,tee只会将数据输出到标准输出(通常是终端)。 tee命令在默认情况下不会追加内容,除非你显式使用-a选项。- 在某些系统中,
tee命令可能不是标准工具,需要手动安装。tee命令在处理命令行输出和日志记录时非常有用,因为它可以轻松地将数据既显示在终端又保存到文件中。
find
find 是 Linux 中一个强大的命令行工具,用于在指定目录及其子目录中搜索符合条件的文件。
1. 基本用法
- 基本搜索:
find path -name pattern,在指定路径path及其子目录中搜索文件名匹配指定模式pattern的文件。例如
find /var/log -name "*.log" # 将在 `/var/log` 目录中搜索所有以 `.log` 结尾的文件。 |
根据类型搜索:使用
-type选项可以根据文件类型进行搜索。例如,find /var/log -type f将仅搜索普通文件,而不包括目录和符号链接。根据大小搜索:使用
-size选项可以按文件大小进行搜索。例如,find /var/log -size +1M将搜索大小大于 1MB 的文件。根据时间搜索:使用
-mtime、-atime或-ctime选项可以按文件的修改时间、访问时间或元数据改变时间进行搜索。例如,find /var/log -mtime -7将搜索最近 7 天内修改过的文件。执行操作:
find命令还可以与其他命令结合使用,对搜索到的文件执行操作。例如,find /var/log -name "*.log" -exec rm {} \;将删除所有以.log结尾的文件。
2. 在日志审计中,find 命令常用于以下方面的应用举例:
搜索特定类型的日志文件:例如,
find /var/log -name "*.log"可以搜索系统日志、应用程序日志等特定类型的日志文件。按时间范围搜索:例如,
find /var/log -name "*.log" -mtime -7可以搜索最近 7 天内修改过的日志文件,用于查找最新的日志记录。查找包含关键字的日志文件:例如,
find /var/log -name "*.log" -exec grep "error" {} \;可以搜索包含 “error” 关键字的日志文件,并输出匹配的行。删除过期的日志文件:例如,
find /var/log -name "*.log" -mtime +30 -exec rm {} \;可以删除超过 30 天的日志文件,以便进行日志轮转和管理。
3. 在目录/etc中查找文件init
find /etc -name init
习惯常用命令记录
history # 所有的历史记录 |
Linux日志分析技巧
1. 如何显示一个文件的某几行:
cat input_file | tail -n +1000 | head -n 2000 |
2. 只是显示/etc/passwd的账户
`cat /etc/passwd |awk -F ':' '{print $1}'`
//awk -F指定域分隔符为':',将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。
3. 删除历史操作记录,只保留前153行
sed -i '153,$d' .bash_history
4. 对/var/log/secure的分析
1、定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more |
2、登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more |
3、增加一个用户kali日志:
grep "useradd" /var/log/secure |
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001 |
4、删除用户kali日志:
grep "userdel" /var/log/secure |
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali' |
5、su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0) |
refer
-
声明:
若文章存在错误,望诸君不吝指正^
blog仅供个人记录学习所用部分笔记由于年代久远,做的笔记找不到最初是引用谁的,若是不允许引用转载,请联系我










