Когда Вы идете многопользовательские, другой раздел смонтирован или автосмонтирован сверху / домой. Что-либо в / корневом каталоге Вашего корневого раздела недоступно, когда многопользовательский.
/ домой имеет два различных дисковых каталога, смонтированные на двух различных уровнях выполнения; нет никакой причины для них иметь любую корреляцию друг другу.
dmesg
читает кольцевой буфер журнала ядра. Он не делает отметок времени. Что вам нужно сделать, так это настроить syslog на захват журналов ядра из этого буфера и отправку их в файл (если он еще не настроен для этого). Обратите внимание, что конфигурация системного журнала CentOS 5.x по умолчанию отправляет журналы ядра в / var / log / messages
, насколько я помню.
Если вы хотите отправить все журналы ядра (dmesg) в /var/log/kern.log
, используя демон syslog по умолчанию, вы должны добавить следующую строку в /etc/syslog.conf
kern.* /var/log/kern.log
Я написал этот простой сценарий. Да, это медленно. Если вам нужно что-то более быстрое, вы можете написать сценарий на perl, python или на чем-то еще. Я уверен, что этот простой сценарий может дать вам представление о том, как это можно вычислить.
Обратите внимание, я проигнорировал долю секунд, зарегистрированную в каждой строке (после. В метке времени).
#!/bin/bash
localtime() {
perl -e "print(localtime($1).\"\n\");";
}
upnow="$(cut -f1 -d"." /proc/uptime)"
upmmt="$(( $(date +%s) - ${upnow} ))"
dmesg | while read line; do
timestamp="$(echo "${line}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")"
timestamp=$(( ${timestamp} + ${upmmt} ))
echo "${line}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
done
Надеюсь, это поможет. :)
Есть решение «Включение меток времени для dmesg / кольцевого буфера ядра»
Вы можете добавить:
printk.time=1
в командную строку ядра.
Что касается меня, я добавил в rc. локальный на всех машинах с марионеткой. Мне так проще):
if test -f /sys/module/printk/parameters/time; then
echo 1 > /sys/module/printk/parameters/time
fi
Немного скрипта на perl, как показано ниже. Это общий способ, и я не автор.
dmesg|perl -ne 'BEGIN{$a= time()- qx!cat /proc/uptime!};s/(\d+)\.\d+/localtime($1 + $a)/e; print $_;'
perl -n
- это способ чтения стандартного входа и считывания в переменную $_.Изменение сценария в случае, если строка не начинается с "["
#!/bin/bash
localtime() {
perl -e "print(localtime($1).\"\n\");";
}
upnow=$(cut -f1 -d"." /proc/uptime)
upmmt=$(( $(date +%s) - ${upnow} ))
dmesg \
| while read LINE; do
if [ "$(echo ${LINE} | egrep -v "^\[")" == "" ] ; then
timestamp=$(echo "${LINE}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")
timestamp=$(( ${timestamp} + ${upmmt} ))
echo "${LINE}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
else
echo "${LINE}"
fi
done
Это обновление предложения Plutoid об удалении начальных пробелов из метки времени.
dmesg|perl -ne 'BEGIN{$a= time()- qx!cat /proc/uptime!};s/( *)(\d+)\.\d+/localtime($2 + $a)/e; print $_;'