مقدمه
در درسهای گذشته یاد گرفتیم که چگونه با ابزارهایی مانند 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 را بخوانید تا
پاسخ را مستقیماً از خود هسته دریافت کنید.