Ինչպե՞ս օգտագործել dmesg Linux հրամանը:


dmesg հրամանը հզոր գործիք է Linux հրամանի տողի զինանոցում: Այն նշանակում է «ախտորոշիչ հաղորդագրություն» և օգտագործվում է միջուկի օղակի բուֆերից/դեպի տվյալները կարդալու և գրելու համար, տվյալների կառուցվածք, որը պարունակում է հաղորդագրություններ համակարգի սարքաշարի, միջուկի կամ վարորդի հաղորդագրությունների մասին: Այս հոդվածը կուղղորդի ձեզ dmesg հրամանի օգտագործման մեջ՝ լրացնելով օրինակներով և դրանց արդյունքներով:

Հիմնական օգտագործումը

Dmesg հրամանի ամենահիմնական օգտագործումը պարզապես մուտքագրել dmesg ձեր տերմինալում և սեղմել enter: Սա կցուցադրի ձեր տերմինալի միջուկի բոլոր հաղորդագրությունները:

$ dmesg

Արդյունքը կլինի հաղորդագրությունների երկար ցուցակ, որը կարող է ճնշող լինել: Ելքի յուրաքանչյուր տող ներկայացնում է միջուկից ստացված մեկ հաղորդագրություն, և դրանք ցուցադրվում են այն կարգով, որով գրանցվել են:

Ելքի զտում

Հաշվի առնելով հաղորդագրությունների ծավալը, հաճախ օգտակար է զտել ելքը: Հատուկ տերմիններ որոնելու համար կարող եք օգտագործել grep հրամանը dmesg-ի հետ համատեղ: Օրինակ, եթե ցանկանում եք գտնել USB սարքերի հետ կապված հաղորդագրություններ, կարող եք օգտագործել −

$ dmesg | grep −i usb

Սա կցուցադրի «usb» տերմինը պարունակող բոլոր տողերը՝ անկախ գործից:

Արդյունքների ցուցադրում ժամանակային դրոշմանիշներով

Լռելյայնորեն, dmesg-ը չի ցուցադրում հաղորդագրությունների ժամանակային դրոշմանիշերը: Այնուամենայնիվ, դուք կարող եք օգտագործել −T տարբերակը՝ մարդկանց կողմից ընթեռնելի ժամանակի դրոշմանիշները ցուցադրելու համար:

$ dmesg −T

Արդյունքը այժմ կներառի յուրաքանչյուր հաղորդագրության ամսաթիվը և ժամը:

Ելքային գծերի քանակի սահմանափակում

Եթե ցանկանում եք սահմանափակել ցուցադրվող տողերի քանակը, կարող եք օգտագործել -n տարբերակը, որին հաջորդում է ցուցադրվող տողերի քանակը: Օրինակ, վերջին 10 տողերը ցուցադրելու համար կարող եք օգտագործել −

$ dmesg -n 10

Որոշակի մակարդակի միջուկի հաղորդագրությունների ցուցադրում

Միջուկի հաղորդագրությունները դասակարգվում են ութ մակարդակների՝ 0-ից (արտակարգ իրավիճակներ) մինչև 7 (վրիպազերծում): Որոշակի մակարդակի հաղորդագրություններ ցուցադրելու համար կարող եք օգտագործել -l տարբերակը, որին հաջորդում է մակարդակը: Օրինակ, միայն արտակարգ հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg -l emerg

dmesg տեղեկամատյանների մաքրում

dmesg տեղեկամատյանները կարելի է մաքրել՝ օգտագործելով -c տարբերակը: Սա կարող է օգտակար լինել, եթե ցանկանում եք ջնջել հին հաղորդագրությունները, նախքան գործարկելը, որը ակնկալում եք ստեղծել միջուկի հաղորդագրություններ:

$ sudo dmesg -c

Խնդրում ենք նկատի ունենալ, որ այս հրամանը պահանջում է արմատային արտոնություններ:

Եկեք ավելի խորանանք dmesg հրամանի մեջ ավելի շատ օրինակներով և դրանց համապատասխան ելքերով:

Օրինակ 1. Սարքավորման հաղորդագրությունների ցուցադրում

Եթե ցանկանում եք ցուցադրել ձեր սարքավորման հետ կապված հաղորդագրությունները, կարող եք օգտագործել dmesg հրամանը grep հրամանով: Օրինակ, ձեր Ethernet ադապտերին առնչվող հաղորդագրություններ ցուցադրելու համար կարող եք օգտագործել −

$ dmesg | grep -i eth

Արդյունքը կարող է նման բան թվալ -

[    2.687402] r8169 0000:02:00.0 eth0: RTL8168h/8111h, 00:e0:4c:68:22:2a, XID 541, IRQ 47
[    2.687405] r8169 0000:02:00.0 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[    3.056728] r8169 0000:02:00.0 eth0: link down
[    3.056790] r8169 0000:02:00.0 eth0: link down
[    3.056891] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready

Օրինակ 2. Boot Messages-ի ցուցադրում

Բեռնման գործընթացի հետ կապված հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg | grep -i boot

Արդյունքը կարող է նման բան թվալ -

[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-26-generic root=UUID=5a598e63-8b76-4619-9182-2b7e7b0f0b1c ro quiet splash vt.handoff=7
[    0.000000] [Firmware Bug]: ACPI MWAIT C-state 0x0 not supported by HW (0x0)
[    0.000000] ACPI: \_PR_.CPU0: _OSC native thermal LVT Acked
[    0.232991] ACPI: Added _OSI(Linux-Dell-Video)
[    0.232991] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)
[    0.232991] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)

Օրինակ 3. Հատուկ սարքի հետ կապված հաղորդագրությունների ցուցադրում

Եթե ցանկանում եք ցուցադրել կոնկրետ սարքի հետ կապված հաղորդագրություններ, կարող եք օգտագործել սարքի անունը grep հրամանով: Օրինակ՝ sda սարքի հետ կապված հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg | grep -i sda

Արդյունքը կարող է նման բան թվալ -

[    1.684723] sd 0:0:0:0: [sda] 500118192 512-byte logical blocks: (256 GB/238 GiB)
[    1.684727] sd 0:0:0:0: [sda] Write Protect is off
[    1.684729] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    1.684743] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    1.685918]  sda: sda1 sda2 sda3
[    1.686329] sd 0:0:0:0: [sda] Attached SCSI disk

Օրինակ 4. Ցուցադրել հաղորդագրությունները վերջին բեռնումից

Վերջին բեռնումից հաղորդագրություններ ցուցադրելու համար կարող եք օգտագործել -b տարբերակը, որին հաջորդում է 1 −

$ dmesg -b 1

Արդյունքը նման կլինի լռելյայն dmesg ելքին, բայց այն կներառի միայն հաղորդագրություններ վերջին բեռնումից:

Օրինակ 5. Հիշողության հետ կապված հաղորդագրությունների ցուցադրում

Հիշողության հետ կապված հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg | grep -i memory

Արդյունքը կարող է նման բան թվալ -

[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007b9fdfff] usable
[    0.000000] BIOS-e820: [mem 0x000000007b9fe000-0x000000007ba53fff] ACPI NVS

Հիշեք, որ այս հրամանների իրական արդյունքը կտարբերվի՝ կախված ձեր համակարգի կազմաձևից և ընթացիկ վիճակից:

Օրինակ 6. Ցուցադրել CPU-ի հետ կապված հաղորդագրությունները

Պրոցեսորի հետ կապված հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg | grep -i cpu

Արդյունքը կարող է նման բան թվալ -

[    0.000000] smpboot: CPU0: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (family: 0x6, model: 0x9e, stepping: 0x9)
[    0.000000] Performance Events: PEBS fmt3+, Skylake events, 32-deep LBR, full-width counters, Intel PMU driver.
[    0.000000] ... version:                4
[    0.000000] ... bit width:              48
[    0.000000] ... generic registers:      4
[    0.000000] ... value mask:             0000ffffffffffff
[    0.000000] ... max period:             00007fffffffffff
[    0.000000] ... fixed-purpose events:   3
[    0.000000] ... event mask:             000000070000000f

Օրինակ 7. Ցուցադրել հաղորդագրություններ, որոնք առնչվում են որոշակի ժամկետի

Եթե ցանկանում եք ցուցադրել հաղորդագրություններ որոշակի ժամանակային շրջանակից, կարող եք օգտագործել -T տարբերակը grep հրամանով: Օրինակ, մայիսի 30-ից սկսած հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg -T | grep 'May 30'

Արդյունքը կներառի մայիսի 30-ից սկսած բոլոր հաղորդագրությունները:

Օրինակ 8. Սկավառակի սխալների հետ կապված հաղորդագրությունների ցուցադրում

Սկավառակի սխալների հետ կապված հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg | grep -i error

Արդյունքը կարող է նման բան թվալ -

[    2.687402] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[    3.056728] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[    3.056790] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT5._GTF, AE_NOT_FOUND (20170831/psparse-550)
[    3.056891] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[    3.056891] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT5._GTF, AE_NOT_FOUND (20170831/psparse-550)

Օրինակ 9. Ցանցի հետ կապված հաղորդագրությունների ցուցադրում

Ցանցին առնչվող հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg | grep -i net

Արդյունքը կարող է նման բան թվալ -

[    0.000000] NET: Registered protocol family 16
[    0.000000] audit: initializing netlink subsys (disabled)
[    0.000000] audit: type=2000 audit(1622470186.040:1): state=initialized audit_enabled=0 res=1
[    0.000000] workingset: timestamp_bits=46 max_order=20 bucket_order=0
[    0.000000] NFS: Registering theid_resolver key type
[    0.000000] Key type id_resolver registered
[    0.000000] Key type id_legacy registered
[    0.000000] NET: Registered protocol family 38
[    0.000000] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244)
[    0.000000] io scheduler mq-deadline registered
[    0.000000] io scheduler kyber registered

Օրինակ 10. Ֆայլային համակարգի հետ կապված հաղորդագրությունների ցուցադրում

Ֆայլային համակարգի հետ կապված հաղորդագրությունները ցուցադրելու համար կարող եք օգտագործել −

$ dmesg | grep -i fs

Արդյունքը կարող է նման բան թվալ -

[    0.000000] Freeing unused kernel image memory: 2028K
[    0.000000] Write protecting the kernel read-only data: 20480k
[    0.000000] Freeing unused kernel image memory: 1984K
[    0.000000] Freeing unused kernel image memory: 1836K
[    0.000000] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[    0.000000] rodata_test: all tests were successful
[    0.000000] x86/mm: Checking user space page tables
[    0.000000] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[    0.000000] Run /init as init process
[    0.000000]   with arguments:
[    0.000000]     /init
[    0.000000]   with environment:
[    0.000000]     HOME=/
[    0.000000]     TERM=linux
[    0.000000]     BOOT_IMAGE=/boot/vmlinuz-5.4.0-26-generic

Հիշեք, որ այս հրամանների իրական արդյունքը կտարբերվի՝ կախված ձեր համակարգի կազմաձևից և ընթացիկ վիճակից:

Եզրակացություն

dmesg հրամանը հզոր գործիք է համակարգի խնդիրների ախտորոշման և վերացման համար: Այն տրամադրում է համակարգի գործունեության մասին հարուստ տեղեկատվություն, և ճիշտ ընտրանքների դեպքում դուք կարող եք զտել և ձևաչափել այս տեղեկատվությունը ձեր կարիքներին համապատասխան: Ինչպես ցանկացած հրամանի դեպքում, դուք կարող եք օգտագործել man dmesg ձեռնարկը ցուցադրելու և դրա օգտագործման մասին ավելին իմանալու համար: