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