लिनक्स टर्मिनल कैसे काम करता है?


32

यदि आप एक टर्मिनल को आग लगाते हैं और एक निष्पादन योग्य कहते हैं (यह मानते हुए कि यह सरलता के लिए लाइन उन्मुख है) तो आपको निष्पादन योग्य से कमांड का जवाब मिलता है। यह आपके (उपयोगकर्ता) के लिए कैसे मुद्रित होता है? क्या टर्मिनल कुछ ऐसा करता है pexpect? (आउटपुट के लिए प्रतीक्षा कर रहा है) या क्या? इसे प्रिंट आउट होने के लिए आउटपुट की सूचना कैसे मिलती है? और एक टर्मिनल एक कार्यक्रम कैसे शुरू करता है? (यह अजगर के os.fork () के लिए कुछ समान है?) मैं हैरान हूँ कि कैसे एक टर्मिनल काम करता है, मैं कुछ टर्मिनल एमुलेटर के साथ खेल रहा हूं और मुझे अभी भी नहीं मिला कि यह सब जादू कैसे काम करता है। मैं konsole (kde) और yakuake के स्रोत को देख रहा हूं (संभवतः konsole का उपयोग करता है) मुझे वह नहीं मिल सकता है जहां वह सब जादू होता है।


6
एक साधारण टर्मिनल एमुलेटर और एक साधारण शेल के साथ एक सरल खिलौना ऑपरेटिंग सिस्टम (और इसकी पुस्तक के पहले पंद्रह या इतने पृष्ठ) पर एक नज़र डालें । साथ ही, संबंधित प्रश्न के इस उत्तर को पढ़ें ।

2
यह लिंक टर्मिनल विषय और ट्टी के

@nwildner कूल,
माइक

जवाबों:


30

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

बाद में xtermस्क्रीन और चित्रमय स्क्रीन-कार्ड, कीबोर्ड, माउस और एक साधारण प्रोसेसर के साथ कुछ ग्राफिकल टर्मिनल (तथाकथित "xterminals", -प्रोग्राम के साथ भ्रमित नहीं होना ) भी थे ; जो सिर्फ एक एक्स-सर्वर चला सकता है। वे स्वयं कोई संगणना नहीं करते थे, इसलिए एक्स-क्लाइंट उस कंप्यूटर पर भागते थे जिससे वे जुड़े थे। कुछ के पास हार्डडिस्क थे, लेकिन वे नेटवर्क पर बूट भी कर सकते थे। 1990 के दशक में वे लोकप्रिय थे, इससे पहले कि पीसी इतने सस्ते और शक्तिशाली हो गए।

एक "टर्मिनल एमुलेटर" - "टर्मिनल-विंडो" जो आप जैसे कार्यक्रमों के साथ खोलते हैं xtermया konsole- ऐसे डमी टर्मिनलों की कार्यक्षमता की नकल करने की कोशिश करते हैं। इसके अलावा PuTTY(विंडोज) जैसे कार्यक्रम टर्मिनलों का अनुकरण करते हैं।

पीसी के साथ, जहां "कंसोल" (कीबोर्ड + स्क्रीन) और "कंप्यूटर" एक एकल इकाई से अधिक है, आपको "वर्चुअल टर्मिनल" (लिनक्स पर, Alt + F6 के माध्यम से Alt + F6) के बदले मिला, लेकिन ये भी पुराने शैली के टर्मिनलों की नकल करें। बेशक, यूनिक्स / लिनक्स एक डेस्कटॉप उपयोगकर्ता द्वारा उपयोग किए जाने वाले डेस्कटॉप ऑपरेटिंग सिस्टम के अधिक होने के साथ, अब आप अपना अधिकांश काम "कंसोल पर" करते हैं, जहां उपयोगकर्ता सीरियल-लाइनों द्वारा जुड़े टर्मिनलों से पहले उपयोग किए गए टर्मिनलों से पहले करते हैं।


यह निश्चित रूप से शेल है जो प्रोग्राम शुरू करता है। और यह एक पर्यावरण-सेटिंग के साथ खुद की प्रतिलिपि बनाने के लिए कांटा-सिस्टमकॉल (सी भाषा) का उपयोग करता है, फिर इस कॉपी को उस कमांड में बदलने के लिए उपयोग किया जाता है जिसे आप चलाना चाहते थे। जब तक कमांड पूरा नहीं होता है, शेल निलंबित होता है (जब तक कि पृष्ठभूमि में कमांड नहीं चलती है)। चूंकि कमांड शेल से स्टड, स्टडआउट और स्टेडर के लिए सेटिंग्स इनहेरिट करता है, कमांड टर्मिनल की स्क्रीन पर लिखेगा और टर्मिनल के कीबोर्ड से इनपुट प्राप्त करेगा।


और गूंगे धारावाहिक टर्मिनलों और Xterms के बीच में en.wikipedia.org/wiki/Blit_(computer_terminal)
sendmoreinfo

31

जब आप "एक टर्मिनल खोलते हैं", तो आप एक टर्मिनल एमुलेटर प्रोग्राम शुरू कर रहे हैं, जैसे कि xterm, सूक्ति-टर्मिनल, lxterm, konsole,…

टर्मिनल एमुलेटर जो पहली चीजें करता है, उनमें से एक छद्म टर्मिनल (जिसे अक्सर छद्म ट्टी कहा जाता है, या शॉर्ट के लिए पीटीआई) आवंटित किया जाता है। पीटीआई चरित्र डिवाइस फ़ाइलों की एक जोड़ी है : पीटी मास्टर, जो कि टर्मिनल एमुलेटर खुलता है, और पीटी स्लेव, वह पक्ष है जो टर्मिनल के अंदर चलने वाले प्रोग्रामों को खुला रखता है। अधिकांश आधुनिक यूनियनों में, मास्टर /dev/ptmx(जो प्रत्येक टर्मिनल एमुलेटर खुला है) और गुलाम है /dev/pts/NUMBER। छद्म-टर्मिनलों के लिए कर्नेल चालक इस बात पर नज़र रखता है कि कौन सी प्रक्रिया प्रत्येक दास डिवाइस के लिए मास्टर को नियंत्रित करती है। टर्मिनल एमुलेटर मास्टर डिवाइस पर एक ioctl के माध्यम से संबंधित दास को पथ पुनः प्राप्त कर सकता है।

एक बार जब टर्मिनल एमुलेटर ने मास्टर डिवाइस को खोल दिया है, तो यह एक उपप्रकार (आमतौर पर एक शेल) शुरू करता है, लेकिन यह उस उपयोगकर्ता पर निर्भर है, जिसने टर्मिनल एमुलेटर का फैसला किया है। एमुलेटर सामान्य रूप से किसी प्रोग्राम को लागू करने के लिए ऐसा करता है:

  • एक बच्चे की प्रक्रिया कांटा ,
  • फ़ाइल डिस्क्रिप्टर 0, 1 और 2 (मानक इनपुट, मानक आउटपुट और त्रुटि स्ट्रीम) पर गुलाम पेंटी डिवाइस खोलें,
  • बच्चे की प्रक्रिया में शेल या अन्य कार्यक्रम निष्पादित करें।

जब बच्चा (या कोई अन्य प्रक्रिया) पेंटी गुलाम को लिखता है, तो एम्यूलेटर पीटी मास्टर पर इनपुट देखता है।

इसके विपरीत, जब एमुलेटर मास्टर डिवाइस को लिखता है, तो इसे दास पर इनपुट के रूप में देखा जाता है।

उम्मीद उसी तरह से काम करती है। एक्सटम जैसे एक्सपेक्ट और एक टर्मिनल एमुलेटर के बीच का अंतर है, जहां उन्हें इनपुट मिलता है कि वे प्रोग्राम (स्क्रिप्ट बनाम कीबोर्ड इनपुट) को फीड करते हैं और वे आउटपुट के साथ क्या करते हैं (लॉग फाइल या विंडो में पार्सर बनाम ड्राइंग टेक्स्ट)।


यहाँ वर्णित के सरल उदाहरणों में से एक बिजीबॉक्स scriptकमांड का कार्यान्वयन है , जहां xgetptyफ़ंक्शन के साथ कार्य का मूल है /dev/ptmx
रुस्लान

@ मुझे लगता है कि अंग्रेजी आपकी मूल भाषा नहीं है। लेकिन अगर आप किसी पोस्ट को संपादित करते हैं, तो कृपया सुनिश्चित करें कि आप इसे गलत नहीं बनाते हैं। यदि आप इसे नहीं समझते हैं, तो संपादित न करें। इसके अलावा, एक बार फिर, कृपया उन चीजों को उजागर करने के लिए बोल्ड का उपयोग न करें जिन्हें हाइलाइटिंग की आवश्यकता नहीं है।
गिल्स एसओ- बुराई को रोकना '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.