اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

7 دستور از dmesg برای Troubleshooting و جمع آوری اطلاعات از سیستم های لینوکسی

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    7 دستور از dmesg برای Troubleshooting و جمع آوری اطلاعات از سیستم های لینوکسی

    دستور dmesg پیام های از kernel ring buffer را نمایش میدهد. یک سیستم از چندین runlevel میگذرد و ما میتوانیم اطلاعات زیادی مانند معماری سیستم، cpu، دیوایس های متصل شده، ram و غیره به دست بیاوریم. زمانی که کامپیوتر بوت میشود یک کرنل (هسته یک سیستم عامل) درون مموری لود میشود در طول این زمان تعدادی از پیام ها نمایش داده میشوند که ما میتوانیم سخت افزارهای شناسایی شده توسط کرنل را مشاهده کنیم.

    دستور dmesg


    همچنین توصیه میشود مطالعه کنید :

    10 دستور مفید برای جمع آوری اطلاعات سیستم و سخت افزار در لینوکس


    این پیغام ها به منظور شناسایی مواردی از مشکلات در دیوایس و یا سایر بخش ها بسیار مفید هستند. زمانی که ما سخت افزاری را متصل و یا جدا میکنیم روی سیستم با کمک دستور dmesg میتوانیم اطلاعات شناسایی و یا قطع شدن سخت افزار را به سرعت دریابیم. دستور dmesg روی اکثر سیستم عاملی های unix و linux موجود میباشد.

    حالا مروری داشته باشیم روی مثال های عملی از یکی از مشهورترین ابزار لینوکسی به نام dmesg

    ساختار دقیق دستور dmesg همانند دستور زیر میباشد :
    کد PHP:
    # dmseg [options...] 

    1 - لیست تمامی درایورهای لود شده در kernel :

    ما میتوانیم ابزاری مانند 'more' , 'tail' , 'less' یا 'grep' (ابزار مفید برای کار کردن با متن) را به همراه دستور dmesg استفاده کنیم.
    از آنجایی که خروجی لاگ dmesg در یک صفحه جا نمیشود استفاده از دستور های more یا less که پایپ '|' شده به دستور dmesg هستند میتوان لاگ ها را صفحه به صفحه نمایش داد :
    کد PHP:
    [root@linux-zone ~]# dmesg | more
    [root@linux-zone ~]# dmesg | less 
    نمونه خروجی :
    کد PHP:
    [    0.000000Initializing cgroup subsys cpuset
    [    0.000000Initializing cgroup subsys cpu
    [    0.000000Initializing cgroup subsys cpuacct
    [    0.000000Linux 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.000000KERNEL 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.000000e820BIOS-provided physical RAM map:
    [    
    0.000000BIOS-e820: [mem 0x0000000000000000-0x000000000009fbffusable
    [    0.000000BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffffreserved
    [    0.000000BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bffusable
    [    0.000000BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbffACPI NVS
    [    0.000000BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebffACPI data
    [    0.000000BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffffreserved
    [    0.000000BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffffreserved
    [    0.000000BIOS-e820: [mem 0x00000000fec00000-0x00000000fed003ffreserved
    [    0.000000BIOS-e820: [mem 0x00000000fed20000-0x00000000fed9ffffreserved
    [    0.000000BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffffreserved
    [    0.000000BIOS-e820: [mem 0x00000000ffb00000-0x00000000ffffffffreserved
    [    0.000000NX (Execute Disableprotectionactive
    ..... 

    همچنین پست زیر را مطالعه بفرمایید :

    مدیریت فایل های لینوکس با استفاده از دستور های head , tail و cat



    2 - لیست تمامی دیوایس های دیتکت شده :

    برای پیدا کردن هارد دیسک هایی که توسط کرنل دیتکت شده اند شما میتوانید عبارت 'sda' را به همراه دستور grep سرچ کنید :
    کد PHP:
    [root@linux-zone ~]# dmesg | grep sda

    [    1.280971sd 2:0:0:0: [sda488281250 512-byte logical blocks: (250 GB/232 GiB)
    [    
    1.281014sd 2:0:0:0: [sdaWrite Protect is off
    [    1.281016sd 2:0:0:0: [sdaMode Sense00 3a 00 00
    [    1.281039sd 2:0:0:0: [sdaWrite cacheenabledread cacheenableddoesn'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) 
    توجه : sda در حقیقت اولین هارد درایو SATA میباشد.sdb دومین هارد درایو SATA میباشد و sdc سومین هارد درایو میباشد و ....
    برای هارد درایوهای IDE از hda یا hdb و ... استفاده میشود.



    3 - نمایش تنها 20 خط اول از خروجی دستور dmesg :

    استفاده از دستور head به همراه dmesg خطوط ابتدایی را نمایش خواهد داد به طور مثال دستور زیر تنها 20 خط از ابتدای log ها را نمایش میدهد.
    کد PHP:
    [root@linux-zone ~]# dmesg | head  -20

    [    0.000000Initializing cgroup subsys cpuset
    [    0.000000Initializing cgroup subsys cpu
    [    0.000000Initializing cgroup subsys cpuacct
    [    0.000000Linux 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.000000KERNEL 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.000000e820BIOS-provided physical RAM map:
    [    
    0.000000BIOS-e820: [mem 0x0000000000000000-0x000000000009fbffusable
    [    0.000000BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffffreserved
    [    0.000000BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bffusable
    [    0.000000BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbffACPI NVS
    [    0.000000BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebffACPI data
    [    0.000000BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffffreserved 


    4 - نمایش تنها 20 خط از آخر خروجی dmesg :

    دستور 'tail' به همراه dmesg خطوط آخر log ها را نمایش میدهد. استفاده از آن در مواردی که 'removable device' را به سیستم وصل میکنیم بسیار مفید است. دستور زیر 20 خط آخر از لاگ dmesg را نمایش میدهد :
    کد PHP:
    [root@linux-zone ~]# dmesg | tail -20

    parport0PC-style at 0x378irq 7 [PCSPP,TRISTATE]
    ppdevuser-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-servicedelaying service auditd
    ip_tables
    : (C2000-2006 Netfilter Core Team
    nf_conntrack version 0.5.0 
    (16384 buckets65536 max)
    NETRegistered protocol family 10
    lo
    Disabled Privacy Extensions
    e1000
    eth0 NIC Link is Up 1000 Mbps Full DuplexFlow ControlNone
    Slow work thread pool
    Starting up
    Slow work thread pool
    Ready
    FS
    -CacheLoaded
    CacheFiles
    Loaded
    CacheFiles
    Security denies permission to nominate security contexterror -95
    eth0
    no IPv6 routers present
    type
    =1305 audit(1398268784.593:18630): audit_enabled=0 old=1 auid=4294967295 ses=4294967295 res=1
    readahead
    -collectorstarting delayed service auditd
    readahead
    -collectorsorting
    readahead
    -collectorfinished 


    5 - جستجوی دیوایس دیتکت شده یا string خاص :

    جستجوی یک string خاص به دلیل طول خروجی dmesg کار بسیار سختی است بنابراین خطوط را که شامل string های مانند usb , dma , tty و memory و غیره هستند فیلتر میکنیم. گزینه i- در دستور grep به منظور نادیده گرفتن حروف کوچیک و بزرگ میباشد :
    کد PHP:
    [root@linux-zone log]# dmesg | grep -i usb
    [root@linux-zone log]# dmesg | grep -i dma
    [root@linux-zone log]# dmesg | grep -i tty
    [root@linux-zone log]# dmesg | grep -i memory 
    خروجی دستور :
    کد PHP:
    [    0.000000Scanning 1 areas for low memory corruption
    [    0.000000initial memory mapped: [mem 0x00000000-0x01ffffff]
    [    
    0.000000Base memory trampoline at [c009b0009b000 size 16384
    [    0.000000init_memory_mapping: [mem 0x00000000-0x000fffff]
    [    
    0.000000init_memory_mapping: [mem 0x37800000-0x379fffff]
    [    
    0.000000init_memory_mapping: [mem 0x34000000-0x377fffff]
    [    
    0.000000init_memory_mapping: [mem 0x00100000-0x33ffffff]
    [    
    0.000000init_memory_mapping: [mem 0x37a00000-0x37bfdfff]
    [    
    0.000000Early memory node ranges
    [    0.000000PMRegistered nosave memory: [mem 0x0009f000-0x000effff]
    [    
    0.000000PMRegistered nosave memory: [mem 0x000f0000-0x000fffff]
    [    
    0.000000please 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 - پاک کردن لاگ های بافر dmesg :

    بله ما میتوانیم لاگ های dmesg را در صورت نیاز پاک کنیم. دستور زیر لاگ های ring buffer در dmesg تا زمانی که شما آن را اجرا کنید پاک خواهد کرد. البته هنوز شما میتوانید لاگ های ذخیره شده در فایل های /var/log/dmesg را مشاهده کنید. اگر شما هر دیوایسی را متصل کنید خروجی dmesg ایجاد خواهد گردید :
    کد PHP:
    [root@linux-zone log]# dmesg -c 


    7 - مانیتورینگ dmesg به صورت Real Time :

    در بعضی از توضیع های لینوکسی میتوان از دستور tail -f /var/log/dmesg برای مانیتورینگ real time دستور dmesg استفاده کرد :
    کد PHP:
    [root@linux-zone log]# watch "dmesg | tail -20" 

    نتیجه گیری :

    دستور dmesg از آنجایی که تمامی تغییرات انجام شده در سیستم و یا در حال وقوع به صورت real time را رکورد میکند ابزاری بسیار مفید به شمار می آید. با استفاده از man dmesg میتوانید اطلاعات بیشتری از این دستور به دست آورید.

    موفق باشید
    محمد هابیلی
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 11-01-2021, 11:58 AM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X