Polecenie dmesg pozwala zajrzeć do ukrytego świata procesów uruchamiania Linuksa. Przeglądaj i monitoruj komunikaty o urządzeniach i sterownikach z własnego bufora pierścieniowego jądra za pomocą „przyjaciela wyszukiwarki błędów”.
Spis treści:
Jak działa bufor pierścienia Linuksa
W komputerach z systemem Linux i Uniksopodobnym rozruch i uruchamianie to dwie odrębne fazy sekwencji zdarzeń, które mają miejsce, gdy komputer jest włączony.
Procesy rozruchowe (BIOS lub UEFI, MBR, i ŻARCIE) prowadzą inicjalizację systemu do punktu, w którym jądro jest ładowane do pamięci i podłączane do początkowego ramdysku (initrd lub initramfs), i systemd jest uruchomiony.
Następnie procesy startowe przejmują pałeczkę i kończą inicjalizację systemu operacyjnego. Na bardzo wczesnych etapach inicjalizacji demony rejestrujące, takie jak syslogd lub rsyslogd jeszcze nie działają. Aby uniknąć utraty ważnych komunikatów o błędach i ostrzeżeń z tej fazy inicjalizacji, jądro zawiera plik bufor pierścieniowy którego używa jako magazynu wiadomości.
Bufor pierścieniowy to przestrzeń pamięci zarezerwowana na wiadomości. Jest prosty w konstrukcji i ma stały rozmiar. Gdy jest pełny, nowsze wiadomości zastępują najstarsze wiadomości. Koncepcyjnie można to traktować jako „bufor kołowy. ”
Bufor pierścieniowy jądra przechowuje informacje, takie jak komunikaty inicjalizacji sterowników urządzeń, komunikaty ze sprzętu i komunikaty z modułów jądra. Ponieważ zawiera te niskopoziomowe komunikaty startowe, bufor pierścieniowy jest dobrym miejscem do rozpoczęcia badania błędów sprzętowych lub innych problemów z uruchamianiem.
Ale nie idź z pustymi rękami. Zabierz ze sobą dmesg.
Polecenie dmesg
Polecenie dmesg na to pozwala aby przejrzeć komunikaty przechowywane w buforze pierścieniowym. Domyślnie, aby użyć dmesg, musisz użyć sudo.
sudo dmesg
Wszystkie wiadomości w buforze pierścieniowym są wyświetlane w oknie terminala.
To był potop. Oczywiście musimy przepuścić to przez mniej:
sudo dmesg | less
Teraz możemy przewijać wiadomości szukając interesujących nas elementów.
Możesz użyć funkcji wyszukiwania w less, aby znaleźć i podświetlić interesujące Cię elementy i terminy. Uruchom funkcję wyszukiwania, naciskając klawisz ukośnika „/” w less.
Usunięcie potrzeby sudo
Jeśli chcesz uniknąć konieczności używania sudo za każdym razem, gdy używasz dmesg, możesz użyć tego polecenia. Ale bądź świadomy: pozwala każdemu, kto ma konto użytkownika na twoim komputerze, na używanie dmesg bez konieczności używania sudo.
sudo sysctl -w kernel.dmesg_restrict=0
Wymuszanie drukowania w kolorze
Domyślnie dmesg zostanie prawdopodobnie skonfigurowany do tworzenia kolorowych wyników. Jeśli tak nie jest, możesz powiedzieć dmesg, aby pokolorował swoje wyjście za pomocą opcji -L (kolor).
sudo dmesg -L
Aby wymusić na dmesg zawsze domyślne wyświetlanie kolorowego wyświetlacza, użyj tego polecenia:
sudo dmesg --color=always
Znaczniki czasu ludzi
Domyślnie dmesg używa notacji znacznika czasu w sekundach i nanosekund od czasu uruchomienia jądra. Aby renderować to w formacie bardziej przyjaznym dla człowieka, użyj opcji -H (człowiek).
sudo dmesg -H
To powoduje dwie rzeczy.
Wynik jest automatycznie wyświetlany w mniej.
Znaczniki czasu przedstawiają znacznik czasu z datą i godziną z dokładnością do minuty. Wiadomości, które pojawiły się w każdej minucie, są oznaczone sekundami i nanosekundami od początku tej minuty.
Znaczniki czasu czytelne dla ludzi
Jeśli nie potrzebujesz dokładności w nanosekundach, ale chcesz, aby znaczniki czasu były łatwiejsze do odczytania niż domyślne, użyj opcji -T (czytelny dla człowieka). (To trochę zagmatwane. -H to opcja „ludzka”, -T opcja „czytelna dla człowieka”).
sudo dmesg -T
Znaczniki czasu są renderowane jako standardowe daty i godziny, ale rozdzielczość jest obniżana do minuty.
Wszystko, co wydarzyło się w ciągu jednej minuty, ma ten sam znacznik czasu. Jeśli przeszkadza ci tylko kolejność wydarzeń, to wystarczy. Zwróć też uwagę, że jesteś zrzucany z powrotem w wierszu polecenia. Ta opcja nie wywołuje automatycznie less.
Oglądanie wydarzeń na żywo
Aby zobaczyć wiadomości przychodzące do bufora pierścieniowego jądra, użyj opcji –follow (czekaj na komunikaty). To zdanie może wydawać się trochę dziwne. Jeśli bufor pierścieniowy jest używany do przechowywania wiadomości ze zdarzeń, które mają miejsce podczas sekwencji startowej, w jaki sposób wiadomości na żywo mogą docierać do bufora pierścieniowego, gdy komputer jest już uruchomiony i działa?
Wszystko, co powoduje zmianę sprzętu podłączonego do komputera, spowoduje wysłanie wiadomości do bufora pierścieniowego jądra. Zaktualizuj lub dodaj moduł jądra, a zobaczysz komunikaty bufora pierścieniowego o tych zmianach. Jeśli podłączysz dysk USB lub podłączysz lub odłączysz urządzenie Bluetooth, zobaczysz komunikaty na wyjściu dmesg. Nawet sprzęt wirtualny spowoduje pojawienie się nowych wiadomości w buforze pierścieniowym. Uruchom maszynę wirtualną, a zobaczysz nowe informacje pojawiające się w buforze pierścieniowym.
sudo dmesg --follow
Zauważ, że nie powrócisz do wiersza poleceń. Kiedy pojawiają się nowe wiadomości, są one wyświetlane przez dmesg na dole okna terminala.
Nawet zamontowanie dysku CD-ROM jest postrzegane jako zmiana, ponieważ przeszczepiłeś zawartość dysku CD-ROM do drzewa katalogów.
Aby wyjść z kanału w czasie rzeczywistym, naciśnij Ctrl + C.
Pobierz ostatnie dziesięć wiadomości
Użyj polecenia ogon aby pobrać ostatnie dziesięć komunikaty bufora pierścieniowego jądra. Oczywiście możesz pobrać dowolną liczbę wiadomości. Dziesięć to tylko nasz przykład.
sudo dmesg | last -10
Ostatnie dziesięć wiadomości jest pobieranych i wyświetlanych w oknie terminala.
Wyszukiwanie określonych terminów
Przekieruj wyjście z dmesg do grep aby wyszukać określone ciągi lub wzorce. Tutaj używamy opcji -i (ignoruj wielkość liter), aby wielkość pasujących łańcuchów była pomijana. nasze wyniki będą zawierać „usb” i „USB” oraz dowolną inną kombinację małych i wielkich liter.
sudo dmesg | grep -i usb
Wyróżnione wyniki wyszukiwania są zapisane wielkimi i małymi literami.
Możemy wyodrębnić wiadomości, które zawierają odniesienia do pierwszego SCSI dysk twardy w systemie sda. (W rzeczywistości sda jest obecnie używany również dla pierwszy dysk twardy SATAi dla dysków USB.)
sudo dmesg | grep -i sda
Wszystkie wiadomości, które wspominają o sda, są pobierane i wyświetlane w oknie terminala.
Aby grep wyszukał wiele terminów jednocześnie, użyj opcji -E (rozszerzenie wyrażenia regularnego). Musisz podać wyszukiwane hasła wewnątrz cudzysłowu z pionową kreską „|” separatory między wyszukiwanymi terminami:
sudo dmesg | grep -E "memory|tty|dma"
Każda wiadomość, w której wspomina się którykolwiek z wyszukiwanych terminów, jest wyświetlana w oknie terminala.
Korzystanie z poziomów dziennika
Każda wiadomość zapisana w buforze pierścieniowym jądra ma przypisany poziom. Poziom reprezentuje ważność informacji zawartych w wiadomości. Poziomy to:
emerg: System jest bezużyteczny.
alert: należy natychmiast podjąć działanie.
kryt: Warunki krytyczne.
err: warunki błędu.
warn: warunki ostrzegawcze.
uwaga: stan normalny, ale znaczący.
info: Informacyjne.
debug: komunikaty na poziomie debugowania.
Możemy sprawić, że dmesg wyodrębni wiadomości, które pasują do określonego poziomu, używając opcji -l (poziom) i przekazując nazwę poziomu jako parametr wiersza poleceń. Aby zobaczyć tylko komunikaty na poziomie „informacyjnym”, użyj tego polecenia:
sudo dmesg -l info
Wszystkie wyświetlone komunikaty to komunikaty informacyjne. Nie zawierają błędów ani ostrzeżeń, a jedynie przydatne powiadomienia.
Połącz dwa lub więcej poziomów dziennika w jednym poleceniu, aby pobrać komunikaty z kilku poziomów dziennika:
sudo dmesg -l debug,notice
Dane wyjściowe z dmesg to mieszanka komunikatów z każdego poziomu dziennika:
Kategorie obiektów
Wiadomości dmesg są pogrupowane w kategorie zwane „udogodnieniami”. Lista obiektów to:
kern: komunikaty jądra.
user: wiadomości na poziomie użytkownika.
mail: system pocztowy.
demon: demony systemowe.
auth: wiadomości dotyczące bezpieczeństwa / autoryzacji.
syslog: wewnętrzne komunikaty syslogd.
lpr: podsystem drukarki wierszowej.
news: podsystem wiadomości sieciowych.
Możemy poprosić dmesg, aby przefiltrował swoje wyjście, aby pokazać komunikaty tylko z określonego obiektu. Aby to zrobić, musimy użyć opcji -f (ułatwienie):
sudo dmesg -f daemon
dmesg wyświetla wszystkie komunikaty dotyczące demonów w oknie terminala.
Tak jak zrobiliśmy z poziomami, możemy poprosić dmesg o wyświetlenie wiadomości z więcej niż jednego obiektu naraz:
sudo dmesg -f syslog, daemon
Dane wyjściowe to połączenie komunikatów dziennika syslog i demona.
Połączenie obiektu i poziomu
Opcja -x (dekodowanie) sprawia, że dmesg wyświetla obiekt i poziom jako czytelne dla człowieka przedrostki do każdej linii.
sudo dmesg -x
Placówka i poziom można zobaczyć na początku każdej linii:
Pierwsza podświetlona sekcja to wiadomość z narzędzia „jądro” z poziomem „powiadomienia”. Druga podświetlona sekcja to wiadomość z narzędzia „jądro” z poziomem „info”.
To świetnie, ale dlaczego?
Krótko mówiąc, znajdowanie błędów.
Jeśli masz problemy z nierozpoznawanym lub nieprawidłowym działaniem sprzętu, dmesg może rzucić trochę światła na problem.
Użyj dmesg, aby przejrzeć wiadomości od najwyższego poziomu do każdego niższego poziomu, szukając błędów lub ostrzeżeń, które wspominają o sprzęcie lub mogą mieć wpływ na problem.
Użyj dmesg, aby wyszukać jakiekolwiek wzmianki o odpowiednim obiekcie, aby sprawdzić, czy zawierają one przydatne informacje.
Przejedź dmesg przez grep i poszukaj powiązanych ciągów lub identyfikatorów, takich jak producent produktu lub numer modelu.
Prześlij dmesg przez grep i poszukaj ogólnych terminów, takich jak „gpu” lub „pamięć”, lub takich jak „awaria”, „niepowodzenie” lub „niemożność”.
Użyj opcji –follow i oglądaj wiadomości dmesg w czasie rzeczywistym.
Udanego polowania.