فایل etc/inittab/ چیست

فایل etc/inittab/ چیست

وقتی کرنل لینوکس یا هر یونیکس دیگر در حاظه اصلی لود می شود اولین فرایندی که ایجاد می شود init با PID=1 است. init بعنوان والد یا جد بزرگ تمامی فرایند های درون سیستم است و نسل تمامی فرایند ها به init می رسد. init برای بدست آوردن Run Level پیش فرض یا default فایل inittab را می خواند و پی به سطح اجرایی پیش فرض می برد. ابتدای این فایل توضیحاتی از شرح استفاده و هدف فایل و همچنین توضیح سطوح اجرایی گفته شده است. خطی از این فایل نوشته شده :

This file describes how the INIT process should set up the system in a certain run-level

این فایل چگونگی تنظیم سیستم بر اساس یک سطح اجرایی خاص (پیش فرض) توسط init را توصیف می کند.

برای نمایش محتوای این فایل از دستور زیر استفاده کنید. توجه داشته باشید که محتوای فایل برای همه قابل خواندن است ولی تنها کاربر root حق تغییر در فایل را دارد. این مطلب بر اساس محتوای فایل inittab در CentOS 5 است و شاید با محتوای فایل inittab در سیستم شما تفاوت داشته باشد ولی اساس و ساختار فایل یکی است.

less  /etc/inittab

سطح اجرایی یا Run Level راهی برای توصیف آن چیز هایی است که سیستم عامل در اختیار شما قرار می دهد. بطور مثال Run Level با شماره 3 یعنی داشتن شبکه و سرویس هایی مانند DNS,DHCP و … ولی یک رابط گرافیکی یا X.org نداریم. هر Run Level دارای یک دایرکتوری در درون دایرکتوری etc/rc.d/ است که شکل کلی آنها بصورت rcx.d است که x عدد از 0 تا 6 است که معرف اعداد معادل سطوح اجرایی هستند. (می توانید این پست را بخوانید)

هر خط این فایل شامل 4 قسمت است. اولین بخش یک شناسه (ID) عدد یا حرفی منحصر به فرد است. شناسه ها متشکل از 1 تا 4 کارکتر هستند و معرف هر خط در این فایل هستند پس باید بصورت منحصر به فرد باشند. دومین بخش شماره (های) سطح (های) اجرایی است. سومین بخش یک عمل یا action است و بخش چهارم یک دستور یا Process و یا مسیر یک فایل است.

id:runlevel(s):action:process

اصلی ترین و اولین خط تعریف بصورت زیر است. در خط زیر id شناسه منحصر به فرد برای این خط، 5 عدد سطح اجرایی و  initdefault عمل یا action است. initdefault سطح اجرایی پیش فرض را تعیین می کند. سطح اجرایی پیش فرض در Redhat عدد 5 و در debian عدد 3 است. فرایند init خط به خط و از بالا به پایین این فایل را می خواند و به محض رسیدن به خط با شناسه id عدد 5 را می بیند و سپس عمل initdefault را می بیند و سطح اجرایی را 5 در نظر می گیرد و در نهایت سرویس های درون دایرکتوری etc/rc.d/rc5.d/ را start و یا kill می کند.

:id:5:initdefault

در مورد دومین بخش از خطوط این فایل، بطور مثال خط زیر action یا عمل sysinit را روی فایل etc/rc.d/rc.sysinit برای تمامی سطوح اجرایی انجام می دهد. چون دومین بخش از خط زیر خالی است، یعنی تمامی سطوح اجرایی (سطوح اجرایی 0 تا 6) که معادل این است تمامی اعداد را بنویسیم. دو خط زیر معادل هم هستند. خط های زیر باعث اجرای اسکریپت rc.sysinit در تمامی سطوح اجرایی می شود.

si::sysinit:/etc/rc.d/rc.sysinit

si:0123456:sysinit:/etc/rc.d/rc.sysinit

خطوط زیر ترمینال های 1 تا 6 را در سطوح اجرایی 2 تا 5 در اختیار کاربر قرار می دهد. tty ها ترمینال هایی هستند که با فشردن کلید های Ctrl+Alt+F1  تا F6 در اختیار شما قرار می گیرد. دومین بخش شامل اعداد 2 تا 5 است یعنی اینکه برای سطوح اجرایی 2 تا 5 استفاده می شود. اما چرا در خطوط زیر اعداد 0 یا 1 یا 6 وجود ندارد؟ چون سطوح اجرایی 0 و 6 به ترتیب برای reboot و shutdown است و سطح اجرایی 1 برای مد یا حالت تک کاربره که فقط مدیر یا root وجو دارد.

برخی از عمل ها یا action های متداول را که می توان نام برد :

  • respawn : وقتی یک فرایند خاتمه یا terminate می یاید بصورت خودکار راه اندازی مجدد می شود. یعنی همواره یک نسخه از فرایند در حافظه اصلی باقی می ماند مانند getty در شکل بالا که همیشه باید به شما یک ترمینال را بدهد (همواره اماده پاسخ گویی به در خواست شما مبنی بر داشتن یک ترمینال را انجام دهد). اگر دستور ps را بصورت زیر اجرا کنید می بنید که 6 تا ترمینال وجود دارند.

ps  -ef | grep  getty

حالا اگر با دستور kill بصورت زیر یکی از 6 فرایند بالا مانند 4032 را برای tty2 از بین ببریم و سپس دوباره دستور ps را بصور بالا اجرا کنیم می بینیم که دوباره فرایند tty2 با یک PID جدید ساخته شده است.

kill  -15  4032

  • sysinit : فرایند یا اسکریپت در طول boot شدن یا boot time اجرا می شود. action یا عمل sysinit باید حتمن پیش از اعمال boot یا bootwait انجام شود.
  • initdefault : سطح اجرایی که سیستم پس از بوت شدن باید وارد آن شود را تعیین می کند که همان سطح اجرایی پیش فرض است. اگر این action وجود نداشته باشد فرایند init از طریق کنسول از شما در خواست ورود یک عدد سطح اجرایی را می کند. بخش فرایند خالی است.
  • boot : فرایند در زمان بوت شدن اجرا می شود. بخش سطح اجرایی خالی است.
  • once : اسکریپت یا فرایند تنها یک بار پس از وارد شدن به سطح اجرایی تعیین شده اجرا می شود.
  • wait : اسکریپت یا فرایند پس از ورود به سطح اجرایی تعیین شده اجرا می شود تا زمانی که توسط init خاتمه یابد.
  • crtlaltdel : عملی که نوع پیش فرض shutdown شدن و تنظیمات آن را تعیین می کند. یک مثال از این خط بصورت زیر است. برای آشنایی با دستور shutdown و تنظیم این خط این پست را بخوانید.

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

اطلاعات بیشتر :