របៀបប្រើពាក្យបញ្ជា Init ក្នុងលីនុច

Init គឺជាមាតាបិតានៃដំណើរការទាំងអស់។ តួនាទីចម្បងរបស់វាគឺបង្កើតដំណើរការពីស្គ្រីបដែលផ្ទុកនៅក្នុងឯកសារ / etc / inittab (សូមមើល inittab (5)) ។ ឯកសារនេះជាទូទៅមានធាតុដែលបណ្តាលឱ្យ ផ្តេសផ្តា សលើបន្ទាត់នីមួយៗដែលអ្នកប្រើប្រាស់អាចចូលបាន។ វាក៏គ្រប់គ្រងដំណើរការស្វយ័តដែលតម្រូវដោយប្រព័ន្ធពិសេសណាមួយ។

កម្រិតរត់

កម្រិតរត់ គឺជាការកំណត់រចនាសម្ព័ន្ធកម្មវិធីនៃប្រព័ន្ធដែលអនុញ្ញាតឱ្យមានក្រុមដំណើរការដែលបានជ្រើសប៉ុណ្ណោះ។ ដំណើរការដែលបង្កើតដោយ init សម្រាប់កម្រិតរត់ទាំងនេះនីមួយៗត្រូវបានកំណត់ក្នុងឯកសារ / etc / inittabInit អាចស្ថិតក្នុង ដំណាក់កាល មួយនៃ 8 កម្រិតរត់: 0-6 និង Ss ។ កម្រិតរត់ត្រូវបានផ្លាស់ប្តូរដោយមានអ្នកប្រើពិសេសដែលរត់ telinit ដែលផ្ញើសញ្ញាត្រឹមត្រូវទៅ init ហើយប្រាប់វាថាកម្រិតកម្រិតណាដើម្បីផ្លាស់ប្តូរ។

កម្រិតរត់ 0 , 1 និង 6 ត្រូវបានរក្សា។ កម្រិតរត់ទី 0 ត្រូវបានប្រើដើម្បីផ្អាកប្រព័ន្ធកម្រិតរត់ទី 6 ត្រូវបានប្រើដើម្បីចាប់ផ្តើមប្រព័ន្ធឡើងវិញហើយកម្រិតរត់ទី 1 ត្រូវបានប្រើដើម្បីឱ្យប្រព័ន្ធធ្លាក់ចុះទៅជារបៀបអ្នកប្រើតែមួយ។ Runlevel S មិនមានន័យថាត្រូវប្រើដោយផ្ទាល់នោះទេប៉ុន្តែបន្ថែមទៀតសម្រាប់ស្គ្រីបដែលត្រូវបានប្រតិបត្តិនៅពេលចូលទៅកាន់កម្រិតរត់ 1. សម្រាប់ព័ត៌មានបន្ថែមសូមមើលទំព័រមុខសម្រាប់ បិទ (8) និង inittab (5) ។

កម្រិតរត់ 7-9 ក៏មានសុពលភាពផងដែរទោះបីជាមិនមានឯកសារច្បាស់លាស់ក៏ដោយ។ នេះដោយសារតែ "ប្រពៃណី" យូនីកធម្មតាមិនប្រើវា។ ក្នុងករណីដែលអ្នកចង់ដឹងចង់ឃើញកម្រិតរត់និង S មានកម្រិតដូចគ្នា។ នៅខាងក្នុងពួកគេគឺជាឈ្មោះក្លែងក្លាយសម្រាប់កម្រិតរត់ដូចគ្នា។

ចាប់ផ្ដើម

បន្ទាប់ពី init ត្រូវបានគេចាត់ទុកថាជាជំហានចុងក្រោយនៃលំដាប់ចាប់ផ្ដើមខឺណែលវារកមើលឯកសារ / etc / inittab ដើម្បីមើលថាតើមានធាតុរបស់ initdefault ប្រភេទណា (សូមមើល inittab (5)) ។ ធាតុ initdefault កំណត់កម្រិតរត់ដំបូងរបស់ប្រព័ន្ធ។ ប្រសិនបើគ្មានធាតុបែបនេះទេ (ឬគ្មាន / etc / inittab ទាំងអស់) កម្រិតរត់ត្រូវបានបញ្ចូលនៅកុងសូលប្រព័ន្ធ។

Runlevel SS នាំយកប្រព័ន្ធទៅជារបៀបអ្នកប្រើតែម្នាក់ហើយមិនត្រូវការឯកសារ / etc / inittab ។ ក្នុងរបៀបអ្នកប្រើតែមួយសែល root ត្រូវបានបើកនៅលើ / dev / console

នៅពេលបញ្ចូលរបៀបអ្នកប្រើទោលនោះ init នឹង អានសឺមី ioctl (2) របស់កុងសូលពី /etc/ioctl.save ។ ប្រសិនបើឯកសារនេះមិនមានទេនោះ init ចាប់ផ្តើមបន្ទាត់នៅ 9600 baud និងជាមួយការកំណត់ CLOCAL ។ នៅពេល init ចាកចេញពីរបៀបអ្នកប្រើតែមួយនោះវានឹងផ្ទុកការកំណត់ ioctl របស់កុងសូលនៅក្នុងឯកសារនេះដូច្នេះវាអាចប្រើពួកវាឡើងវិញសម្រាប់សម័យអ្នកប្រើតែមួយបាន។

នៅពេលបញ្ចូលរបៀបអ្នកប្រើច្រើនលើកដំបូង init ធ្វើធាតុ ចាប់ផ្ដើម និង bootwait ដើម្បីអនុញ្ញាតឱ្យប្រព័ន្ធឯកសារត្រូវបានម៉ោនមុនពេលអ្នកប្រើអាចចូលបាន។ បន្ទាប់មកធាតុទាំងអស់ដែលផ្គូផ្គងកម្រិតរត់ត្រូវបានដំណើរការ។

ពេលចាប់ផ្តើមដំណើរការថ្មីមួយ init ពិនិត្យមើលថាតើឯកសារ / etc / initscript មាន។ ប្រសិនបើវាដំណើរការវាប្រើស្គ្រីបនេះដើម្បីចាប់ផ្តើមដំណើរការ។

រាល់ពេលដែលកូនបញ្ចប់វា init កត់ត្រាការពិតនិងមូលហេតុដែលវាបានស្លាប់នៅក្នុង / var / run / utmp និង / var / log / wtmp ប្រសិនបើឯកសារទាំងនោះមាន។

ការផ្លាស់ប្តូរកម្រិតរត់

បន្ទាប់ពីវាបង្កើតដំណើរការទាំងអស់ដែលបានបញ្ជាក់ init ទន្ទឹងរង់ចាំមួយក្នុងចំណោមកូនចៅរបស់វាដំណើរការដើម្បីស្លាប់សញ្ញាភ្លើងបំភ្លឺឬរហូតដល់វាត្រូវបានបង្ហាញដោយ telinit ដើម្បីផ្លាស់ប្តូរកម្រិតរត់របស់ប្រព័ន្ធ។ នៅពេលដែលលក្ខខណ្ឌមួយក្នុងចំណោមលក្ខខណ្ឌបីខាងលើកើតមានឡើងវាពិនិត្យឯកសារ / etc / inittab ម្តងទៀត ។ ធាតុថ្មីអាចត្រូវបានបន្ថែមទៅឯកសារនេះនៅពេលណាមួយក៏បាន។ ទោះជាយ៉ាងណាក៏ដោយនៅតែនៅតែរង់ចាំលក្ខខណ្ឌមួយក្នុងចំណោមលក្ខខណ្ឌទាំងបីខាងលើ។ ដើម្បីផ្ដល់ការឆ្លើយតបភ្លាមៗពាក្យបញ្ជា qq telinit អាចភ្ញាក់ឡើងដើម្បីពិនិត្យឯកសារ / etc / inittab ឡើងវិញ។

ប្រសិនបើ init មិនមែននៅក្នុងរបៀបអ្នកប្រើតែមួយហើយទទួលសញ្ញាបន្ទុកថាមពល (SIGPWR) វាអានឯកសារ / etc / powerstatus ។ បន្ទាប់មកវាចាប់ផ្តើមពាក្យបញ្ជាដែលមានមូលដ្ឋានលើមាតិកានៃឯកសារនេះ:

F (AIL)

ថាមពលបានបរាជ័យ UPS កំពុងផ្តល់ថាមពល។ ប្រតិបត្តិធាតុ powerwait និង powerfail

យល់ព្រម)

ថាមពលត្រូវបានស្តារឡើងវិញ, ដំណើរការធាតុ powerokwait

L (OW)

ថាមពលខូចហើយ UPS មានថ្មតិច។ ប្រតិបត្តិធាតុ powerfailnow

ប្រសិនបើ / etc / powerstatus មិនមានឬមានអ្វីផ្សេងទេនោះអក្សរ F , OL , init នឹងមានឥរិយាបទដូចជាប្រសិនបើវាបានអានអក្សរ F

ការប្រើ SIGPWR និង / etc / powerstatus ត្រូវបានលើកទឹកចិត្ត។ នរណាម្នាក់ដែលចង់ធ្វើអន្តរកម្មជាមួយ init គួរតែប្រើប៉ុស្តិ៍ត្រួតពិនិត្យ / dev / initctl - សូមមើលកូដប្រភពរបស់កញ្ចប់ sysvinit សម្រាប់ឯកសារបន្ថែមអំពីវា។

នៅពេល init ត្រូវបានស្នើឱ្យផ្លាស់ប្តូរកម្រិតរត់វានឹងបញ្ជូនសញ្ញាព្រមាន SIGTERM ទៅគ្រប់ដំណើរការទាំងអស់ដែលមិនបានកំណត់នៅក្នុងកម្រិតរត់ថ្មី។ បន្ទាប់មកវារង់ចាំរយៈពេល 5 វិនាទីមុនពេលបញ្ចប់ដំណើរការទាំងនេះតាមរយៈសញ្ញា SIGKILL ។ ចំណាំថា init សន្មតថាដំណើរការទាំងអស់នេះ (និងកូនចៅរបស់ពួកគេ) នៅតែមាននៅក្នុងក្រុមដំណើរការដូចគ្នាដែល init បង្កើតពីដើមមកសម្រាប់ពួកគេ។ ប្រសិនបើដំណើរការណាមួយផ្លាស់ប្តូរសមាជិកក្រុមដំណើរការនោះវានឹងមិនទទួលសញ្ញាទាំងនេះទេ។ ដំណើរការបែបនេះចាំបាច់ត្រូវបញ្ចប់ដោយឡែកពីគ្នា។

Telinit

/ sbin / telinit ត្រូវបានតភ្ជាប់ទៅ / sbin / init ។ វាត្រូវការអំណះអំណាងមួយតួអក្សរនិងសញ្ញា init ដើម្បីអនុវត្តសកម្មភាពសមរម្យ។ អាគុយម៉ង់ដូចខាងក្រោមនេះជាការណែនាំដល់ telinit :

0 , 1 , 2 , 3 , 4 , 56

ប្រាប់ init ដើម្បីប្តូរទៅកម្រិតរត់ជាក់លាក់។

a , b , c

ប្រាប់ init ឱ្យដំណើរការតែធាតុ / etc / inittab ដែលមានកម្រិតរត់ a , bc ប៉ុណ្ណោះ។

Qq

ប្រាប់ init ដើម្បីត្រួតពិនិត្យឯកសារ / etc / inittab

Ss

ប្រាប់ init ដើម្បីប្តូរទៅកាន់របៀបអ្នកប្រើតែម្នាក់។

Uu

ប្រាប់ init ដើម្បីប្រតិបត្តិម្តងទៀត (ថែរក្សារដ្ឋ) ។ គ្មានការពិនិត្យឡើងវិញនៃឯកសារ / etc / inittab កើតឡើងទេ។ កម្រិតរត់គួរតែជាផ្នែកមួយនៃ Ss12345 បើមិនដូច្នោះទេសំណើនឹងត្រូវបានអើពើដោយស្ងៀមស្ងាត់។

telinit ក៏អាចប្រាប់ init នូវរយៈពេលដែលវាគួររង់ចាំរវាងការបញ្ជូន SIGTERM និង SIGKILL signals ។ លំនាំដើមគឺ 5 វិនាទីប៉ុន្តែវាអាចត្រូវបានប្តូរជាមួយជម្រើស -t វិនាទី

telinit អាចត្រូវបានហៅតែប៉ុណ្ណោះដោយអ្នកប្រើប្រាស់ដែលមានសិទ្ធិសមស្រប។

ប្រទិ ន្ទឃធី ពិនិត្យប្រសិនបើវាជា inittelinit ដោយសម្លឹងមើល លេខកូដដំណើរការ របស់វា។ លេខសម្គាល់ដំណើរការពិតរបស់ init គឺជានិច្ច 1 ។ ពីនេះវាដូចខាងក្រោមថាជំនួសឱ្យការហៅ telinit អ្នកក៏អាចប្រើ init ជំនួសវិញដែរជា shortcut ។