اطلاعیه

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

سیستم فایل proc چیست – بخش نخست

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

    سیستم فایل proc چیست – بخش نخست

    سیستم فایل proc/ یک سیستم فایل مجازی است که در حافظه اصلی قرار دارد و به محض بوت شدن ایجاد شده و توسط کرنل خوانده/نوشته و کنترل می شود و پس از خاموش شدن سیستم از بین خواهد رفت و بعد از راه اندازی مجدد سیستم یا روشن شدن مجدد سیستم، از نو ایجاد و فایل های آن مقدار دهی می شوند. بسیاری از ابزار ها از فایل های درون این دایرکتوری استفاده می کنند. محتوای درون این دایرکتوری از دو نوع هستند: دایرکتوری های عددی که هر کدام مربوط به یک فرایند می باشد و همچنین دایرکتوری های غیر عددی و دومین نوع محتوا فایل ها می باشند.همانطور که گفتم proc یک سیستم فایل واقعی نیست و یک سیستم فایل مجازی است و اگر دستور ls -l را اجرا کنید خواهید دید که حجم یا اندازه فایل ها و دایرکتوری های آن صفر است.

    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	proc.png نمایش ها:	1 اندازه:	59.6 KB شناسه:	18312

    دایرکتوری های عددی به ازای هر فرایند هستند و درون آنها نیز فایل ها و دایرکتوری های دیگری مطابق با همان فرایند وجود دارد. عدد دایرکتوری مربوط به شناسه آن فرایند است. همچنین فایل های درون خود دایرکتوری proc/ نیز اطلاعات خاصی از وضعیت فعلی سیستم را دارند که توسط کرنل نوشته/خوانده و یا کنترل می شود. این فایل ها (چه در زیر خود دایرکتوری proc/ یا چه در دایرکتوری های دیگر) توسط برنامه ها مورد استفاده قرار می گیرند، بطور مثال دستور hostname فایل زیر را می خواند تا HOSTNAME را نشان دهد.

    کد PHP:
    cat /proc/sys/kernel/hostname 
    و حال بخواهید بطور موقتی نام ماشین را تغییر دهید می توانید یا از دستور hostname example.com استفاده کنید یا از دستور زیر استفاده کنید.

    کد PHP:
    echo example.com > /proc/sys/kernel/hostname 
    اما این تغییر فایل دایمی نیست و به محض خاموش یا Restart شدن از میان خواهد رفت. فایل های درون دایرکتوری های proc/ همگی تنها خواندنی هستند و تنها کرنل می تواند آنها را تغییر دهد. یعنی تمامی کاربران به جز root دسترسی read only دارند و کاربر root می تواند بصورت بالا با دستور echo آنها را تغییر دهد یا اینکه با استفاده از دستور هایی بتوان آنها را خواند.

    کد PHP:
    stat -c%/proc/sys/kernel/hostname 
    فایل هایی را که می توان تغییر داد به دو گونه هستند، فایلی که رشته ای را قبول می کند مانند آنچه که درباره فایل hostname گفته شد و فایل هایی که یک مقدار باینری یعنی 0 یا 1 را می گیرند، مانند فایل ip_forward که می توانید از این مطلب بخوانید. بطور خاص دستور sysctl برای تغییر فایل های درون دایرکتوری proc/sys/ استفاده می شود.

    آشنایی با فایل ها و دایرکتوری های درون دایرکتوری proc/ :

    در ادامه شاخص ترین این فایل ها و دایرکتوری ها را معرفی می شوند. فهرستی از بارزترین فایل ها :

    فایل cmdline : این فایل حاوی پارامتر های پاس داده شده به کرنل در زمان شروع کار کرنل است. یک خروجی ساده از آن بصورت زیر است.

    کد PHP:
    cat /proc/cmdline 
    کد PHP:
    BOOT_IMAGE=/boot/vmlinuz-3.8.0-29-generic
    root
    =UUID=10a2e5bb-99cf-4220-b019-612b87ff6039 ro 
    یک توزیع لینوکسی ممکن است یک یا دو هسته (کرنل) کامپایل شده دشاته باشد. زمانی که به بوت لودر می رسید با یکی از این کرنل های کامپایل شده را انتخاب کنید. (این مطلب را بخوانید). پس از انتخاب یک هسته کوچک انتخاب شده و سپس سیستم راه اندازی می شود. (این مطلب را بخوانید). BOOT_IMAGE نشان دهنده همین هسته است که شما از میان دو هسته برای راه اندازی سیستم انتخاب کرده ای. یعنی در حال حاظر با کدام هسته به سیستم Login کرده اید.

    root تعیین کننده دایرکتوری است که image ها (یا همان کرنل ها) در آن قرار دارند. به عبارتی نشان دهنده دایرکتوری boot/ می باشد. (این مطلب را بخوانید). همچنین برای آشنایی با UUID می توانید این مطلب را بخوانید. ro نیز یعنی دیوایس در زمان بوت شدن بصورت read only بوت شده است.

    فایل cpuinfo : اطلاعات کاملی از پردازنده را نشان می دهد. مانند نام سازنده و نام مدل پردازنده و میزان حافظه cache موجود را نشان می دهد.

    کد PHP:
    less /proc/cpuinfo 
    فایل crypto : تمام الگوریتم های رمز نگاری مورد استفاده کرنل را نشان می دهد.

    کد PHP:
    less /proc/crypto 
    فایل devices: تمام دیوایس های کراکتری و بلاکی پیکربندی شده و ماژول آنها در کرنل شده است را نشان می دهد.

    کد PHP:
    less /proc/devices 
    فایل filesystem : فهرستی از سیستم فایل های پشتیبانی شده در کرنل لینوکس (کرنل کنونی که با آن سیستم را بوت کرده اید) را نشان می دهد.

    کد PHP:
    less /proc/filesystem 
    ستون نخست در خروجی دستور بالا نشان می دهد که ایا سیستم فایل به یک دیوایس بلاکی، mount شده است یا نه. اگر عبارت nodev باشد یعنی اینکه سیستم فایل به دیوایسی متصل نشده است. مانند proc که بعنوان یک سیستم فایل واقعی نیست بلکه یک سیستم فایل مجازی در حافظه اصلی است و به هیچ دیواسی هم متصل نشده است. ستون دوم هم نام سیستم فایل است. این فایل مورد استفاده دستور mount قرار می گیرد در صورتی که نوع سیستم فایل را در دستور mount مشخص نکنیم.

    فایل interrupts : تعداد وقفه های داده شده به سیستم را نشان می دهد.

    کد PHP:
    less /proc/interrupts 
    فایل kmesg : این فایل پیام های صادره از کرنل را نگه می دارد و مورد استفاده دستوری مثل dmesg یا klog می بشاد.

    کد PHP:
    less /proc/kmesg 
    فایل loadavg : دستور uptime این فایل را می خواند تا در خروجی خود میانگین یک، پنج و پانزده دقیقه پیش بار سیستم را نشان دهد که معادل سه عدد نسخت در خروجی زیر است. چهارمین عدد نیز تعداد فرایند های فعال و تعداد کل فرایند های موجود در سیستم را نشان می دهد. آخرین عدد نیز آخرین فرایند استفاده شده را نشان می دهد. (آخرین شناسه استفاده شده).

    کد PHP:
    cat /proc/loadavg 
    دستور زیر را اجرا کنید. خواهید دید که این فایل تنها بصورت read only است و هیچ فردی حتی root نمی تواند این فایل را تغییر دهد و تنها توسط کرنل قابل تغییر است. در صورتی که کاربر root می توانست دو فایل قبلی یعنی ip_forward و hostname را تغییر دهد. اما هیچ فرد دیگری حتی اگر عضو گروه root هم باشد نمی تواند روی هیچ فایلی در کل دایرکتوری و زیر دایرکتوری های proc/ بنویسد و تنها حق read را دارد.

    کد PHP:
    ls -/proc/loadavg 
    فایل meminfo : اطلاع های کاملی از حافظه اصلی موجود در سیستم را نشان می دهد. دستوری مانند free از این فایل برای شکل دهی خروجی خود استفاده می کند.

    کد PHP:
    less /proc/meminfo 
    فایل modules : فهرست تمامی ماژول های بار شده در سیستم را نشان می دهد. این فایل توسط دستور lsmod مورد استفاده قرار می گیرد.

    کد PHP:
    less /proc/modules 
    ستون نخست نام ماژول، دمین ستون میزان حافظه ماژول، سومین ستون چند نمونه از ماژول در حال حاضر لود شده اند. عدد 0 نشان دهنده ماژول لود نشده است، چهارمین ستون وابستگی ماژول را به دیگر ماژول برای برای عملکردش نشان می دهد، پنجمین ستون وضعیت لود ماژول را نشان می دهد که می تواند یکی از مقادیر، Live,Loading و Unloading باشد و ششمین ستون اطلاع های آفست های حافظه را برای ماژول لود شده نشان می دهد.

    فایل mounts : این فایل نقاط اتصال کنونی (تمامی اتصال ها که بصورت دائمی در فایل etc/fstab/ و یا موقتی توسط دستور mount) را نشان می دهد. اگر دستور mount بدون هیچ سوئیچی استفاده شود این فایل را نشان خواهد داد.

    کد PHP:
    less /proc/mounts 
    نخستین ستون نام دیوایس mount شده و دومین ستون نام دایرکتوری که بر روی آن متصل شده است. (نقطه اتصال). ستون سوم نوع سیستم فایل، ستون چهارم وضعیت ro یا rw بودن، ستون پنجم و ششم مطابق با ستون های پنج و ششم فایل etc/mtab/ می باشد.

    فایل partitions : نشان دهنده پارتیشن های موجود بر روی سیستم.

    کد PHP:
    less /proc/partitions 
    فایل swaps : نشان دهنده وضعیت پارتیشن های یا فایل های swap (پست های “فضای swap چیست و چگونه در لینوکس یک swap file ایجاد کنیم” و “ایجاد یک swap partition جدید در لینوکس” خوانده شود).

    کد PHP:
    less /proc/swaps 
    فایل uptime : میزان زمان up بودن سیستم پس از آخرین restart را نشان می دهد. نخستین ستون نشان دهنده میزان زمان up بودن پس از آخرین restart بر حسب ثانیه و ستون دوم میزان زمان idle یا بی کار بودن سیستم بر حسب ثانیه.

    کد PHP:
    cat /proc/uptime 
    فایل version : این فایل نسخه کرتل و کامپایلر gcc را نشان می دهد.

    کد PHP:
    cat /proc/version 
    فهرستی از دایرکتوری های درون دایرکتوری proc/ :
    دایرکتوری های عددی مربوط به هر فرایند : این دایرکتوری ها مطابق با هر فرایند (شناسه هر فرایند) بوده و فایل ها و دایرکتوری های درون آنها مربوط به همان فرایند است. تمامی فایل ها و دایرکتوری های درون این دایرکتوری ها متعلق به مالک آن فرایند است. بطور مثال کاربری به نام amirnamipc1 دستور htop را اجرا می کند و شناسه آن دستور 3868 است، پس دایرکتوری 3868 ایجاد شده و خود دایرکتوری و تمامی محتوای آن مربوط به کاربر amirnamipc1 خواهد بود. پس از خاتمه یافتن فرایند دایرکتوری معادل آن نیز حذف خواهد شد.

    کد PHP:
    ls -l 1 
    دستور بالا محتوای دایرکتوری ععد 1 مربوط به فرایند init را نشان می دهد. در تمامی دایرکتوری های عدد چندین فایل و دایرکتوری همنام وجود دارند که محتوای آنها مطابق با فرایند خودشان است.

    فایل cmdline زیر هر دایرکتوری عددی : این فایل شامل دستوری است که فرایند را ایجاد کرده است. بطور مثال فایل proc/1/cmdline/ دستوری که فرایند با شناسه 1 را ایجاد نموده است. که خروجی آن خط sbin/init/ است.

    کد PHP:
    less /proc/1/cmdline 
    دایرکتوری cwd : یک Link به دایرکتوری کنونی که دستور در آن اجرا شده است. بطور مثال برای فریاند 1 مربوط به دستور sbin/init/ ، دایرکتوری cwd آن لینک به دایرکتوری / است. یا برای فرایندی که توسط amirnamipc1 ایجاد شده شناسه آن 3868 است و این شناسه مربوط به دستور htop و در دایرکتوری خانگی کاربر یعنی home/amirnamipc1/ اجرا شده، پس دایرکتوری proc/3868/cwd/ لینک به دایرکتوری home/amirnamipc1/ خواهد بود.
    فایل environ : متغیر های محیطی مربوط به فرایند ها.
    فایل fd : مشخص کننده File Descriptor فایل ها. خروجی زیر را دقت کنید :

    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	procdir1.png نمایش ها:	1 اندازه:	27.1 KB شناسه:	18313

    از تصویر بالا مشخص است که فرایند با شناسه 4073، Standard Input, Standard Output و Error Input را بر روی ترمینال tty1 نشان می دهد. توجه کنید که در لینوکس و هر سیستم عامل دیگر یونیکس همه چیز فایل است، حتی ترمینال ها. و چهارمین خط تصویر بالا، یک سوکت نیز برای فایل باز شده است.

    کد PHP:
    netstat grep 33446

    unix  2      
    [ ]         DGRAM                    33446 
    فایل maps : این فایل شامل نگاشت های حافظه برای فرایند و کتابخانه های مورد استفاده آن است.
    دایرکتوری root : یک لینک به دایرکتوری فرایند.
    فایل stat : وضعیت فرایند را نشان می دهد. خروجی آن غیر قابل درک است.

    کد PHP:
    cat /proc/1/stat 
    فایل statm : وضعیت حافظه اختصاص داده شده به فرایند را نشان می دهد.

    کد PHP:
    cat /proc/1/statm 
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	procdir2.png نمایش ها:	1 اندازه:	2.1 KB شناسه:	18314

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

    بعنوان توضیح اجمالی، در بحث مدیریت حافظه، حافظه به تکه هایی هم اندازه به نام صفحه تقسیم می شود. صفحه ها هم اندازه و اندازه ای ثابت دارند و فرایندی برای قرار گیری در حافظه باید در این صفحه ها تکه تکه شود. فرض کنید میزان اندازه هر صفحه 2048 کیلوبایت است پس برنامه به اندازه n کلیو بایت برای قرار گیری در حافظه باید به n/2048 تکه تبدیل شده تا در حافظه قرار گیرد. هر فرایند از کد، داده و پشته تشکیل شده است که هر کدام از صفحات مربوطه با خروجی ععدی بالا مشخص هستند و همچنین هر فرایند بخش مشترکی دارد که با دیگر فرایند مورد استفاده قرار می گیرد و هر فرایند یا دستور از کتابخانه های موجود در دایرکتوری lib/ استفاده می کند.

    فایل status : خروجی همان دو فایل بالا ست اما خواناتر است.

    کد PHP:
    cat /proc/1/status 

    نویسنده نامی امیر
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-13-2020, 03:26 AM.

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

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

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