只有内核本身的输出才是dmesg.
另一个输出来自init进程及其启动的服务.在GNU / Linux上常用的init有很多不同的实现(其中一些不称为“init”),它们的行为可能不同,并且在这种情况下是可配置的,但根据我的经验,它们不是通过默认记录他们打印到屏幕的所有内容.此外,它们不会重定向它们启动的服务的输出 – 任何打印到标准输出或标准错误的任何内容都将最终出现在屏幕上.它取决于各个服务,它们对syslog1和输出流执行WRT.他们中的大多数应该充分利用系统日志,但他们在那里报告的内容可能与他们在启动时向stdout / stderr报告的内容不同.通常,syslog中会有比屏幕上更多的内容.
如果您有兴趣研究具体细节,那么GNU / Linux上使用的三种最常见的init实现是:
> SysV init(Debian,Gentoo,其他):最初,这是主要Linux发行版使用的唯一init系统;从技术上讲,SysV是一个规范,在linux上使用的实际实现是/是一个GNU项目.
> Systemd(Fedora,Arch):由Redhat开发.
> Upstart(Ubuntu):由Canonical开发.
1如果syslog尚未启动,或者包含日志的文件系统尚未以读写方式挂载,则可能会丢弃消息,这就是为什么您可以在日志中没有记录的情况下启动失败 – 启动失败之前可以进行日志记录,但仍有输出到控制台.