در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

دایرکتوری های proc ، sys و dev و مفاهیم udev ، sysfs و dbus

سلام به همگی دوستان TOSINSO امروز میخایم متوجه بشیم که سیستم عامل لینوکس چجوری با تجهیزات ارتباط برقرار می کنه و نحوه کار کردن این سیستم عامل با Device ها یا همون تجهیزات چجوری هست . خوب زمانیکه صحبت از لایه سخت افزار در لینوکس هست ما با مجموعه عجیب و غریبی از کلمات روبرو هستیم کلماتی مثل procfs ، sysfs ، dbus و udev که طبیعتا خیلی برای شما آشنا نیستند ، البته به امید خدا در انتهای این مقاله با این مفاهیم به خوبی آشنا می شید اما یکی از نکاتی که خیلی این میون ممکنه برای شما ابهام برانگیز باشه تفاوت بین sysfs و procfs هست که بعضا ممکن هست خیلی عجیب و غریب به نظر برسه ، بنابراین اول در این مقاله ما به بررسی ماهیت procfs و sysfs و تفاوت بین اونها می پردازیم و بعد به سراغ udev و dbus و نحوه استفاده از اونها در لینوکس می رسیم.

تنظیمات سخت افزار در سیستم عامل لینوکس

دایرکتوری proc یا procfs چیست؟

خوب اول از همه به سراغ procfs میریم ، این مفهوم خیلی خیلی قدیمی هست و برمیگرده به سالهای 1990 و همون حدودها بنابراین یه مقدار دیدتون رو قدیمیتر کنید ، خوب در اون وهله زمانی ما مجبور بودیم دونه دونه پردازش ها یا Process های سیستم رو مدیریت کنیم ، خوب قبل از اینکه ادامه بدیم یک یادآوری هم بکنیم ، همه چیز در سیستم عامل لینوکس و خانواده یونیکس در قالب فایل هست و procfs هم همین هست یعنی یک فایل هست که داخلش مدیریت پردازش های CPU ما انجام میشه ، وقتی یک دستگاه یه سیستم ما متصل میشه داخل این فایل محتوایی قرار می گیره که باعث میشه ما بتونیم پردازش های مربوط به اون سخت افزار رو انجام بدیم ، خوب با توجه به حرف خودمون که همه چیز در قالب فایل ذخیره میشه بنابراین محتویات sysfs هم باید داخل یک فایل و یک فولدر قرار بگیرند که این محتویات در دایرکتوری به نام proc// در سیستم عامل لینوکس وجود داره ، توجه کنید که proc// یک فایل سیستم هست .

در تعاریف یونیکس هر فایلی که وجود داره برای خودش یک محل ایجاد شدن داره و بالاخره یه جایی ذخیره شده روی سیستم بنابراین فایل سیستم بشه میگن ، بنابراین اطلاعات مربوط به پردازش های ما هم در دایرکتوری به نام proc// در قالب file system و به عنوان procfs یا processes file system نگهداری میشه ، اما نکته در اینجاست که این دایرکتوری ها واقعی نیستند و بصورت virtual directory استفاده میشن ، خوب یک مثال می زنیم وقتی شما یک process در سیستم ایجاد می کنید این process برای خودش یک سری اطلاعات داره ، اطلاعاتی از قبیل میزان CPU و RAM مورد استفاده ، میزان uptime ای که داره و خیلی دیگه از اینجور اطلاعات که همگی اونها داخل virtual directory های proc قرار میگرند و نرم افزارها و سیستم عامل از طریق این فایل ها می تونن به اطلاعات پردازش مورد نظر دسترسی پیدا کنند.

خوب این اطلاعات برای برنامه نویس ها و kernel developer ها بسیار جالب بود ، در واقع هر اطلاعاتی که نیاز داشتند در خصوص یک نرم افزار یا یک process داشته باشند داخل این دایرکتوری وجود داشت پس با خودشون یک فکر کردن ، گفتن که این قابلیت که اطلاعات مربوط به پردازش ها رو یکجا داشته باشیم خیلی خیلی باحاله ، چرا ما چنین چیزی رو برای همه سیستم نداشته باشیم ؟ مثلا CPU و RAM و حتی هارد دیسک و ... اینجوری کلی اطلاعات در خصوص سیستم داریم که برامون مفید هست. سالها از proc استفاده می شد و کلی اطلاعات مربوط به سایر تجهیزات هم داخل این دایرکتوری شروع به ذخیره سازی کرد تا اینکه kernel 2.5 لینوکس معرفی شد.

دایرکتوری sys یا sysfs چیست ؟

خوب در این نسخه از هسته سیستم عامل لینوکس خیلی از کارهایی که مربوط به نگهداری اطلاعات فایل های سیستم و تجهیزات بود دیگه از دایرکتوری proc جدا شد و برای خودش یک virtual directory جدید شد ، این virtual directory جدید به عنوان sysfs معرفی شد و محتویات اطلاعات خودش رو داخل دایرکتوری به نام sysfs ذخیره می کرد ، نکته مهم در اینجاست که sysfs برخلاف proc اطلاعات خودش رو داخل هارد دیسک ذخیره نمی کرد بلکه داخل حافظه RAM همه اطلاعات رو نگهداری می کرد ، این یعنی با restart شدن سیستم اطلاعات موجود در sysfs هم از بین میره ، اما نکته جالب و مهمتر اینکه این دایرکتوری بصورت ویژه و اختصاصی برای نگهداری اطلاعات system استفاده میشد و به همین دلیل sysfs نامگذاری شد ، در واقع ما اطلاعات system ای رو از proc گرفتیم و وارد sysfs کردیم .

اطلاعاتی مثل اطلاعات سخت افزارها و تجهیزاتی که به سیستم متصل میشن همه و همه داخل این فایل سیستم قرار می گیرند. برای مثال شما اگر یک دستگاه رو به سیستم متصل کنید بلافاصله اطلاعات مربوط به نوع دستگاه و امکاناتش و تنظیمات و پیکربندی های دستگاه داخل این دایرکتوری قرار می گیره ، حتی آدرس های حافظه مورد استفاده و حتی IRQ هایی که قرار هست استفاده بکنه هم داخل این دایرکتوری ذخیره میشه ، دقت کنید که تفاوت اصلی proc و sys در این هست که sys جدیدتر هست و استانداردتر داره اطلاعات رو مدیریت می کنه و دسترسی به اطلاعات از روش های جدیدتری انجام میشه .

اما دقت کنید که دلیلی نیست که دیگه از proc استفاده نشه چون همچنان اطلاعات قدیمی دستگاه ها داخل prco وجود دارند و ازش همچنان استفاده میشه ، اما کاربران و به ویژه توسعه دهندگان لینوکس علاقه زیادی به پوشه sysfs به جای proc دارن ، چون راحت تر و سریعتر و استاندارد تر از proc هست . خیلی خلاصه بگم proc داداش بزرگه هست و sys داداش کوچیکه ، داداش کوچیکه جوون هست و داداش بزرگه قدیمی فامیل ، ما هنوز با داداش بزرگه کار داریم اما داداش کوچیکه بیشتر عزیزه تو فامیل چون جدیده ، دقت کنید sysfs بصورت ویژه ویژه اطلاعات device ها رو داخل خودش نگهداری می کنه و سازماندهی تر شده است.

دایرکتوری dev یا udev چیست ؟

با معرفی شدن Linux Kernel 2.6 یک مفهوم جدید به مدیریت سخت افزارها اضافه شد و آن udev بود ، چیزی که شما در سیستم عامل لینوکس در قالب دایرکتوری به نام dev// می شناسید ، حتما دقت کرده اید که زمانیکه برخی device ها در سیستم را مشاهده می کنید به شکل dev//sda// یا dev//video// یا dev//sdb// . ... نمایش داده می شوند ، این دقیقا همان مفهومی است که به هسته سیستم عامل لینوکس در نسخه 2.6 اضافه شد ، اما نکته در اینجاست که udev از کجا متوجه می شود که چه چیزی را باید در دایرکتوری dev قرار بدهد ؟ در واقع udev اطلاعاتی که قرار است در دایرکتوری dev// قرار بدهد را از دایرکتوری sys// دریافت می کند.

الان کمی توجه کنید : دقت کرده اید که نحوه نمایش تجهیزات در دایرکتوری dev// به نسبت چقدر ساده و قابل فهم است ؟ این واضح بودن به این دلیل است که اطلاعات این دایرکتوری از یک ساختار استاندارد و ساده ای به نام sysfs دریافت شده است و ساده تر قابل فهم است.حتما اگر یک مقدار با لینوکس کار کرده باشید اینجا به این نتیجه می رسید که شما اشتباه می کنید ، دایرکتوری dev// سالها قبل از ارائه linux Kernel 2.6 وجود داشته است و چیز جدیدی نیست ، حق کاملا با شما است اما نکته در اینجاست که قبلا udev ای در کار نبود ، تمامی محتویات dev// قبل از معرفی udev فقط یک سری لینک static سخت افزار بود و برای هر بار بروز رسانی آن یکبار بایستی سیستم عامل restart می شد. مهمترین کاری که udev انجام داد dynamic کردن لینک های device ها بود که اضافه و حذف کردن آنها را به سادگی میسر کرد.

dbus چیست ؟

اما آخرین مبحث از این مقاله آموزشی : کاربرد dbus چی هست ؟ برای اینکه پاسخ این سئوال رو پیدا کنید از خودتون یک سئوال بپرسید ، آیا همه نرم افزارها از جمله سیستم عامل و application های کاربردی سیستم باید مستقیما با دایرکتوری های dev یا proc یا sys کار کنن ؟ طبیعتا خیر نیازی نیست ، این بین ما میایم یک واسط قرار میدیم که نقش دلال رو داره و واسطه بین همه این مجموعه ها و نرم افزارها هست ، الان فرض کنید که یک سخت افزار به سیستم شما اضافه میشه و شما از یک دسکتاپ به نام KDE استفاده می کنید ، این dbus هست که میره اطلاعات مربوط به سخت افزار رو از لایه های پایین دریافت می کنه و سیگنال اینکار رو به سمت Desktop Manager میفرسته و شما از محیط گرافیکی متوجه میشید که خوب یک سخت افزار جدید به سیستم اضافه شده یا حذف شده ، هر موقع اسم dbus رو شنیدید دقیقا یاد یک اتوبوس بیوفتید که قرار هست مسافرانش رو به مقصد برسونه و به محل کار مسافراش هم میگه کاری نداشته باشید مسافراتون از کجا میان شما باهاشون کار داشتید من آوردمشون ، کاری نداشته باشید هم می برمشون . امیدوارم مورد توجه شما قرار گرفته باشد. ITPRO باشید

نویسنده : محمد نصیری

منبع : جزیره لینوکس و سیستم های متن باز وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد

#کاربرد_دایرکتوری_sys_در_لینوکس #dbus_چیست #کاربرد_دایرکتوری_proc_در_لینوکس #sysfs_چیست #معرفی_دایرکتوری_های_پیشفرض_لینوکس #کاربرد_دایرکتوری_dev_در_لینوکس #udev_چیست #کاربرد_udev_در_لینوکس #procfs_چیست #hal_چه_کاری_در_سیستم_عامل_می_کند
12 نظر
AZARAKHSH

ممنونم

واقعا عالی و کاربردی بود.یعنی یه جورایی ادم هرچی بیشتر با دنیای سیستمهای متن باز و مخصوصا لینوکس کار میکنه بیشتر عاشقش میشه و این عطش یادگیریش به نظر من تمومی نداره و همینطور باید رفت و رفت و رفت...

ممنون از لطفتون

حسن مقدم

سلام

ممنون مهندس مثل همیشه عالی بود

بیات

خب به زوبونی دیگه اماهمون مطالب باالا

این udev کارش اینه که به صورت آنی و خودجوش اگه سخت افزاری به سیستم وصل بشه روشناسایی بکنه و در /dev قراربده

اما HAL کارش اینه که اطلاعتی که udev به وجود میاره روبه صورت فایل xml دربیاره

Dbus هم برای ارتباط پروسس های داخلی به کارمیره

udev به sysfs وابسته است و همین sysfs هست که باعث میشه وسایل در فضای کاری کاربران قابل دیدن بشه

دوستان udev به صورت لحظه ای لیست سخت افزارهای جدید رو میسازه این خیلی مهمه دربالا هم گفته شده

ازاینجا اخرین ورژن udev رودانلود کنید

یک چیزم درباره مشکلات /dev در گذشته بگیم در پیش از udev در اون زمان

سیسم عامل هنگام بوت شدم همه ی سخت افزارها رو با مستر واسلیو میشناخت

فرض کنید مادوتا هارددیسک داریم.....A , B

لینوکس یکیشون رو مستر ودیگری رو برده (اسلیو) مینامید واینجوری نمایششون میداد

devhda devhdb.

خب اگه ما دیوایس هاروجابه جامیکردیم شناخت درست هارد دیسک سخت میشدچیزی که به دیوایس های استاتیک مربوط میشد این شرایط وقتی گروهی از هاردیسکهاروبه سیستم اضافه میکردیم بدتر میشد اما این udev قصه ی ما چیکارمیکنه؟

میاد یک لینک های سمبولیک ثابت و ماندگاری برای هر هارد به وجودمیاره.... :)

نام های ثابت وماندگار برای شناسایی دربلندمدت وبه صورت پایدار کمک زیادی به ما میکنه...

$ ls -lR /dev/disk/
/dev/disk/by-id:
lrwxrwxrwx 1 root root 9 Jul 4 06:48 scsi-SATA_WDC_WD800JD-75M_WD-WMAM9UT48593 -> ../../sda 
lrwxrwxrwx 1 root root 10 Jul 4 06:48 scsi-SATA_WDC_WD800JD-75M_WD-WMAM9UT48593-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 4 06:48 scsi-SATA_WDC_WD800JD-75M_WD-WMAM9UT48593-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jul 4 06:48 scsi-SATA_WDC_WD800JD-75M_WD-WMAM9UT48593-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 Jul 4 06:48 scsi-SATA_WDC_WD800JD-75M_WD-WMAM9UT48593-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 Jul 4 06:48 scsi-SATA_WDC_WD800JD-75M_WD-WMAM9UT48593-part5 -> ../../sda5
lrwxrwxrwx 1 root root 10 Jul 4 06:48 scsi-SATA_WDC_WD800JD-75M_WD-WMAM9UT48593-part6 -> ../../sda6
lrwxrwxrwx 1 root root 10 Jul 4 06:48 scsi-SATA_WDC_WD800JD-75M_WD-WMAM9UT48593-part7 -> ../../sda7
/dev/disk/by-label:
lrwxrwxrwx 1 root root 10 Jul 4 06:48 1 -> ../../sda6
lrwxrwxrwx 1 root root 10 Jul 4 06:48 boot1 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jul 4 06:48 project -> ../../sda3
lrwxrwxrwx 1 root root 10 Jul 4 06:48 SWAP-sda7 -> ../../sda7
/dev/disk/by-path:
lrwxrwxrwx 1 root root 9 Jul 4 06:48 pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Jul 4 06:48 pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 4 06:48 pci-0000:00:1f.2-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jul 4 06:48 pci-0000:00:1f.2-scsi-0:0:0:0-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 Jul 4 06:48 pci-0000:00:1f.2-scsi-0:0:0:0-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 Jul 4 06:48 pci-0000:00:1f.2-scsi-0:0:0:0-part5 -> ../../sda5
lrwxrwxrwx 1 root root 10 Jul 4 06:48 pci-0000:00:1f.2-scsi-0:0:0:0-part6 -> ../../sda6
lrwxrwxrwx 1 root root 10 Jul 4 06:48 pci-0000:00:1f.2-scsi-0:0:0:0-part7 -> ../../sda7
/dev/disk/by-uuid:
lrwxrwxrwx 1 root root 10 Jul 4 06:48 18283DC6283DA422 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 4 06:48 25a4068c-e84a-44ac-85e6-461b064d08cd -> ../../sda6
lrwxrwxrwx 1 root root 10 Jul 4 06:48 3ea7cf15-511b-407a-a56b-c6bfa046fd9f -> ../../sda5
lrwxrwxrwx 1 root root 10 Jul 4 06:48 8878a0a4-604e-4ddf-b62c-637c4fa84d3f -> ../../sda2
lrwxrwxrwx 1 root root 10 Jul 4 06:48 e50bcd6d-61ea-4b05-81a8-3cbe17ad6674 -> ../../sda3

دیگه حوصله نداشتم باقیشم نکته برداری کنم اگه خاستید بدونید برید اینجا

ازاینجامیتونید متن اصلی روبخونید البته من نکات مهمش رواینجا اوردم

بیات

چندتاعکس هم میزارم دیگه توضیح نمیدم اماخودتون نگاش کنید تابهتر بفهمید.

وب سایت توسینسو

وب سایت توسینسو

وب سایت توسینسو

وب سایت توسینسو

بیات

دلم نمیاد این دوتاعکسم نزارم

وب سایت توسینسو

وب سایت توسینسو

فرهاد پریدار

سلام و وقت بخیر

میدونم درگیر تغییرات قالب و سایت هستید ولی سوالی داشتم

فکر میکنم پارگراف اول که نوشتید :

"بنابراین محتویات sysfs هم باید داخل یک فایل و یک فولدر قرار بگیرند"

یهو sysfs از کجا اومد؟ اشتباه ننوشتید؟ چون بحث راجع به procfs بود

محمد نصیری

فکر می کنم توضیح دادم یهو نیومده !! جاییش اشتباه نیست کجاش مبهم هست ؟

امیرحسین کریم پور

فرهاد جان procfs از sysfs قدیمی تر هست و به اندازه sysfs ساختاریافته نیست و امروزه بیشتر از sysfs استفاده میشه و کار کردن باهاش هم راحت تره.

علی  محبوبی نژاد

proc هم در رم ذخیره میکنه و این مطلب اشتباهه

dev, proc and /sys are „virtual (pseudo) filesystems“ (not existing on harddisk, but only in RAM – so they do not consume any harddisk space and are completely created on boot

امیرحسین کریم پور

proc// شامل اطلاعاتی درباره سیستم و دستگاه های جانبی هست که به سیستم متصل شده ، همچنین از proc// برای کنترل رفتار Kernel هم استفاده میشه. proc// یک فایل سیستم واقعی نیست بلکه یک جور نمایشی از ساختار داخلی Kernel هست و نوعی Virtual File System یا فایل سیستم مجازی هست. بهمین دلیل این فایل سیستم مجازی هیچ جا ذخیره نمیشه ( نه اینکه اصلا ذخیره نمیشه ) و اطلاعاتش توی RAM میشینه نه هارد دیسک. و زمانی که سیستم رو Shutdown یا Restart می کنید اطلاعات داخل این دایرکتوری از بین میره. بد نیست بدونید که بسیاری از کار هایی که روی proc// انجام میشه باید با استفاده از ابزار sysctl انجام بشه.

علی  محبوبی نژاد

منم همینو گفتم! توی رم میشینه! حالا کلمه ذخیره رو نباید میگفتم ولی توی رم هست!

در مطلب اینجور نوشته شده :

نکته مهم در اینجاست که sysfs برخلاف proc اطلاعات خودش رو داخل هارد دیسک ذخیره نمی کرد بلکه داخل حافظه RAM همه اطلاعات رو نگهداری می کرد

که اشتباه هست

امیرحسین کریم پور

بله اشتباه نوشته. از کدوم سایت برداشتین این متن رو ؟

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....