यदि इनिट को हटा दिया गया तो क्या होगा?


22

बस एक सैद्धांतिक सवाल ...

लेकिन क्या होगा यदि init(में /sbin/init) हटाया जाएगा?


कोशिश मत करो ln -L- यह काम नहीं करेगा। cp /proc/fd/1/exe /sbin/init && chmod 755 /sbin/initहालांकि काम करता है। अपस्टार्ट को फिर से स्थापित करने के लिए एपीटी का उपयोग करना उतना स्पष्ट नहीं है dpkg, जितना कि यह नहीं पता होगा कि यह डिफ़ॉल्ट रूप से चला गया है। "पैकेज अपस्टार्ट पहले से ही मौजूदा संस्करण में है।" आप dpkg --force-depends --force-remove-essential -r upstartपहले कर सकते थे ।
जोशुआ

1
apt-get install --reinstall upstart। इसके अलावा, मेरे पास /proc/fdनिर्देशिका नहीं है । और मैंने अभी-अभी जाँच की है, ln -L /proc/1/exe /tmp/initजिसका /sbin/initनाम बदला हुआ है /sbin/init.bak, यानी मैं इसके /tmp/initबाद बिना किसी समस्या के पढ़ सकता हूँ ।
रुसलान

@ मुरु ठीक है। मैं एक टैग पर्यायवाची जोड़ दूँगा।
कज़ वोल्फ

जवाबों:


31

बूट लोडर कर्नेल को लोड करेगा, कर्नेल init को चलाने का प्रयास करेगा, इसे खोजे नहीं और घबराए।

इससे बाहर का तरीका बूट पैरामीटर को रीबूट करना, संपादित करना init=/bin/bashऔर उस तरह से बूट करना है। कर्नेल इनसिट के रूप में बैश का उपयोग करेगा। यह आपको कमांड चलाने और सिस्टम को ठीक करने का मौका देगा।

सुधार
स्पष्ट रूप से कर्नेल (फ़ाइल init / main.c ) करता है:

if (!try_to_run_init_process("/sbin/init") ||
    !try_to_run_init_process("/etc/init") ||
    !try_to_run_init_process("/bin/init") ||
    !try_to_run_init_process("/bin/sh"))
        return 0;

panic("No working init found.  Try passing init= option to kernel. "
      "See Linux Documentation/init.txt for guidance.");

तो यह / बिन / श (जो डैश के लिए एक लिंक है) को ढूंढेगा और जो आपको init=/bin/bashबूट पैरामीटर का उपयोग किए बिना एक शेल और इसे ठीक करने का मौका देगा ।


बहुत बढ़िया जवाब। नहीं पता था कि कर्नेल कुछ अधिक की खोज करता है /sbin/init
रुसलान

और अगर कोई /bin/shफ़ाइल नहीं है? या /bin/bashया /bin/dashआदि? निश्चित नहीं है कि आप एक ही समय में इन सभी को कैसे हटा सकते हैं, लेकिन सैद्धांतिक रूप से क्या होगा?
कोशिशों

ठीक है, तो आप कर्नेल घबराहट, सुधार रेखा के ऊपर उत्तर का हिस्सा देखेंगे । लेकिन आप की जरूरत है कि एक प्रणाली पर ऐसा मत करो। गंभीरता से, नहीं। यदि आप प्रयोग करना चाहते हैं (और यह एक अच्छा व्यायाम है) एक वर्चुअलबॉक्स वीएम बनाएं, इसे तोड़ें और इसे ठीक करने का प्रयास करें। बीटीडब्ल्यू 200_success द्वारा उत्तर भी बुरा नहीं है।
जनवरी को sururf

12

कुछ भी नहीं होता है, जब तक आप रिबूट करने की कोशिश नहीं करते हैं। जब तक सिस्टम चल रहा है, और आप रनिंगवेल्स को /sbin/init एन चलाकर स्विच करने की कोशिश नहीं करते हैं , तो आपको यह एहसास भी नहीं होगा कि यह चला गया था।

वास्तव में, /sbin/initयदि आप गलती का एहसास करते हैं और शांत रहते हैं, तो इसे हटाना अक्षम्य है। ऑपरेटिंग सिस्टम को चालू रखते हुए सिस्टम प्रशासकों ने बहुत से नास्टियर "लॉबोटॉमी" से बरामद किया है

के विलोपन से उबरने का एक तरीका APT का उपयोग करके पैकेज /sbin/initको फिर से स्थापित करना है upstart

पुनर्प्राप्त करने का तरीका मशीन पर केवल संसाधनों का उपयोग करना है। आपके पक्ष में एक कारक वह /sbin/initहै जो हमेशा चल रहा है। इसलिए, जब आप चलाते हैं rm /sbin/init, तो फ़ाइल केवल फ़ाइल सिस्टम से अनलिंक होती है। जब तक पीआईडी ​​1 बाहर नहीं निकल जाता तब तक इनकोड और फाइल कंटेंट डिस्क पर और मेमोरी में रहते हैं। आपको /sbin/initउचित इनोड से फिर से बनाने की जरूरत है ।

इसे पूरा करने का सबसे आसान तरीका है:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.