مقدمه

در درس‌های گذشته یاد گرفتیم که چگونه با ابزارهایی مانند ps و top اطلاعات مربوط به پراسس‌های در حال اجرا را مشاهده کنیم. اما آیا تا به حال از خود پرسیده‌اید که این ابزارها اطلاعات خود را از کجا به دست می‌آورند؟ پاسخ، در یکی از شگفت‌انگیزترین و قدرتمندترین بخش‌های سیستم فایل لینوکس نهفته است: دایرکتوری /proc.

دایرکتوری /proc یک دایرکتوری عادی روی هارد دیسک شما نیست. این یک سیستم فایل مجازی (Virtual Filesystem) یا شبه-فایل‌سیستم (pseudo-filesystem) است که توسط هسته‌ی لینوکس در لحظه و در حافظه‌ی RAM ایجاد می‌شود. فایل‌ها و دایرکتوری‌های داخل /proc در واقع پنجره‌هایی به درون ساختارهای داده‌ی زنده‌ی خود هسته هستند. وقتی شما یک فایل را از /proc می‌خوانید، در حقیقت در حال پرسیدن یک سؤال از هسته‌ی سیستم در مورد وضعیت فعلی آن هستید.

کاوش در اطلاعات پراسس‌ها

بارزترین ویژگی دایرکتوری /proc، وجود تعداد زیادی دایرکتوری با نام‌های عددی است. هر یک از این دایرکتوری‌ها، متناظر با شناسه‌ی پراسس (PID) یک فرآیند در حال اجرا در سیستم است. با وارد شدن به هر یک از این دایرکتوری‌ها، می‌توانیم به تمام اطلاعاتی که هسته در مورد آن پراسس خاص دارد، دسترسی پیدا کنیم.

برای پیدا کردن PID شل فعلی خودتان، می‌توانید از متغیر خاص $$ استفاده کنید و سپس وارد دایرکتوری مربوطه شوید:

$ echo $$
13579
$ ls /proc/13579
attr cmdline comm cwd ...

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

درون هر یک از این دایرکتوری‌های عددی، فایل‌های متنی متعددی وجود دارند که هر کدام جنبه‌ای از وضعیت پراسس را نشان می‌دهند. در اینجا به چند مورد از مهم‌ترین آن‌ها اشاره می‌کنیم:

فایل توضیح
cmdline دستور کاملی که برای اجرای این پراسس استفاده شده است.
environ تمام متغیرهای محیطی (environment variables) که برای این پراسس تعریف شده‌اند.
status یک گزارش خوانا و کامل از وضعیت پراسس، شامل PID، PPID، نام، وضعیت حافظه و... .
cwd یک لینک نمادین به دایرکتوری کاری فعلی (Current Working Directory) پراسس.
exe یک لینک نمادین به فایل اجرایی اصلی روی دیسک که این پراسس نمونه‌ای از آن است.

با خواندن فایل status می‌توانید اطلاعات بسیار جامعی را به دست آورید:

$ cat /proc/13579/status
Name:   bash
State:  S (sleeping)
Pid:    13579
PPid:   13570
...

کاوش در اطلاعات سیستم

علاوه بر اطلاعات پراسس‌ها، دایرکتوری /proc حاوی فایل‌هایی است که اطلاعات زنده‌ای را در مورد سخت‌افزار و پیکربندی کلی هسته‌ی سیستم ارائه می‌دهند. این فایل‌ها نام‌های مشخصی دارند، نه نام‌های عددی.

فایل توضیح
/proc/cpuinfo اطلاعات دقیق در مورد پردازنده‌های سیستم (مدل، سرعت، هسته‌ها و...).
/proc/meminfo گزارش کامل و زنده از وضعیت استفاده از حافظه RAM و Swap.
/proc/version نسخه‌ی دقیق هسته‌ی لینوکس در حال اجرا.
/proc/uptime مدت زمانی که سیستم از آخرین بوت، روشن بوده است.
/proc/filesystems لیست تمام فایل‌سیستم‌هایی که هسته‌ی فعلی از آن‌ها پشتیبانی می‌کند.

پرده‌برداری از یک راز!

بسیاری از دستورات معروفی که برای مشاهده‌ی اطلاعات سیستم استفاده می‌کنیم (مانند lscpu، free، uptime و uname -r)، در واقع کاری جز خواندن، تجزیه (parse) و نمایش زیباتر اطلاعات موجود در همین فایل‌های /proc انجام نمی‌دهند. آن‌ها یک رابط کاربرپسند برای دسترسی به داده‌های خام هسته هستند.

یک ابزار قدرتمند برای عیب‌یابی

دایرکتوری /proc فقط برای کنجکاوی نیست، بلکه یک ابزار خط اول برای مدیران سیستم جهت عیب‌یابی‌های عمیق است. وقتی یک برنامه به درستی کار نمی‌کند، می‌توانید با مراجعه به دایرکتوری /proc/PID مربوط به آن، بفهمید که دقیقاً با چه دستوری اجرا شده، متغیرهای محیطی آن چه بوده‌اند و در کدام دایرکتوری در حال اجراست. این اطلاعات برای پیدا کردن ریشه‌ی بسیاری از مشکلات حیاتی است.

به همین ترتیب، وقتی نیاز به اطلاعات دقیقی از سخت‌افزار یک سرور راه دور دارید، به جای جستجوی دستورات مختلف، می‌توانید مستقیماً فایل‌های cpuinfo و meminfo را بخوانید تا پاسخ را مستقیماً از خود هسته دریافت کنید.