توضیح فایل سیستم /proc در لینوکس
امروز ما قصد داریم نگاهی به داخل فایل سیستم /proc داشته باشیم. دایرکتوری /proc در تمام سیستم های لینوکس، بدون در نظر گرفتن نوع توزیع و یا معماری است.
یک تصور غلطی که ما باید روشن کنیم این است که دایرکتوری /proc، در اصطلاح یک سیستم فایل واقعی نیست و یک سیستم فایل مجازی است که شامل procfs اطلاعات مربوط به فرآیندها و سایر اطلاعات سیستم می باشد. این فایل به /proc متصل شده و در زمان بوت شدن نصب می شود.
اول، اجازه دهید تا به /proc نگاه دقیق تری بندازیم:
1 |
# cd /proc |
اولین چیزی که متوجه می شوید این است که برخی از فایل های فشرده آشنا وجود دارد و پس از آن تعداد زیادی از دایرکتوری های شماره شده وجود دارد. دایرکتوری های شماره دار فرایندهایی را نشان می دهند که به عنوان PID ها شناخته شده اند و درون آن ها یک فرمان است که آنها را اشغال می کند. فایل ها حاوی اطلاعات سیستم مانند حافظه (meminfo)، اطلاعات پردازنده (cpuinfo) و سیستم های موجود است.
بیایید ابتدا نگاهی به یکی از فایل ها بندازیم:
1 |
# cat /proc/meminfo |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
MemTotal: 604340 kB MemFree: 54240 kB Buffers: 18700 kB Cached: 369020 kB SwapCached: 0 kB Active: 312556 kB Inactive: 164856 kB Active(anon): 89744 kB Inactive(anon): 360 kB Active(file): 222812 kB Inactive(file): 164496 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 89724 kB Mapped: 18012 kB Shmem: 412 kB Slab: 50104 kB SReclaimable: 40224 kB ... |
همانطور که می بینید، /proc/meminfo حاوی اطلاعات زیادی در مورد حافظه سیستم شما، از جمله کل مقدار موجود (در کیلوبایت) و مقدار آزاد در دو خط بالا.
اجرای دستور cat در هر یک از فایل ها در /proc محتویات آن ها را نمایش می دهد. اطلاعات مربوط به هر فایل در صفحه مرد با در حال اجرا است:
1 |
# man 5 /proc/<filename> |
توضیحی مختصر از فایل های /proc :
- /proc/cmdline – اطلاعات خط فرمان کرنل.
- /proc/console – اطلاعات در مورد کنسول های کنونی از جمله tty.
- /proc/devices – درایور دستگاه در حال حاضر برای هسته در حال اجرا پیکربندی شده است.
- /proc/dma – اطلاعات مربوط به کانال های DMA فعلی.
- /proc/fb – دستگاه های Framebuffer.
- /proc/filesystems – سیستم های کنونی که توسط هسته پشتیبانی می شوند.
- /proc/iomem – نقشه حافظه سیستم فعلی برای دستگاه.
- /proc/ioports – مناطق پورت ثبت شده برای ارتباط خروجی ورودی با دستگاه.
- /proc/loadavg – متوسط بار سیستم.
- /proc/locks – فایل ها در حال حاضر توسط هسته قفل شده اند.
- /proc/meminfo – اطلاعات در مورد حافظه سیستم (به عنوان مثال بالا را ببینید).
- /proc/misc – درایور های متفرقه برای دستگاه های مختلف
- /proc/modules – ماژول های بارگذاری شده در حال حاضر
- /proc/mounts – فهرست همه موارد استفاده در سیستم.
- /proc/partitions – اطلاعات دقیق در مورد پارتیشن های موجود در سیستم.
- /proc/pci – اطلاعات مربوط به هر دستگاه PCI.
- /proc/stat – ضبط یا آمارهای مختلف نگهداری شده از آخرین راه اندازی مجدد.
- /proc/swap – اطلاعات در مورد فضای swap.
- /proc/uptime – اطلاعات زمان روشن بودن سیستم (در ثانیه).
- /proc/version – نسخه کرنل، نسخه GCC و توزیع لینوکس نصب شده است.
در داخل دایرکتوری شماره /proc شما چند فایل و پیوند پیدا خواهید کرد. به خاطر داشته باشید که تعداد این فهرست ها به PID فرمان در آنها اجرا می شود. بیایید از مثال استفاده کنیم. در سیستم من یک پوشه /proc/12 وجود دارد:
1 2 |
# cd /proc/12 # ls |
1 2 3 4 5 6 7 |
attr coredump_filter io mounts oom_score_adj smaps wchan autogroup cpuset latency mountstats pagemap stack auxv cwd limits net personality stat cgroup environ loginuid ns root statm clear_refs exe maps numa_maps sched status cmdline fd mem oom_adj schedstat syscall comm fdinfo mountinfo oom_score sessionid task |
اگر داخل فال status را ببینیم :
1 |
# cat /proc/12/status |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Name: xenwatch State: S (sleeping) Tgid: 12 Pid: 12 PPid: 2 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 64 Groups: Threads: 1 SigQ: 1/4592 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: ffffffffffffffff SigCgt: 0000000000000000 CapInh: 0000000000000000 CapPrm: ffffffffffffffff CapEff: ffffffffffffffff CapBnd: ffffffffffffffff Cpus_allowed: 1 Cpus_allowed_list: 0 Mems_allowed: 00000000,00000001 Mems_allowed_list: 0 voluntary_ctxt_switches: 84 nonvoluntary_ctxt_switches: 0 |
خوب این به چه معنا است؟ خوب، بخش های مهمی که در بالا قرار داردند می توانیم از پرونده وضعیت ببینیم که این فرایند متعلق به xenwatch است. حالت فعلی آن خواب است و شناسه فرآیند آن 12 است. ما همچنین می توانید ببینید که چه کسی این را اجرا می کند، زیرا UID و GID 0 هستند، که نشان می دهد که این فرایند متعلق به کاربر ریشه است.
در هر دایرکتوری شماره، شما یک ساختار فایل مشابه خواهید داشت. مهمترین آنها و توصیف آنها به شرح زیر است:
- cmdline – خط فرمان فرآیند
- environ – متغیرهای محیطی
- fd – توصیفگرهای فایل
- limits – حاوی اطلاعاتی درباره محدودیت های فرآیند است
- mounts – اطلاعات مربوط به دستگاه های متصل
شما همچنین تعدادی لینک در دایرکتوری شماره را مشاهده خواهید کرد:
- cwd – یک لینک به دایرکتوری کار فعلی روند
- exe – پیوند به اجرام فرآیند
- root – لینک به دایرکتوری کار