Dari jawaban ini untuk Linux: Perbedaan antara / dev / console, / dev / tty dan / dev / tty0
Dari dokumentasi :
/dev/tty Current TTY device /dev/console System console /dev/tty0 Current virtual console
Di masa lalu yang baik
/dev/console
adalah konsol Sistem Administrator. Dan TTY adalah perangkat serial pengguna yang dilampirkan ke server. Sekarang/dev/console
dan/dev/tty0
tampilkan tampilan saat ini dan biasanya sama. Anda dapat menimpa itu misalnya dengan menambahkanconsole=ttyS0
kegrub.conf
. Setelah itu Anda/dev/tty0
adalah monitor dan/dev/console
adalah/dev/ttyS0
.
Dengan " System console ", /dev/console
sepertinya seperti file perangkat terminal fisik teks, sama seperti /dev/tty{1..63}
file perangkat untuk konsol virtual.
Dengan " /dev/console
dan /dev/tty0
mewakili tampilan saat ini dan biasanya sama", /dev/console
menurut saya itu juga bisa menjadi file perangkat konsol virtual. /dev/console
sepertinya lebih /dev/tty0
dari suka /dev/tty{1..63}
( /dev/tty0
adalah konsol virtual yang aktif saat ini, dan bisa berupa apa saja /dev/tty{1..63}
).
Apa /dev/console
? Untuk apa ini digunakan?
Apakah /dev/console
memainkan peran yang sama untuk kernel Linux seperti /dev/tty
proses? (Apakah /dev/tty
terminal pengendali dari sesi proses dari proses, dan dapat berupa poin, di /dev/ttyn
mana n
dari 1 hingga 63, atau lebih?)
Jawaban lain menyebutkan:
Dokumentasi kernel menetapkan
/dev/console
sebagai perangkat karakter bernomor 5: 1. Membuka perangkat karakter ini membuka konsol "utama", yang merupakan tty terakhir dalam daftar konsol.
Apakah "daftar konsol" berarti semua console=
's di opsi boot ?
Dengan " /dev/console
sebagai perangkat karakter bernomor 5: 1", apakah itu berarti /dev/console
file perangkat terminal teks fisik yaitu konsol sistem? (Tetapi sekali lagi, balasan pertama yang saya kutip di atas mengatakan /dev/console
bisa sama dengan /dev/tty0
yang bukan terminal teks fisik, tetapi konsol virtual)
Terima kasih.
Jawaban:
/dev/console
ada terutama untuk mengekspos konsol kernel ke userspace. Dokumentasi kernel Linux pada perangkat sekarang mengatakan/dev/console
, simpul perangkat dengan mayor 5 dan minor 1, menyediakan akses ke apa pun yang dianggap kernel sebagai sarana utamanya untuk berinteraksi dengan administrator sistem; ini dapat berupa konsol fisik yang terhubung ke sistem (dengan abstraksi konsol virtual di atasnya, sehingga dapat digunakantty0
atau dittyN
mana N berada di antara 1 dan 63), atau konsol serial, atau konsol hypervisor, atau bahkan perangkat Braille. Perhatikan bahwa kernel itu sendiri tidak menggunakan/dev/console
: node perangkat adalah untuk userspace, bukan untuk kernel; itu, bagaimanapun, memeriksa yang/dev/console
ada dan dapat digunakan, dan mengaturinit
dengan input standar, output dan kesalahan menunjuk ke/dev/console
.Seperti dijelaskan di sini,
/dev/console
adalah perangkat karakter dengan mayor tetap dan minor karena merupakan perangkat terpisah (seperti, cara mengakses kernel; bukan perangkat fisik), tidak setara dengan/dev/tty0
atau perangkat lain. Ini agak mirip dengan situasi/dev/tty
yang merupakan perangkatnya sendiri (5: 0) karena ia menyediakan fitur yang sedikit berbeda dari konsol virtual atau perangkat terminal lainnya."Daftar konsol" memang daftar konsol yang ditentukan oleh
console=
parameter boot (atau konsol default, jika tidak ada). Anda dapat melihat konsol yang ditentukan dengan cara ini dengan melihat/proc/consoles
./dev/console
memang memberikan akses ke yang terakhir ini :sumber
"Apa itu
/dev/console
?" dijawab dalam jawaban sebelumnya . Mungkin jawaban itu lebih jelas ketika Anda tahu jawaban untuk dua pertanyaan lainnya.Q1. "Apa file perangkat yang mewakili terminal fisik itu sendiri?"
Tidak ada file perangkat seperti itu.
Q2. "Untuk apa
/dev/console
?"Di Linux,
/dev/console
digunakan untuk menampilkan pesan saat startup (dan shutdown). Ini juga digunakan untuk "mode pengguna tunggal", seperti yang ditunjukkan dalam jawaban Stephen Kitt. Tidak banyak lagi yang masuk akal untuk menggunakannya."Di masa lalu yang indah" Unix,
/dev/console
adalah perangkat fisik khusus. Tapi ini tidak terjadi di Linux.Bukti terkait
1. "Apa file perangkat yang mewakili terminal fisik itu sendiri?"
Perangkat yang mendasarinya
/dev/tty{1..63}
adalahstruct con_driver
. Untuk melihat semua kemungkinan driver, periksa https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_consoleTidak ada file perangkat untuk perangkat yang mendasarinya!
Hanya ada antarmuka pengguna minimal untuk mengelolanya.
Jika Anda benar-benar ingin tahu lebih banyak, yang
(M)
berdiri untuk modul . Yaitu perangkat konsol dummy tidak disediakan oleh modul kernel yang dapat dimuat; ini adalah bagian dari imej kernel awal (alias "builtin").Kedua,
bind
file di setiap subdirektori dari/sys/class/vtconsole
muncul untuk memberi tahu Anda perangkat vtconsole mana yang aktif. Jika saya menulis0
ke yang aktif, tampaknya beralih ke yang dummy. (GUI VTs tampaknya tidak terpengaruh, tetapi teks VTs berhenti bekerja). Menulis1
untuk boneka tidak mengaktifkannya. Metode mana pun berfungsi untuk beralih kembali ke yang asli. Jika saya membaca kode dengan benar, triknya adalah yangecho 1 > bind
seharusnya hanya berfungsi untuk driver konsol yang dibangun sebagai modul (?!).Untuk konsol framebuffer secara khusus, ada beberapa informasi lebih lanjut tentang mengikat berbagai perangkat framebuffer (
/dev/fb0
...) ke konsol virtual tertentu di https://kernel.org/doc/Documentation/fb/fbcon.txt . Ini melibatkan opsi kernelfbcon:map=
atau perintah yang disebutcon2fbmap
.Tentu saja detailnya dapat bervariasi dengan versi kernel, arsitektur, firmware, perangkat, driver, dll. Saya tidak pernah benar-benar harus menggunakan antarmuka apa pun di atas. Kernel hanya membiarkan
i915
/inteldrmfb
/ apa pun yang Anda ingin menyebutnya mengambil alih ketika ia memuat, menggantikan misvgacon
.Sepertinya mesin EFI saya tidak pernah memilikinya
vgacon
. Jadi pertama menggunakan konsol boneka, dan kedua setelah 1,2 detik beralih kefbcon
, berjalan di atasefifb
. Tapi sejauh ini saya tidak perlu peduli dengan detailnya; itu hanya berfungsi.2. "Untuk apa
/dev/console
digunakan?"Anda dapat menggunakan / dev / console sebagai perangkat TTY. Menulis ke sana, misalnya, akan menulis ke perangkat tertentu yang mendasarinya, yang juga akan memiliki nomor perangkat karakter sendiri.
Seringkali / dev / console diikat ke / dev / tty0, tetapi kadang-kadang itu dapat diikat ke perangkat lain.
Jadi dalam hal ini menulis ke / dev / console akan menulis ke / dev / tty0. Dan pada gilirannya, menulis ke / dev / tty0 sama dengan menulis ke perangkat / dev / ttyN mana saja yang sedang aktif.
Tapi ini menimbulkan pertanyaan menarik. Mengakses
tty0
akan mengakses berbagai konsol virtual, tergantung yang sedang aktif. Apa yang sebenarnya digunakan orangtty0
, dan apa pula yangconsole
digunakan untuk Linux?Secara teknis, Anda dapat membaca dan menulis dari
console
/tty0
, misalnya menjalankan agetty
untuk mengizinkan masuktty0
. Tapi ini hanya berguna sebagai peretasan cepat. Karena itu berarti Anda tidak dapat memanfaatkan beberapa konsol virtual Linux.systemd
mencarisysfs
atribut yang terkait dengan perangkat / dev / console, untuk mendeteksi perangkat TTY yang mendasarinya. Hal ini memungkinkansystemd
untuk secara otomatis menelurkan agetty
dan memungkinkan masuk pada misalnya konsol serial, ketika pengguna mengatur konsol kernel dengan boot denganconsole=ttyS0
. Ini nyaman; itu menghindari perlunya mengkonfigurasi konsol ini di dua tempat yang berbeda. Sekali lagi, lihatman systemd-getty-generator
. Namun,systemd
sebenarnya tidak terbuka/dev/console
untuk ini.Selama bootstrap sistem, Anda mungkin belum menginstal sysfs. Tetapi Anda ingin dapat menampilkan pesan kesalahan dan progres sesegera mungkin! Jadi kita berputar ke titik 1). Kernel memulai PID 1 dengan stdin / stdout / stderr terhubung
/dev/console
. Sangat menyenangkan memiliki mekanisme sederhana ini diatur sejak awal.Di dalam wadah Linux, file di
/dev/console
dapat dibuat sebagai sesuatu yang berbeda - bukan nomor perangkat karakter5:1
. Sebagai gantinya, ini dapat dibuat sebagai file perangkat PTS. Maka masuk akal untuk masuk melalui/dev/console
file ini .systemd
di dalam sebuah wadah akan memungkinkan masuk pada perangkat seperti itu; lihatman systemd-getty-generator
.Mekanisme ini digunakan ketika Anda menjalankan wadah dengan
systemd-nspawn
perintah. (Saya pikir hanya ketika Anda menjalankansystemd-nspawn
pada TTY, meskipun saya tidak tahu dari mencari halaman manual).systemd-nspawn
membuat wadah/dev/console
sebagai bind mount perangkat PTS dari host. Ini berarti bahwa perangkat PTS ini tidak terlihat di/dev/pts/
dalam wadah.Perangkat PTS bersifat lokal untuk
devpts
pemasangan tertentu . Perangkat PTS merupakan pengecualian terhadap aturan normal, bahwa perangkat diidentifikasi berdasarkan nomor perangkatnya. Perangkat PTS diidentifikasi oleh kombinasi nomor perangkat mereka, dandevpts
dudukannya.Anda dapat menulis pesan mendesak ke
console
/tty0
, untuk menulis ke konsol virtual pengguna saat ini. Ini bisa berguna untuk pesan kesalahan pengguna yang mendesak, mirip dengan pesan kernel yang mendesak yang dicetak ke konsol (lihatman dmesg
). Namun tidak umum untuk melakukan ini, setidaknya setelah sistem selesai booting.rsyslog memiliki satu contoh di halaman ini , yang mencetak pesan kernel ke
/dev/console
; ini tidak ada gunanya di Linux karena kernel sudah melakukannya secara default. Satu contoh yang saya tidak dapat temukan lagi mengatakan bahwa ini bukan ide yang baik untuk menggunakan ini untuk pesan non-kernel karena ada terlalu banyak pesan syslog, Anda membanjiri konsol Anda dan terlalu banyak menghalangi.systemd-journald juga memiliki opsi untuk meneruskan semua log ke konsol. Pada prinsipnya ini mungkin berguna untuk debugging di lingkungan virtual. Meskipun, untuk debugging, kami biasanya meneruskan
/dev/kmsg
. Ini menyimpannya dalam buffer log kernel sehingga Anda dapat membacanyadmesg
. Seperti pesan yang dihasilkan oleh kernel itu sendiri, pesan-pesan ini dapat digaungkan ke konsol tergantung pada konfigurasi kernel saat ini.sumber
xconsole
untuk melacak apa yang sedang terjadi ;-). (Dan untuk menghindari agar pesan tidak ditulis langsung ke framebuffer, misalnya di SPARCstations.)/dev/tty{1..63}
dan/dev/pts/n
merupakan file perangkat yang mewakili perangkat itu sendiri (walaupun emulasi), tidak terkait dengan proses atau kernel./dev/tty0
reprsents/dev/tty{1..63}
yang saat ini digunakan oleh sesuatu (mungkin kernel atau proses shell?)./dev/tty
mewakili terminal pengendali yang saat ini digunakan oleh sesi proses./dev/console
mewakili terminal yang saat ini digunakan oleh kernel? Apa file perangkat yang mewakili terminal fisik itu sendiri, bukan dalam kaitannya dengan kernel atau proses?