人人都会AI编程

24.2 核心日志文件位置与作用

更新时间:2026-07-12

Linux 系统将绝大多数日志集中存放在 /var/log 目录下,不同类型的事件写入不同的文件,这种分类让日常排错和审计变得高效。下面列出最常需要关注的核心日志文件及其用途,无论是在服务器故障时快速定位,还是在安全事件发生后进行追踪,这些文件都是首要的检查对象。

1. /var/log/syslog/var/log/messages
这两个是最主要的系统级日志,具体名称取决于发行版和日志守护进程的配置(Debian/Ubuntu 系通常使用 /var/log/syslog,RHEL/CentOS 系默认使用 /var/log/messages)。它们记录了内核、系统服务(如 SSH、cron、网络管理器)和应用程序的常规运行信息、警告和错误。当你不知道一个问题应该看哪个特定日志时,从这里开始往往能发现线索。例如,通过 grep -i error /var/log/syslog 可以快速过滤出所有错误信息。

2. /var/log/auth.log/var/log/secure
专门记录用户认证和授权相关的事件,包括:

  • 所有通过 sudo 执行的命令(无论成功还是失败);
  • 用户通过 SSH、本地终端登录或注销的记录;
  • 密码验证失败、账户锁定等安全事件。

如果怀疑系统被未授权访问,或者需要检查某个用户的历史操作,打开这个文件查看是最直接的方式。在 RHEL 系发行版中,该文件通常为 /var/log/secure,在 Debian/Ubuntu 系中则是 /var/log/auth.log

3. /var/log/kern.log
保存内核产生的所有消息(驱动加载、硬件错误、文件系统异常、OOM killer 事件等)。如果你的硬件表现异常,例如网卡断连、磁盘 I/O 出错,或者内核恐慌前一刻的输出,都集中在这里。在某些发行版上,内核消息也会同时出现在 /var/log/syslog 中,但单独分离出来的 kern.log 使得硬件和内核调试时不会被其他日志干扰。

4. /var/log/dmesgdmesg 命令
严格来说,/var/log/dmesg 存放的是系统启动时内核环形缓冲区的初始化信息(设备探测、驱动绑定、内存初始化等)。这个文件在每次系统启动时重新生成,保留上一次启动的内容。如果机器启动阶段就出现问题,比如某个驱动加载失败或硬盘未被正确识别,可以直接查看这个文件或执行 dmesg 命令输出当前内核缓冲区内容。它不同于 kern.log,因为它不会被 rsyslog 等持久化服务写入,而是来自内核自身的内存缓冲。

5. /var/log/boot.log
记录系统启动过程中各个服务(由 systemd 或 init 系统管理)的启动状态。当机器启动卡住、某个服务启动失败导致网络不连通时,可以查看该日志,找到失败的服务单元名和错误原因。在 systemd 系统中,也可以用 journalctl -b 获取类似信息,但 boot.log 作为一个独立文件更便于文本处理和备份。

6. 应用服务专用日志
许多服务器软件会将自己的日志写入 /var/log/ 下的子目录或独立文件:

  • /var/log/apache2//var/log/httpd/:Apache Web 服务器的访问日志(access.log)和错误日志(error.log)。
  • /var/log/nginx/:Nginx 的访问与错误日志,格式与 Apache 类似,是排查 404、500 错误的出发点。
  • /var/log/mysql//var/log/mariadb/:数据库慢查询日志、错误日志、二进制日志等。当查询性能异常或数据库无法启动时,这里是最重要的诊断源。
  • /var/log/mail.log/var/log/maillog:邮件传输代理(如 Postfix、Sendmail)的日志,包含发信、收信、拒绝等详细信息。

7. /var/log/cron/var/log/cron.log
记录 cron 定时任务的调度、执行及其产生的标准输出和错误输出。如果某个定时任务没有按预期运行,通过这个文件可以确认它是否被触发,以及在运行时输出了什么错误。

8. 日志轮转与归档
长时间运行的系统会不断产生日志,因此几乎所有的发行版都通过 logrotate 工具来定期归档和清理。你会发现同一日志存在带编号的压缩版本,如 syslog.1.gzsyslog.2.gz。默认配置通常保留数周到数月的旧日志,这让你可以回溯历史问题而不会占满磁盘。在检查日志时,记得一并查看这些归档文件,有时关键信息早已不在最新文件中。

实用提示

  • 如果你不确定某个事件会被记录到哪个文件中,可以临时跟踪所有日志:tail -f /var/log/syslog /var/log/auth.log /var/log/kern.log(需根据发行版替换文件名),然后重现问题,观察实时输出。
  • 在 systemd 发行版中,journalctl 提供了更强大的查询与过滤功能(如 journalctl -u ssh --since "10 minutes ago"),但传统日志文件依然存在,且对于独立脚本处理、远程收集和备份而言,文本格式的 /var/log 文件依然不可或缺。

掌握这些核心日志的位置和作用,就等于拥有了一个实时的系统健康检查中心。无论是日常维护、性能分析还是安全调查,回答“发生了什么”的第一步总是打开正确的日志文件。