एक Linux सिस्टम पर, क्या बीच का अंतर है /dev/console
, /dev/tty
और /dev/tty0
?
उनका संबंधित उपयोग क्या है और वे कैसे तुलना करते हैं?
एक Linux सिस्टम पर, क्या बीच का अंतर है /dev/console
, /dev/tty
और /dev/tty0
?
उनका संबंधित उपयोग क्या है और वे कैसे तुलना करते हैं?
जवाबों:
से प्रलेखन :
/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/tty
Enter
आप देख सकते हैं कि tty
वह कंसोल है जहां प्रक्रिया शुरू होती है, और tty0
हमेशा चालू कंसोल होता है।
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
, और वॉयला - एक रूट शेल।
sudo anycommand
काम करता है, तो sudo -i
रूट कार्यों पर भी जाएं। लिनक्स / बीएसडी / यूनिक्स जैसी कोई चीज नहीं है जहां आप रूट नहीं कर सकते। (तब यह लिनक्स / बीएसडी / यूनिक्स नहीं होगा।)
/dev/console
उपकरणों का एक आभासी सेट है जिसे बूट समय पर एक पैरामीटर के रूप में सेट किया जा सकता है। यह एक सीरियल डिवाइस या एक वर्चुअल कंसोल और डिफ़ॉल्ट बिंदुओं द्वारा पुनर्निर्देशित किया जा सकता है /dev/tty0
। जब console=
कर्नेल में कई विकल्प दिए जाते हैं, तो कंसोल आउटपुट एक से अधिक डिवाइस पर जाएगा।
/dev/tty0
वर्तमान वर्चुअल कंसोल है
/dev/tty[1-x]
आभासी शान्ति आप के साथ करने के लिए स्विच में से एक है control- alt- F1और इतने पर।
/dev/tty
कंसोल (भौतिक, आभासी या छद्म डिवाइस, यदि कोई हो) के लिए एक उपनाम की तरह है जो इसे खोलने वाली प्रक्रिया से जुड़ा है। अन्य उपकरणों के विपरीत, आपको इसे लिखने के लिए रूट विशेषाधिकारों की आवश्यकता नहीं है। यह भी ध्यान दें कि जैसी प्रक्रियाएँ cron
और उसी तरह की बैच प्रक्रियाएँ लॉन्च की गई हैं /dev/tty
, उनका कोई उपयोग करने योग्य नहीं है , क्योंकि वे किसी से जुड़ी नहीं हैं। इन प्रक्रियाओं में आउटपुट ?
के TTY
कॉलम में एक है ps -ef
।
/dev/tty
कि एक अलग डिवाइस हो सकता है, यदि कोई हो, तो उस प्रक्रिया पर निर्भर करता है जो इसे खोलती है। उत्तर अपडेट किया गया।
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/active
। systemd प्रलेखन बताता है कि पहले दिखाया गया उपकरण मुख्य कंसोल है। सूची वास्तव में कर्नेल कमांड लाइन के रिवर्स ऑर्डर में है। वर्तमान गिरी प्रलेखन गलत तरीके से कहा गया है कि पिछले डिवाइस से पता चला मुख्य या "सक्रिय" कंसोल है। किसी कारण से इस फ़ाइल को परिवर्तनों के लिए सर्वेक्षण करना संभव है (यदि कंसोल डिवाइस हटा दिए गए हैं?)।
systemd-nspawn
कंटेनर के अंदर , मानक /dev/console
फ़ाइल को एक छद्म टर्मिनल डिवाइस (PTY) से बदल दिया जाता है। इन्हें वर्चुअल टर्मिनल डिवाइस के रूप में सबसे अच्छा बताया जाएगा। वे गतिशील रूप से बनाए जाते हैं और इसका उपयोग गनोम टर्मिनल जैसे ग्राफिकल टर्मिनल एमुलेटर को लागू करने के लिए किया जाता है, और जैसे रिमोट एक्सेस के लिए ssh
।
लिनक्स TTY डिवाइस नोड tty1
के माध्यम से tty63
आभासी टर्मिनल हैं। उन्हें वीटी के रूप में, या वर्चुअल कंसोल के रूप में भी जाना जाता है। वे भौतिक कंसोल डिवाइस ड्राइवर के शीर्ष पर कई कंसोल का अनुकरण करते हैं। एक समय में केवल एक वर्चुअल कंसोल दिखाया और नियंत्रित किया जाता है। सक्रिय टर्मिनल को स्विच किया जा सकता है, उदाहरण के लिए chvt
, या Ctrl + Alt + F1 हालांकि आपके पास कई फ़ंक्शन कुंजियाँ हैं।
आप वर्तमान वीटी का उपयोग करके भी पढ़ और लिख सकते हैं /dev/tty0
। tty0
सामान्य कर्नेल कंसोल है, उदाहरण के लिए, यदि आपने स्पष्ट रूप से एक का चयन नहीं किया है। "सिस्टम पहले एक वीजीए कार्ड की तलाश करता है [जो कि वीटीएस पर चलता है] और फिर एक सीरियल पोर्ट के लिए"। आप कंसोल को एक विशिष्ट वीटी पर भी सेट कर सकते हैं, जैसे console=tty1
।
"यदि आपके पास अपने सिस्टम में VGA कार्ड नहीं है, तो पहला सीरियल पोर्ट स्वतः ही कंसोल बन जाएगा।" एक "सीरियल कंसोल" की तरह ttyS0
शायद सबसे आम विकल्प है tty0
। सीरियल कंसोल के शीर्ष पर VT सिस्टम का उपयोग करना संभव नहीं है।
/dev/tty
POSIX द्वारा निर्दिष्ट तीन मानक डिवाइस फ़ाइलों में/dev/
से एक है ( POSIX द्वारा निर्दिष्ट तीन निर्देशिका नामों में से एक है)। इसे खोलना वर्तमान प्रक्रिया के नियंत्रित टर्मिनल को खोलने के बराबर है। नियंत्रण टर्मिनल तब सेट किया जाता है जब कोई प्रक्रिया पहले एक टर्मिनल खोलती है, कम से कम लिनक्स पर । उदाहरण के लिए, init
इसमें, यह संदर्भित होगा /dev/console
।
कंट्रोलिंग टर्मिनल से पता लगाना पारंपरिक रूप से पृष्ठभूमि प्रक्रिया शुरू करने के लिए जरूरी कदमों में से एक है, उदाहरण के लिए एक सिस्टम लॉगिंग डेमॉन । बैकग्राउंड प्रोसेस बनने के चरण बुरी तरह से जटिल होते हैं, लेकिन विशिष्ट होने के लिए, जो चरण कंट्रोलिंग टर्मिनल से अलग होता है वह सेटिस् स सिस्टम कॉल है। अधिक आधुनिक प्रणालियों में, init सिस्टम उदा। Systemd पहली जगह में किसी भी नियंत्रित टर्मिनल के बिना सेवा शुरू करता है।