امروز قصد داریم دایرکتوری /proc را در لینوکس بررسی کنیم و بیشتر با آن آشنا شویم. بدون در نظر گرفتن معماری، دایرکتوری proc در تمام سیستم های لینوکسی موجود است.
یک تصور غلطی که ما فورا باید آن را پاک کنیم این است که به اصطلاح دایرکتوری /proc یک فایل سیستم واقعی نیست و یک فایل سیستم مجازی (virtual) میباشد. procfs شامل اطلاعاتی درباره پروسس ها و دیگر اطلاعات سیستمی میباشد که به /proc لینک شده و در زمان boot شدن سیستم mount (مانت) میشود.
ابتدا، اجازه دهید وارد پوشه /proc شویم و نگاهی به آن بیندازیم.
اولین چیزی که متوجه میشوید این است که در آنجا برخی از فایل ها آشنا به نظر میرسد، و همچنین یک مجموعه ای از دایرکتوری های شماره گذاری شده وجود دارد. دایرکتوری های شماره دار نشان دهنده Process هایی هستند که به عنوان PID ها شناخته شده اند، و در داخل آنها، یک دستور است که آنها را اشغال میکند. فایل ها شامل اطلاعات سیستمی همانندmemory (meminfo)، CPU information (cpuinfo) و filesystem های فعال است.
همچنین توصیه میشود مطالعه کنید.
ساختار دایرکتوری ها و مسیر فایل های مهم در لینوکس
دستور Free در لینوکس، برای چک کردن Physical Memory و Swap Memory
ابتدا یکی از فایل ها را بررسی میکنیم.
نمونه خروجی
که خروجی شبیه به زیر نمایش داده میشود.
همانطور که میبینید، محتویات /proc/meminfo شامل اطلاعات زیادی درباره حافظه memory سیستم شما، که شامل مقدار کل موجود (به kb) و مقدار فضای آزاد در خط دوم دستور بالا میباشد.
اجرای دستور cat روی هر فایل در دایرکتوری /proc محتوای فایل ها را نمایش خواهد داد. با اجرای دستور زیر، اطلاعات مربوط به هر فایل که در صفحه man موجود است را مشاهده خواهید کرد.
در اینجا برخی از فایل های /proc را توضیح خواهیم داد.
/proc/cmdline : اطلاعات کامندی کرنل
/proc/consoles : اطلاعاتی درباره ترمینال جاری شامل tty
/proc/devices : درایورهای دیوایس که در حال حاضر برای کرنل در حال اجرا کانفیگ شده اند.
/proc/dma : اطلاعات درباره DMA Channel (مخفف Direct Memory Access) که یک کانال DMA در حقیت ارتباط مستقیمی است که به دیوایس ها اجازه انتقال دیتا به / از مموری بدون استفاده از Processor را میدهد.
/proc/fb : دیوایس های Framebuffer
/proc/filesystems : فایل سیستم های موجود که توسط کرنل پشتیبانی میشود.
/proc/iomem : نقشه مموری موجود در سیستم برای دیوایس ها
/proc/ioports : محدوده پورت ریجیستر شده برای ارتباطات ورودی و خروجی با دیوایس
/proc/loadavg : میانگین Load سیستم
/proc/locks : فایل هایی که در حال حاضر توسط کرنل مسدود شده اند.
/proc/meminfo : اطلاعات درباره مموری سیستم
/proc/misc : درایورهای متفرقه ی ریجیستر شده برای دیوایس های متفرقه
/proc/modules : ماژول های کرنلی که در حال حاضر Load شده اند.
/proc/mounts : نمایش تمام mount point ها در حال استفاده توسط سیستم
/proc/partitions : ریز اطلاعات درباره پارتیشن های موجود برای سیستم
/proc/pci : اطلاعات درباره هر دیوایس PCI
/proc/stat : ثبت و نگهداری آمارهای گوناگون از زمان آخرین Reboot
/proc/swap : اطلاعاتی درباره فضای Swap
/proc/uptime : اطلاعات UpTime (به ثانیه)
/proc/version : ورژن کرنل، ورژن gcc و ورژن توزیع لینوکسی موجود
درون دایرکتوری های شماره دار موجود در /proc شما چندین فایل و لینک پیدا خواهید کرد. به خاطر داشته باشید که شماره دایرکتوریها به PID دستوراتی که در آنها اجرا میشود مرتبط میباشد. اجازه دهید یک مثال بزنیم. در سیستم من، یک فولدر به نام /proc/12 هست.
نمونه خروجی
در صورتی که دستور زیر را اجرا کنم :
نتیجه زیر را دریافت میکنم :
و اما خروجی بالا یعنی چه؟ مهمترین بخش قسمت بالای خروجی میباشد. ما از طریق فایل status میتوانیم مشاهده کنیم که این پروسس متعلق به watchdog میباشد. و همچنین وضعیت موجود آن sleeping بوده و کاملا مشخص است که process ID آن 12 میباشد. همچنین میتوانیم مشاهده کنیم که چه کسی آن را اجرا کرده است. از آنجایی که UID و GID آن 0 میباشد مشخص است که این پروسس متعلق به کاربر root میباشد.
در هر کدام از دایرکتوریهای عددی، شما یک فایل ساختاری مشابه خواهید داشت مهمترین آنها را با توضیح در زیر مثال میزنیم :
cmdline : خط فرمان پروسس
environ : متغییرهای محیطی
fd : مفسرهای فایل
limits : شامل اطلاعاتی درباره محدودیت های پروسس
mounts : اطلاعات مربوطه
شما همچنین ممکن است متوجه تعداد لینک در دایرکتوریهای عددی شوید :
cwd : لینکی به دایرکتوری در حال کار موجود (PWD) مربوط به پروسس
exe : لینکی به پروسس قابل اجرا
root : لینکی به دایرکتوری کاری پروسس
این مقاله باید شما را با دایرکتوری /proc آشنا کرده باشد. همچنین باید دیدی روی اینکه چگونه یک تعداد از دستورات همانند uptime, lsof, mount و ps اطلاعات آنها را کسب میکنند به دست آورده باشید.
یک تصور غلطی که ما فورا باید آن را پاک کنیم این است که به اصطلاح دایرکتوری /proc یک فایل سیستم واقعی نیست و یک فایل سیستم مجازی (virtual) میباشد. procfs شامل اطلاعاتی درباره پروسس ها و دیگر اطلاعات سیستمی میباشد که به /proc لینک شده و در زمان boot شدن سیستم mount (مانت) میشود.
ابتدا، اجازه دهید وارد پوشه /proc شویم و نگاهی به آن بیندازیم.
کد PHP:
# cd /proc
همچنین توصیه میشود مطالعه کنید.
ساختار دایرکتوری ها و مسیر فایل های مهم در لینوکس
دستور Free در لینوکس، برای چک کردن Physical Memory و Swap Memory
ابتدا یکی از فایل ها را بررسی میکنیم.
کد PHP:
# cat /proc/meminfo
که خروجی شبیه به زیر نمایش داده میشود.
کد PHP:
MemTotal: 1884812 kB
MemFree: 1157676 kB
MemAvailable: 1317060 kB
Buffers: 764 kB
Cached: 286708 kB
SwapCached: 0 kB
Active: 429972 kB
Inactive: 167996 kB
Active(anon): 324352 kB
Inactive(anon): 18608 kB
Active(file): 105620 kB
Inactive(file): 149388 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1679356 kB
SwapFree: 1679356 kB
Dirty: 20 kB
Writeback: 0 kB
AnonPages: 310516 kB
Mapped: 53000 kB
Shmem: 32464 kB
Slab: 55452 kB
SReclaimable: 34000 kB
SUnreclaim: 21452 kB
KernelStack: 3472 kB
PageTables: 20212 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2621760 kB
Committed_AS: 1267708 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 156792 kB
VmallocChunk: 34359571452 kB
HardwareCorrupted: 0 kB
AnonHugePages: 104448 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 51136 kB
DirectMap2M: 2045952 kB
همانطور که میبینید، محتویات /proc/meminfo شامل اطلاعات زیادی درباره حافظه memory سیستم شما، که شامل مقدار کل موجود (به kb) و مقدار فضای آزاد در خط دوم دستور بالا میباشد.
اجرای دستور cat روی هر فایل در دایرکتوری /proc محتوای فایل ها را نمایش خواهد داد. با اجرای دستور زیر، اطلاعات مربوط به هر فایل که در صفحه man موجود است را مشاهده خواهید کرد.
کد PHP:
# man 5 /proc/<filename>
/proc/cmdline : اطلاعات کامندی کرنل
/proc/consoles : اطلاعاتی درباره ترمینال جاری شامل tty
/proc/devices : درایورهای دیوایس که در حال حاضر برای کرنل در حال اجرا کانفیگ شده اند.
/proc/dma : اطلاعات درباره DMA Channel (مخفف Direct Memory Access) که یک کانال DMA در حقیت ارتباط مستقیمی است که به دیوایس ها اجازه انتقال دیتا به / از مموری بدون استفاده از Processor را میدهد.
/proc/fb : دیوایس های Framebuffer
/proc/filesystems : فایل سیستم های موجود که توسط کرنل پشتیبانی میشود.
/proc/iomem : نقشه مموری موجود در سیستم برای دیوایس ها
/proc/ioports : محدوده پورت ریجیستر شده برای ارتباطات ورودی و خروجی با دیوایس
/proc/loadavg : میانگین Load سیستم
/proc/locks : فایل هایی که در حال حاضر توسط کرنل مسدود شده اند.
/proc/meminfo : اطلاعات درباره مموری سیستم
/proc/misc : درایورهای متفرقه ی ریجیستر شده برای دیوایس های متفرقه
/proc/modules : ماژول های کرنلی که در حال حاضر Load شده اند.
/proc/mounts : نمایش تمام mount point ها در حال استفاده توسط سیستم
/proc/partitions : ریز اطلاعات درباره پارتیشن های موجود برای سیستم
/proc/pci : اطلاعات درباره هر دیوایس PCI
/proc/stat : ثبت و نگهداری آمارهای گوناگون از زمان آخرین Reboot
/proc/swap : اطلاعاتی درباره فضای Swap
/proc/uptime : اطلاعات UpTime (به ثانیه)
/proc/version : ورژن کرنل، ورژن gcc و ورژن توزیع لینوکسی موجود
درون دایرکتوری های شماره دار موجود در /proc شما چندین فایل و لینک پیدا خواهید کرد. به خاطر داشته باشید که شماره دایرکتوریها به PID دستوراتی که در آنها اجرا میشود مرتبط میباشد. اجازه دهید یک مثال بزنیم. در سیستم من، یک فولدر به نام /proc/12 هست.
کد PHP:
# cd /proc/12
# ls
کد PHP:
attr comm fd maps ns personality stack uid_map
autogroup coredump_filter fdinfo mem numa_maps projid_map stat wchan
auxv cpuset gid_map mountinfo oom_adj root statm
cgroup cwd io mounts oom_score sched status
clear_refs environ limits mountstats oom_score_adj sessionid syscall
cmdline exe loginuid net pagemap smaps task
در صورتی که دستور زیر را اجرا کنم :
کد PHP:
# cat /proc/12/status
کد PHP:
Name: watchdog/0
State: S (sleeping)
Tgid: 12
Ngid: 0
Pid: 12
PPid: 2
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
Threads: 1
SigQ: 0/7281
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
Seccomp: 0
Cpus_allowed: 1
Cpus_allowed_list: 0
در هر کدام از دایرکتوریهای عددی، شما یک فایل ساختاری مشابه خواهید داشت مهمترین آنها را با توضیح در زیر مثال میزنیم :
cmdline : خط فرمان پروسس
environ : متغییرهای محیطی
fd : مفسرهای فایل
limits : شامل اطلاعاتی درباره محدودیت های پروسس
mounts : اطلاعات مربوطه
شما همچنین ممکن است متوجه تعداد لینک در دایرکتوریهای عددی شوید :
cwd : لینکی به دایرکتوری در حال کار موجود (PWD) مربوط به پروسس
exe : لینکی به پروسس قابل اجرا
root : لینکی به دایرکتوری کاری پروسس
این مقاله باید شما را با دایرکتوری /proc آشنا کرده باشد. همچنین باید دیدی روی اینکه چگونه یک تعداد از دستورات همانند uptime, lsof, mount و ps اطلاعات آنها را کسب میکنند به دست آورده باشید.