جمعه, ۱۴ اردیبهشت, ۱۴۰۳ / 3 May, 2024
مجله ویستا

آشنایی با procfs


آشنایی با procfs
procfs یک سیستم فایل مجازی است کــه در شاخه proc/ متصل شده و امکان دسترسی به اطلاعات هسته را فراهم می‌سازد. این یکی از ویژگی‌های لینوکس اسـت که دسترسی به اطلاعات هسته و پردازش‌ها را در قالب متنی فراهــم می‌سازد. بسیاری از دستورات خط فرمــان مــانند ps، top، pstree اطلاعات خود را این فایل سیستم استخراج می‌کنند. نکته قابل توجه این است که این مــقاله بــرای هسته‌های سری ۲.۶ لینوکس نوشته شده و ممکن است برخی از موارد ذکر شده در آن در سری ۲.۴ موجود نباشد.
● فایل سیستم مجازی
فایل‌های و دایرکتوری‌های موجود در شاخه proc/ مجازی هستند زیرا اطلاعات موجود در آنها در ابزارهای ذخیره سازی دائمی مانند دیسک‌های سخت ذخیره نمی‌شوند، در مقابل تماما در حافظه RAM قرار می‌گیرند.
● اتصال proc
برای دیدن اینکه آیا فایل سیستم proc هم اکنون بــر روی سیستم شما متــصل می‌باشد یا خیر می‌توانید از دستورات mount یا grep proc /etc/mtab استفاده کنید. در صورتی که کتصل نیست از دســتور mount بـــرای اتصال آن اسـتفاده کنید:
# mount -t proc proc /proc
● اطلاعات پروسه‌ها
هـــر پروسه یــک ورودی در شاخه proc/ دارد که با شماره PID آن مشخص می‌شوند.
▪ برخی از فایل‌های مهم موجود در این فایل سیستم عبارتند از:
- pid/cmdline:
شماره پروسه/فرمان که فرمانی است که پروسه خاصی بواسطه آن اجرا شده است.
- pid/cwd:
حاوی لینکی به شاخه فعلی پروسه در حال اجراست.
- pid/environ:
حاوی لیستی از متغییرهای محیطی پروسه است.
- pid/exe:
حاوی لینکی به برنامه‌ای است که پروسه را اجرا کرده است.
- /pid/fd:
حاوی لینکهایی به تمامی فایل‌هایی است که یک پروسه در حال حاضر آنها را باز کرده است.
- pid/mem:
حاوی محتویات حافظه اشغالی توسط پروسه است.
- pid/stat:
حاوی اطلاعات وضعیت پروسه است.
- pid/statm:
حاوی اطلاعات مصرف حافظه پروسه است.
▪ چند مثال برای دریافت اطلاعات پروسه‌ها
۱) برای پیدا کردن فایل‌های ورودی استفاده شده توسط یک پروسه خاص از دستور زیر استفاده کنید:
$ ls -l /proc/[pid]/fd/۰
توجه داشته باشید که بجای [pid] باید شماره پروسه مورد نظرتان را وارد کنید.
۲) برای پیدا کردن سوکت‌های مورد استفاده توسط یک پروسه دستور زیر را وارد کنید:
# ls -l /proc/[pid]/fd|sed -n /socket/{s/.*[//;s/]//p}#
اطلاعات مربوط به این سوکت‌ها را می‌توانید با استفاده از دستور netstat -ae بدست آورید. ۳) برای دریافت آرگومان‌های خط فرمان ارسال شده به یک پروسه دستور زیر را وارد کنید:
$ cat /proc/[pid]/cmdline
۴) برای دریافت پروسه والد یک پروسه از دستور زیر استفاده کنید:
$ grep PPid /proc/[pid]/status
● اطلاعات عمومی سیستم
فایل سیستم procfs حـاوی مقدار زیادی اطلاعات در مورد سیستم است. مانند بار پردازشگر، پیکربندی فایل سیستم‌ها و شبکه و... در زیر مثال‌هایی برای دریافت این اطلاعات و تغییر آنها ارائه شده است.
۱) برای دریافت میزان حافظه آزاد سیستم از دستور زیر استفاده کنید:
$ grep Free /proc/meminfo
۲) اطلاعات آمــاری سیستم از زمــان آخرین راه‌انــدازی در فایـــل proc/stst/ قـــرار دارند. بــرای دیدن تعداد پروسه‌ای که سیستم از زمان آخرین بوت داشته است، از دستور زیر استفاده کنید:
$ grep processes /proc/stat
۳) برای دیدن میزان بار سیستم در ۱، ۵ و ۱۵ دقیقه گذشته دستور زیر را وارد کنید:
$ awk &#۰۳۹;{print "۱ min: " $۱ "
۵ min: " $۲ "
۱۵ min: " $۳ }# /proc/loadavg
۴) اطلاعات پارتیشن‌های سیستم در فایل proc/partitions/ قرار دارد.
$ cat /proc/partition
۵) فایل‌های proc/net/ و proc/sys/net/ را می‌توانید برای نمایش و یـــا تغییر اطــلاعات مــهم شبکه استفاده کنید. برای مثال برای غیر فعال کردن ping دستور زیر را در حالت ریشه وارد کنید:
# echo ۱ > /proc/sys/net/ipv۴/icmp_echo_ignore_all
یا برای فعال کردن IP Forwarding و IP Masquerading دستور زیر را در حالت کاربر ریشه وارد کنید:
#echo ۱ > /proc/sys/net/ipv۴/ip_forward
۶) فایل سیستم‌های متصل به سیستم را می‌توانید از proc/mounts بدست آورید:
$cat /proc/mounts
۷) برای تغییر بلادرنگ نام میزبان، دستور زیر را وارد کنید:
#echo memphis > /proc/sys/kernel/hostname
۸) برای دریافت اطلاعات CPU کامپیوتر، دستور زیر را وارد کنید:
$cat /proc/cpuinfo
۹) برای دیدن مقدار فضای مصرف شده Swap از دستور زیر استفاده کنید:
$cat /proc/swaps
۱۰) برای دیدن مدت زمانی که سیستم در حال اجراست، پس از آخرین بوت:
$cat /proc/uptime
۱۱) برای نمایش منابع به اشتراک گذاشته شده به واسطه NFS:
$cat /proc/fs/nfsd/exports
● مقداری اطلاعات از هسته
۱)برای نمایش شماره نسخه هسته‌ای که در حال اجراست:
$cat /proc/version
۲) فایل proc/kmsg/ توسط دایمن klogd برای منبع اطلاعات ثبتی استفاده می‌شود.
۳) فایل proc/kcore/ دسترسی به حافظه فیزیکی سیستم را فــراهــم می‌سازد. آنرا می‌توانید با استفاده از gdb برای بررسی وضعیت ساختار هریک از داده‌های موجود در هسته استفاده کنید.
● برای اطلاعات دقیق‌تر می‌توانید نگاهی به فایل usr/src/linux/Documentation/filesystems/proc.txt/بیاندازید. البته بـه شرطی که کد منبع هسته بر روی سیستمتان نصب باشد.
منبع : نشریه لینوکس ایران