在Linux系统中,启动信息的查看是系统管理和故障排查的重要环节,通过启动日志可以定位内核初始化、服务加载、硬件识别等阶段的问题,Linux启动过程主要分为BIOS/UEFI阶段、引导加载阶段(如GRUB)、内核初始化阶段(initramfs)和系统服务启动阶段(systemd或SysVinit),不同阶段的信息存储位置和查看方式有所不同,以下是查看Linux启动信息的详细命令及方法,涵盖不同启动阶段和日志管理工具的使用。

查看内核启动信息(dmesg命令)
dmesg命令用于显示内核环缓冲区(kernel ring buffer)中的消息,这些消息记录了系统启动过程中内核的初始化信息,包括硬件检测、驱动加载、文件系统挂载等关键内容。
- 基础用法:
dmesg
直接输出所有内核消息,默认按时间顺序显示,最新信息在末尾,由于输出内容较多,通常结合管道和
less、grep等工具使用:dmesg | less # 分页查看 dmesg | grep -i error # 过滤包含error的信息(不区分大小写)
- 过滤特定类型信息:
内核消息按设施(facility)和级别(level)分类,可通过-T选项显示时间戳,-f指定设施,-l指定级别。dmesg -T # 显示可读格式的时间(如"Mon Oct 24 14:35:17 2023") dmesg -l err # 只显示错误级别的消息 dmesg -f kern # 只显示内核设施的消息
- 输出到文件:
若需保存内核启动信息,可重定向输出:dmesg > kernel_boot.log
查看系统启动日志(journalctl命令)
journalctl是systemd系统的日志管理工具,用于查看systemd收集的启动日志,包括内核消息、服务启动状态、错误信息等,功能比dmesg更全面。
- 查看完整启动日志:
journalctl -b # 显示当前启动周期的日志(从系统启动开始) journalctl -b -1 # 显示上一次启动周期的日志
- 按时间过滤:
journalctl --since "2023-10-24 14:00" --until "2023-10-24 15:00" # 指定时间范围 journalctl --since yesterday # 查看昨日起的日志
- 按服务或单元过滤:
journalctl -u sshd # 查看sshd服务的日志 journalctl -u systemd-networkd # 查看网络服务日志
- 结合内核消息:
journalctl -k # 只显示内核消息(等同于dmesg) journalctl -b -k -p err # 查看当前启动周期内核错误
- 实时监控启动过程:
journalctl -f # 实时跟踪日志输出(类似tail -f)
查看GRUB引导加载信息
GRUB是Linux系统常用的引导加载程序,其启动信息通常在屏幕滚动显示,默认会被快速隐藏,可通过以下方式查看:

- 临时显示启动信息:
在GRUB菜单界面,按E键编辑启动项,找到linux或linux16/linuxefi行,在行尾添加console=ttyS0,115200(串口输出)或保持默认,然后按Ctrl+X启动,此时启动信息会显示在屏幕上。 - 查看GRUB配置文件:
GRUB的配置文件位于/boot/grub2/grub.cfg或/boot/efi/EFI/ubuntu/grub.cfg(UEFI系统),可通过以下命令查看:cat /boot/grub2/grub.cfg | grep -A 5 -B 5 "linux"
查看系统启动流程日志(initramfs阶段)
initramfs(初始内存文件系统)是内核启动到真实根文件系统之间的临时环境,其日志可通过以下方式查看:
- 查看initramfs执行脚本:
initramfs的执行脚本通常位于/usr/lib/dracut/hooks/或/etc/dracut.conf.d/,可通过lsinitrd命令查看initramfs镜像内容:lsinitrd /boot/initramfs-$(uname -r).img | grep -i "script" # 查看脚本文件
- 启用initramfs调试:
修改GRUB启动参数,在linux行添加rd.debug或loglevel=7,重启后可通过dmesg或journalctl -k查看详细调试信息。
查看传统SysVinit启动日志
对于使用SysVinit的老旧系统(如CentOS 6),启动日志主要通过以下文件查看:
/var/log/messages:系统主要日志文件,包含启动过程中的服务信息。/var/log/dmesg:内核启动信息的副本,与dmesg命令输出内容一致。/var/log/boot.log:记录启动过程中各服务的启动状态。
查看命令示例:tail -f /var/log/messages # 实时查看系统日志 grep -i fail /var/log/boot.log # 查看启动失败的服务
不同启动阶段的日志位置总结
| 启动阶段 | 日志位置/命令 | 说明 |
|---|---|---|
| 内核初始化 | dmesg、journalctl -k、/var/log/dmesg |
记录硬件检测、驱动加载、文件系统检查等内核级信息 |
| GRUB引导加载 | GRUB菜单界面、/boot/grub2/grub.cfg | 引导参数、菜单配置信息 |
| initramfs阶段 | dmesg(rd.debug参数后)、lsinitrd |
临时文件系统加载、关键设备初始化(如磁盘、LVM) |
| 系统服务启动(systemd) | journalctl -b、/var/log/journal/ |
服务启动顺序、依赖关系、错误状态(默认日志存储在/run/log/journal/) |
| 系统服务启动(SysVinit) | /var/log/messages、/var/log/boot.log | 传统启动模式下各服务的启动日志 |
常见问题与注意事项
- 日志被快速滚动隐藏:
若启动信息在屏幕上滚动过快,可通过GRUB启动参数loglevel=7提高日志级别,或使用pause参数暂停启动(需修改GRUB配置)。 - 日志文件不存在:
对于systemd系统,若/var/log/journal/目录为空,可能是持久化日志未启用,可通过mkdir -p /var/log/journal && journalctl --flush激活。
相关问答FAQs
Q1: 如何区分内核错误和服务启动错误?
A1: 内核错误可通过dmesg | grep -i error或journalctl -k -p err查看,通常包含硬件故障、驱动加载失败等信息;服务启动错误则通过journalctl -u 服务名或/var/log/服务名.log定位,例如journalctl -u nginx查看Nginx服务启动时的错误日志。
Q2: 为什么journalctl -b显示的日志不完整?
A2: 可能的原因包括:① 日志轮转策略导致旧日志被清理,可通过journalctl -b -p err -n 100查看最近100条错误日志;② 系统未正常关机导致日志未保存,建议使用journalctl --flush手动同步日志;③ 磁盘空间不足,可通过journalctl --vacuum-size=100M限制日志大小。
