Linux जूते

जैसा कि यह पता चला है, बूट प्रक्रिया के लिए बहुत कुछ नहीं है:

1. एक बूट लोडर कर्नेल छवि को ढूंढता है disk, इसे मेमोरी में लोड करता है, और इसे शुरू करता है।
2. गिरी उपकरणों और इसके ड्राइवर को आरंभ कर देगा।
3. कर्नेल रूट फ़ाइल को माउंट करता हैsystem.
4. गिरी init नामक कार्यक्रम शुरू होता है।
5. रीसेट गति में प्रक्रियाओं के बाकी सेट।
6. पिछले प्रक्रियाओं है कि बूट अनुक्रम के भाग के रूप शुरू होता है init आप लॉग इन कर सकते हैं।

बूट प्रक्रिया को ठीक करने और समझने में बूट प्रक्रिया के प्रत्येक चरण की पहचान करना अमूल्य है system पूरा का पूरा। शुरू करने के लिए, बूट लोडर पर शून्य, जो कि कंप्यूटर के बाद आरंभिक स्क्रीन या प्रॉम्प्ट है, इसकी शक्ति-स्व-परीक्षण पर निर्भर करता है, जो पूछ रहा है कि कौन सा संचालन system चलाने के लिए। आपके द्वारा चुनाव करने के बाद, बूट लोडर चलता है Linux कर्नेल, का नियंत्रण सौंपना system कर्नेल के लिए।

वहाँ गिरी इस किताब कौन से इस लेख कुछ अंश है में कहीं और की विस्तृत चर्चा है। इस लेख को शामिल किया गया गिरी आरंभीकरण चरणवह चरण जब कर्नेल पर मौजूद हार्डवेयर के बारे में संदेशों का एक गुच्छा प्रिंट करता है system। कर्नेल प्रारंभ होने के ठीक बाद यह संदेश प्रदर्शित करता है कि कर्नेल ने माउंट किया है रूट फ़ाइलsystem:

वीएफएस: घुड़सवार रूट (ext2 फ़ाइलेंsystem) सिफ़ पढ़िये।

इसके तुरंत बाद, आपको init शुरू करने के बारे में एक संदेश दिखाई देगा, उसके बाद system सेवा स्टार्टअप संदेश, और अंत में आपको किसी प्रकार का लॉगिन प्रॉम्प्ट मिलता है।

ध्यान दें : पर कार्डिनल की टोपी Linux, इनिट नोट विशेष रूप से स्पष्ट है, क्योंकि यह Red Hat . में आपका "स्वागत" करता है Linux। " इसके बाद सभी संदेश स्क्रीन के दाईं ओर कोष्ठक में सफलता या विफलता दिखाते हैं।

init के साथ इस अध्याय से अधिकांश, क्योंकि यह बूट अनुक्रम कहाँ हो का हिस्सा है तो आप सबसे अधिक नियंत्रण है।
init

init के बारे में कुछ खास नहीं है। यह किसी भी अन्य कार्यक्रम की तरह ही एक कार्यक्रम है Linux system, और आप इसे / sbin के साथ-साथ अन्य में पाएंगे system बाइनरी। Init का मुख्य उद्देश्य एक विशेष क्रम में अन्य कार्यक्रमों को शुरू करना और रोकना है। आपको बस यह जानना है कि यह क्रम कैसे काम करता है।

कुछ भिन्न भिन्नताएं हैं, लेकिन अधिकांश Linux वितरण का उपयोग करते हैं System यहां वी शैली पर चर्चा की गई। कुछ वितरण एक सरल संस्करण का उपयोग करते हैं जो बीएसडी इनिट जैसा दिखता है, लेकिन आपको यह मुठभेड़ करने की संभावना नहीं है।

रनलेवलों

किसी भी समय a . पर Linux systemप्रक्रियाओं का एक निश्चित आधार सेट चल रहा है। की यह अवस्था machine को इसका रनवे कहा जाता है, और इसे 0 से 6. के बीच की संख्या के साथ दर्शाया जाता है system अपना अधिकांश समय एकल रनवे में बिताता है। हालाँकि, जब आप बंद करते हैं macनीचे खत्म करने के लिए, एक अलग रनवे पर इनिट स्विच करता है system सेवाओं को एक व्यवस्थित तरीके से और कर्नेल को बंद करने के लिए कहने के लिए। एक अन्य रनलेवल एकल उपयोक्ता के लिए है mode, बाद में चर्चा की।

रनलेवल पर नियंत्रण पाने का सबसे आसान तरीका init कॉन्फ़िगरेशन फ़ाइल, /etc/inittab की जांच करना है। निम्नलिखित की तरह एक पंक्ति खोजें:

आईडी: 5: initdefault:

इस लाइन का मतलब है कि default पर चल रहा है system 5 है। इनिटटैब फ़ाइल में सभी पंक्तियाँ इस रूप में होती हैं, जिनमें चार फ़ील्ड निम्नलिखित क्रम में कोलन द्वारा अलग किए जाते हैं:
# (इस तरह के पूर्ववर्ती उदाहरण आईडी के रूप में एक छोटी स्ट्रिंग,) की अनन्य पहचानकर्ता
# लागू रनलेवल संख्या (रों)
# जो कार्रवाई की जानी चाहिए वह (पूर्ववर्ती उदाहरण में, कार्रवाई को सेट करना है default रनलेवल 5)
# एक कमांड निष्पादित करने के लिए (वैकल्पिक)

पूर्ववर्ती init में निष्पादित करने के लिए कोई आदेश नहीं हैdefault उदाहरण क्योंकि कमांड सेट करने के संदर्भ में कोई मतलब नहीं है default रनलेवल है। इनटैब में थोड़ा और नीचे देखें, जब तक आप इस तरह से एक लाइन न देखें:

l5: 5: इंतजार: 5 /etc/rc.d/rc

यह लाइन अधिकांश को ट्रिगर करती है system कॉन्फ़िगरेशन और आरसी * .d और init.d निर्देशिकाओं के माध्यम से सेवाएं। आप देख सकते हैं कि init रनवेवल 5 में /etc/rc.d/rc 5 नामक कमांड को निष्पादित करने के लिए सेट है। प्रतीक्षा क्रिया बताती है कि init कमांड को कब और कैसे चलाता है: rc 5 को एक बार चलाएं enterरनलेवल 5 को इंगेज करें, और फिर कुछ और करने से पहले इस कमांड के खत्म होने का इंतजार करें।

में कई अलग-अलग क्रियाएं हैं addion to initdefault और रुको, विशेष रूप से बिजली प्रबंधन से संबंधित है, और इनटैब (5) मैनुअल पेज आपको उनके बारे में बताता है। जिन लोगों से आपका सामना होने की संभावना है, उन्हें निम्नलिखित अनुभागों में समझाया गया है।

respawn

रिस्पॉन क्रिया के कारण init उसके बाद आने वाले कमांड को चलाता है, और यदि कमांड निष्पादित होना समाप्त हो जाता है, तो उसे फिर से चलाने के लिए। आपको अपनी inittab फ़ाइल में इस पंक्ति के समान कुछ देखने की संभावना है:

1: 2345: respawn: / sbin / mingetty tty1

गेट्टी कार्यक्रम लॉगिन संकेतों प्रदान करें। पूर्ववर्ती लाइन पहला आभासी कंसोल (/ dev / tty1) के लिए है, एक जैसा कि आप देख जब आप ALT-Control-Alt-F1 या F1 दबाएँ। के बाद आप लॉग आउट respawn कार्रवाई लॉगिन शीघ्र वापस लाता है।

ctrlअलदेल

RSI ctrlaltdel क्रिया नियंत्रित करती है कि क्या system जब आप वर्चुअल कंसोल पर नियंत्रण-ALT-DELETE दबाते हैं। अधिकतम systems, यह शटडाउन कमांड का उपयोग करके रिबूट कमांड का कुछ प्रकार है।

sysinit

सिसिनिट एक्शन बहुत पहली चीज है कि जब यह शुरू होता है, तो इनिट को चलना चाहिए enterकिसी भी रनवे में।

कैसे रनलेवलों में स्थित प्रक्रियाओं शुरू

अब आप यह जानने के लिए तैयार हैं कि कैसे पहल की जाए system सेवाओं, बस इससे पहले कि आप लॉग इन करें। इस inittab लाइन को पहले से याद करें:

l5: 5: इंतजार: 5 /etc/rc.d/rc

यह छोटा सा लाइन कई अन्य कार्यक्रम चलाता है। आर सी रन आदेशों के लिए खड़ा है, और आप सुन लोगों लिपियों, कार्यक्रम, या सेवाओं के रूप में आदेशों के पास भेजेगा। तो, जहां इन आदेशों, वैसे भी कर रहे हैं?

रनलेवल 5 के लिए, इस उदाहरण में, कमांड्स शायद /etc/rc.d/rc5.d या /etc/rc5.d में हैं। Runlevel 1 rc1.d का उपयोग करता है, runlevel 2 rc2.d का उपयोग करता है, और इसी तरह। आप निम्नलिखित पा सकते हैं items rc5.d निर्देशिका में:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutडी S89cron

कमान 5 rc रनलेवल चल जीएमटी आदेश द्वारा इस निर्देशिका में कार्यक्रम शुरू होता है:

S10sysklogd घर
S12kerneld घर
S15netstd_init घर
S18netbase घर
...
S99sshd घर

प्रत्येक आदेश में प्रारंभ तर्क पर ध्यान दें। कमांड नाम में S का अर्थ है कि कमांड को प्रारंभ में चलना चाहिए mode, और संख्या (00 से 99) यह निर्धारित करती है कि क्रम में rc कमांड कहाँ से शुरू करता है।

आर सी * .D आदेश है आमतौर पर / sbin या / usr / sbin में है कि प्रारंभ कार्यक्रम स्क्रिप्ट शैल। आम तौर पर, आप कर सकते हैं-यह पता लगाने क्या कोई एक आदेश वास्तव में कम या एक और पेजर कार्यक्रम के साथ स्क्रिप्ट को देखकर होता है।

आप इनमें से एक सेवा को हाथ से शुरू कर सकते हैं। उदाहरण के लिए, यदि आप httpd वेब सर्वर प्रोग्राम मैन्युअल रूप से शुरू करना चाहते हैं, तो S99httpd प्रारंभ करें। इसी तरह, यदि आपको कभी भी सेवाओं में से एक को मारने की आवश्यकता होती है तो machine चालू है, आप कमांड को rc * .d निर्देशिका में स्टॉप तर्क (उदाहरण के लिए S99httpd स्टॉप) के साथ चला सकते हैं।

कुछ rc*.d निर्देशिकाओं में कमांड होते हैं जो K से शुरू होते हैं ("किल," या स्टॉप के लिए mode). इस मामले में, आरसी प्रारंभ के बजाय स्टॉप तर्क के साथ आदेश चलाता है। आपको रनलेवल में K कमांड्स का सामना करने की सबसे अधिक संभावना है जो बंद कर देते हैं system नीचे.

Addसेवाओं को शामिल करना और हटाना

यदि आप चाहते हैं addrc*.d निर्देशिकाओं में सेवाओं को हटाने या संशोधित करने के लिए, आपको अंदर की फ़ाइलों पर करीब से नज़र डालने की आवश्यकता है। एक लंबी सूची से इस तरह की संरचना का पता चलता है:

lrwxrwxrwx। । । S10sysklogd -> ../init.d/sysklogd
lrwxrwxrwx। । । S12kerneld -> ../init.d/kerneld
lrwxrwxrwx। । । S15netstd_init -> ../init.d/netstd_init
lrwxrwxrwx। । । S18netbase -> ../init.d/netbase
...

rc*.d निर्देशिका में कमांड वास्तव में init.d निर्देशिका में फ़ाइलों के प्रतीकात्मक लिंक होते हैं, आमतौर पर /etc या /etc/rc.d में। Linux वितरण में ये लिंक होते हैं ताकि वे सभी रनलेवल के लिए समान स्टार्टअप स्क्रिप्ट का उपयोग कर सकें। यह सम्मेलन किसी भी तरह से एक आवश्यकता नहीं है, लेकिन यह अक्सर संगठन को थोड़ा आसान बना देता है।

init.d निर्देशिका में किसी एक कमांड को किसी विशेष रनलेवल में चलने से रोकने के लिए, आप उपयुक्त rc * .d निर्देशिका में प्रतीकात्मक लिंक को हटाने के बारे में सोच सकते हैं। यह काम करता है, लेकिन अगर आप कोई गलती करते हैं और कभी भी लिंक को वापस लगाने की आवश्यकता होती है, तो आपको लिंक का सटीक नाम याद रखने में परेशानी हो सकती है। इसलिए, आपको rc * .d निर्देशिकाओं में लिंक नहीं निकालना चाहिए, बल्कि, add इस तरह लिंक नाम की शुरुआत में एक अंडरस्कोर (_):

एमवी एसएक्सयूएनएक्सएक्सएचपीडीडी _S99httpd

बूट समय पर, rc _S99httpd को अनदेखा कर देता है क्योंकि यह S या K के साथ शुरू नहीं होता है। इसके अलावा, मूल नाम अभी भी स्पष्ट है, और यदि आप चुटकी में हैं तो कमांड की त्वरित पहुँच है और इसे हाथ से शुरू करने की आवश्यकता है।

सेवा मेरे add एक सेवा, आपको init.d निर्देशिका में अन्य लोगों की तरह एक स्क्रिप्ट बनानी होगी और फिर सही rc * .d निर्देशिका में एक प्रतीकात्मक लिंक बनाना होगा। स्क्रिप्ट लिखने का सबसे आसान तरीका है कि आप पहले से ही init.d में मौजूद स्क्रिप्ट की जांच करें, जिसे आप समझते हैं उसकी एक कॉपी बनाएं और कॉपी को संशोधित करें।

. addकिसी सेवा में, सुनिश्चित करें कि आपने सेवा प्रारंभ करने के लिए बूट अनुक्रम में एक उपयुक्त स्थान का चयन किया है। यदि सेवा बहुत जल्दी शुरू हो जाती है, तो यह किसी अन्य सेवा पर निर्भरता के कारण काम नहीं कर सकती है। गैर-आवश्यक सेवाओं के लिए, अधिकांश systems administratorके साथ आने वाली अधिकांश सेवाओं के बाद, s 90 के दशक में नंबर पसंद करते हैं system.

Linux वितरण आमतौर पर rc * .d निर्देशिकाओं में सेवाओं को सक्षम और अक्षम करने के लिए एक कमांड के साथ आते हैं। उदाहरण के लिए, डेबियन में, कमांड है update-rc.d, और Red Hat . में Linux, कमांड chkconfig है। ग्राफिकल यूजर इंटरफेस भी उपलब्ध हैं। इन प्रोग्रामों का उपयोग स्टार्टअप निर्देशिकाओं को सुसंगत रखने में मदद करता है और उन्नयन में मदद करता है।

संकेत: सबसे आम में से एक Linux installसमस्याएँ एक अनुचित रूप से कॉन्फ़िगर किया गया XFree86 सर्वर है जो चालू और बंद करता है, जिससे system कंसोल पर अनुपयोगी। इस व्यवहार को रोकने के लिए, एकल-उपयोगकर्ता में बूट करें mode और अपनी रनलेवल या रनलेवल सेवाओं को बदलें। अपनी rc*.d निर्देशिकाओं में, या अपने /etc/inittab में xdm, gdm, या kdm वाली कोई चीज़ ढूँढ़ें।

नियंत्रण init

कभी-कभी, आपको inittab फ़ाइल को फिर से पढ़ने के लिए, या बस इसे रनलेवल स्विच करने के लिए कहने के लिए init को थोड़ा किक देने की आवश्यकता होती है shut down la system। क्योंकि init हमेशा a पर पहली प्रक्रिया है system, इसकी प्रक्रिया आईडी हमेशा 1 है।

आप telinit साथ init नियंत्रित कर सकते हैं। उदाहरण के लिए, यदि आप 3 रनलेबल स्विच करना चाहते हैं, इस आदेश का उपयोग करें:

टेलिनेट 3

रनलेवल स्विच करते समय, init किसी भी प्रक्रिया को बंद करने का प्रयास करता है जो नए रनलेवल के लिए inittab फ़ाइल में नहीं है। इसलिए, आपको रनलेवल बदलने में सावधानी बरतनी चाहिए।

जब जरूरत हो add या रिस्पॉनिंग जॉब्स को हटा दें या inittab फ़ाइल में कोई अन्य परिवर्तन करें, आपको परिवर्तन के बारे में init को बताना होगा और उसे फ़ाइल को फिर से पढ़ने के लिए प्रेरित करना होगा। कुछ लोग init को ऐसा करने के लिए कहने के लिए किल -HUP 1 का उपयोग करते हैं। यह पारंपरिक पद्धति यूनिक्स के अधिकांश संस्करणों पर तब तक काम करती है, जब तक आप इसे सही ढंग से टाइप करते हैं। हालाँकि, आप इस टेलिनिट कमांड को भी चला सकते हैं:

telinit क्ष

आप एकल-उपयोगकर्ता पर स्विच करने के लिए टेलिनिट एस का भी उपयोग कर सकते हैं mode.

नीचे बंद

init भी नियंत्रित करता है कि कैसे system बन्द हो जाता है और रिबूट। करने का उचित तरीका shut down a Linux machine शटडाउन कमांड का उपयोग करना है।

शटडाउन का उपयोग करने के दो मूल तरीके हैं। यदि आप रुकते हैं system, यह बन्द हो जाता है macनीचे गिराओ और इसे नीचे रखो। बनाने के लिए macतुरंत रुकें, इस कमांड का उपयोग करें:

शटडाउन अब -h

अधिकतम modern macके यथोचित हाल के संस्करणों के साथ हाइन्स Linux, एक पड़ाव बिजली को काट देता है machine। आप रिबूट भी कर सकते हैं machine। रिबूट के लिए, -h के बजाय -r का उपयोग करें।

शटडाउन प्रक्रिया में कई सेकंड लगते हैं। आपको कभी भी रीसेट या पावर बंद नहीं करना चाहिए macइस चरण के दौरान hine।

पूर्व उदाहरण में, अब समय है shut down। यह तर्क अनिवार्य है, लेकिन इसे निर्दिष्ट करने के कई तरीके हैं। अगर तुम चाहो तो macभविष्य में कुछ समय नीचे जाने के लिए, एक तरीका + n का उपयोग करना है, जहां n मिनटों की संख्या है जिसे शटडाउन को अपना काम करने से पहले इंतजार करना चाहिए। अन्य के लिए options, शटडाउन (8) मैनुअल पेज देखें।

बनाने के system 10 मिनट में रिबूट, इस कमांड को चलाएं:

शट डाउन -r + 10

On Linux, शटडाउन किसी को भी उस पर लॉग इन करने की सूचना देता है macप्रगति नीचे जा रही है, लेकिन यह वास्तविक रूप से बहुत कम काम करता है। यदि आप अभी के अलावा कोई अन्य समय निर्दिष्ट करते हैं, तो शटडाउन /etc/nologin नामक एक फ़ाइल बनाता है। जब यह फ़ाइल मौजूद होती है, तो system सुपरयुजर को छोड़कर किसी के भी द्वारा लॉगिन करने पर रोक।

. system शटडाउन का समय आखिरकार आ जाता है, शटडाउन रिबूट के लिए रनवेवल 0 के लिए स्विच को बताता है और रिबूट के लिए रनवेल 6 को। जब init enters रनलेवल 0 या 6, निम्न में से सभी जगह होती है, जिसे आप rc0.d और rc6.d के अंदर स्क्रिप्ट को देखकर सत्यापित कर सकते हैं:

1। यह init प्रक्रिया हर CAN मारता है कि (के रूप में यह किसी भी अन्य रन लेवल का उपयोग करने जा रहे हैं)।

# प्रारंभिक rc0.d / rc6.d कमांड रन, लॉकिंग हैं system फ़ाइलें व्यवस्थित करना और शटडाउन के लिए अन्य तैयारियां करना।
# अगला rc0.d/rc6.d आदेश सभी फ़ाइलों को अनमाउंट करेंsystemजड़ के अलावा अन्य।
# आगे rc0.d/rc6.d कमांड रूट फ़ाइल को रीमाउंट करते हैंsystem सिफ़ पढ़िये।
# अभी भी अधिक rc0.d/rc6.d कमांड सभी बफ़र किए गए डेटा को फ़ाइल में लिखते हैंsystem सिंक प्रोग्राम के साथ।
# अंतिम rc0.d / rc6.d आदेशों गिरी रिबूट या रिबूट, पड़ाव, या poweroff कार्यक्रम के साथ बंद करने के लिए कहते हैं।

रिबूट और हॉल्ट कार्यक्रम प्रत्येक रनले के लिए अलग-अलग व्यवहार करते हैं, संभवतः भ्रम पैदा करते हैं। द्वारा default, ये प्रोग्राम -r या -h . के साथ शटडाउन कहते हैं options, लेकिन अगर system पहले से ही रुकावट या रिबूट रनवे पर है, प्रोग्राम कर्नेल को तुरंत बंद करने के लिए कहते हैं। यदि आप वास्तव में अपने को बंद करना चाहते हैं macजल्दी में नीचे उतरो (अव्यवस्थित शटडाउन से किसी भी संभावित नुकसान की उपेक्षा), -f विकल्प का उपयोग करें।

प्रौद्योगिकी के प्रति जुनूनी होने के कारण मैं इस पर मजे से लिखता हूं StealthSettings2006 से .com। मुझे ऑपरेटिंग सिस्टम में व्यापक अनुभव है: macOS, Windows एसआई Linux, लेकिन प्रोग्रामिंग भाषाओं और ब्लॉगिंग प्लेटफ़ॉर्म में भी (WordPress) और ऑनलाइन स्टोर के लिए (WooCommerce, मैगेंटो, प्रेस्टाशॉप)।

एक टिप्पणी छोड़ दो