主题
/var/log目录详解
课程介绍
/var/log目录是Linux系统中存储日志文件的主要目录,包含了系统、应用程序和服务的各种日志。本课程将详细讲解/var/log目录的结构、常见日志文件、日志格式以及日志管理方法,帮助你掌握Linux日志系统的使用技巧。
1. /var/log目录概述
1.1 什么是/var/log目录
/var/log目录是Linux系统中存储日志文件的主要目录。
/var/log目录的作用:
| 作用 | 说明 |
|---|---|
| 系统日志 | 存储系统运行日志 |
| 应用日志 | 存储应用程序日志 |
| 服务日志 | 存储服务运行日志 |
| 安全日志 | 存储安全相关日志 |
1.2 /var/log目录结构
/var/log目录包含多个日志文件和子目录。
常见日志文件:
| 文件 | 说明 |
|---|---|
syslog | 系统日志 |
messages | 系统消息 |
kern.log | 内核日志 |
auth.log | 认证日志 |
secure | 安全日志 |
boot.log | 启动日志 |
dmesg | 内核消息 |
cron | 定时任务日志 |
2. 常见日志文件
2.1 syslog
syslog是系统的主要日志文件。
syslog内容:
bash
# 查看syslog
cat /var/log/syslog
# 查看syslog的最后100行
tail -n 100 /var/log/syslog
# 实时查看syslog
tail -f /var/log/syslogsyslog格式:
Jan 1 00:00:00 hostname process[pid]: message示例:
Jan 1 00:00:00 server sshd[1234]: Accepted password for user from 192.168.1.10 port 22 ssh22.2 messages
messages是系统消息日志文件。
messages内容:
bash
# 查看messages
cat /var/log/messages
# 查看messages的最后100行
tail -n 100 /var/log/messages
# 实时查看messages
tail -f /var/log/messagesmessages格式:
Jan 1 00:00:00 hostname process[pid]: message2.3 kern.log
kern.log是内核日志文件。
kern.log内容:
bash
# 查看kern.log
cat /var/log/kern.log
# 查看kern.log的最后100行
tail -n 100 /var/log/kern.log
# 实时查看kern.log
tail -f /var/log/kern.logkern.log格式:
Jan 1 00:00:00 hostname kernel: message2.4 auth.log
auth.log是认证日志文件。
auth.log内容:
bash
# 查看auth.log
cat /var/log/auth.log
# 查看auth.log的最后100行
tail -n 100 /var/log/auth.log
# 实时查看auth.log
tail -f /var/log/auth.logauth.log格式:
Jan 1 00:00:00 hostname sshd[pid]: message示例:
Jan 1 00:00:00 server sshd[1234]: Accepted password for user from 192.168.1.10 port 22 ssh2
Jan 1 00:00:00 server sshd[1235]: Failed password for invalid user from 192.168.1.11 port 22 ssh22.5 secure
secure是安全日志文件(CentOS系统)。
secure内容:
bash
# 查看secure
cat /var/log/secure
# 查看secure的最后100行
tail -n 100 /var/log/secure
# 实时查看secure
tail -f /var/log/securesecure格式:
Jan 1 00:00:00 hostname process[pid]: message2.6 boot.log
boot.log是启动日志文件。
boot.log内容:
bash
# 查看boot.log
cat /var/log/boot.log
# 查看boot.log的最后100行
tail -n 100 /var/log/boot.logboot.log格式:
[ 0.000000] message2.7 dmesg
dmesg是内核消息日志文件。
dmesg内容:
bash
# 查看dmesg
dmesg
# 查看dmesg的最后100行
dmesg | tail -n 100
# 实时查看dmesg
dmesg -wdmesg格式:
[ 0.000000] message3. 应用日志
3.1 Apache日志
Apache Web服务器的日志文件。
Apache日志文件:
| 文件 | 说明 |
|---|---|
access.log | 访问日志 |
error.log | 错误日志 |
查看Apache日志:
bash
# 查看访问日志
cat /var/log/apache2/access.log
# 查看错误日志
cat /var/log/apache2/error.log
# 实时查看访问日志
tail -f /var/log/apache2/access.log3.2 Nginx日志
Nginx Web服务器的日志文件。
Nginx日志文件:
| 文件 | 说明 |
|---|---|
access.log | 访问日志 |
error.log | 错误日志 |
查看Nginx日志:
bash
# 查看访问日志
cat /var/log/nginx/access.log
# 查看错误日志
cat /var/log/nginx/error.log
# 实时查看访问日志
tail -f /var/log/nginx/access.log3.3 MySQL日志
MySQL数据库的日志文件。
MySQL日志文件:
| 文件 | 说明 |
|---|---|
mysql.log | MySQL日志 |
mysql-slow.log | MySQL慢查询日志 |
mysql-error.log | MySQL错误日志 |
查看MySQL日志:
bash
# 查看MySQL日志
cat /var/log/mysql/mysql.log
# 查看MySQL慢查询日志
cat /var/log/mysql/mysql-slow.log
# 查看MySQL错误日志
cat /var/log/mysql/mysql-error.log4. 日志格式
4.1 标准日志格式
标准日志格式包含时间、主机、进程、消息。
标准日志格式:
时间 主机 进程[pid]: 消息示例:
Jan 1 00:00:00 server sshd[1234]: Accepted password for user from 192.168.1.10 port 22 ssh24.2 日志级别
日志级别用于标识日志的重要程度。
日志级别:
| 级别 | 说明 |
|---|---|
EMERG | 紧急 |
ALERT | 警报 |
CRIT | 严重 |
ERR | 错误 |
WARNING | 警告 |
NOTICE | 通知 |
INFO | 信息 |
DEBUG | 调试 |
5. 日志管理
5.1 查看日志
查看日志的方法。
查看日志:
bash
# 查看整个日志文件
cat /var/log/syslog
# 查看日志文件的前100行
head -n 100 /var/log/syslog
# 查看日志文件的后100行
tail -n 100 /var/log/syslog
# 实时查看日志文件
tail -f /var/log/syslog5.2 搜索日志
搜索日志的方法。
搜索日志:
bash
# 搜索包含ERROR的日志
grep "ERROR" /var/log/syslog
# 搜索包含ERROR或WARN的日志
grep -E "ERROR|WARN" /var/log/syslog
# 搜索包含ERROR的日志,并显示行号
grep -n "ERROR" /var/log/syslog
# 搜索包含ERROR的日志,并显示前后3行
grep -C 3 "ERROR" /var/log/syslog5.3 统计日志
统计日志的方法。
统计日志:
bash
# 统计ERROR日志数量
grep -c "ERROR" /var/log/syslog
# 统计WARN日志数量
grep -c "WARN" /var/log/syslog
# 统计INFO日志数量
grep -c "INFO" /var/log/syslog
# 统计日志行数
wc -l /var/log/syslog5.4 清理日志
清理日志的方法。
清理日志:
bash
# 清空日志文件
echo "" > /var/log/syslog
# 删除日志文件
rm /var/log/syslog
# 删除7天前的日志
find /var/log -name "*.log" -mtime +7 -delete6. 日志轮转
6.1 日志轮转概述
日志轮转是指定期归档和删除旧的日志文件。
日志轮转的目的:
| 目的 | 说明 |
|---|---|
| 节省空间 | 删除旧的日志文件,节省磁盘空间 |
| 便于管理 | 归档旧的日志文件,便于管理 |
| 防止过大 | 防止日志文件过大 |
6.2 logrotate配置
logrotate是Linux系统的日志轮转工具。
logrotate配置文件:
bash
# 编辑logrotate配置文件
vim /etc/logrotate.conf配置示例:
bash
/var/log/syslog {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
sharedscripts
postrotate
/usr/bin/systemctl reload rsyslog.service > /dev/null 2>&1 || true
endscript
}配置说明:
| 配置项 | 说明 |
|---|---|
daily | 每天轮转 |
rotate 7 | 保留7个日志文件 |
compress | 压缩旧的日志文件 |
delaycompress | 延迟压缩 |
missingok | 日志文件不存在时不报错 |
notifempty | 日志文件为空时不轮转 |
create | 创建新的日志文件 |
postrotate | 轮转后执行的命令 |
7. 实战案例
案例1:分析登录日志
场景:分析登录日志,找出登录失败的用户。
脚本:
bash
#!/bin/bash
# 分析登录日志
# 配置
LOG_FILE="/var/log/auth.log"
# 分析登录日志
echo "===== 分析登录日志 ====="
# 统计登录成功的用户
echo "===== 登录成功的用户 ====="
grep "Accepted" "$LOG_FILE" | awk '{print $9}' | sort | uniq -c | sort -nr
# 统计登录失败的用户
echo "===== 登录失败的用户 ====="
grep "Failed" "$LOG_FILE" | awk '{print $9}' | sort | uniq -c | sort -nr
# 统计登录失败的IP
echo "===== 登录失败的IP ====="
grep "Failed" "$LOG_FILE" | awk '{print $11}' | sort | uniq -c | sort -nr案例2:分析系统日志
场景:分析系统日志,找出ERROR日志。
脚本:
bash
#!/bin/bash
# 分析系统日志
# 配置
LOG_FILE="/var/log/syslog"
# 分析系统日志
echo "===== 分析系统日志 ====="
# 统计ERROR日志
ERROR_COUNT=$(grep -c "ERROR" "$LOG_FILE")
echo "ERROR日志数量:$ERROR_COUNT"
# 统计WARN日志
WARN_COUNT=$(grep -c "WARN" "$LOG_FILE")
echo "WARN日志数量:$WARN_COUNT"
# 统计INFO日志
INFO_COUNT=$(grep -c "INFO" "$LOG_FILE")
echo "INFO日志数量:$INFO_COUNT"
# 查看ERROR日志
echo "===== ERROR日志 ====="
grep "ERROR" "$LOG_FILE" | tail -n 10课程总结
这节课我们学习了/var/log目录详解。
核心内容:
- /var/log目录概述
- 常见日志文件(syslog、messages、kern.log、auth.log、secure、boot.log、dmesg)
- 应用日志(Apache、Nginx、MySQL)
- 日志格式(标准日志格式、日志级别)
- 日志管理(查看日志、搜索日志、统计日志、清理日志)
- 日志轮转
- 实战案例
重要命令:
cat:查看日志文件tail:查看日志文件末尾head:查看日志文件开头grep:搜索日志wc:统计日志logrotate:日志轮转
/var/log目录是Linux系统日志的核心,掌握这些知识后,我们将在后续课程中学习journalctl命令、日志分析等内容。
课后练习
练习1(基础)
查看/var/log/syslog文件的内容。
练习2(进阶)
搜索/var/log/auth.log文件中的登录失败记录。
练习3(拓展)
分析/var/log/syslog文件,统计ERROR、WARN、INFO日志的数量。