J'écris un pilote de périphérique qui imprime un message d'erreur dans la sortie dmesg du tampon circulaire. Je veux voir la sortie de dmesg
comme cela change.
Comment puis-je faire ceci?
linux
command-line
logs
dmesg
Milad Khajavi
la source
la source
Réponses:
Les
dmesg
versions relativement récentes fournissent une option de suivi (-w
,--follow
) qui fonctionne de manière analogue àtail -f
.Ainsi, utilisez simplement la commande suivante:
(
-H
,--human
permet des fonctionnalités conviviales comme les couleurs, le temps relatif)Ces options sont disponibles par exemple dans Fedora 19.
la source
-H
mais autrement sur place-w
devrait fonctionner dans toutes les versions d’Ubuntu à partir d’Utopic (14.10). ( launchpad.net/ubuntu/+source/util-linux/+publishinghistory suggère que les premiers paquets Utopic étaient à 2.20, mais atteignaient 2,25 à la date deVous pouvez utiliser la
watch
commande qui est exactement destinée à des choses comme celle-cila
$((LINES-6))
pièce doit bien s’adapter parfaitement à votre terminal.la source
watch
. Ainsi, cela ne changera pas vraiment entre les invocations dedmesg
. Il faudrait utiliser un wrapper qui interrogerait l'état du terminal.watch
. Par conséquent, watch exécutera la commande contenant l'expression de la variable, qui sera développée par le shell qu'il appelle. Chaque fois. Essayez, ça marche.watch
usespopen()
, ce qui signifie qu'un autre shell est créé et que la variable d'environnement est ensuite fournie par celui-ci (et donc mise à jour à chaque exécution). Belle trouvaille.vous ne pouvez pas vraiment surveiller la sortie de
dmesg
directement.Cependant, il y a de fortes chances que votre module n'imprime pas directement dans le tampon circulaire de dmesg, mais utilise plutôt les fonctions de journalisation du noyau (qui seront ensuite affichées par
dmesg
). si vous avez dessyslog
paramètres sains (par exemple, par défaut), ces messages apparaîtront probablement aussi dans lekern.log
fichier journal.afin que vous puissiez faire quelque chose comme:
la source
/var/log/kern.log
est assez spécifique à Linux. Pour OpenBSD (et éventuellement d’autres), le contenu de dmesg est enregistré dans / var / log / messages. Certes, d'autres choses y vont aussi.tail -f /var/log/{messages,kernel,dmesg,syslog}
via super-utilisateur: est-il-possible-à-queue-f-sortie-de-dmesgVous utilisez
dmesg
pour obtenir des messages de log du noyau.Le noyau lui-même se connecte à un tampon en anneau, c'est-à-dire juste en mémoire. Désormais, tout ce qu’il
dmesg
fait est de sortir le contenu de ce tampon circulaire. Si vous le faites,dmesg -c
cela supprimera également le tampon de sonnerie par la suite.Par conséquent, vous pourriez faire quelque chose comme
while true; do dmesg -c; sleep 1; done
avoir quelque chose comme l’équivalent d’un non-travaildmesg|tail
. Mais ceci supprime le tampon circulaire et nécessite donc des pouvoirs de racine.L’autre méthode est le fichier
/proc/kmsg
qui permet de visualiser le tampon en anneau. Vous pouvez le fairetail -f /proc/kmsg
, mais ceci n’autorise qu’un seul processus, et il s’agit généralement de votre démon de journalisation. - Son travail consiste à lire les messages et à les écrire dans de vrais fichiers (généralement dans / var / log) où ils peuvent être lus. Il peut être configuré pour exporter tous les messages dans un seul fichier ou dans différentes parties dans différents fichiers. (Mais la configuration dépend du démon de journalisation de votre système.)Par conséquent, vérifiez
/var/log
si un fichier convient à vos besoins et configurez autrement votre démon de journalisation.la source
Si vous utilisez un système intégré, la busybox commune aux systèmes comme OpenWRT a des fonctionnalités très limitées et seuls 2 ou 3 indicateurs sont pris en charge.
Si vous voulez un moyen rapide et sale d’imprimer continuellement la sortie de dmesg à l’écran à mesure que les événements changent, une simple boucle bash fonctionne correctement. Ce n'est pas idéal, mais comme je l'ai mentionné, il manque beaucoup de fonctions au dmesg de BusyBox. Je trouve que ce qui suit a le même effet lorsqu’il est entré dans la ligne de commande:
vous pouvez quitter la boucle avec Ctrl-C; le sommeil 1 consiste à l'empêcher de frapper inutilement le processeur, et le drapeau -c efface le tampon à chaque appel, de sorte que vous ne voyez pas de sortie répétée toutes les secondes,
la source
Sur les systèmes qui utilisent,
systemd
vous pouvez également:la source
Utilisez ces 2 commandes à partir de terminaux distincts:
while true; do dmesg -c >> test.txt;sleep 1; done
tail -f test.txt
Il obtiendra un résultat similaire.
la source