我正在运行一个从头开始构建的 Linux 操作系统。我想将内核消息缓冲区(dmesg)保存到一个文件中,该文件将在重新启动之间保持不变。
我尝试运行 syslogd,但它只是打开了一个新的日志文件 /var/log/messages,既没有现有的内核消息缓冲区,也没有启动 syslogd 后内核生成的任何新消息。
如何将内核消息缓冲区保存到持久日志文件中?
答案1
您需要查看/etc/rsyslog.conf
或/etc/syslog.conf
。如果您很早就排队了,例如:
*.* -/var/log/syslog
所有内容,包括 dmesg 中的内容,都应该放入该文件中。为了更好地瞄准它:
kernel.* -/var/log/dmesg
如果由于某种原因失败,您可以定期(例如通过 cron):
dmesg > /var/log/dmesg
根据 dmesg 缓冲区有多大(它被编译到内核中,或通过参数设置log_buf_len
)以及系统运行了多长时间,这将保留自启动以来的内核日志记录。
如果要将 dmesg 输出连续写入文件,请使用 -w (--follow) 标志。
dmesg --follow > mydmesg.log
答案2
如果您使用,那么您可以使用systemd
获取期刊中的所有信息。如果您使用 systemd,则不需要。systemd
journalctl -k
syslog
rsyslog
答案3
PopSicle 执行此操作我使用旧的 msdos 重定向,并将其重定向到 .csv 文件,该文件由 LibreOffice Calc 在终端中的电子表格中打开,尝试类似这样的操作
dmesg > /path to where you want the file written/File-Name.csv
dmesg > /media/joe/Data/Z-Back/Script-Files/Dmesg-Output.csv
echo "Dmesg-to-CSV.sh"" the script file"
#!/bin/bash
echo "This is a shell script"
SOMEVAR='I am done running dmesg and redirecting to /media/joe/Data/B-Back/Script-Files/Dmesg-Output.csv'
echo "$SOMEVAR"
dmesg > /media/joe/Data/Z-Back/Script-Files/Dmesg-Output.csv
echo "Dmesg-CSV.desktop"" the icon file"
[Desktop Entry]
Encoding=UTF-8
Name=Dmesg-to-CSV.sh
Comment=Launch DirSyncPro
Exec=gnome-terminal -e /media/joe/Data/Z-Back/Script-Files/Dmesg-to-CSV.sh
Icon=utilities-terminal
Type=Application
Name[en_US]=Dmesg-CSV.desktop
echo "both the .sh file and .desktop file are stored in the same directory as the .csv output file"