汇知百科
白蓝主题五 · 清爽阅读
首页  > 故障排查

Linux系统日志怎么看

常见的Linux日志文件位置

在排查系统问题时,日志是最直接的线索来源。大多数Linux发行版都将日志存放在 /var/log 目录下。比如系统启动信息记录在 /var/log/boot.log,软件包管理操作记录在 /var/log/yum.log 或 /var/log/apt/ 下,而最核心的日志通常是 /var/log/messages 或 /var/log/syslog。

如果你用的是较新的系统,可能使用的是 systemd 作为初始化系统,那主要日志就由 journald 管理,对应的查看命令是 journalctl,而不是直接读取文本文件。

/var/log/messages 和 /var/log/syslog 的区别

在 CentOS、RHEL 这类系统中,通常使用 /var/log/messages 记录全局系统消息。而 Ubuntu、Debian 等系统则习惯把类似信息写入 /var/log/syslog。两个文件内容相似,只是命名习惯不同。可以直接用 tail 命令查看最近的内容:

tail -f /var/log/messages

这样能实时看到新产生的日志,适合在服务启动或故障发生时监控动态。

使用 journalctl 查看 systemd 日志

现在大多数主流发行版都切换到了 systemd,所以掌握 journalctl 非常关键。比如想看最近一次系统启动以来的所有日志,可以运行:

journalctl -b

如果系统重启过多次,可以用 journalctl -b -1 查看上一次启动的日志,-2 就是再上一次,以此类推。

某个服务出问题了?比如 nginx 启动失败,直接查它的日志:

journalctl -u nginx.service

加上 -f 参数还能持续追踪输出,就像 tail -f 一样:

journalctl -u nginx.service -f

过滤日志时间和关键词

日志太多怎么办?可以按时间筛选。比如只看今天早上9点到10点之间的记录:

journalctl --since "today 09:00" --until "today 10:00"

也可以结合 grep 搜索关键字。例如查找所有包含 "Failed" 的行:

journalctl | grep -i failed

不过更推荐先用 journalctl 过滤再交给 grep,避免一次性加载全部日志导致卡顿。

安全相关日志别忘了 /var/log/secure 和 /var/log/auth.log

登录失败、sudo 使用记录这些敏感操作,在不同系统中有不同的存放位置。CentOS 类系统一般记录在 /var/log/secure,而 Debian/Ubuntu 则放在 /var/log/auth.log。比如发现服务器疑似被暴力破解,可以快速查看最近的SSH登录失败情况:

tail -100 /var/log/secure | grep "Failed password"

如果是 Ubuntu,换成 auth.log 即可。这类日志对判断是否遭遇攻击非常有用。

应用程序日志也值得关注

除了系统本身,运行在上面的服务也有自己的日志。Apache、Nginx、MySQL 通常会在 /var/log/ 下有自己的目录。比如 Nginx 的访问日志和错误日志一般位于:

/var/log/nginx/access.log
/var/log/nginx/error.log

当网页打不开时,先看 error.log 能快速定位是配置错误还是端口冲突。有时候明明服务起来了,但就是访问不了,翻一下 access.log 发现根本没请求进来,可能是防火墙或代理层的问题。

日志权限和清理要注意

普通用户通常不能直接读取某些日志文件,比如 /var/log/secure 默认只有 root 可读。这时候得用 sudo 提权查看:

sudo tail /var/log/secure

另外日志文件会不断增长,长期不清理可能占满磁盘。建议启用 logrotate 来自动轮转和压缩旧日志。大部分系统默认已配置好,但自定义服务需要手动添加配置文件到 /etc/logrotate.d/ 目录下。