कर्नेल कमांड लाइन पर पारित पैरामीटर को कर्नेल के लिए सार्थक होने की आवश्यकता नहीं है: कर्नेल पैरामीटर दस्तावेज़ कहता है
कर्नेल कर्नेल कमांड लाइन से "-" तक के पैरामीटर को पार्स करता है; यदि यह किसी पैरामीटर को नहीं पहचानता है और इसमें '' नहीं है, तो पैरामीटर init में पास हो जाता है: '=' के साथ पैरामीटर init के वातावरण में चले जाते हैं, अन्य को init में कमांड लाइन तर्क के रूप में पारित किया जाता है। "-" के बाद सब कुछ init के तर्क के रूप में पारित किया जाता है।
यह लागू नहीं होता है init
और root
जो वास्तव में कर्नेल पैरामीटर हैं, और कर्नेल द्वारा नियंत्रित किया जाता है। वे उपयोगकर्ता-स्थान पर भी काम कर सकते हैं, क्योंकि वे दिखाई देते हैं /proc/cmdline
। (इस प्रकार उदाहरण के लिए systemd quiet
अपने उत्पादन को कम करने के लिए कर्नेल पैरामीटर को ध्यान में रखता है।)
जब कर्नेल को इनट्रामाफ़्स के साथ बूट किया जाता है, तो root
पैरामीटर सीधे कर्नेल द्वारा उपयोग नहीं किया जाता है, और init
पैरामीटर केवल तभी उपयोग किया जाता है यदि rdinit
विफल हो जाता है। init
स्टार्टअप को संभाला जाता है kernel_init
, जो निम्नानुसार काम करता है:
- अगर वहाँ एक "रैमडिस्क कमांड निष्पादित करें" (या तो
rdinit
कर्नेल कमांड लाइन पर दिया गया मूल्य , या /init
) जो सुलभ है, कर्नेल उसे चलाने का प्रयास करता है;
- यदि वह विफल रहता है, और एक "निष्पादित कमांड" (
init
कर्नेल कमांड लाइन पर दिया गया मूल्य ) है, तो कर्नेल उसे चलाने का प्रयास करता है, और यदि वह नहीं कर सकता है, तो आतंकित होता है;
- एक अंतिम उपाय के रूप में, कर्नेल चलाने की कोशिश करता है
/sbin/init
, /etc/init
, /bin/init
, और /bin/sh
; यदि उनमें से कोई भी नहीं चलाया जा सकता है, तो यह आतंकित करता है ।
जब इनट्रामाफ़्स होता है, तो यह सब वहां होता है, और लक्ष्य वॉल्यूम कर्नेल द्वारा माउंट नहीं किया जाता है। कर्नेल पहला प्रोग्राम चलाने के बाद क्या होता है init
(आमतौर पर, /init
initramfs में स्क्रिप्ट) प्रोग्राम पर निर्भर है, कर्नेल के लिए नहीं। यदि फ़ाइल सिस्टम आरोहित है init
, /proc/cmdline
तो तर्क जो पारित नहीं हुए हैं, वे अभी भी उपलब्ध हैं /proc
।
ld-linux.so
ईएलएफ या पुनरावृत्ति-बहुत-गहरी स्क्रिप्ट या कुछ भी नहीं मिल सकता है बस निष्पादित नहीं किया जा सकता है?