سلام دوستان . مدتی آموزش این دوره متوقف شده بود اما دوباره این آموزش ها رو در پیش رو داریم . هم چنین قرار شده که حجم مطالب هر قسمت را کم تر کنیم یعنی به جای این که داخل هر قسمت به 3 الی 5 مبحث بپردازیم , تمرکز خودمون رو روی یک مبحث قرار دهیم لذا در این قسمت به مبحث 101.3 Change runlevels and shutdown or reboot system خواهیم پرداخت .
طبق روال گذشته ابتدا به متن زیر که از وب سایت اصلی LPIC تهیه شده است توجه کنید :
101.3 Change runlevels and shutdown or reboot system
Description : Candidates should be able to manage the runlevel of the system. This objective includes changing to single user mode, shutdown or rebooting the system. Candidates should be able to alert users before switching run level and properly terminate processes. This objective also includes setting the default run level. It also includes basic feature knowledge of potential replacements to init.
Key Knowledge Areas :
Set the default runlevel.
Change between run levels including single user mode.
Shutdown and reboot from the command line.
Alert users before switching runlevels or other major system event.
Properly terminate processes.
Knowledge of basic features of systemd and Upstart
Terms and Utilities
/etc/inittab | shutdown | init | /etc/init.d | telinit
مقدمه :
ابتدا باید در مورد مفهوم runlevel صحبت کنیم چرا که پایه و اساس دیگر قسمت های این مبحث از همین runlevel شروع می شود . به عنوان مثال خاموش و یا ریست کردن سیستم و …
در گنو لینوکس هفت runlevel داریم که از صفر شروع شده و 6 ختم می شود . هر یک از این runlevel ها را می توان همانند یک طبقه در نظر گرفت . در هر یک از این طبقات یک سری از ابزار ها و برنامه ها و سرویس ها و … فعالیت می کنند . یعنی از قبل برایشان تعریف شده که مثلا سرویس آپاچی در این طبقه و یا runlevel شروع به کار کند . طبیعتا می توان داخل این طبقات شد و نظم اجرای برنامه در هر طبقه را تغییر داد و یا این که اولویت اجرای یک برنامه را از یک طبقه به طبقه ای بالاتر و یا پایین تر تغییر داد .
پس می توان این طور جمع بندی کرد که runlevel همانند طبقاتی می ماند که در هر یک از این طبقات , برنامه ها و سرویس ها و … در یک صف منظم و با اولویت هایی مشخص اجرا می شوند .
ابتدا فرض می کنیم که معنی runlevel شماره ی 0 یعنی طبقه ی همکف برابر با خاموش بودن سیستم است . یعنی اگر من سیستم را به runlevel شماره ی 0 ببرم , عملا سیستم را خاموش کرده ام . دقیقا مانند زمانی که به صورت گرافیکی اقدام به خاموش کردن سیستم می کنیم .
همچنین این گونه فرض می کنیم که runlevel شماره ی 6 برابر با ریست و یا reboot شدن سیستم است . یعنی اگر من سیستم را به runlevel شماره ی 6 ببرم , عملا سیستم را یک بار reboot کرده ام . دقیقا همانند زمانی که به صورت گرافیکی اقدام به ریست کردن سیستم می کنیم .
پس می توان این نکته را استخراج کرد که هر برنامه ای که باعث شود سیستم ریست و یا خاموش بشود , از این مفهوم یعنی runlevel ها ی 0 و 6 پیروی کرده است . ( از برنامه های تحت خط فرمان بگیرید تا خاموش و ریست کردن سیستم به صورت گرافیکی )
با توجه به گفته های بالا می توان نتیجه گرفت که 5 طبقه و یا runlevel دیگر باقی می ماند که در مورد آن ها بحث خواهیم کرد .
نظم و اولویت اجرای برنامه ها در هر توزیع متفاوت است یعنی ممکن است یک سرویس در runlevel شماره ی 4 یک توزیع red hat بیسی اجرا شود در حالی که همان سرویس در runlevel شماره ی 3 یک توزیع debian بیسی اجرا شود . به معنای دیگر به طور 100٪ یک نظم همگانی در میان تمامی توزیع ها وجود ندارد . همراه با این که هر شخص می تواند بسته به کار و نیاز خود , این اولویت ها را تغییر دهد . پس به طور حتم نمی توان گفت که یک سرویس و یا یک برنامه در چه runlevel ای اجرا می شود اما به طور کلی می توان برای هر سطح وظایفی را در نظر گرفت که البته این در توزیع های مختلف متفاوت است .
به عنوان مثال :
Ubuntu runlevels : Code Information 0 Halt 1 Single-user mode 2 Graphical multi-user with networking 3-5 Unused but configured the same as runlevel 2 6 Reboot
و یا
Red Hat Linux/Fedora runlevels : Code Information 0 Halt 1 Single-user text mode (without networking) 2 Not used (user-definable) 3 Full multi-user text mode 4 Not used (user-definable) 5 Full multi-user graphical mode (with an X-based login screen) 6 Reboot
برای اطلاعات بیش تر به لینک زیر مراجعه کنید :
http://en.wikipedia.org/wiki/Runlevel
Change between run levels including single user mode …

init 3
اگر مراحل رو دنبال کرده باشید خواهید دید که محیط گرافیکی غیرفعال شده و محیط کنسول برای ما باز می شود . دلیل این امر این است که محیط گرافیکی در runlevel شماره ی 5 اجرا می شود . هم چنین اگر دوباره دستور runlevel را اجرا کنیم , خروجی ای مانند عکس زیر دریافت خواهیم کرد :
خروجی دستور بالا یعنی از runlevel شماره ی 5 به runlevel شماره ی 3 آمده ایم و هم اکنون در runlevel شماره ی 3 هستیم .
/etc/rc3.d/ /etc/rc4.d/
اگر کمی توجه کنید خواهید دید که تمامی فایل های داخل این دایرکتوری با دو حرف S یا K شروع شده اند که حرف S مشخصه ی فعال و حرف K مشخصه ی غیر فعال بودن آن برنامه و یا سرویس و … را دارد . یعنی اگر سرویسی در ابتدای اسمش K داشته باشد , اجرا نخواهد شد . پس برای مقایسه ی برنامه و سرویس ها و … در این دو runlevel باید به دنبال لینک هایی باشیم که با حرف S شروع شده اند . یعنی :
ls -lh S*
هم چنین می توانیم از طریق تعداد خطوط نیز این مقایسه را انجام دهیم . یعنی :
ls -lh S* | wc -l
از روی مشاهده ها می توان نتیجه گرفت که runlevel شماره ی 4 همان runlevel شماره ی 3 می باشد .
/etc/rc0.d/ /etc/rc1.d/ /etc/rc2.d/ /etc/rc3.d/ /etc/rc4.d/ /etc/rc5.d/ /etc/rc6.d/
#! /bin/bash date >> /root/date.text
در مرحله ی بعد باید به این اسکریپت پرمیشن اجرا بدیم پس :
chmod +x date.sh
cp date.sh /etc/rc4.d/S99date
نکته : می توانید به جای کپی کردن اسکریپت به دایرکتوری rc4.d از آن یک symlink تهیه کنیم .
/etc/inittab
/etc/init.d/
/etc/init.d/sshd restart
init 0 init 6
shutdown [OPTION]... TIME [MESSAGE]
shutdown -r now
shutdown -h +15
shutdown -h 16:00 "kar haye khodetono save konid"
shutdown -r -t 30
chkconfig --list sshd
همان طور که مشاهده می کنید , سرویس ssh در تمامی runlevel ها غیر فعال است .
chkconfig --level 35 sshd on
طبیعتا همین روند را می توان برای غیر فعال کردن یک سرویس در runlevel ای خاص استفاده کرد . به این صورت که کافیست از عبارت off به جای on استفاده کنیم .
در آخر اگر قصد نوشتن یک اسکریپت و اضافه کردن آن به chkconfig را دارید , پیشنهاد می شود این ارسال را مطالعه نمایید .
منبع : او اس لرن دات آی آر | http://OSLearn.ir
نویسنده :E2MA3N