लिनक्स: अंतर / देव / कंसोल, / देव / ट्टी और / देव / tty0 के बीच


133

एक Linux सिस्टम पर, क्या बीच का अंतर है /dev/console, /dev/ttyऔर /dev/tty0?

उनका संबंधित उपयोग क्या है और वे कैसे तुलना करते हैं?


3
तुम भी में रुचि हो सकती इस
केविन

जवाबों:


93

से प्रलेखन :

/dev/tty        Current TTY device
/dev/console    System console
/dev/tty0       Current virtual console

अच्छे पुराने दिनों /dev/consoleमें सिस्टम एडमिनिस्ट्रेटर कंसोल था। और TTYs एक सर्वर से जुड़े उपयोगकर्ताओं के सीरियल डिवाइस थे। अब /dev/consoleऔर /dev/tty0वर्तमान प्रदर्शन का प्रतिनिधित्व करते हैं और आमतौर पर समान होते हैं। आप जोड़कर उदाहरण के लिए यह ओवरराइड कर सकते हैं console=ttyS0करने के लिए grub.conf। उसके बाद आपका /dev/tty0मॉनिटर है और /dev/consoleहै /dev/ttyS0

के बीच अंतर दिखाने के लिए एक अभ्यास /dev/ttyऔर /dev/tty0:

Ctrl+ Alt+ दबाकर 2 कंसोल पर जाएं F2। के रूप में लॉगिन करें root। टाइप करें sleep 5; echo tty0 > /dev/tty0। + Enterदबाकर 3 कंसोल पर दबाएँ और स्विच करें । अब + दबाकर 2 वें कंसोल पर वापस जाएं । 3 कंसोल पर टाइप करें , दबाएँ और स्विच करें।AltF3AltF2sleep 5; echo tty > /dev/ttyEnter

आप देख सकते हैं कि ttyवह कंसोल है जहां प्रक्रिया शुरू होती है, और tty0हमेशा चालू कंसोल होता है।


6
अच्छा व्यायाम! उबंटू ताले को जड़ देता है, इसलिए उबंटू पर इसे पुन: पेश करने का एक तरीका है:$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
SFun28

10
@ SFun28, मैंने हमेशा इस्तेमाल किया sudo -i, और वॉयला - एक रूट शेल।
एंड्रे लास्ज़लो

4
रूट निजी की आवश्यकता वाली फ़ाइलों को लिखने के लिए एक मुहावरा है गूंज सामान | सुडो टी / देव / tty0> / देव / अशक्त;
पीटर कॉर्ड्स

Dammit। जब मैं ने लिखा unix.stackexchange.com/a/229598/80483 , मैं अनजान था इस सवाल का जवाब!
इंनिस मिसी

@ SFun28: यदि sudo anycommandकाम करता है, तो sudo -iरूट कार्यों पर भी जाएं। लिनक्स / बीएसडी / यूनिक्स जैसी कोई चीज नहीं है जहां आप रूट नहीं कर सकते। (तब यह लिनक्स / बीएसडी / यूनिक्स नहीं होगा।)
Evi1M4chine

60
  • /dev/consoleउपकरणों का एक आभासी सेट है जिसे बूट समय पर एक पैरामीटर के रूप में सेट किया जा सकता है। यह एक सीरियल डिवाइस या एक वर्चुअल कंसोल और डिफ़ॉल्ट बिंदुओं द्वारा पुनर्निर्देशित किया जा सकता है /dev/tty0। जब console=कर्नेल में कई विकल्प दिए जाते हैं, तो कंसोल आउटपुट एक से अधिक डिवाइस पर जाएगा।

  • /dev/tty0 वर्तमान वर्चुअल कंसोल है

  • /dev/tty[1-x]आभासी शान्ति आप के साथ करने के लिए स्विच में से एक है control- alt- F1और इतने पर।

  • /dev/ttyकंसोल (भौतिक, आभासी या छद्म डिवाइस, यदि कोई हो) के लिए एक उपनाम की तरह है जो इसे खोलने वाली प्रक्रिया से जुड़ा है। अन्य उपकरणों के विपरीत, आपको इसे लिखने के लिए रूट विशेषाधिकारों की आवश्यकता नहीं है। यह भी ध्यान दें कि जैसी प्रक्रियाएँ cronऔर उसी तरह की बैच प्रक्रियाएँ लॉन्च की गई हैं /dev/tty, उनका कोई उपयोग करने योग्य नहीं है , क्योंकि वे किसी से जुड़ी नहीं हैं। इन प्रक्रियाओं में आउटपुट ?के TTYकॉलम में एक है ps -ef


आपको इस कथन से क्वेरी करने का क्या मतलब है "/ dev / tty यह क्वैसिंग प्रक्रिया द्वारा उपयोग किया जाने वाला कंसोल है"?
रॉन विंस

1
@RonVince मेरा मतलब है /dev/ttyकि एक अलग डिवाइस हो सकता है, यदि कोई हो, तो उस प्रक्रिया पर निर्भर करता है जो इसे खोलती है। उत्तर अपडेट किया गया।
जुलियाग्रे

धन्यवाद। क्या मुझे पता है कि प्रक्रियाएं वास्तव में उनसे जुड़ी / डिवाइस फाइल से सीधे / के बजाय / से / dev / tty से लिखना / पढ़ना / पढ़ना हैं?
रॉन विंस

@RonVince मुझे डर है कि मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं। आप इसे rephrase सकता है?
jlliagre

1
@RonVince Opening / dev / tty (न कि /देव / शेट्टी। जो कुछ भी अन्य डिवाइस गैर पोर्टेबल, अधिक जटिल और कम विश्वसनीय है, उसे सीधे लिखना। एक प्रक्रिया को यह जानने की जरूरत नहीं है कि प्रक्रिया टर्मिनल किस वास्तविक उपकरण से जुड़ा है, कर्नेल इसे पहले से जानता है।
jlliagre

20

/ Dev / कंसोल

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst

लिनक्स पर, कर्नेल कंसोल को console= बूट विकल्प का उपयोग करके कॉन्फ़िगर किया जा सकता है । कर्नेल कोड जो कॉल printk()करता है, उसे संदेश लिख सकता है, उदाहरण के लिए जब कोई डिवाइस लोड होता है या कोई त्रुटि होती है। ये संदेश कर्नेल द्वारा बफ़र किए जाते हैं। (यह भी देखें dmesg)। जब एक कंसोल डिवाइस पाया जाता है और शुरू होता है, तो यह पहले के सभी बफर संदेश प्राप्त करता है।

आप console=कई कंसोल को कॉन्फ़िगर करने के लिए कई बार पास कर सकते हैं , और उन सभी को संदेश लिखा जाएगा। जाहिरा तौर पर आप केवल प्रत्येक "प्रकार" के एक कंसोल का चयन कर सकते हैं: आप दोनों का उपयोग नहीं कर सकते हैं console=ttyS0और console=ttyS1

कर्नेल डॉक्यूमेंटेशन /dev/consoleएक कैरेक्टर डिवाइस नंबर के रूप में निर्दिष्ट करता है (5,1)। इस चरित्र उपकरण को खोलने से "मुख्य" कंसोल खुलता है, जो कंसोल की सूची में अंतिम ट्टी है। पहली गैर-कर्नेल प्रक्रिया, जिसे init"पीआईडी ​​1" कहा जाता है , /dev/consoleमानक आउटपुट, मानक त्रुटि और मानक इनपुट से जुड़ा हुआ है।

यदि कोई भी कंस टेटी नहीं है, तो ओपनिंग /dev/consoleएरर ENODEV("ऐसा कोई उपकरण नहीं") देता है। गिरी होगीछापएक संदेश लॉग करें, और initपरवाह किए बिना शुरू करें । कर्नेल कंसोल के एक उदाहरण के लिए, जो एक tty डिवाइस नहीं है, लाइन प्रिंटर को देखें netconsole, या मेरा पसंदीदा कंसोल ।

आप पढ़कर भी tty कंसोल की एक सूची देख सकते हैं /sys/class/tty/console/activesystemd प्रलेखन बताता है कि पहले दिखाया गया उपकरण मुख्य कंसोल है। सूची वास्तव में कर्नेल कमांड लाइन के रिवर्स ऑर्डर में है। वर्तमान गिरी प्रलेखन गलत तरीके से कहा गया है कि पिछले डिवाइस से पता चला मुख्य या "सक्रिय" कंसोल है। किसी कारण से इस फ़ाइल को परिवर्तनों के लिए सर्वेक्षण करना संभव है (यदि कंसोल डिवाइस हटा दिए गए हैं?)।

systemd-nspawnकंटेनर के अंदर , मानक /dev/consoleफ़ाइल को एक छद्म टर्मिनल डिवाइस (PTY) से बदल दिया जाता है। इन्हें वर्चुअल टर्मिनल डिवाइस के रूप में सबसे अच्छा बताया जाएगा। वे गतिशील रूप से बनाए जाते हैं और इसका उपयोग गनोम टर्मिनल जैसे ग्राफिकल टर्मिनल एमुलेटर को लागू करने के लिए किया जाता है, और जैसे रिमोट एक्सेस के लिए ssh

/ Dev / tty0

लिनक्स TTY डिवाइस नोड tty1 के माध्यम से tty63आभासी टर्मिनल हैं। उन्हें वीटी के रूप में, या वर्चुअल कंसोल के रूप में भी जाना जाता है। वे भौतिक कंसोल डिवाइस ड्राइवर के शीर्ष पर कई कंसोल का अनुकरण करते हैं। एक समय में केवल एक वर्चुअल कंसोल दिखाया और नियंत्रित किया जाता है। सक्रिय टर्मिनल को स्विच किया जा सकता है, उदाहरण के लिए chvt, या Ctrl + Alt + F1 हालांकि आपके पास कई फ़ंक्शन कुंजियाँ हैं।

आप वर्तमान वीटी का उपयोग करके भी पढ़ और लिख सकते हैं /dev/tty0tty0सामान्य कर्नेल कंसोल है, उदाहरण के लिए, यदि आपने स्पष्ट रूप से एक का चयन नहीं किया है। "सिस्टम पहले एक वीजीए कार्ड की तलाश करता है [जो कि वीटीएस पर चलता है] और फिर एक सीरियल पोर्ट के लिए"। आप कंसोल को एक विशिष्ट वीटी पर भी सेट कर सकते हैं, जैसे console=tty1

"यदि आपके पास अपने सिस्टम में VGA कार्ड नहीं है, तो पहला सीरियल पोर्ट स्वतः ही कंसोल बन जाएगा।" एक "सीरियल कंसोल" की तरह ttyS0शायद सबसे आम विकल्प है tty0। सीरियल कंसोल के शीर्ष पर VT सिस्टम का उपयोग करना संभव नहीं है।

/ Dev / tty

/dev/ttyPOSIX द्वारा निर्दिष्ट तीन मानक डिवाइस फ़ाइलों में/dev/ से एक है ( POSIX द्वारा निर्दिष्ट तीन निर्देशिका नामों में से एक है)। इसे खोलना वर्तमान प्रक्रिया के नियंत्रित टर्मिनल को खोलने के बराबर है। नियंत्रण टर्मिनल तब सेट किया जाता है जब कोई प्रक्रिया पहले एक टर्मिनल खोलती है, कम से कम लिनक्स पर । उदाहरण के लिए, initइसमें, यह संदर्भित होगा /dev/console

कंट्रोलिंग टर्मिनल से पता लगाना पारंपरिक रूप से पृष्ठभूमि प्रक्रिया शुरू करने के लिए जरूरी कदमों में से एक है, उदाहरण के लिए एक सिस्टम लॉगिंग डेमॉन । बैकग्राउंड प्रोसेस बनने के चरण बुरी तरह से जटिल होते हैं, लेकिन विशिष्ट होने के लिए, जो चरण कंट्रोलिंग टर्मिनल से अलग होता है वह सेटिस् स सिस्टम कॉल है। अधिक आधुनिक प्रणालियों में, init सिस्टम उदा। Systemd पहली जगह में किसी भी नियंत्रित टर्मिनल के बिना सेवा शुरू करता है।

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