GNU/Linux >> Znalost Linux >  >> Linux

Příkaz dmesg pro Linux - Tisk kruhové vyrovnávací paměti jádra

Příkaz Dmesg vytiskne vyrovnávací paměť zpráv jádra. Příkaz Dmesg se používá hlavně k identifikaci vadných zařízení, zařízení připojených za chodu, jako jsou USB, chyby I/O zařízení.

Když systém zavede, ovladače zařízení přítomné v nastavení jádra s příslušnými hardwarovými zařízeními. V té době ovladače a další prvky s jádrem produkují zprávy. Tyto zprávy jsou uloženy v malé vyrovnávací paměti a každá se přepíše, když přijdou nové zprávy. Většina distribucí Linuxu ukládá tyto zprávy do /var/log/dmesg. Dmesg čte přímo z vyrovnávací paměti jádra, nikoli z /var/log/dmesg. Syslog ve výchozím nastavení (závisí na distribucích Linuxu) nebo nakonfigurován pro zachycování zpráv.

Obchody Dmesg zprávy jádra během bootování a po bootování. Po nabootování jádro občas vygeneruje zprávy, když se vyskytnou chyby io, připojená zařízení atd. Tyto zprávy jsou také odesílány do systémové konzoly. Výstup Dmesg je často velký, lze jej filtrovat pomocí příkazů more, tail nebo grep.

Jak používat příkaz dmesg

Příkaz Dmesg standardně tiskne N počet zpráv z vyrovnávací paměti jádra.

$ dmesg

Ukázkový výstup:

[    1.230638] kernel: Run /init as init process
 [    1.336492] kernel: scsi host0: Virtio SCSI HBA
 [    1.338612] kernel: scsi 0:0:0:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.338727] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input4
 [    1.342266] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
 [    1.345242] kernel: lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
 [    1.346920] kernel: ahci 0000:00:1f.2: version 3.0
 [    1.350864] kernel: scsi host1: Virtio SCSI HBA
 [    1.358377] kernel: scsi host2: Virtio SCSI HBA
 [    1.359317] kernel: PCI Interrupt Link [GSIA] enabled at IRQ 16
 [    1.359718] kernel: scsi 1:0:1:2: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.361478] kernel: ahci 0000:00:1f.2: AHCI 0001.0000 32 slots 6 ports 1.5 Gbps 0x3f impl SATA mode
 [    1.363039] kernel: i801_smbus 0000:00:1f.3: SMBus using PCI interrupt

Výstup Dmesg je rozdělen hlavně do 3 částí:

  • Čas: Zobrazuje počet sekund od doby spouštění. Pokud najdete 20.091730. Znamená to, že zpráva je vytvořena 20 sekund po spuštění.
  • Název_zařízení: Zobrazit název zařízení
  • Zprávy: Skutečná zpráva. Odtud můžeme analyzovat, co se stalo.

1) Jak číst dmesg

Příkaz Dmesg bez jakýchkoli voleb produkuje velký výstup. Pro usnadnění čtení použijte k filtrování výstupu příkaz grep nebo less. Podívejme se na několik příkladů.

Vytisknout výstup dmesg na stránku

$ dmesg | less

Ukázkový výstup:

[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 3.8.0-31-generic (buildd@aatxe) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) ) #46-Ubuntu SMP Tue Sep 10 19:56:49 UTC 2013 (Ubuntu 3.8.0-31.46-generic 3.8.13.8)
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] NSC Geode by NSC
[ 0.000000] Cyrix CyrixInstead
[ 0.000000] Centaur CentaurHauls
[ 0.000000] Transmeta GenuineTMx86
[ 0.000000] Transmeta TransmetaCPU
[ 0.000000] UMC UMC UMC UMC

Tisk informací souvisejících s eth

$ dmesg | grep eth

Ukázkový výstup:

[ 1.972418] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:d2:c1:16
[ 1.972430] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[ 18.867656] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.733138] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ 21.737967] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.738052] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Tisk informací souvisejících s USB

$ dmesg | grep usb

Ukázkový výstup:

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0

Upozorňujeme, že příkaz grep rozlišuje malá a velká písmena . tj. z výše uvedeného příkladu "usb" a "USB" dávají různé výsledky. Chcete-li ignorovat funkci rozlišování velkých a malých písmen, použijte parametr -i za příkazem grep . Porovnejte tento výstup příkazu s výše uvedeným pouzdrem USB.

$ dmesg | grep -i usb

Ukázkový výstup:

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 0.997759] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.997783] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.997929] ohci_hcd 0000:00:06.0: new USB bus registered, assigned bus number 1
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0
[ 1.091856] hub 1-0:1.0: USB hub found
[ 1.093110] uhci_hcd: USB Universal Host Controller Interface driver

Zobrazení požadovaného výstupu pomocí hlavy/ocasu

Například jste vložili vyměnitelné zařízení nebo provedli změny na diskových svazcích. Chcete-li zkontrolovat nejnovější záznamy dmesg pomocí tailu příkaz.

Chcete-li zobrazit posledních N řádků protokolu dmesg:

$ dmesg | tail -15

Podobně k nalezení prvních několika řádků z dmesg log použijte příkaz head. To bude užitečné pro nalezení změn, ke kterým došlo těsně po spuštění.

$ dmesg | head -15

Monitorování v reálném čase

Pro nepřetržité sledování v reálném čase použijte volbu -f .

$ tail -f /var/log/dmesg

Alternativně použijte watch dmesg:

$ watch "dmesg | tail -15"

Některé systémy Linux podporují použití dmesg -w, které bude čekat na nové zprávy.

2) Tiskněte ve formátu čitelném pro člověka

Chcete-li vytisknout výstup dmesg ve formátu čitelném pro člověka, použijte volbu -H.

$ dmesg -H

3) Převést časové razítko do vlastního formátu data

Ve výchozím nastavení není časové razítko z výstupu dmesg člověkem čitelné. Chcete-li změnit časové razítko na vlastní formát data, použijte volbu - -ctime nebo -T.

$ dmesg  --ctime

Ukázkový výstup:

[Tue Dec 10 16:34:33 2013] 131MB HIGHMEM available.
[Tue Dec 10 16:34:33 2013] 891MB LOWMEM available.
[Tue Dec 10 16:34:33 2013] mapped low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] Zone ranges:
[Tue Dec 10 16:34:33 2013] DMA [mem 0x00010000-0x00ffffff]
[Tue Dec 10 16:34:33 2013] Normal [mem 0x01000000-0x37bfdfff]
[Tue Dec 10 16:34:33 2013] HighMem [mem 0x37bfe000-0x3ffeffff]
[Tue Dec 10 16:34:33 2013] Movable zone start for each node
[Tue Dec 10 16:34:33 2013] Early memory node ranges
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00010000-0x0009efff]
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00100000-0x3ffeffff

Můžete také použít --time-format k tisku časových razítek v daném formátu, což může být ctime, reltime, delta nebo iso.

Pokud časové razítko není povoleno pak příkaz dmesg nemusí ve výstupu zobrazovat časové razítko.

Chcete-li zkontrolovat, zda jsou časová razítka povolena nebo ne, otevřete soubor /sys/module/printk/parameters/time:

$ cat /sys/module/printk/parameters/time
N

Pokud je obsah souboru N, pak časové razítko není povoleno. Chcete-li povolit časové razítko, můžete spustit následující příkaz:

$ echo Y > /sys/module/printk/parameters/time

4) Vymazat dmesg

Chcete-li vymazat zprávy z kruhové vyrovnávací paměti jádra, použijte volbu -C.

$ dmesg -C

Chcete-li vymazat kruhovou vyrovnávací paměť po vytištění jejího obsahu, použijte volbu -c.

$ dmesg -c

I když vymažete dmesg pomocí parametrů -c nebo -C, můžete stále zobrazit protokoly v /var/log/kern.log nebo /var/log/dmesg.

5) Zastavte Dmesg protokolování do konzole

Chcete-li zakázat tisk zpráv do konzoly, použijte volbu -D.

$ dmesg -D

Alternativní možností je použít -n 1, abyste zabránili zobrazování všech zpráv, kromě nouzových (panických) zpráv, na konzoli.

Chcete-li povolit tisk zpráv do konzoly, použijte -E.

$ dmesg -E

6) Zobrazení zpráv specifických pro zařízení

Tisk zpráv z konkrétní kategorie nebo zařízení. Pro splnění tohoto účelu použijte volbu --facility.

Z příkladu pro tisk zprávy specifické pro poštu zadejte:

$ dmesg --facility=daemon

Podporovaná zařízení protokolu jsou:

kern - zprávy jádra
uživatel - náhodné zprávy na uživatelské úrovni
mail - poštovní systém
daemon - systémoví démoni
auth - bezpečnostní/autorizační zprávy
syslog - zprávy generované interně syslogd
lpr - subsystém řádkové tiskárny
novinky - podsystém síťové novinky

7) Tisk úrovně protokolu

Chcete-li vytisknout zprávy specifické pro úroveň protokolu, použijte volbu --level. Chcete-li například vytisknout všechny varovné zprávy, spusťte následující příkaz:

$ dmesg --level=warn

Ukázkový výstup:

[ 0.000000] tsc: Fast TSC calibration failed
[ 19.595760] piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr

Podporované úrovně protokolu jsou:

emerg - systém je nepoužitelný
výstraha – je třeba okamžitě jednat
krit - kritické podmínky
err - chybové stavy
varovat - varovné podmínky
upozornění - normální, ale významný stav
info - informační
debug – zprávy na úrovni ladění

8) Zobrazovací zařízení a úroveň v lidsky čitelném stavu

Chcete-li vytisknout úroveň zařízení a protokolu ve formátu čitelném pro člověka, použijte volbu -x.

$ dmesg -x

Ukázkový výstup:

kern :debug : [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
kern :info : [ 0.000000] e820: last_pfn = 0x3fff0 max_arch_pfn = 0x1000000
kern :debug : [ 0.000000] MTRR default type: uncachable
kern :debug : [ 0.000000] MTRR variable ranges disabled:
kern :info : [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
kern :info : [ 0.000000] CPU MTRRs all blank - virtualized system.

9) Vytiskněte zprávu jádra

Chcete-li vytisknout zprávy specifické pro jádro, použijte volbu -k.

$ dmesg -k

10) Ignorujte časové razítko

Pokud nechcete tisknout časové razítko jádra, použijte volbu -t.

$ dmesg -t

Závěr

Dmesg může být velmi užitečný pro diagnostiku problémů souvisejících se systémem. V tomto tutoriálu jsme se naučili používat příkaz dmesg v Linuxu.


Linux
  1. Linuxový příkaz mv

  2. Příklady příkazů lpr v Linuxu

  3. Nastavte kapacitu potrubí v Linuxu

  1. Linux du command

  2. Linuxový ip příkaz

  3. Linux cd příkaz

  1. Jak používat příkaz dmesg Linux

  2. Příklady příkazů dmesg v Linuxu

  3. Příklady příkazů awk v Linuxu