Veux faire quelque chose comme
dmesg | tail -f
mais cela ne fonctionne pas: j'utilise Mac OSX 10.6.7, ce qui fait que la queue se fermera au lieu de surveiller la sortie.
Je me demande s'il existe un moyen de le faire, ou une commande équivalente. PS, je ne pense pas qu'une while
boucle sera une idée assez bonne.
bash
command-line
tail
Ivan ZG Xiao
la source
la source
kernel.log
ne contient pas la même sortie quedmesg
. Par exemple, pour un lecteur endommagé, les erreurs de lecture de fichierdmesg
spécifient avec précision quel fichier n'a pas pu être lu, alors que,kernel.log
malheureusement, ne fournit que la remarque peu utile:disk0s2: I/O error.
Réponses:
Vous recherchez probablement une combinaison de messages provenant de divers fichiers journaux. Essayer:
… Pour avoir un bon aperçu du système. Si vous voulez plus ou moins que cela, recherchez dans quel fichier de journal les messages que vous voulez voir sont placés.
Recherchez également dans les
multitail
fichiers et les codes de couleurs et filtrez plusieurs fichiers journaux à la fois.Edit: Cela n’était pas très pertinent lorsque j’ai répondu à cette question, mais comme cette page reçoit de nombreux hits, je pense qu’il vaut la peine de mentionner que les systèmes plus récents exécutant systemd ont cela.
la source
multitail
. Semble intéressant. Dans le cas d'OS X , ce sera quelque chose comme:tail -f /var/log/{system.log,kernel.log}
.system.log
etkernel.log
ne contiennent pas la sortie exacte dedmesg
OS X. Par exemple, pour un lecteur endommagé, les erreurs de lecture de fichierdmesg
spécifient exactement quel fichier ne peut pas être lu, alors que,kernel.log
malheureusement, ne fournit que la remarque peu utile:disk0s2: I/O error.
Il suffit de faire @ # $% ing travail
man dmesg
)/proc/kmsg
(voirman proc
)/proc/kmsg
directement, c'est à direcat /proc/kmsg
.Maintenant, si vous lisez le manuel convivial de proc, il vous avertira de ne laisser qu'un seul utilisateur (qui doit être privilégié) à la lecture
/proc/kmsg
. Quelle que soit l'implémentation de syslog que vous avez devrait faire cela, et cela fonctionne vraisemblablement avecdmesg
. Je ne sais pas, je suis hors de mon championnat ici, juste pour paraphraser le manuel. Ainsi, bien que ce soit la méthode "il suffit de le faire @ # $% ing", considérons d’abord les méthodes suivantes.Page de manuel approuvée: watch + dmesg
Sur Arch gnu / linux avec systemd init *, dmesg.log n’est pas écrit très souvent, peut-être même pas du tout? La meilleure façon de lire le tampon de journalisation du noyau que j'ai trouvé est d'utiliser
watch
. Quelque chose comme ceci devrait vous aider à démarrer (ajustez le nombre de lignes contenues dans votre terminal):regarder + dmesg + daemon + tail -f
Une solution plus compliquée pourrait utiliser watch pour écrire la sortie de dmesg dans un fichier, que vous pourriez ensuite
tail -f
. Vous voudrez probablement que cela fonctionne en tant que démon. Un démon approprié serait également gzip et faire pivoter les journaux. Le code bash suivant est non testé, non fonctionnel et uniquement destiné à véhiculer une idée. La réponse de @Brooks Moses a une version de travail .* tangente, car c’est une question osx, mais lorsque systemd est présent, ne vous embêtez pas avec
dmesg
, utilisezjournalctl -xf
(peut-être-n 100
aussi pour afficher les 100 lignes précédentes)la source
/proc
, cependant le reste de votre réponse est applicable.watch
peut être installé depuis MacPorts: macports.orgdmesg
mise en œuvre: opensource.apple.com/source/system_cmds/system_cmds-230.7/... rapide recherche sur Google ne mentionne rien à ce sujet étant représenté dans le système de fichiers: /Pour ceux intéressés par Linux, depuis le noyau noyau 3.5.0:
Aussi sur les systèmes avec
systemd
vous pouvez:la source
dmesg -w
est la solution absolument la plus gentille. Malheureusement, même Ubuntu 14.04 ne semble pas être prêt pour cela car l'outil d'espace utilisateur ne le supporte pas encore.Voici une variante de la réponse de djeikyb qui a été testée et qui corrige quelques bugs.
Le truc important est que nous faisons ce
dmesg -c
qui efface le tampon de sonnerie après l’impression - ainsi, à chaque fois, nous n’imprimons que les nouveautés depuis la dernière fois. Vous devez être root pour le faire, donc lesudo
. Il y a aussi un bugfix; au lieu d'essayer à la fois de vider la sortie dans un fichier et de la canaliser (ce qui ne fonctionne pas), nous lisons simplement à partir du fichier nouvellement écrit.Nous pourrions faire juste
dmesg > /tmp/dmesg.log
et écraser le fichier entier à chaque itération, mais cela fait beaucoup d'E / S et risque également de perdre le fichier si l'ordinateur tombe en panne au milieu d'un écrasement.Vous pouvez également faire quelque chose de similaire qui ressemble plus étroitement
tail -f
à une boucle while qui s'exécutedmesg -c
etsleep 1
pour toujours (voir la réponse de Ben Harris). Cependant, étant donné que cela efface réellement la mémoire tampon de messages du noyau pendant son exécution, vous pouvez également diriger des éléments dans un fichier journal au cas où vous les voudriez plus tard.la source
Cela peut fonctionner pour vous
N'oubliez pas que l'indicateur '-c' efface le tampon de messages dans stdout. Le 'sudo' est inutile si vous êtes root. Si vous pensez que cela consomme trop de ressources de votre processeur, essayez d’ajouter un «sommeil 1» avant la fin de la boucle.
la source
A fait cela avant de voir ce post:
la source
vous pourriez être capable de faire:
la source
dmesg
rapporte un ensemble actuel des derniers messages du noyau, généralement spécifiques aux sous-systèmes matériels.la source
watch
J'utilise cet alias dans /root/.bashrc;
qui suit dmesg et ajuste les lignes pour le terminal appelé.
la source
Sous l’actuel Ubuntu (j’utilise Ubuntu 12.04),
peut répondre à l'exigence.
la source
J'ai utilisé ce code pour rechercher un événement spécial du noyau et lui ai transmis un processus de "rappel":
la source
réponse à une vieille question, mais quelqu'un pourrait trouver cela utile :)
achemine la sortie de dmesg par tail en utilisant l'opérateur - comme raccourci vers stdout
la source
dmesg
ferme la sortie après la fermeture une fois.tail -f
ne peut plus changer cela.