Wyszukiwanie w witrynie

7 poleceń „dmesg” do rozwiązywania problemów i gromadzenia informacji w systemach Linux


Polecenie „dmesg” wyświetla komunikaty z bufora pierścieniowego jądra. System przechodzi przez wiele poziomów działania, skąd możemy uzyskać wiele informacji, takich jak architektura systemu, procesor, podłączone urządzenie, pamięć RAM itp. Podczas uruchamiania komputera jądro (rdzeń systemu operacyjnego) jest ładowane do pamięci. W tym czasie wyświetlanych jest wiele komunikatów, w których możemy zobaczyć urządzenia wykryte przez jądro.

Przeczytaj także: 10 poleceń systemu Linux do zbierania informacji o systemie i sprzęcie

Komunikaty są bardzo ważne z punktu widzenia diagnozy celu w przypadku awarii urządzenia. Kiedy podłączamy lub odłączamy urządzenie sprzętowe w systemie, za pomocą polecenia dmesg na bieżąco dowiadujemy się o wykrytych lub odłączonych informacjach. Polecenie dmesg jest dostępne w większości systemów operacyjnych opartych na Linux i Unix.

Rzućmy trochę światła na najsłynniejsze narzędzie zwane poleceniem „dmesg” na praktycznych przykładach omówionych poniżej. Dokładna składnia dmesg jest następująca.

dmseg [options...]

1. Wyświetl listę wszystkich załadowanych sterowników w jądrze

Możemy używać narzędzi do manipulacji tekstem, np. „więcej”, „ogon”, „mniej” lub „grep ' za pomocą polecenia dmesg. Ponieważ wynik polecenia dmesg log nie zmieści się na jednej stronie, użycie dmesg z poleceniem pipe mniej więcej wyświetli logi na jednej stronie.

[[email  ~]# dmesg | more
[[email  ~]# dmesg | less
Przykładowe wyjście
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 
(Ubuntu 3.11.0-13.20-generic 3.11.6)
[    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
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable
[    0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fed003ff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed20000-0x00000000fed9ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ffb00000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
.....

Przeczytaj także: Skutecznie zarządzaj plikami systemu Linux za pomocą poleceń head, tail i cat

2. Wyświetl listę wszystkich wykrytych urządzeń

Aby dowiedzieć się, które dyski twarde zostały wykryte przez jądro, możesz wyszukać słowo kluczowe „sda” wraz z „grep”, jak pokazano poniżej.

[[email  ~]# dmesg | grep sda

[    1.280971] sd 2:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB)
[    1.281014] sd 2:0:0:0: [sda] Write Protect is off
[    1.281016] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    1.281039] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    1.359585]  sda: sda1 sda2 < sda5 sda6 sda7 sda8 >
[    1.360052] sd 2:0:0:0: [sda] Attached SCSI disk
[    2.347887] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[   22.928440] Adding 3905532k swap on /dev/sda6.  Priority:-1 extents:1 across:3905532k FS
[   23.950543] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[   24.134016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null)
[   24.330762] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null)
[   24.561015] EXT4-fs (sda8): mounted filesystem with ordered data mode. Opts: (null)

UWAGA: pierwszy dysk twardy SATA „sda”, drugi dysk twardy SATA „sdb” i tak dalej. Wyszukaj za pomocą „hda” lub „hdb” w przypadku dysku twardego IDE.

3. Wydrukuj tylko pierwsze 20 wierszy wydruku

„Głowa” wraz z dmesg pokaże linie startu, tj. „dmesg | head -20’ wypisze tylko 20 linii od punktu początkowego.

[[email  ~]# dmesg | head  -20

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 (Ubuntu 3.11.0-13.20-generic 3.11.6)
[    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
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable
[    0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved

4. Wydrukuj tylko ostatnie 20 wierszy wydruku

„Ogon” wraz z poleceniem dmesg wypisze tylko 20 ostatnich linii, jest to przydatne w przypadku, gdy podłączamy urządzenie wymienne.

[[email  ~]# dmesg | tail -20

parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE]
ppdev: user-space parallel port driver
EXT4-fs (sda1): mounted filesystem with ordered data mode
Adding 2097144k swap on /dev/sda2.  Priority:-1 extents:1 across:2097144k
readahead-disable-service: delaying service auditd
ip_tables: (C) 2000-2006 Netfilter Core Team
nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Slow work thread pool: Starting up
Slow work thread pool: Ready
FS-Cache: Loaded
CacheFiles: Loaded
CacheFiles: Security denies permission to nominate security context: error -95
eth0: no IPv6 routers present
type=1305 audit(1398268784.593:18630): audit_enabled=0 old=1 auid=4294967295 ses=4294967295 res=1
readahead-collector: starting delayed service auditd
readahead-collector: sorting
readahead-collector: finished

5. Wyszukaj wykryte urządzenie lub określony ciąg

Trudno jest wyszukać konkretny ciąg ze względu na długość wyniku dmesg. Zatem przefiltruj linie zawierające ciąg znaków typu „usb”, „dma”, „tty” i „pamięć ' itd. Opcja '-i' instruuje polecenie grep, aby ignorowało wielkość liter (duże lub małe litery).

[[email  log]# dmesg | grep -i usb
[[email  log]# dmesg | grep -i dma
[[email  log]# dmesg | grep -i tty
[[email  log]# dmesg | grep -i memory
Przykładowe wyjście
[    0.000000] Scanning 1 areas for low memory corruption
[    0.000000] initial memory mapped: [mem 0x00000000-0x01ffffff]
[    0.000000] Base memory trampoline at [c009b000] 9b000 size 16384
[    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[    0.000000] init_memory_mapping: [mem 0x37800000-0x379fffff]
[    0.000000] init_memory_mapping: [mem 0x34000000-0x377fffff]
[    0.000000] init_memory_mapping: [mem 0x00100000-0x33ffffff]
[    0.000000] init_memory_mapping: [mem 0x37a00000-0x37bfdfff]
[    0.000000] Early memory node ranges
[    0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x000effff]
[    0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[    0.000000] Memory: 2003288K/2059928K available (6352K kernel code, 607K rwdata, 2640K rodata, 880K init, 908K bss, 56640K reserved, 1146920K highmem)
[    0.000000] virtual kernel memory layout:
[    0.004291] Initializing cgroup subsys memory
[    0.004609] Freeing SMP alternatives memory: 28K (c1a3e000 - c1a45000)
[    0.899622] Freeing initrd memory: 23616K (f51d0000 - f68e0000)
[    0.899813] Scanning for low memory corruption every 60 seconds
[    0.946323] agpgart-intel 0000:00:00.0: detected 32768K stolen memory
[    1.360318] Freeing unused kernel memory: 880K (c1962000 - c1a3e000)
[    1.429066] [drm] Memory usable by graphics device = 2048M

6. Wyczyść dzienniki bufora dmesg

Tak, w razie potrzeby możemy wyczyścić dzienniki dmesg za pomocą poniższego polecenia. Spowoduje to wyczyszczenie dzienników komunikatów bufora pierścieniowego dmesg do czasu wykonania poniższego polecenia. Nadal możesz przeglądać logi zapisane w plikach „/var/log/dmesg”. Jeśli podłączysz dowolne urządzenie, wygenerowane zostanie wyjście dmesg.

[[email  log]# dmesg -c

7. Monitorowanie dmesg w czasie rzeczywistym

Niektóre dystrybucje umożliwiają również wykonanie polecenia „tail -f /var/log/dmesg” w celu monitorowania dmesg w czasie rzeczywistym.

[[email  log]# watch "dmesg | tail -20"

Wniosek: Polecenie dmesg jest przydatne, ponieważ dmesg rejestruje wszystkie zmiany systemowe dokonane lub mające miejsce w czasie rzeczywistym. Jak zawsze możesz użyć man dmesg, aby uzyskać więcej informacji.