"কি /dev/console
?" উত্তর হয় পূর্ববর্তী উত্তর । আপনি যখন অন্য দুটি প্রশ্নের উত্তর জানেন তখন সম্ভবত সেই উত্তরটি আরও স্পষ্ট।
চতুর্থাংশ 1। "শারীরিক টার্মিনালটি নিজেই উপস্থাপন করে এমন ডিভাইস ফাইলটি কী?"
এমন কোনও ডিভাইস ফাইল নেই।
Q2 এর। "কি জন্য /dev/console
ব্যবহার করা হয়?"
লিনাক্স-এ, /dev/console
প্রারম্ভকালে (এবং শাটডাউন) বার্তা প্রদর্শন করতে ব্যবহৃত হয়। এটি "একক ব্যবহারকারী মোড" এর জন্যও ব্যবহৃত হয়, যেমন স্টিফেন কিটের উত্তরে উল্লেখ করা হয়েছে। এটির জন্য এটি ব্যবহার করার অর্থ হেতু আর কিছুই নেই।
ইউনিক্সের "শুভ পুরানো দিনগুলিতে" /dev/console
ছিল একটি উত্সর্গীকৃত শারীরিক যন্ত্র। তবে লিনাক্সে এটি হয় না।
সম্পর্কিত প্রমাণ
1. "শারীরিক টার্মিনালটি নিজেই উপস্থাপন করে এমন ডিভাইস ফাইলটি কী?"
আমাকে এইভাবে বুঝতে চেষ্টা করুন। /dev/tty{1..63}
এবং /dev/pts/n
ডিভাইস ফাইলগুলি ডিভাইসগুলি নিজেরাই উপস্থাপন করে (যদিও তারা অনুকরণ হয়), প্রক্রিয়া বা কার্নেলের সাথে সম্পর্কিত নয়। বর্তমানে কিছু দ্বারা ব্যবহৃত হতে পারে /dev/tty0
এমনটিকে পুনঃসংশোধন করে /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
আপনাকে দেখাবে যে কোন ভিটি কনসোল ডিভাইস সক্রিয়। আমি যদি সক্রিয়টিকে লিখি 0
তবে এটি ডামি একটিতে স্যুইচ করে প্রদর্শিত হবে। (জিইউআই ভিটিগুলি অকার্যকর বলে মনে হচ্ছে তবে পাঠ্য ভিটিগুলি কাজ বন্ধ করে দেয়)। 1
ডামি একজনের জন্য লেখা এটি সক্রিয় করে না। হয় কোনও পদ্ধতিই বাস্তবটিতে ফিরে যেতে কাজ করে। আমি কোডটি সঠিকভাবে পড়লে, কৌশলটি echo 1 > bind
কেবলমাত্র কনসোল ড্রাইভারদের জন্য কাজ করার কথা যা মডিউল (?!) হিসাবে নির্মিত।
জন্য ফ্রেম-বাফারের কনসোল বিশেষভাবে, বিভিন্ন ফ্রেম-বাফারের ডিভাইস (বাঁধাই সম্পর্কে আরো কিছু তথ্য /dev/fb0
নির্দিষ্ট ভার্চুয়াল কনসোল থেকে ...) https://kernel.org/doc/Documentation/fb/fbcon.txt । এর মধ্যে একটি কার্নেল বিকল্প fbcon:map=
বা একটি কমান্ড বলা হয় con2fbmap
।
অবশ্যই বিবরণগুলি বিভিন্ন কার্নেল সংস্করণ, আর্কিটেকচার, ফার্মওয়্যার, ডিভাইস, ড্রাইভার ইত্যাদির সাথে পরিবর্তিত হতে পারে I've উপরের ইন্টারফেসগুলির সত্যই আমার কখনই ব্যবহার করতে হয়নি। কার্নেল কেবল i915
/ inteldrmfb
/ যাকে আপনি কল করতে চান এটি লোড হওয়ার পরে এটি গ্রহণ করতে দেয়, উদাহরণস্বরূপ প্রতিস্থাপন করে vgacon
।
দেখে মনে হচ্ছে আমার ইএফআই মেশিনটি কখনই নেই 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.
২. "কিসের জন্য /dev/console
ব্যবহৃত হয়?"
আপনি টিটিওয়াই ডিভাইস হিসাবে / dev / কনসোল ব্যবহার করতে পারেন। এটি লিখতে, উদাহরণস্বরূপ, একটি নির্দিষ্ট অন্তর্নিহিত ডিভাইসে লিখবে, যার নিজস্ব একটি অক্ষর ডিভাইস নম্বরও থাকবে।
প্রায়শই / dev / কনসোলকে / dev / tty0 এ আবদ্ধ করা হয় তবে কখনও কখনও এটি অন্য ডিভাইসে আবদ্ধ করা যেতে পারে।
সুতরাং এক্ষেত্রে / dev / কনসোলকে / dev / tty0 এ লিখতে হবে। এবং ঘুরেফিরে, / dev / tty0 এ লেখা যে কোনও / dev / ttyN ডিভাইস বর্তমানে সক্রিয় রয়েছে তার লেখার সমতুল্য।
তবে এটি একটি আকর্ষণীয় প্রশ্ন উত্থাপন করে। অ্যাক্সেস tty0
করা বর্তমানে বিভিন্ন সক্রিয় ভার্চুয়াল কনসোলগুলিতে অ্যাক্সেস করবে। লোকেরা আসলে কী ব্যবহার করে tty0
এবং একইভাবে console
লিনাক্সে কী ব্যবহার করা হয়?
প্রযুক্তিগতভাবে, আপনি console
/ থেকে পড়তে এবং লিখতে পারেন tty0
, উদাহরণস্বরূপ getty
লগ ইন করার অনুমতি দেওয়ার জন্য একটি চালানো tty0
। তবে এটি কেবলমাত্র দ্রুত হ্যাক হিসাবে কার্যকর। কারণ এর অর্থ আপনি লিনাক্সের একাধিক ভার্চুয়াল কনসোলগুলির সুবিধা নিতে পারবেন না।
systemd
দেখায় sysfs
, / dev / কনসোল ডিভাইসের সাথে সম্পর্কিত একটি বৈশিষ্ট্য জন্য, অন্তর্নিহিত পির TTY ডিভাইস সনাক্ত করতে। এটি systemd
স্বয়ংক্রিয়ভাবে একটি স্পোন করতে getty
দেয় এবং লগইন করতে দেয় যেমন সিরিয়াল কনসোল, যখন ব্যবহারকারী বুট করে কোনও কার্নেল কনসোল সেটআপ করে console=ttyS0
। এটি সুবিধাজনক; এটি দুটি পৃথক স্থানে এই কনসোলটি কনফিগার করার প্রয়োজনকে এড়িয়ে চলে। আবার দেখুন man systemd-getty-generator
। তবে, systemd
আসলে এটির /dev/console
জন্য খোলে না ।
সিস্টেম বুটস্ট্র্যাপ চলাকালীন, আপনি এমনকি সিসফগুলি এখনও মাউন্ট নাও করতে পারেন। তবে আপনি যত তাড়াতাড়ি সম্ভব ত্রুটি এবং অগ্রগতি বার্তা প্রদর্শন করতে সক্ষম হতে চান! সুতরাং আমরা পয়েন্ট 1 এর চারদিকে বৃত্তাকার)। কার্নেলটি স্টিডিন / স্টাডাউট / স্টডারারের সাথে সংযুক্ত হয়ে পিআইডি 1 শুরু করে /dev/console
। শুরু থেকেই এই সাধারণ প্রক্রিয়াটি সেট আপ করা খুব সুন্দর।
একটি লিনাক্স ধারক ভিতরে, ফাইলটি /dev/console
আলাদা কিছু হিসাবে তৈরি করা যেতে পারে - অক্ষর ডিভাইস নম্বর নয় 5:1
। পরিবর্তে, এটি একটি পিটিএস ডিভাইস ফাইল হিসাবে তৈরি করা যেতে পারে। তারপরে এই /dev/console
ফাইলটির মাধ্যমে লগ ইন করা অর্থপূর্ণ হবে। systemd
একটি ধারকের ভিতরে এমন ডিভাইসে লগ ইন করার অনুমতি দেবে; দেখতে man systemd-getty-generator
।
আপনি systemd-nspawn
কমান্ডটি দিয়ে একটি ধারক চালানোর সময় এই প্রক্রিয়াটি ব্যবহৃত হয় । (আমি মনে করি কেবলমাত্র আপনি যখন systemd-nspawn
টিটিওয়াইতে চালাবেন , যদিও ম্যান পৃষ্ঠাটি অনুসন্ধান করা থেকে আমি বলতে পারি না)।
systemd-nspawn
/dev/console
হোস্ট থেকে একটি পিটিএস ডিভাইসের বাঁধার মাউন্ট হিসাবে ধারকটিকে তৈরি করে । এর অর্থ এই পটিএস ডিভাইসটি ধারকটির ভিতরে দৃশ্যমান নয় /dev/pts/
।
পিটিএস ডিভাইসগুলি একটি নির্দিষ্ট devpts
মাউন্টে স্থানীয় । পিটিএস ডিভাইসগুলি সাধারণ নিয়মের ব্যতিক্রম, ডিভাইসগুলি তাদের ডিভাইস নম্বর দ্বারা চিহ্নিত করা হয়। পিটিএস ডিভাইসগুলি তাদের ডিভাইসের নম্বর এবং তাদের devpts
মাউন্টের সংমিশ্রণ দ্বারা চিহ্নিত করা হয় ।
ব্যবহারকারীর বর্তমান ভার্চুয়াল কনসোলে লিখতে আপনি console
/ / তে জরুরি বার্তা tty0
লিখতে পারেন। এটি জরুরি ইউজারস্পেস ত্রুটি বার্তাগুলির জন্য দরকারী হতে পারে, জরুরী কার্নেল বার্তাগুলির মতো যা কনসোলে মুদ্রিত (দেখুন man dmesg
)। তবে এটি করা সাধারণ নয়, কমপক্ষে একবার সিস্টেম বুট করা শেষ করে।
এই পৃষ্ঠায় rsyslog এর একটি উদাহরণ রয়েছে , যা কার্নেল বার্তাগুলিতে মুদ্রণ করে /dev/console
; এটি লিনাক্সে অর্থহীন কারণ কার্নেলটি ইতিমধ্যে ডিফল্টরূপে এটি করবে। একটি উদাহরণ যা আমি আবার দেখতে পাচ্ছি না যে এটি নন-কার্নেল বার্তাগুলির জন্য ব্যবহার করা ভাল ধারণা নয় কারণ সেখানে কেবলমাত্র অনেকগুলি স্লোগল বার্তা রয়েছে, আপনি আপনার কনসোলকে প্লাবন করেছেন এবং এটি খুব বেশি পথে চলেছে।
সিস্টেমড-জার্নাল্ডের একইভাবে সমস্ত লগ কনসোলে ফরোয়ার্ড করার বিকল্প রয়েছে। নীতিগতভাবে এটি ভার্চুয়াল পরিবেশে ডিবাগ করার জন্য কার্যকর হতে পারে। যদিও, ডিবাগিংয়ের জন্য আমরা সাধারণত /dev/kmsg
পরিবর্তে এগিয়ে যাই । এটি তাদের কার্নেল লগ বাফারে সংরক্ষণ করে যাতে আপনি সেগুলি পড়তে পারেন dmesg
। কার্নেল নিজেই উত্পন্ন বার্তাগুলির মতো, এই বার্তাগুলি বর্তমান কার্নেল কনফিগারেশনের উপর নির্ভর করে কনসোলে প্রতিধ্বনিত হতে পারে।