بررسی runlevel در لينوکس
ببينيم لينوکس را وقتي روشن ميکنيم در چه شرايطي قرار ميگيرد؟
سيستمعامل لينوکس به مح بالا آمدن در يکي از حالا زير قرار دارد:
0) shut down runlevel0
1) single user mode runlevel 1
2) Multi user mode runlevel 2
3) full multi user runlevel 3
4) Graphical mode runlevel 5
5) Reboot runlevel 6 Runlevel4 روي pc هاي intel نيست ولي روي mainframe ها و solaris و … وجود دارد.
هاست لینوکس
Runlevel0 يعني shut down . Runlevel 1 يعني single user mode . فق ط و فق ط Admin ب ا کنس ول ک ار م يکن د.
Runlevel 2 علاوه بر Runlevel 1 ، network را هم به ما مي دهد و ميتوانيم کاربران ديگري هم داشته باشيم.
براي اينکه بفهميم در چه Run levele اي هستيم اين فرمان را ميزنيم:
[N.pardis@Lpi1~]$Runlevel
فرمان ديگريکه در اين خصوص وجود داردفرمان روبهرو مي باشد:
[N.pardis@Lpi1~]$who -r
فرمان ديگريدر اين خصوص:
[N.pardis@Lpi1~]$ps -aef | less
a :all
e :extended
f :full
سرور مجازی ایران
اين فرمان option هايش استاندارد نيست. و در نرر بگيريد که اين فرمان هم به ما runlevel را ميدهد.
در هر محيطي و يا در هر runlevel اي ما ميتوانيم محيط گرافيکال داشته باشيم که يک فرمان داريم به نام Startx که
مثلاً در runlevel1 ميزنيم Startx که محيط گرافيکال هم داشته باشيم. پ س متوج ه ش ديم ک ه runlevel چيس ت و چ ه
شمارههايي دارد.
وقتي فايل روبهرو را باز کنيم اوّلين خطي که #Comment نيست شماره runlevel ميباشد.
[N.pardis@Lpi1~]$less /etc/inittab
اگر ما 015 بگذاريم يعني runlevel اي که ميخواهيم برويم 5 است اگر 013 بگذاريم يعني runlevel3 .
در runlevel2 ما network يا showing نداريم. در runlevel6 که Reboot است اگر بگذاريم مدام Restart ميشود. فقط
زماني که بخواهيم يک کامپيوتر را Test کنيم ميگذاريم روي آن تاحافره و cpu و … را تست کنيم
اگر ما فرمان init را به همراه يکي از شمارههاي runlevel ها بزنيم آن runlevel اجرا ميشود. به طور مثال:
[N.pardis@Lpi1~]$man init
[N.pardis@Lpi1~]$init 0
[N.pardis@Lpi1~]$init 3
)کاربرد و تفاو 2 و 3 چيست؟ 2 شبکه ميدهد 3 هم شبکه network ميدهد. 2 زماني است که يک لينوکس داريم و مثلاً دو
نفر کار ميکنند. ولي در 3 نرمافزارهاي nfs ( network file system ( بالا ميآيند مثلاً دو لينوکس در دو ات اق ب ه ه م ش بکه
ميشوند(.
در فايل inittab که همانگونه که ملاحره ميگردد runlevel پيشفرض 5 ميباشد ولي در debian2 محيط گرافيکالب ه ط ور
پيش فرض وجود دارد.
فرمت File چهار تکه دارد. id حداکثر 1 حرفي بايد باشد.
id: 5: init default:
id : identifier ، اين فيلد شناسه نام دارد و حداکثر 1 حرف ميباشد.
5 : فيلد دوّم runlevel است. مثلاً 035
ميخواهيم نرمافزار راداربه نام mingerty در سيستم طوريتنريم شود و قرار داده شود که همواره يک نسخهي آن در
حافره باشد. و تا kill کرديم و از بين برديم دوباره بيايد داخل حافره؟
يک فايلي دارد که ميداند در چه runlevel اي است. init وقتي ميآيد داخل اي ن خ ط را م يخوان د و م يفهم د در چ ه
runlevel اي بايد باشد و ميفهمد چه نرمافزاري را بياورد در حافره و با چه runlevel اي. اسم نرمافزار ما مثلاً Test اس ت و
ميخواهيم همواره در هر runlevel که بوديم يک نسخه از آن در حافره باشد.
اگر در فرمت inittab در runlevel در فيلد runlevel چيزي نبود و خالي بود يعني در تمام runlevel ها اجرا شود.
Id: : Action: process
فيلد Action نوع فعاليتي که init خواهد داشت را اعلام ميکند. که ميتواند مقادير زير را بگيرد:
Respawn : اگر باشد يک نرمافزار يعني همواره يک کپي از پروسس در حافره باشد نرمافزار را kill کنيم دوباره بر ميگردد.
off : اگر پروسس هيچگاه اجرا نگردد.
Wait : init منترر پايان اين پروسس گردد.
Once : پروسس فقط يک بار اجرا گردد.
Sysinit : پروسس در ابتداي بالا آمدن سيستم اجرا گردد.
Initdefault : runlevel پيش فرض.
فيلد process برنامهاي که تحت runlevel اجرا خواهد شد را نشان ميدهد که ما در اين قسمت ميتوا نيم برنامهي خودمان را
به نام mingrty قرار دهيم.
1:235:respawn: /sbin/minegty tty1.
براي کشتن يک نرمافزار اين فرمان را ميزنيم و death of child مرگ فرزند ميباشد.
[N.pardis@Lpi1~]$kill id-number
[N.pardis@Lpi1~]$man -a signal
حال برنامهي ما تمام شد و آن را در فايل init قرار ميدهيم. که init برايش الويت معنايي ندارد و اينکه در کجاي حافره باش د.
کرنل با الويت ها کار دارد و تشخيص ميدهد.
در لينوکس اگر – Ctrl+Alt+del بزنيد init بيدار ميشود و 3 ثانيه وقت دارد و در تمام Runlevel ها اجرا ميشود.
[N.pardis@Lpi1~]$less /etc/inittab
در فايل init مثلاً مشخص شده است که وقتي برق رفت چند دقيقه بعد به عنوان مث ال خب ر ي را ب را ي هم ه ک اربران از ط رف
Admin به وسيله فرمان wall )مخفّف write all ( بنويسد و به همه خبر دهد. به وسيله اين فرمان براي همه يک خبري م ي-
فرستيد.
[N.pardis@Lpi1~]$wall
News
Ctrl+d
بخشي از فايل inittab يعني آخرين خط آن تعيين ميکند که محيط گرافيکال در چه runlevel اي بالا بيايد:
# Runxdm in runlevel 5
x:5:respawn: /etc/X11/prefdm -nodaemon
ميتوانيم به جاي 5 عدد 1 را بگذاريم تا در runlevel1 هم محيط گرافيکال داشته باشيم پس اين خيلي خيلي نکته مهمي است
که حتماً نبايد در runlevel5 باشيم تا محيط گرافيکال داشته باشيم.
يک فرمان ديگريوجود دارد به نام switch desk که به ما ميگويد با چه محيط گرافيکالي ميخواهيد کار کنيد Gnome ، kde
و … .
[N.pardis@Lpi1~]$less/etc/rc.d/rc
فرمان بالا يک shell script فوقالعاده مفصّل است که چک ميکند اگر هر چيزي بود چه کاري انجام ده د. ا ي ن فرم ان rc در
runlevel5 اجرا ميشود و اين script تعداد زيادي نرمافزار را اجرا خواهد نمود.
15:5:wait: /etc/rc.d/rc5
براي ت يير runlevel ميتوانيم يکي از روشهاي زير را به کار ببريم: اگر Manual اين دو را بخوانيم هر دو يکي هستند.
شماره init runlevel 1(
شماره felint runlevel 0(
براي down يا Reboot نمودن سيستم ميتوان يکي از دستورالعملهاي زير را اجرا نمود.
init0 / shutdown / init6 /
reboot / power off/ halt/ Ctrl+Alt+Del
لينوکس و ويندوز وقتي بالا ميآيند چک ميکنند اگر halt کار نکند فايدهاي ندارد. دستور halt ميتواند cpu را نگ ه دارد و ي ا
متوقف کند. اگر halt کار نکند وقتي لينوکس داخل شود ديگر نميتواند خارج شود. اگر halt کار نکند پس چطور چک ميکن د
که halt کار ميکند؟ در LPI2 خواهيم گفت.
chk config با اجراي اين فرمان ميتوانيم بفهميم چه سرويسهايي در چه runlevel هايي بالا هستند.
[N.pardis@Lpi1~]$chk config –list | less
حالا ميخواهيم dhcpd را Active کنيم
[N.pardis@Lpi1~]$chk config –level 1 dhcp on
[N.pardis@Lpi1~]$chk config — level 1 sendmail on فرمان kill -l 1 نيز باعث ميگردد که inittab توسط init مجدداً خوانده شود.