`/ देव / कंसोल` किसके लिए उपयोग किया जाता है?


13

से इस उत्तर के लिए लिनक्स:, / dev / tty और / dev / tty0 / dev / कंसोल के बीच अंतर

से प्रलेखन :

/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/consoleएक टेक्स्ट भौतिक टर्मिनल की डिवाइस फ़ाइल की तरह लगता है, ठीक उसी तरह जैसे /dev/tty{1..63}वर्चुअल कंसोल के लिए डिवाइस फाइलें होती हैं।

" /dev/consoleऔर /dev/tty0वर्तमान प्रदर्शन का प्रतिनिधित्व करते हैं और आमतौर पर समान होते हैं", /dev/consoleमुझे लगता है कि यह एक वर्चुअल कंसोल की डिवाइस फ़ाइल भी हो सकती है। से /dev/consoleअधिक की तरह लगता है ( वर्तमान में सक्रिय वर्चुअल कंसोल है, और हो सकता है )।/dev/tty0/dev/tty{1..63}/dev/tty0/dev/tty{1..63}

क्या है /dev/console? इसका क्या उपयोग है?

करता है /dev/consoleके रूप में लिनक्स कर्नेल के लिए एक ही भूमिका निभाते हैं /dev/ttyएक प्रक्रिया के लिए? ( /dev/ttyप्रक्रिया के प्रक्रिया सत्र का नियंत्रण टर्मिनल है, और एक पीटीएस हो सकता है, /dev/ttynजहां n1 से 63 तक, या अधिक है?)

अन्य उत्तर का उल्लेख है:

कर्नेल डॉक्यूमेंट /dev/consoleएक कैरेक्टर डिवाइस के रूप में निर्दिष्ट किया गया है जो 5: 1 है। इस चरित्र उपकरण को खोलने से "मुख्य" कंसोल खुलता है, जो कंसोल की सूची में अंतिम ट्टी है।

"शान्ति की सूची" मतलब सब करता है console='में बूट विकल्प ?

" /dev/consoleएक चरित्र डिवाइस के रूप में 5: 1" गिना जाता है, क्या इसका मतलब यह है कि /dev/consoleएक भौतिक पाठ टर्मिनल की डिवाइस फ़ाइल है जो एक सिस्टम कंसोल है? (लेकिन फिर से, मैंने जो पहले उत्तर दिया, वह कहता है /dev/consoleकि यह वही हो सकता है /dev/tty0जो भौतिक पाठ टर्मिनल नहीं है, लेकिन एक आभासी कंसोल है)

धन्यवाद।


मैंने उन मैन्युअल पृष्ठों के लिए कुछ प्रतिस्थापन बनाए जो वर्षों पहले गायब हो गए थे: jdebp.eu./Proposals/linux-kvt-manual-pages.html
JdeBP

जवाबों:


18

/dev/consoleउपयोक्ता को कर्नेल के कंसोल को उजागर करने के लिए मुख्य रूप से मौजूद है। अब उपकरणों पर लिनक्स कर्नेल का प्रलेखन कहता है

कंसोल डिवाइस, /dev/consoleवह डिवाइस है जिसके लिए सिस्टम संदेश भेजे जाने चाहिए, और जिस पर लॉग-इन को एकल-उपयोगकर्ता मोड में अनुमति दी जानी चाहिए। लिनक्स 2.1.71 से शुरू होकर, /dev/consoleकर्नेल द्वारा प्रबंधित किया जाता है; पिछले संस्करणों के लिए यह या तो /dev/tty0एक विशिष्ट वर्चुअल कंसोल होना चाहिए , जैसे कि /dev/tty1, या सिस्टम के कॉन्फ़िगरेशन के आधार पर एक सीरियल पोर्ट प्राइमरी ( tty*, नहीं cu*) डिवाइस के लिए।

/dev/console, प्रमुख 5 और मामूली 1 के साथ डिवाइस नोड, जो कुछ भी कर्नेल को सिस्टम व्यवस्थापक के साथ बातचीत करने का प्राथमिक साधन मानता है, तक पहुंच प्रदान करता है; यह सिस्टम से जुड़ा एक भौतिक कंसोल हो सकता है (शीर्ष पर वर्चुअल कंसोल अमूर्त के साथ, इसलिए यह उपयोग कर सकता है tty0या ttyNजहां एन 1 और 63 के बीच है), या सीरियल कंसोल, या हाइपरवाइज़र कंसोल, या यहां तक ​​कि ब्रेल डिवाइस भी। ध्यान दें कि कर्नेल स्वयं का उपयोग नहीं करता है /dev/console: डिवाइस नोड उपयोगकर्ता के लिए हैं, कर्नेल के लिए नहीं; हालाँकि, यह जाँच करता /dev/consoleहै कि मौजूद है और प्रयोग करने योग्य है, और initइसके मानक इनपुट, आउटपुट और त्रुटि की ओर इशारा करता है /dev/console

जैसा कि यहां बताया गया है, /dev/consoleएक निश्चित और मामूली के साथ एक चरित्र डिवाइस है क्योंकि यह एक अलग डिवाइस है (जैसा कि, कर्नेल के उपयोग का एक साधन; भौतिक उपकरण नहीं), /dev/tty0या किसी अन्य डिवाइस के बराबर नहीं । यह कुछ हद तक उसी स्थिति के/dev/tty समान है जिसके साथ उसका अपना डिवाइस (5: 0) है क्योंकि यह अन्य वर्चुअल कंसोल या टर्मिनल डिवाइसों की तुलना में थोड़ी अलग सुविधाएँ प्रदान करता है।

"कंसोल की सूची" वास्तव में console=बूट पैरामीटर (या डिफ़ॉल्ट कंसोल, यदि कोई नहीं है) द्वारा परिभाषित कंसोल की सूची है । आप इस तरह से परिभाषित कंसोल को देख सकते हैं /proc/consoles/dev/consoleवास्तव में इनमें से अंतिम तक पहुँच प्रदान करता है :

आप कर्नेल कमांड लाइन पर कई कंसोल = विकल्प निर्दिष्ट कर सकते हैं। आउटपुट उन सभी पर दिखाई देगा। जब आप खोलेंगे तो अंतिम डिवाइस का उपयोग किया जाएगा /dev/console


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
terdon

6

"क्या है /dev/console?" इसका उत्तर पिछले उत्तर में दिया गया है । जब आप अन्य दो प्रश्नों के उत्तर जानते हैं तो शायद यह उत्तर अधिक स्पष्ट है।

Q1। "भौतिक टर्मिनल का प्रतिनिधित्व करने वाली डिवाइस फ़ाइल क्या है?"

ऐसी कोई डिवाइस फ़ाइल नहीं है।

Q2। "किस चीज के लिए /dev/consoleउपयोग किया जाता है?"

लिनक्स पर, /dev/consoleस्टार्टअप (और शटडाउन) के दौरान संदेश दिखाने के लिए उपयोग किया जाता है। इसका उपयोग "एकल उपयोगकर्ता मोड" के लिए भी किया जाता है, जैसा कि स्टीफन किट के उत्तर में बताया गया है। इसके लिए इसका उपयोग करने के लिए बहुत कुछ नहीं है।

यूनिक्स के "अच्छे पुराने दिनों में" /dev/consoleएक समर्पित शारीरिक उपकरण था। लेकिन लिनक्स में ऐसा नहीं है।

संबंधित साक्ष्य

1. "भौतिक टर्मिनल का प्रतिनिधित्व करने वाली डिवाइस फ़ाइल क्या है?"

मुझे इस तरह समझने की कोशिश करते हैं। /dev/tty{1..63}और /dev/pts/nडिवाइस फ़ाइलें हैं जो स्वयं उपकरणों का प्रतिनिधित्व करती हैं (हालांकि वे उत्सर्जन हैं), प्रक्रिया या कर्नेल के संबंध में नहीं। /dev/tty0एक में reprsents /dev/tty{1..63}(शायद गिरी जो वर्तमान में कुछ द्वारा किया जाता हैया शेल प्रक्रिया?)। /dev/ttyवर्तमान में प्रक्रिया सत्र द्वारा उपयोग किए जाने वाले नियंत्रण टर्मिनल का प्रतिनिधित्व करता है। /dev/consoleवर्तमान में कर्नेल द्वारा उपयोग किए जाने वाले टर्मिनल का प्रतिनिधित्व करता है?

भौतिक टर्मिनल का प्रतिनिधित्व करने वाली डिवाइस फ़ाइल क्या है, कर्नेल या प्रक्रिया के संबंध में नहीं?

के लिए अंतर्निहित डिवाइस /dev/tty{1..63}हैं struct con_driver। सभी संभावित ड्राइवरों को देखने के लिए, https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_console देखें।

इन अंतर्निहित डिवाइस के लिए कोई डिवाइस फ़ाइल नहीं है!


उन्हें प्रबंधित करने के लिए केवल एक न्यूनतम उपयोगकर्ता इंटरफ़ेस है।

$ head /sys/class/vtconsole/*/name
==> /sys/class/vtconsole/vtcon0/name <==
(S) dummy device

==> /sys/class/vtconsole/vtcon1/name <==
(M) frame buffer device

यदि आप वास्तव में अधिक जानना चाहते हैं, तो (M)मॉड्यूल के लिए खड़ा है । यानी डमी कंसोल डिवाइस एक लोडेबल कर्नेल मॉड्यूल द्वारा प्रदान नहीं किया जाता है; यह प्रारंभिक कर्नेल छवि (उर्फ "बिलिन") का हिस्सा है।

दूसरे, bindप्रत्येक उपनिर्देशिका में फ़ाइल /sys/class/vtconsoleआपको बताती है कि कौन सा vtconsole डिवाइस सक्रिय है। अगर मैं 0सक्रिय एक को लिखता हूं , तो यह डमी पर स्विच करने के लिए प्रकट होता है। (GUI VTs अप्रभावित लगते हैं, लेकिन पाठ VTs काम करना बंद कर देते हैं)। 1डमी के लिए लेखन इसे सक्रिय नहीं करता है। या तो विधि वास्तविक एक पर वापस जाने के लिए काम करती है। यदि मैं कोड को सही ढंग से पढ़ता हूं, तो चाल echo 1 > bindकेवल कंसोल ड्राइवरों के लिए काम करने वाली है जो एक मॉड्यूल (!) के रूप में निर्मित होती है।

विशेष रूप से फ़्रेमबफ़र कंसोल के लिए , विभिन्न फ़्रेमबफ़र डिवाइस ( /dev/fb0...) को विशिष्ट वर्चुअल कंसोल को https://kernel.org/doc/Documentation/fb/fbcon.txt में बाँधने के बारे में कुछ और जानकारी है । इसमें एक कर्नेल विकल्प fbcon:map=या एक कमांड शामिल है जिसे कहा जाता है con2fbmap

बेशक विवरण अलग-अलग कर्नेल संस्करण, आर्किटेक्चर, फ़र्मवेयर, डिवाइस, ड्राइवर, आदि के साथ भिन्न हो सकते हैं। मुझे वास्तव में ऊपर दिए गए किसी भी इंटरफेस का उपयोग नहीं करना है। कर्नेल बस देता है i915/ inteldrmfb/ जो भी आप इसे कॉल करना चाहते हैं जब यह लोड होता है, उदाहरण के लिए vgacon

ऐसा लगता है कि मेरी EFI मशीन कभी नहीं है vgacon। तो सबसे पहले यह एक डमी कंसोल का उपयोग करता है, और दूसरी बार 1.2 सेकंड के बाद यह स्विच करता है fbcon, शीर्ष पर चल रहा है efifb। लेकिन अभी तक मुझे इस बात की परवाह नहीं थी कि विवरण क्या हैं; यह सिर्फ काम करता है।

$ dmesg | grep -C2 [Cc]onsole
[    0.230822] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.233164] NR_IRQS: 65792, nr_irqs: 728, preallocated irqs: 16
[    0.233346] Console: colour dummy device 80x25
[    0.233571] console [tty0] enabled
[    0.233585] ACPI: Core revision 20180810
[    0.233838] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 133484882848 ns
--
[    1.228393] efifb: scrolling: redraw
[    1.228396] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    1.230393] Console: switching to colour frame buffer device 170x48
[    1.232090] fb0: EFI VGA frame buffer device
[    1.232110] intel_idle: MWAIT substates: 0x11142120
--
[    3.595838] checking generic (e0000000 408000) vs hw (e0000000 10000000)
[    3.595839] fb: switching to inteldrmfb from EFI VGA
[    3.596577] Console: switching to colour dummy device 80x25
[    3.596681] [drm] Replacing VGA console driver
[    3.597159] [drm] ACPI BIOS requests an excessive sleep of 20000 ms, using 1500 ms instead
[    3.599830] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
--
[    3.657050] e1000e 0000:00:19.0 eth0: MAC: 11, PHY: 12, PBA No: FFFFFF-0FF
[    3.657869] e1000e 0000:00:19.0 eno1: renamed from eth0
[    4.711453] Console: switching to colour frame buffer device 170x48
[    4.734356] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device
[    4.778813] Loading iSCSI transport class v2.0-870.

2. "किसके लिए /dev/consoleउपयोग किया जाता है?"

आप TTY डिवाइस के रूप में / dev / कंसोल का उपयोग कर सकते हैं। इसके लिए लिखना, उदाहरण के लिए, एक विशिष्ट अंतर्निहित डिवाइस पर लिखेंगे, जिसमें स्वयं का एक वर्ण डिवाइस नंबर भी होगा।

अक्सर / देव / कंसोल / देव / tty0 से बंधा होता है, लेकिन कभी-कभी यह एक अलग डिवाइस से बंधा हो सकता है।

तो इस मामले में / dev / कंसोल पर लिखना / dev / tty0 को लिखना होगा। और बदले में, लिखने के लिए / dev / tty0 जो भी / dev / ttyN डिवाइस वर्तमान में सक्रिय है लिखने के बराबर है।

लेकिन इससे एक दिलचस्प सवाल उठता है। tty0पहुँच विभिन्न वर्चुअल कंसोल तक पहुँच जाएगी, जिसके आधार पर वर्तमान में सक्रिय है। लोग वास्तव में क्या उपयोग tty0करते हैं, और इसी तरह consoleलिनक्स पर किसके लिए उपयोग किया जाता है?

  1. तकनीकी रूप से, आप पढ़ सकते हैं और console/ से लिख सकते हैं tty0, उदाहरण के लिए, gettyलॉग ऑन करने की अनुमति देने के लिए tty0। लेकिन यह केवल एक त्वरित हैक के रूप में उपयोगी है। क्योंकि इसका मतलब है कि आप लिनक्स के कई वर्चुअल कंसोल का लाभ नहीं उठा सकते हैं।

  2. systemdsysfsअंतर्निहित TTY डिवाइस का पता लगाने के लिए / dev / कंसोल डिवाइस से संबद्ध विशेषता के लिए दिखता है। यह systemdस्वचालित रूप से स्पॉन करने की अनुमति देता है gettyऔर उदाहरण के लिए एक सीरियल कंसोल पर लॉगिंग की अनुमति देता है, जब उपयोगकर्ता बूट करके कर्नेल कंसोल सेट करता है console=ttyS0। यह सुविधाजनक है; यह दो अलग-अलग स्थानों में इस कंसोल को कॉन्फ़िगर करने की आवश्यकता से बचा जाता है। फिर से, देखें man systemd-getty-generator। हालाँकि, systemdवास्तव में इसके लिए खुला नहीं है /dev/console

  3. सिस्टम बूटस्ट्रैप के दौरान, आपके पास अभी तक sysfs माउंट नहीं हो सकते हैं। लेकिन आप जल्द से जल्द त्रुटि और प्रगति संदेश दिखाना चाहते हैं! इसलिए हम बिंदु 1 पर चक्कर लगाते हैं)। कर्नेल पीआईडी ​​1 को स्टडिन / स्टडआउट / स्टडर से जुड़ा हुआ है /dev/console। यह बहुत आसान है कि यह सरल तंत्र शुरू से ही सही हो।

  4. एक लिनक्स कंटेनर के अंदर, फ़ाइल /dev/consoleको कुछ अलग बनाया जा सकता है - चरित्र डिवाइस नंबर नहीं 5:1। इसके बजाय, इसे PTS डिवाइस फ़ाइल के रूप में बनाया जा सकता है। तब यह इस /dev/consoleफ़ाइल के माध्यम से लॉग इन करने के लिए समझ में आता है । systemdएक कंटेनर के अंदर ऐसे उपकरण पर लॉगिंग की अनुमति देगा; देखते हैं man systemd-getty-generator

    जब आप systemd-nspawnकमांड के साथ कंटेनर चलाते हैं तो इस तंत्र का उपयोग किया जाता है । (मुझे लगता है कि केवल जब आप systemd-nspawnएक TTY पर चलते हैं , हालांकि मैं मैन पेज को खोजने से नहीं बता सकता)।

    systemd-nspawnकंटेनर /dev/consoleको होस्ट से PTS डिवाइस के बाइंड माउंट के रूप में बनाता है । इसका मतलब है कि यह PTS डिवाइस /dev/pts/कंटेनर के अंदर दिखाई नहीं दे रहा है ।

    पीटीएस डिवाइस एक विशिष्ट devptsमाउंट के लिए स्थानीय हैं । पीटीएस डिवाइस सामान्य नियम का एक अपवाद हैं, कि उपकरणों को उनके डिवाइस नंबर से पहचाना जाता है। पीटीएस उपकरणों की पहचान उनके डिवाइस नंबर और उनके devptsमाउंट के संयोजन से की जाती है ।

  5. आप उपयोगकर्ता के वर्तमान वर्चुअल कंसोल पर लिखने के लिए console/ को तत्काल संदेश लिख सकते हैं tty0। यह तत्काल कर्नेल संदेशों के लिए उपयोगी हो सकता है, जो तत्काल कर्नेल संदेशों के समान हैं जो कंसोल (देखें man dmesg) पर मुद्रित होते हैं । हालाँकि, ऐसा करना सामान्य नहीं है, कम से कम एक बार सिस्टम बूटिंग समाप्त कर लेता है।

    rsyslog का इस पृष्ठ पर एक उदाहरण है , जो कर्नेल संदेशों को प्रिंट करता है /dev/console; यह लिनक्स पर व्यर्थ है क्योंकि कर्नेल डिफ़ॉल्ट रूप से पहले से ही ऐसा करेगा। एक उदाहरण जो मुझे फिर से नहीं मिल रहा है कि यह गैर-कर्नेल संदेशों के लिए उपयोग करने के लिए एक अच्छा विचार नहीं है क्योंकि बहुत सारे syslog संदेश हैं, आप अपने कंसोल को बाढ़ देते हैं और यह बहुत अधिक तरीके से हो जाता है।

    systemd-journald में कंसोल के सभी लॉग्स को अग्रेषित करने के विकल्प हैं। सिद्धांत रूप में यह वर्चुअल वातावरण में डीबगिंग के लिए उपयोगी हो सकता है। हालांकि, डिबगिंग के लिए हम आम तौर पर /dev/kmsgइसके बजाय आगे बढ़ते हैं । यह उन्हें कर्नेल लॉग बफर में बचाता है ताकि आप उन्हें पढ़ सकें dmesg। कर्नेल द्वारा उत्पन्न संदेशों की तरह, ये संदेश वर्तमान कर्नेल कॉन्फ़िगरेशन के आधार पर कंसोल पर प्रतिध्वनित हो सकते हैं।


बिंदु 2 के पूरक के रूप में, यह आम बात हुआ करता था (केवल लिनक्स पर नहीं) xconsoleजो चल रहा था उसका ट्रैक रखने के लिए चलाने के लिए ;-)। (और फ्रेमवर्क को सीधे लिखे गए संदेशों से बचने के लिए, उदाहरण के लिए SPARCstations पर।)
स्टीफन किट

@StephenKitt जब मैंने पहली बार SUSE लिनक्स का उपयोग किया था, तो मुझे लगता है कि यह xconsole शुरू कर दिया है, या इसे बढ़ा दिया है ताकि आप इसे डेस्कटॉप मुख्य मेनू से शुरू कर सकें, या कुछ - मुझे ठीक से याद नहीं है लेकिन मैंने इसे :-) देखा है।
sourcejedi

मुझे इस तरह समझने की कोशिश करते हैं। /dev/tty{1..63}और /dev/pts/nडिवाइस फ़ाइलें हैं जो स्वयं उपकरणों का प्रतिनिधित्व करती हैं (हालांकि वे उत्सर्जन हैं), प्रक्रिया या कर्नेल के संबंध में नहीं। वर्तमान /dev/tty0में /dev/tty{1..63}जो कुछ (शायद कर्नेल या शेल प्रक्रिया?) द्वारा उपयोग किया जाता है। /dev/ttyवर्तमान में प्रक्रिया सत्र द्वारा उपयोग किए जाने वाले नियंत्रण टर्मिनल का प्रतिनिधित्व करता है। /dev/consoleवर्तमान में कर्नेल द्वारा उपयोग किए जाने वाले टर्मिनल का प्रतिनिधित्व करता है? भौतिक टर्मिनल का प्रतिनिधित्व करने वाली डिवाइस फ़ाइल क्या है, कर्नेल या प्रक्रिया के संबंध में नहीं?
टिम

@Tim "/ dev / tty0 में से एक / //१/१०/१/३/२ में} जो कि वर्तमान में कुछ (शायद कर्नेल या शेल प्रक्रिया?)" - कर्नेल द्वारा उपयोग किया जाता है।
sourcejedi

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