"Nedir /dev/console?" cevaplanır önceki cevabı . Diğer iki sorunun cevabını bildiğinizde belki de bu cevap daha açıktır.
S1. "Fiziksel terminalin kendisini temsil eden aygıt dosyası nedir?"
Böyle bir cihaz dosyası yok.
S2. "Ne için /dev/consolekullanılır?"
Linux'ta, /dev/consolebaşlatma (ve kapatma) sırasında mesajları göstermek için kullanılır. Stephen Kitt'in cevabında belirtildiği gibi "tek kullanıcı modu" için de kullanılır. Kullanmak için mantıklı olan başka bir şey yok.
Unix'in "eski güzel günlerinde" /dev/consoleözel bir fiziksel cihazdı. Ama Linux'ta durum böyle değil.
İlgili kanıtlar
1. "Fiziksel terminalin kendisini temsil eden aygıt dosyası nedir?"
Bu yolu anlamaya çalışayım. /dev/tty{1..63}ve /dev/pts/nişlem veya çekirdek ile ilgili değil, aygıtların kendisini (öykünme olmasına rağmen) temsil eden aygıt dosyalarıdır. /dev/tty0bir tane reprsents /dev/tty{1..63}anda bir şey tarafından kullanılan (belki çekirdeğiveya kabuk işlemi?). /dev/ttyşu anda bir işlem oturumu tarafından kullanılan kontrol terminalini temsil eder. /dev/consoleşu anda çekirdek tarafından kullanılan terminali temsil ediyor mu?
Çekirdek veya işlemle ilgili olarak değil, fiziksel terminalin kendisini temsil eden aygıt dosyası nedir?
İçin temel aygıt (lar) /dev/tty{1..63}dır struct con_driver. Tüm olası sürücüleri görmek için kontrol https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_console
Bu temel aygıt (lar) için aygıt dosyası yok!
Bunları yönetmek için yalnızca minimal bir kullanıcı arayüzü arayüzü vardır.
$ head /sys/class/vtconsole/*/name
==> /sys/class/vtconsole/vtcon0/name <==
(S) dummy device
==> /sys/class/vtconsole/vtcon1/name <==
(M) frame buffer device
Gerçekten daha fazla bilgi edinmek istiyorsanız, modülün açılımı . Yani kukla konsol cihazı yüklenebilir bir çekirdek modülü tarafından sağlanmaz; ilk çekirdek görüntüsünün bir parçasıdır ("yerleşik" olarak da bilinir).(M)
İkinci olarak, hangi bindalt dizindeki dosya, /sys/class/vtconsolehangi vtconsole aygıtının etkin olduğunu bildirir. Ben yazarsam 0aktif birine, kukla birine geçiş görünmektedir. (GUI VT'leri etkilenmemiş gibi görünür, ancak metin VT'leri çalışmayı durdurur). 1Kukla için yazmak onu etkinleştirmez. Her iki yöntem de gerçek olana geri dönmek için çalışır. Kodu doğru okursam, hile echo 1 > bindsadece bir modül (?!) Olarak inşa edilmiş konsol sürücüleri için çalışması gerekiyordu.
İçin karetamponu özellikle konsolları, farklı karetamponu aygıtlarını (bağlama hakkında birtakım bilgiler var /dev/fb0spesifik sanal konsolları için ...) https://kernel.org/doc/Documentation/fb/fbcon.txt . Buna bir çekirdek seçeneği fbcon:map=veya denilen bir komut dahildir con2fbmap.
Tabii ki ayrıntılar farklı çekirdek sürümleri, mimariler, yazılımlar, aygıtlar, sürücüler vb. İle değişebilir. Çekirdek sadece i915/ inteldrmfb/ istediğiniz her şeyi yüklerken devralmaya izin verir, örneğin vgacon.
EFI makinemin hiç olmadığı gibi görünüyor vgacon. Bu yüzden önce kukla bir konsol kullanır ve ikincisi 1.2 saniye sonra fbconüstüne geçer efifb. Ama şimdiye kadar detayların ne olduğu umurumda değildi; sadece işe yarıyor.
$ 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. "Ne için /dev/consolekullanılır?"
/ Dev / console komutunu TTY cihazı olarak kullanabilirsiniz. Örneğin, üzerine yazmak, kendine ait bir karakter cihazı numarasına sahip olacak belirli bir temel cihaza yazacaktır.
Genellikle / dev / console / dev / tty0'a bağlıdır, ancak bazen farklı bir cihaza bağlanabilir.
Yani bu durumda / dev / console'a yazmak / dev / tty0'a yazacaktır. Ve / dev / tty0'a yazmak, / dev / ttyN cihazının şu anda etkin olanlara yazmakla eşdeğerdir.
Ancak bu ilginç bir soruyu gündeme getiriyor. Erişim tty0, o anda etkin olana bağlı olarak farklı sanal konsollara erişir. İnsanlar aslında tty0ne için kullanıyorlar ve benzer şekilde consoleLinux'ta ne için kullanılıyorlar?
Teknik olarak, oturum açmaya izin vermek için console/ öğelerini okuyabilir ve yazabilirsiniz . Ancak bu sadece hızlı bir saldırı olarak kullanışlıdır. Çünkü bu Linux'un çoklu sanal konsollarından yararlanamayacağınız anlamına geliyor.tty0gettytty0
systemdsysfstemel TTY cihazını algılamak için / dev / console cihazıyla ilişkilendirilmiş bir özellik arar . Bu , kullanıcı önyükleme yaparak bir çekirdek konsolu ayarladığında, systemdotomatik olarak gettybir seri oluşturmaya ve örneğin bir seri konsolda oturum açmaya izin verir console=ttyS0. Bu uygundur; bu konsolu iki farklı yerde yapılandırma gereğini ortadan kaldırır. Tekrar bakın man systemd-getty-generator. Ancak, systemdaslında bunun için açılmaz /dev/console.
Sistem önyüklemesi sırasında, henüz sysfs yüklememiş olabilirsiniz. Ancak en kısa sürede hata ve ilerleme mesajları gösterebilmek istiyorsunuz! Bu yüzden 1). Çekirdek, stdin / stdout / stderr bağlıyken PID 1'i başlatır /dev/console. Bu basit mekanizmanın en baştan kurulmasını sağlamak çok güzel.
Linux kapsayıcısının içinde, adresindeki dosya /dev/consolekarakter aygıtı numarası değil, farklı bir şey olarak oluşturulabilir 5:1. Bunun yerine, bir PTS cihaz dosyası olarak oluşturulabilir. Sonra bu sayede giriş yapmak mantıklı olur /dev/consoledosyası. systemdbir kabın içinde böyle bir cihazda oturum açmaya izin verir; bakın man systemd-getty-generator.
Bu mekanizma, systemd-nspawnkomutla bir kap çalıştırdığınızda kullanılır . (Ben sadece systemd-nspawnbir TTY üzerinde çalıştırmak , ancak adam sayfasında arama söyleyemiyorum düşünüyorum).
systemd-nspawnkabın /dev/console, ana bilgisayardan bir PTS cihazının bir bağlama aparatı olarak oluşturulmasını sağlar . Bu, bu PTS cihazının /dev/pts/kabın içinde görünmediği anlamına gelir .
PTS cihazları belirli bir devptsyuva için yereldir . PTS cihazları normal kuralın bir istisnasıdır, cihazlar cihaz numaralarına göre tanımlanır. PTS cihazları, cihaz numaralarının ve devptsbağlantılarının birleşimi ile tanımlanır .
Kullanıcının geçerli sanal konsoluna yazmak için console/ öğesine acil mesajlar tty0yazabilirsiniz. Bu, konsola yazdırılan acil çekirdek mesajlarına benzer acil kullanıcı alanı hata mesajları için yararlı olabilir (bkz. man dmesg). Bununla birlikte, en azından sistem önyüklemeyi bitirdiğinde bunu yapmak yaygın değildir.
rsyslog'un bu sayfada çekirdek mesajlarını yazdırdığı bir örneği vardır /dev/console; Linux'ta anlamsızdır, çünkü çekirdek zaten bunu varsayılan olarak yapar. Tekrar bulamadığım bir örnek, çekirdek olmayan mesajlar için bunu kullanmanın iyi bir fikir olmadığını söylüyor çünkü çok fazla syslog mesajı var, konsolunuzu dolduruyorsunuz ve çok fazla yol alıyor.
systemd-journalald benzer şekilde tüm günlükleri konsola iletme seçeneklerine sahiptir. Prensipte bu, sanal bir ortamda hata ayıklama için yararlı olabilir. Bununla birlikte, hata ayıklama için genellikle /dev/kmsgbunun yerine ileri gideriz . Bu onları okuyabilmeniz için çekirdek günlük arabelleğine kaydeder dmesg. Çekirdek tarafından oluşturulan iletiler gibi, bu iletiler de geçerli çekirdek yapılandırmasına bağlı olarak konsola yansıtılabilir.