لینوکس یک سیستم عامل شگفت انگیز و قدرتمند است. به طور خاص، هسته لینوکس منبع بسیاری از ابرقدرت های آن است. ما سالهاست که از لینوکس استفاده می کنیم و از نسخه های زیادی از هسته لینوکس را تابحال دیده ایم.
اکثر کاربران و حتی sysadmin ها هرگز نیازی به کامپایل هسته ندارند. در اکثر توزیعها، کامپایل پیشفرض برای اکثر موارد استفاده کاملاً مناسب است. اما مواقعی وجود دارد که کمی ایجاد تغییرات تنظیمات سفارشی لازم است. خبر خوب این است که می توان هسته را به راحتی بدون کامپایل مجدد یا حتی راه اندازی مجدد تنظیم کرد.
هدف از این مقاله نمایش دقیق تمام دادههای هسته موجود برای مشاهده یا اصلاح نیست. این ادای احترام به یک نرم افزار باورنکردنی در سی و یکمین سالگرد راه اندازی آن می باشد.
فایل سیستم /proc چیست؟
سیستم /proc
فایل یکی از حیاتی ترین اجزای هسته است. این یک فایل سیستم مجازی است که فقط در حافظه وجود دارد. سیستم /proc
فایل توسط استاندارد سلسله مراتبی سیستم فایل لینوکس (FHS) به عنوان مکانی برای لینوکس برای ذخیره اطلاعات مربوط به سیستم، هسته و تمام فرآیندهای در حال اجرا بر روی هاست تعریف شده است. در نظر گرفته شده است که مکانی برای هسته برای افشای اطلاعات مربوط به خود برای تسهیل دسترسی به داده های مربوط به سیستم برای برنامه نویسان، توسعه دهندگان و sysadmin ها باشد.
جمع آوری این داده ها بر عملکرد کلی یک میزبان لینوکس تأثیر نمی گذارد. هسته لینوکس برای جمعآوری و ذخیرهسازی مداوم دادههای عملکردی طراحی شده است که میتواند توسط هر و همه ابزارهای نظارت بر عملکرد قابل دسترسی و نمایش باشد. ابزارها به آن داده ها دسترسی دارند تا آن ها را بخوانند و سپس آن ها را دستکاری کرده و در قالبی معنادار نمایش دهند. از آنجایی که این داده ها قبلاً در /proc
سیستم فایل ذخیره شده اند، از فراخوانی عملکرد پیچیده و وقت گیر به قسمت های داخلی هسته جلوگیری می کند.
برخی از داده های موجود در /proc
سیستم فایل برای تنظیم هسته استفاده می شود. مقادیر موجود در آن فایل ها را می توان به راحتی با ابزارهای ساده و آشنای لینوکس تغییر داد.
مشاهده داده ها
هنگامی که به عنوان پنجره ای به وضعیت سیستم عامل و نمای آن از سیستم و سخت افزار استفاده می شود، هسته دسترسی آسان به تقریباً هر بیت اطلاعاتی را که ممکن است به عنوان یک sysadmin بخواهید فراهم می کند. تمام ابزارهای جالبی که sysadmin ها برای دسترسی به داده ها در /proc
سیستم فایل استفاده می کنند، برای مشاهده وضعیت سیستم عامل و به دست آوردن داده های مورد نیاز، به هسته بستگی دارد.
با مشاهده برخی از داده های موجود شروع کنید. ابتدا /proc
فهرست کاری فعلی (PWD) را ایجاد کنید و محتویات را فهرست کنید. بسیاری از این ها دایرکتوری و برخی دیگر فایل هستند. ما از شبیه ساز ترمینال Konsole استفاده می کنیم. رنگ پیشفرض دایرکتوریها آبی است و فایلها رنگ متن ترمینال هستند که ما آن را روی کهربا تنظیم کرده ایم. پیوندهای نمادین فیروزه ای هستند.
همه دایرکتوری های عددی نشان دهنده شناسه فرآیند (PID) یک فرآیند هستند و حاوی داده های مورد نیاز برای مدیریت آن فرآیند توسط هسته هستند. فایلهای نامگذاریشده – برخلاف فهرستهای نامگذاریشده – حاوی دادههای مربوط به نام فایل هستند. دایرکتوری های نامگذاری شده معمولا حاوی یک سری فایل و زیر شاخه های مرتبط با نام دایرکتوری هستند.
یک مثال stat
فایل است. این فایل حاوی داده های آماری مربوط به CPU های سیستم است. cat
برای مشاهده آن فایل می توانید از دستور استفاده کنید. این کار را چندین بار انجام دهید یا از دستور زیر به عنوان root استفاده کنید تا فایل را هنگام تغییر مشاهده کنید:
# watch cat /proc/stat
این watch
دستور به طور پیش فرض هر دو ثانیه یک بار این دستور را تکرار می کند تا زمانی که از Ctrl+C برای شکستن استفاده کنید. همچنین می توانید فاصله زمانی متفاوتی را مشخص کنید. برای این اطلاعات صفحه مرد را بخوانید.
یکی دیگر از فایل های جالب این است proc/meminfo
. سعی کنید آن یکی را برای چند دقیقه تماشا کنید. همه ابزارهای تعیین مشکل و نظارت مورد علاقه ما از محتویات /proc
برای به دست آوردن داده های خود استفاده می کنند.
free
به عنوان مثال به دستور نگاه کنید :
# free
total used free shared buff/cache available
Mem: 32726880 727108 31104776 1560 894996 31610372
Swap: 16777208 0 16777208
این دستور بعدی نتایج free
دستور و همچنین meminfo
فایل را به طور همزمان نمایش می دهد. مطمئن شوید که نقل قول های یک و دو را درست دریافت کنید. خط #
نمادها کمی تفکیک بصری بین خروجیهای دو دستور را فراهم میکند و میتواند تا زمانی که شما نیاز دارید باشد تا سرنخ بصری کافی برای خود فراهم کنید. ما اینجا را کوتاه کردیم تا همه در یک خط نشان داده شود.
# watch 'free ; echo "###########" ; cat /proc/meminfo | head -20'
تفسیر دادههایی که از این دستورات خروجی میشوند خارج از محدوده این مقاله است، اما میتوان آن را در بخش 1.14، صفحه /proc از توضیحات LFSH ، در وبسایت پروژه اسناد لینوکس یافت.
این man 5 proc
صفحه همچنین دارای توضیحات خوبی از محتویات همه /proc
فایل ها است.
دستور free
تنها یکی از ابزارهای متعددی است که به شما امکان می دهد وضعیت هسته در حال اجرا را در زمان واقعی مشاهده کنید.
موارد دیگری که ما به آن علاقه داریم عبارتند از top
، htop
و glances
، که همگی نمای جامعی از سیستم در حال اجرا را نشان می دهند. با استفاده از طرحبندیهای متفاوت و گزینههای مختلف برای پیکربندی نحوه نمایش دادهها، همگی میتوانند میزان استفاده از حافظه و تعویض را نشان دهند. استفاده فردی و کلی از CPU؛ لیستی از فرآیندهای سیستم و کاربر؛ و دادههای مربوط به هر فرآیند مانند حافظه، استفاده از CPU، کل زمان اجرای فرآیند، PID و شناسه فرآیند والد (PPID).
این سه ابزار، به همراه renice
دستور، میتوانند فرآیندهای در حال اجرا را renice یا از بین ببرند. Renicing یک فرآیند، داده های موجود در /proc/PID/stat
فایل را تغییر می دهد. داده های این فایل پیچیده هستند و فایل توسط ویرایشگرها یا تغییر مسیر قابل نوشتن نیست، بنابراین لازم است از ابزارهای renice موجود استفاده کنید.
ابزارهای دیگری که ما اغلب استفاده می کنیم عبارتند از lsblk
, iptop
, lsusb
, lspci
و سایر ابزارهای مرتبط که سخت افزار را فهرست و مدیریت می کنند. هر یک از ابزارهای متعددی که فرآیندها، حافظه، شبکه، سخت افزار متصل شده و هر چیز دیگری را مدیریت می کنند از /proc
سیستم فایل برای انجام این کار استفاده می کنند.
ایجاد تغییرات در هسته در حال اجرا
این /proc
فایل سیستم همچنین به گونه ای طراحی شده است که در صورت لزوم، دسترسی به تغییر بسیاری از مقادیر پیکربندی را فراهم می کند تا به شما امکان می دهد سیستم در حال اجرا را بدون نیاز به راه اندازی مجدد پس از ایجاد تغییرات تنظیم کنید.
یکی از اولین چیزهایی که باید روی هاست لینوکس که برای روتر استفاده می کنم تنظیم کنم این است که آن را به عنوان روتر فعال کنم. این کار با تنظیم محتوای فایل /proc/sys/net/ipv4/ip_forward
روی 1
. چندین روش برای ایجاد تغییرات در متغیرهای تنظیم هسته وجود دارد و همه آنها به سادگی مقدار موجود در /proc
فایل سیستم را تغییر می دهند.
دو روش اول فقط موقتی هستند و باید بعد از هر بار راه اندازی مجدد انجام شوند.
ابتدا می توانم از دستور زیر استفاده کنم:
# echo 1 > /proc/sys/net/ipv4/ip_forward
دستور sysctl
دقیقاً همین کار را می کند: مقدار آن فایل را 1 تنظیم می کند:
# sysctl -w net.ipv4.ip_forward = 1
می توانید ارزش هر فایلی را بررسی کنید:
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
یا:
# cat sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
اما همه این تغییرات فقط گذرا هستند و در هر بوت به مقادیر پیشفرض خود باز میگردند.
دائمی کردن تغییرات
دائمی کردن این تغییرات بسیار آسان است. فقط خطوط زیر را به /etc/sysctl.conf
فایل یا به یک فایل جدید در اضافه کنید /etc/sysctl.d
. این فایل ها خوانده می شوند و برای تنظیم پارامترهای هسته در زمان بوت استفاده می شوند. شما می توانید برخی از گزینه های کرنل دیگر را که برای رفع نیازهای خود تنظیم کرده ام در این فایل مشاهده کنید:
################################################################################ # Local-sysctl.conf #
# #
# Local kernel option settings. #
# Install this file in the /etc/sysctl.d directory. #
# #
# Use the command: sysctl -p /etc/sysctl.d/local-sysctl.conf to activate. #
# #
################################################################################
################################################################################
# Local Network settings - Specifically to disable IPV6 #
################################################################################
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
################################################################################
# And to make this a router #
################################################################################
net.ipv4.ip_forward = 1
################################################################################
# Virtual Memory Swappiness #
################################################################################
# Set swappiness
vm.swappiness = 13
سیستم /proc
فایل “نقطه واحد حقیقت” (SPOT) برای به دست آوردن اطلاعات در مورد سیستم در حال اجرا و تغییر متغیرهای تنظیم هسته است. ما اغلب از آن استفاده می کنیم، مستقیم یا غیرمستقیم، با استفاده از ابزارهای رایج گنو و سایر ابزارهایی که قبلاً در هر توزیع لینوکس ارائه شده است.
توانایی تنظیم هسته لینوکس در حالی که در حال اجرا است یکی از قدرتمندترین جنبه های استفاده از لینوکس است. این امکان ایجاد تغییرات در پارامترهای هسته را در حین اجرا و بدون نیاز به راه اندازی مجدد فراهم می کند.