लिनक्स में ऑपरेटिंग सिस्टम और कर्नेल को अलग-अलग क्यों माना जाता है? [बन्द है]


9

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


3
सरल: स्वतंत्रता। जो कुछ भी आपको लगता है कि आप की जरूरत है के अपने स्वयं के संस्करण बनाने की स्वतंत्रता। कर्नेल? शैल? डेस्कटॉप। इसका लाभ उठाएं।
रिनविंड

6
क्योंकि वे कर रहे हैं अलग? समान कारण क्यों विंडो प्रबंधक को एक्स सर्वर से अलग से व्यवहार किया जाता है (क्योंकि वे अलग हैं) और क्यों शेल को टर्मिनल एमुलेटर से अलग से इलाज किया जाता है (क्योंकि वे भी अलग हैं)। अब, यदि आप यह पूछें कि वे इस तरह से क्यों डिजाइन किए गए थे ...
user253751

उबंटू अब विंडोज 10 कर्नेल के ऊपर भी चलता है जो दिखाता है कि यह एक वास्तविक अलगाव है। बेशक, विंडोज एक एक्स सर्वर के साथ नहीं आता है जो चीजों को थोड़ा जटिल करता है, लेकिन यह उम्मीद की जानी चाहिए कि जब पार्ट्स गायब हों।
MSalters

@MSalters विंडोज में विंडो मैनेजर थोड़ा मुश्किल है, हाँ; हालाँकि, अगर कोई वास्तव में एक्स को विंडोज पर चलाना चाहता है, तो उसे संभालने के बहुत सारे तरीके हैं। एक बाहरी व्यक्ति के लिए सबसे आसान शायद मौजूदा विंडो मैनेजर के शीर्ष पर एक सर्वर "एमुलेटर" होगा, हालांकि मुझे नहीं पता कि यह कितनी अच्छी तरह से मैप कर सकता है (पिछली बार मैंने एक्स इंटर्ल्स को देखा था, मुझे बहुत उम्मीद नहीं थी)। मैं अपनी सांस नहीं रोक पाऊंगा - यह मुझे आवाज़ नहीं देता है जैसे कि बहुत सारे लोग विंडोज पर एक्स चलाने में रुचि रखते थे।
लुआना

जवाबों:


12

पूरा जीएनयू / लिनक्स सिस्टम मॉड्यूलर दृष्टिकोण का उपयोग करके बनाया गया है। आप ज्यादातर (उन्नयन कर सकते हैं की जगह छू दूसरों के बिना एक मॉड्यूल सामान्य रूप में)। प्रश्न में मॉड्यूल एक बूटलोडर, कर्नेल, शेल, कमांड, डेस्कटॉप वातावरण, GUI अनुप्रयोग, जो कुछ भी हो सकता है ...

बेशक, यह सही है जब तक आप निर्भरता को सही ढंग से प्रबंधित करने में सक्षम हैं। उबंटू के आसपास वितरण के सेट में, एपीटी का उपयोग निर्भरता को स्वचालित रूप से हल करने के लिए किया जाता है।

आप कमांड का उपयोग करके एक और कर्नेल संस्करण स्थापित कर सकते हैं:

sudo apt install linux-image-<version>

जब तक APT इसे अनुमति देता है, तब तक आपको कर्नेल के चयनित संस्करण को रिबूट और उपयोग करने में सक्षम होना चाहिए, यह सामान्य, कमता आदि हो सकता है या आप स्वयं कर्नेल संस्करण का निर्माण कर सकते हैं, जैसे कि रीयल-टाइम लिनक्स , और अपने वर्तमान सिस्टम के साथ इसका उपयोग करें। ।


बहुत बहुत धन्यवाद, लेकिन यह सुसंगत होगा? कहो, Ubuntu 14.04 LTS में कर्नेल संस्करण 3.19.0 है, और कर्नेल को अपडेट करने के मामले में, यह 14.04 LTS अब नहीं है, है ना? इसलिए अगर मैं बाद में पूरे सिस्टम को अपडेट करने की कोशिश करता हूं, या बिल्ट-इन अपडेटिंग मैकेनिज्म (सॉफ्टवेयर अपडेटर) मुझे नया वर्जन लाकर देता है, तो क्या यह अपडेटेड कर्नेल वर्जन से वाकिफ होगा? क्या यह मॉड्यूल को अलग से जांचने और केवल आवश्यक परिवर्तन लाने में सक्षम है, पहले से ही अपडेट किए गए मॉड्यूल को प्रभावित किए बिना?
द ड्रीम विंड

1
संकुल को देखें । कर्नेल संस्करणों की लंबी सूची के लिए संकुल .ubuntu.com / search?keywords=linux-image जो प्रत्येक Ubuntu संस्करण का समर्थन करता है। उबंटू संस्करण कर्नेल संस्करण से अलग-अलग चीजों से निर्धारित होता है, लेकिन मुझे वास्तव में कौन से लोगों के बारे में पता नहीं है ... यदि आप उस में रुचि रखते हैं, तो आप एक और प्रश्न शुरू कर सकते हैं।
मेलेबियस

1
@AleksandrMedvedev बहुत बाद में मैंने इसे पाया! उबंटू संस्करण फ़ाइल में नोट किया गया है /etc/issueजो base-filesपैकेज द्वारा प्रदान किया गया है। जैसा कि मैंने पहले ही लिखा है, यह कर्नेल संस्करण से असंबंधित है।
मेलेबियस

5

जैसा कि आप जानते हैं कि कर्नेल ओएस का एक महत्वपूर्ण हिस्सा है, जीएनयू / लिनक्स वितरण में आप आसानी से ओएस के अन्य हिस्से को छूने के बिना कर्नेल को अपडेट कर सकते हैं। हालाँकि हम बस अपने OS का एक हिस्सा अपडेट कर रहे हैं।

एक ऑपरेटिंग सिस्टम दो भाग से बना है, कर्नेल स्पेस और यूजर स्पेस।

तो हां, आप अपने कर्नेल स्थान को अपने उपयोगकर्ता स्थान को छूने के बिना अपडेट कर सकते हैं यदि केवल नया संस्करण आपके वर्तमान उपयोगकर्ता स्थान के साथ संगत है।

और उपयोगकर्ता अंतरिक्ष उपकरण को अपडेट करने के बारे में, यह एक और हाँ है।

जब आप दौड़ते हैं:

sudo apt-get upgrade

यदि कर्नेल के लिए कोई अपडेट उपलब्ध था, तो आपको मिलेगा:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

इसलिए आप केवल अपने उपयोगकर्ता स्थान को अपडेट कर रहे हैं और जब आप कुछ ऐसा चलाते हैं

sudo apt-get dist-upgrade

आप कर्नेल सहित सब कुछ अपडेट कर रहे हैं।

केवल अपने कर्नेल को एक नए संस्करण में अपग्रेड करने के लिए कुछ का उपयोग करें:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

नए कर्नेल की सूची खोजने के लिए, फिर इसे एक नए पैकेज के रूप में स्थापित करें, उदाहरण के लिए:

sudo apt install linux-image-4.10.0-14-generic

यह निश्चित रूप से सच नहीं है।
mook765

मुझे ठीक करो;) इसलिए मैं कुछ नया सीखता हूं :)
रवेक्सिना

3
sudo apt upgradeयदि नए संस्करण उपलब्ध हैं, तो भी कर्नेल को अपग्रेड करेंगे। sudo apt full-upgradeअच्छी तरह से पैकेट गधा हटा देंगे, क्या asudo apt upgradeनहीं करेंगे।
सोरेन A

जैसा कि अब मैं एक नए कर्नेल में अपग्रेड कर रहा हूँ upgrade, यह किसी प्रकार का इंस्टालेशन है और उपकमांड का उपयोग करते समय , यह किसी भी नए पैकेज को स्थापित नहीं करेगा, किसी भी पैकेज को हटाता नहीं है, इसलिए हम इसका उपयोग करते हैं dist-upgrade। कम से कम apt-getइस तरह से काम करता है;) इसलिए मैंने किसी भी भ्रम को रोकने के लिए अपने आदेशों को अपडेट किया।
रवेक्सिना

1
मैं apt-कमांड के साथ अधिक अनुभवी हूं, एक छोटे शोध के बाद ऐसा लगता है कि आपका उत्तर अब सही है, aptऔर apt-getबात को अलग तरह से हैंडल करें, hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt देखें -command / ... । तो हम दोनों के लिए कुछ ज्ञान ...
mook765

3

सबसे पहले, कुछ स्पष्टीकरण, क्योंकि मुझे लगता है कि आपको समझ में नहीं आता है कि GNU / Linux सिस्टम कैसे अस्तित्व में आया। अगर यह तुम्हारे लिए कुछ भी नया नहीं है, तो मेरे साथ रहो:

"कर्नेल" केवल एक और प्रोग्राम नहीं है जो चलता है, लेकिन यह आधार कार्यों को प्रदान करने वाला ओएस का हिस्सा है: यदि आप एक प्रोग्राम शुरू करना चाहते हैं (कहते हैं, तो आप कमांड लाइन पर "ls" टाइप करें) बाइनरी को लोड करना होगा डिस्क से (जिसमें इसे खोजने के लिए कुछ फाइलसिस्टम ऑपरेशन शामिल हैं और कुछ फाइल को चलाने के लिए इसे छोड़ दिया जाता है), फिर एक "प्रोसेस एनवायरनमेंट" बनाया जाता है: मेमोरी को असाइन किया जाता है, एक प्रोसेस नंबर जारी किया जाता है, इत्यादि .. सभी पूर्व गतिविधियाँ (FS, फ़ाइल से पढ़ना, ...) सिस्टम लाइब्रेरी द्वारा नियंत्रित किया जाता है, लेकिन बाद वाले कर्नेल फ़ंक्शन हैं। कुछ अर्थों में गिरी "ओएस है" और बाकी सब बस इसके चारों ओर सजावट है।

"लिनक्स" वास्तव में (केवल!) एक कर्नेल है जिसमें ओएस के आसपास कोई अन्य भाग नहीं है। लिनस टॉर्वाल्ड्स ने एंड्रयू टैनेंबम्स माइनक टेम्प्लेट ओएस कर्नेल लेकर और इसे पूरा करना शुरू कर दिया, ताकि यह एक पूर्ण और वास्तविक रूप से व्यावहारिक कर्नेल हो। आज तक लिनुस है (और कई अन्य जो योगदान देते हैं / जिन्होंने योगदान दिया है) जो इस कर्नेल को विकसित करते हैं। यह कर्नेल अभी भी UNIX के समान है, लेकिन UNIX कर्नेल नहीं है।

"GNU" ने कई सामान्य UNIX कमांड को "बेहतर बनाने" की पहल के रूप में शुरू किया। मैं चर्चा करूंगा कि वे सफल हुए या नहीं, लेकिन उन्होंने निश्चित रूप से बहुत सारे सॉफ्टवेयर लिखे और एक बिंदु पर उपयोगिता कार्यक्रमों का एक संग्रह था। उन्होंने अपने स्वयं के (एचयूआरडी) का एक ओएस कर्नेल विकसित करना शुरू कर दिया, जो काफी हद तक यूनिक्स पर आधारित था, लेकिन निश्चित रूप से अलग था। लेकिन आज तक HURD अपने शुरुआती विकास में है और शायद ही कोई काम कर रहा है। "जीएनयू" btw। "GNU (है) नॉट UNIX" के लिए संक्षिप्त है - उन्होंने UNIX के उत्तराधिकारी बनाने के इरादे से UNIX की कुछ (कथित या वास्तविक) सीमाओं को पार करने की कोशिश की (फिर से: मैं चर्चा में नहीं आना चाहता कि क्या वे सफल हुए या नहीं - मुझे परवाह नहीं है अगर यह "बेहतर" या "बदतर" है, लेकिन यह निश्चित रूप से अलग है!)।

अतः, कर्नेल और कर्नेल की कमी वाले टूल के सेट के साथ इन दोनों को एक साथ रखना एक प्राकृतिक विकास था: GNU / Linux बनाया गया था।

फिर भी, काम करने के लिए (और काम करने योग्य) ओएस के लिए आपको एक कर्नेल और टूलसेट से अधिक की आवश्यकता है: आपको एक पैकेज प्रबंधन प्रणाली की आवश्यकता है, आपको स्थापना प्रक्रियाओं की आवश्यकता है, आपको टेम्पलेट कॉन्फ़िगरेशन की आवश्यकता है, आपको आवश्यकता है ...।

कई अलग-अलग लोग (या इसके समूह) इस निष्कर्ष पर आए और उन्होंने अपनी पसंद की एक जीएनयू / लिनक्स-सिस्टम बनाने के लिए जीएनयू / लिनक्स संयोजन का उपयोग किया, ठीक उसी तरह जो मैंने ऊपर बात की थी, उन्हें जोड़कर: उन्होंने एक पैकेज मैनेजर, एक पैकेजिंग सिस्टम बनाया , स्थापना प्रक्रियाओं और क्या अधिक। ये विभिन्न समूह (क्रमशः उनके प्रयासों के परिणाम) हैं जो अलग-अलग वितरण हैं। आज तीन अलग-अलग पैकेज मैनेजर हैं (डेबियन के लिए उपयुक्त और व्युत्पन्न सिस्टम जैसे * ubuntu, RedHat के लिए rpm और फेडोरा, CentOS और अधिक की तरह व्युत्पन्न सिस्टम, ArchLinux के लिए pacman) लेकिन ये सभी सिर्फ सॉफ्टवेयर के पैकेजों का प्रबंधन करते हैं जो (अनिवार्य रूप से) है वही: जब आप "ls" या "df", आदि जारी करते हैं, तो क्या कहा जाता है।

तो, "सिद्धांत रूप में" आप कर्नेल को अकेले अपडेट कर सकते हैं, जैसे कि उन सभी सॉफ़्टवेयरों के विभिन्न संस्करणों से वितरण जिन्होंने मैंने ऊपर कहा था।

लेकिन, और यह एक वास्तविक बड़ा बटन है: क्योंकि केवल कर्नेल और कुछ अतिरिक्त सॉफ़्टवेयर नहीं हैं, लेकिन सिस्टम कॉन्फ़िगरेशन उपकरण (सिस्टमड, जो कुछ वितरण का उपयोग करते हैं और कुछ नहीं करते हैं), नेटवर्क की तरह बहुत सी अन्य बातों को ध्यान में रखते हैं नेटवर्क उपकरण जैसे प्रबंधन उपकरण, जो बदले में गनोम-लाइब्रेरी, इत्यादि के कुछ संस्करणों पर निर्भर करता है - एक "वितरण" एक बहुत ही जटिल चीज है और संभावना है कि यदि आप कर्नेल को अपडेट करने की कोशिश करते हैं, तो आप बहुत सारी सुविधाओं को अपडेट करते हैं। कई अन्य निर्भरता के कारण अन्य चीजें।

फिर भी, और भी "सिद्धांत रूप में", ऊपर की तरह: आप सभी स्रोतों को डाउनलोड करके अपना स्वयं का वितरण भी बना सकते हैं, उन्हें संकलित कर सकते हैं, संस्करण संयोजनों का एक काम कर सकते हैं, कुछ पैकेजिंग सिस्टम को जगह में डाल सकते हैं (या मौजूदा में से एक का उपयोग कर सकते हैं) ) - और इसी तरह, जब तक आपके पास एक वितरण योग्य, इंस्टॉल करने योग्य और कॉन्फ़िगर करने योग्य प्रणाली नहीं है। यह उबंटू जैसे वितरणों के रचनाकारों ने किया है और यह एक चमत्कार नहीं है - बस बहुत जटिल काम है, इसलिए वास्तव में अधिकांश उपयोगकर्ता इससे दूर भागते हैं और कुछ का उपयोग करने के लिए तैयार करते हैं।

हम उम्मीद करते है कि यह आपके सवाल का जवाब दे देगा।


GNU ने कई सामान्य UNIX कमांड को "बेहतर बनाने" की पहल के रूप में शुरू नहीं किया। यूएनआईएक्स के स्वामित्व में नि: शुल्क सॉफ्टवेयर के उद्देश्य से GNU एक ऑपरेटिंग सिस्टम था। आप उनकी वेबसाइट से अधिक पढ़ सकते हैं । उन्होंने अपने सभी सॉफ्टवेयर को लिनक्स में पोर्ट करने का फैसला किया क्योंकि लिनक्स के निर्माण के समय, जीएनयू में अभी भी काम करने लायक कर्नेल नहीं था।
इयान एमनेस

3

सरलतम उत्तर का उबंटू से कोई लेना-देना नहीं है; यह जीएनयू / लिनक्स के निर्माण के तरीके से संबंधित है। यदि आप इसे एक सिस्टम डेवलपर के रूप में देखने की कोशिश करते हैं, तो आप दो दुनिया देखेंगे, प्रत्येक को एक तेज बॉर्डर (ABI) द्वारा अलग किया गया है।

कर्नेल दुनिया, जहां निम्न स्तर के डेवलपर्स काम करते हैं, अपने आप में एक प्रणाली है। इसमें वह सब कुछ है जो आप सामान्य रूप से एक नियमित आवेदन में पाएंगे। अंतर केवल इतना है कि उपयोगकर्ता वास्तविक व्यक्ति नहीं है जो मशीन का उपयोग कर रहा है, बल्कि उपयोगकर्ता-अंतरिक्ष दुनिया भी है। कर्नेल "एप्लिकेशन" मध्य-व्यक्ति है, जो मशीन का उपयोग कर रहा है - शेल में भूत।

अब, उपयोगकर्ता-स्थान, सामान्य दुनिया है जिसे हर रोज़ उपयोगकर्ता और डेवलपर खेल रहे हैं। इसमें कठोर एपीआई, नियम, फाइलें, और, सबसे महत्वपूर्ण चीज, मशीन की एक अमूर्त, बचकाना छवि है जो उस पर चल रही है। चूंकि उपयोगकर्ता केवल इस हिस्से को देख रहा है, और यह वितरण आकार के 99% के लिए है, इसलिए इसे ऑपरेटिंग सिस्टम को गलत नाम देना आसान है। सही नामकरण इसे एक सॉफ्टवेयर वितरण को कॉल करने के लिए किया जाता है, जिसे कुछ इकाई (Canonical, Fedora, इत्यादि) द्वारा बनाया गया है, एक कर्नेल (Linux, HURD, BSD, इत्यादि) का उपयोग करके, और एक उपकरण के सेट का उपयोग करके बनाया गया है (आमतौर पर GNU द्वारा प्रदान किया जाता है)। )।

अपने प्रश्न का उत्तर देने के लिए, GNU / Linux में (जैसे विंडोज और OSX में, मुझ पर विश्वास करें), आप कर्नेल को बदल सकते हैं, न केवल संस्करण, बल्कि पूरी वास्तुकला (लिनक्स कर्नेल, HURD कर्नेल), और, जब तक ABI को छुआ नहीं गया है, कभी भी उपयोगकर्ता की दुनिया में एक भी बदलाव न करें ... दिन में, जब असली आदमी को स्रोतों से कर्नेल का निर्माण करना था, तो आप इन जैसे कई परिवर्तनों से गुज़र सकते हैं, एक भद्दा USB वेब कैमरा पाने के लिए काम करने के लिए ... अब, मॉड्यूलर कर्नेल के साथ, आपको बस एक मॉड्यूल स्थापित करना होगा, और आपको एबीआई (कभी-कभी) नई सुविधाओं के साथ एक नया कर्नेल विश्व मिलेगा।

फिर से, उपयोगकर्ताओं के लिए समान है। जब आप एक नया एप्लिकेशन इंस्टॉल करते हैं, तो आइए, कहते हैं कि एक Ubuntu रिपॉजिटरी, 99% समय, आपकी सबसे बड़ी चिंता अन्य उपयोगकर्तास्पेस घटकों की संगतता है, वास्तविक कर्नेल नहीं। ऐसे मामले हैं, जहां कर्नेल संस्करण निर्धारित करता है (एबीआई के माध्यम से) सामान की सीमा जो कि यूजरस्पेस में स्थापित की जा सकती है, लेकिन लक्ष्य (डेवलपर्स के लिए, कम से कम) इसे दूर करना है ...

विचार करने के लिए एक और बात, आप कर सकते हैं (और यह बहुत आसान है) अपने स्वयं के, विशेष, एक का एक प्रकार का GNU / लिनक्स वितरण का निर्माण। एक कर्नेल, कुछ सरल स्क्रिप्ट, कई एप्लिकेशन प्राप्त करें, और आप सेट हैं। यह सिर्फ इतना आसान है (नेटवर्क गियर के लिए, OpenWRT GNU / Linux वितरण पर एक नज़र डालें, संपूर्ण वितरण 16Mb या इसी तरह फिट बैठता है)।


"एक तेज सीमा (एबीआई)।" मुझे लगता है कि आप एपीआई का मतलब है। ABI एक बेहतर शब्द की कमी के लिए एक कोड है, जो हार्डवेयर इंटरफेस के लिए एक कोड है। दूसरी ओर एपीआई एक कोड टू कोड इंटरफेस है।
सैम

1

मुझे लगता है कि उन्हें अलग रखा गया है क्योंकि कर्नेल एक महत्वपूर्ण हिस्सा है। एक प्रतिगमन के साथ एक कर्नेल, या बस एक असफल अद्यतन, काफी नुकसान कर सकता है। आप इसे कम बार अद्यतन करना चाह सकते हैं; या केवल यह सुनिश्चित करने के लिए कुछ समय इंतजार करने के बाद कि किसी को बग की चिंता नहीं है।

इसके अलावा कुछ उन्नत या पेशेवर उपयोगकर्ता अपनी आवश्यकताओं को बेहतर करने के लिए अपने व्यवहार को संशोधित करने के लिए कर्नेल को फिर से जोड़ते हैं। इस तरह के मामले में, आप स्पष्ट रूप से यह नहीं चाहेंगे कि आप हर बार अपग्रेड करते समय फ़ैक्टरी संस्करण के साथ इसे स्वचालित रूप से बदल दें।

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