一、dmesg -- 内核环形缓冲区日志
dmesg 用于**查看内核环形缓冲区(kernel ring buffer)**中的消息,主要包括:
-
内核启动过程中的信息
-
硬件检测(PCI、USB、硬盘等)
-
驱动加载与报错
-
内核 panic、OOM(内存不足)等严重错误
-
热插拔事件(如插入 U 盘)
常用示例
bash
# 查看所有内核消息
dmesg
# 分页查看
dmesg | less
# 只显示最后 20 行
dmesg | tail -20
# 实时跟踪新内核消息(类似 tail -f)
dmesg -w
# 清空环形缓冲区(需要 root)
sudo dmesg -c
# 用时间戳(可读格式)
dmesg -T
特点
-
仅包含内核空间的消息,不包含普通用户进程的日志。
-
环形缓冲区大小固定,早期消息会被覆盖。
-
重启后丢失(除非通过
rsyslog等写入文件)。 -
非常适用于硬件诊断、驱动问题、内核崩溃调试。
二、journalctl -- systemd 日志系统(涵盖面最广)
journalctl 可以查看:
-
内核消息(等同于
dmesg的内容,通过journalctl -k) -
所有系统服务的 stdout/stderr
-
用户服务的日志
-
登录会话、授权信息等
与 dmesg 的关系
-
journalctl -k显示的内核日志 来源与dmesg相同(都是从内核 ring buffer 读取),但 journal 可以持久化存储、按时间过滤、同时查看其他服务日志。 -
dmesg更轻量,适合快速查看内核当前状态(如dmesg | grep error);journalctl -k适合结合时间范围和-b查看历史启动的内核日志。
三、传统文本日志 -- /var/log/ 下的文件
在非 systemd 系统或部分日志仍保留文本文件的系统中,常见文件包括:
| 文件路径 | 内容 |
|---|---|
/var/log/messages |
通用系统消息(很多发行版仍用) |
/var/log/syslog |
Debian/Ubuntu 的传统系统日志 |
/var/log/auth.log |
认证与安全相关日志(登录、sudo、ssh) |
/var/log/kern.log |
内核日志(通常由 rsyslog 从 dmesg 转储) |
/var/log/dpkg.log / /var/log/yum.log |
包管理器日志 |
查看方式
bash
# 实时跟踪系统日志
tail -f /var/log/syslog
# 搜索错误
grep -i error /var/log/messages
# 分页查看认证日志
less /var/log/auth.log
与 journalctl 的关系
-
在 systemd 系统中,
systemd-journald负责收集日志,而rsyslog或syslog-ng可以作为转发器将 journal 内容再写入文本文件,以兼容传统工具。 -
如果系统同时运行
rsyslog,则/var/log/下仍然有文本日志,但journalctl内容更全面、过滤更方便。
四、last / lastb -- 登录日志
-
last:显示/var/log/wtmp文件,记录成功登录的历史。 -
lastb:显示/var/log/btmp,记录失败登录尝试(常用于安全检查)。
bash
last -n 10 # 最近10次成功登录
lastb -n 5 # 最近5次失败登录
这些不属于 journalctl 或 dmesg 的范围,但也是重要的系统日志来源。
五、auditd -- 审计日志
-
由
auditd服务管理,记录系统调用、文件访问、权限变更等安全相关事件。 -
查看命令:
ausearch、aureport。 -
与
journalctl独立,但可配置将审计日志导入 journal。
六、总结对比表
| 命令/工具 | 日志范围 | 持久化 | 适用场景 |
|---|---|---|---|
dmesg |
仅内核环形缓冲区 | 内存中,重启丢失 | 硬件故障、驱动调试、内核 crash |
journalctl |
内核 + 所有服务 + 用户会话 | 可持久化(需配置) | 系统与服务全面排查,推荐首选 |
tail /var/log/syslog |
仅文本日志(通常是系统日志子集) | 是 | 兼容旧习惯,文本处理方便 |
last / lastb |
登录成功/失败记录 | 是 | 安全检查,审计登录 |
ausearch |
审计事件(系统调用、文件监控) | 是(需配置 auditd) | 合规审计、入侵检测 |
七、建议
-
快速看内核硬件信息 :
dmesg | grep -i error -
排查服务启动失败 :
journalctl -u 服务名 -n 50 -
查看本次启动所有异常 :
journalctl -b -p err -
实时监控系统整体日志 :
journalctl -f或tail -f /var/log/syslog -
检查暴力破解 :
lastb或journalctl -u ssh | grep "Failed password"
在现代 systemd 发行版(如 RHEL 7+、CentOS 7+、Ubuntu 16.04+、Debian 8+)中,journalctl 是最强大、最全面的日志查看工具 ,但 dmesg 和传统文本日志在特定场景下依然有不可替代的便捷性。建议熟练掌握 journalctl 的基本过滤,同时知道 dmesg 用于硬件诊断。