在我的开发计算机上,我编译了一个要在 Ubuntu 系统上使用的内核模块。现在它是一个简单的测试模块,只是 printk 的一条消息。
在我的开发计算机上,我可以测试这是否有效 cat /var/log/messages
在我的 Ubuntu 计算机上,我insmod
编辑了 .ko 并尝试了这个,但没有/var/log/messages
. 谷歌搜索告诉我这已被重命名为/var/log/syslog
,但看起来/var/log
也不存在。为什么我没有日志?
我所看到的是以下内容:
Xorg.0.log
Xorg.0.log.old
apt
dmesg
dmesg.0
dmesg.1.gz
dmesg.2.gz
dmesg.3.gz
dmesg.4.gz
dpkg.log
dpkg.lob.1
dpkg.log.2.gz
lastlog
lightdm
pm-powersave.log
pm-powersave.log.1
pm-powersave.log.2.gz
pm-powersave.log.3.gz
pm-powersave.log.4.gz
samba
udev
unattended-upgrades
Run Code Online (Sandbox Code Playgroud)
/var/log/messages
未在 Ubuntu 中使用(它在 Natty 周围被删除)。我们用/var/log/syslog
它。当时记录到“消息”的所有内容也都记录到“系统日志”中,因此我们摆脱了其中之一。
我确实有一个 syslog 和一个 kern.log in /var/log/
。我希望最后一个包含与内核相关的任何内容。
有一个更好的方法:journald
守护进程拥有所有已记录的内容。
您可以使用以下命令列出内核消息:
$ journalctl -f _TRANSPORT=kernel
Run Code Online (Sandbox Code Playgroud)
这应该会向您显示与内核相关的任何内容,如果需要,您可以 grep 结果。但是有很多选项可以优化您的结果(请参阅链接或journalctl --help
)。
其他示例(来自链接):
没有参数,所有收集的日志都显示为未经过滤:
journalctl
Run Code Online (Sandbox Code Playgroud)
指定一个匹配项后,将显示具有与表达式匹配的字段的所有条目:
journalctl _SYSTEMD_UNIT=avahi-daemon.service
如果匹配两个不同的字段,则仅显示同时匹配两个表达式的条目:
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097
Run Code Online (Sandbox Code Playgroud)
如果两个匹配项引用同一个字段,则显示与任一表达式匹配的所有条目:
journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service
Run Code Online (Sandbox Code Playgroud)
如果使用分隔符“+”,则两个表达式可以组合为逻辑 OR。以下将显示来自具有 PID 28097 的 Avahi 服务进程的所有消息以及来自 D-Bus 服务(来自其任何进程)的所有消息:
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service
Run Code Online (Sandbox Code Playgroud)
显示 D-Bus 可执行文件生成的所有日志:
journalctl /usr/bin/dbus-daemon
Run Code Online (Sandbox Code Playgroud)
显示上次启动的所有内核日志:
journalctl -k -b -1
Run Code Online (Sandbox Code Playgroud)
显示来自系统服务 apache.service 的实时日志显示:
journalctl -f -u apache
Run Code Online (Sandbox Code Playgroud)