"/ Dev / console" ne için kullanılır?


13

Gönderen bu cevap için Linux: / dev / tty ve / dev / tty0 / dev / konsol arasında Fark

Gönderen belgeler :

/dev/tty      Current TTY device
/dev/console  System console
/dev/tty0     Current virtual console

Eski güzel günlerde /dev/consoleSistem Yöneticisi konsolu vardı. Ve TTY'ler bir sunucuya bağlı kullanıcıların seri cihazlarıydı. Şimdi /dev/consoleve /dev/tty0mevcut ekranı temsil eder ve genellikle aynıdır. Sen ekleyerek örneğin kılabilirsiniz console=ttyS0için grub.conf. Senin bu sonra /dev/tty0bir monitör ve /dev/consolebir /dev/ttyS0.

" Sistem konsolu " ile, /dev/consolebir metin fiziksel terminalinin aygıt dosyası gibi /dev/tty{1..63}, sanal konsolların aygıt dosyaları gibi görünür .

Tarafından " /dev/consoleve /dev/tty0mevcut ekranı temsil ve genellikle aynı", /dev/consolebana öyle görünüyor ki aynı zamanda bir sanal konsolun aygıt dosyası olabilir. /dev/consoledaha /dev/tty0çok benziyor /dev/tty{1..63}( /dev/tty0şu anda aktif sanal konsol ve herhangi biri olabilir /dev/tty{1..63}).

Nedir /dev/console? Ne için kullanılır?

/dev/consoleLinux çekirdeği /dev/ttyiçin bir işlemle aynı rolü oynuyor mu ? ( /dev/ttyİşlemin işlem oturumu kontrol terminali ve bir puan, olabilir , 1 ila 63 veya daha fazla olan?)/dev/ttynn

Diğer cevaptan bahsediyor:

Çekirdek belgeleri /dev/console, 5: 1 numaralı bir karakter aygıtı olarak belirtilir . Bu karakter aygıtının açılması, konsol listesindeki son tty olan "ana" konsolu açar.

"Konsolları listesi" Tüm demek console=de 's önyükleme seçeneği ?

" /dev/console5: 1 numaralı bir karakter aygıtı olarak", /dev/consolefiziksel bir metin terminalinin aygıt dosyası yani bir sistem konsolu anlamına mı geliyor? (Ama yine, yukarıda alıntılanan ilk cevap diyor /dev/consoleaynı olabilir /dev/tty0fiziksel bir metin terminali olmadığı, ancak sanal bir konsol)

Teşekkürler.


Yıllar önce kaybolan bu manuel sayfalar için bazı değişiklikler yaptım: jdebp.eu./Proposals/linux-kvt-manual-pages.html
JdeBP

Yanıtlar:


18

/dev/consoleöncelikle çekirdeğin konsolunu kullanıcı alanına maruz bırakmak içindir. Linux çekirdeğinin cihazlarla ilgili belgelerinde artık

Konsol aygıtı, /dev/consolesistem iletilerinin gönderileceği ve tek kullanıcı modunda oturum açmaya izin verileceği aygıttır. Linux 2.1.71 ile başlayarak /dev/console, çekirdek tarafından yönetilir; önceki sürümler için , sistemin yapılandırmasına bağlı /dev/tty0olarak /dev/tty1, ya belirli bir sanal konsola ya da bir seri bağlantı noktası birincil ( tty*değil cu*) aygıtına sembolik bir bağlantı olmalıdır .

/dev/console, büyük 5 ve minör 1'e sahip cihaz düğümü, çekirdeğin sistem yöneticisi ile etkileşime girmenin birincil yolu olarak gördüğü her şeye erişim sağlar; bu sisteme bağlı fiziksel bir konsol (sanal konsol soyutlaması üstte olacak şekilde, N'nin 1 ile 63 arasında olduğu tty0herhangi bir ttyNyerde kullanılabilir ) veya bir seri konsol veya bir hipervizör konsolu veya hatta bir Braille cihazı olabilir. Çekirdeğin kendisinin kullanmadığını unutmayın : aygıt düğümleri çekirdek için değil kullanıcı alanı içindir; bununla birlikte, var olup olmadığını ve kullanılabilir olup olmadığını kontrol eder ve standart girişi, çıktısı ve hataya işaret ederek ayarlanır ./dev/console/dev/consoleinit/dev/console

Burada açıklandığı gibi, /dev/consolesabit bir majör ve minör olan bir karakter cihazıdır, çünkü ayrı bir cihazdır (olduğu gibi, çekirdeğe erişmenin bir aracıdır; fiziksel bir cihaz değil), /dev/tty0veya başka bir cihaza eşdeğer değildir . Bu, kendi cihazı olan duruma/dev/tty (5: 0) benzerdir, çünkü diğer sanal konsol veya terminal cihazlarından biraz farklı özellikler sunar.

“Konsol listesi” gerçekten de console=önyükleme parametreleri (veya yoksa varsayılan konsol) tarafından tanımlanan konsolların listesidir . Bakarak bu şekilde tanımlanan konsolları görebilirsiniz /proc/consoles. /dev/consolegerçekten bunlardan sonuncusuna erişim sağlar :

Çekirdek komut satırında birden çok konsol = seçenek belirleyebilirsiniz. Çıktı hepsinde görünecektir. Son cihaz açtığınızda kullanılacaktır /dev/console.


Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
terdon

6

"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?

  1. 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

  2. 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.

  3. 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.

  4. 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 .

  5. 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.


2. noktanın bir tamamlayıcısı olarak xconsole, neler olup bittiğini takip etmek için yaygındı (sadece Linux'ta değil) ;-). (Ve framebuffer, doğrudan yazılı mesajlar zorunda kalmamak için örneğin SPARCstations üzerinde.)
Stephen Kitt

@StephenKitt SUSE Linux'u ilk kullandığımda, masaüstü ana menüden veya başka bir şeyden başlayabilmeniz için xconsole'u başlattığını veya hızlandırdığını düşünüyorum - Tam olarak hatırlamıyorum ama gördüm :-).
sourcejedi

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 çekirdek ya da 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?
Tim

@Tim "/ dev / tty0, /dev/tty{1..63} 'da şu anda bir şey tarafından kullanılan (belki çekirdek veya kabuk işlemi?)" Çekirdeğini yineler.
sourcejedi

Çekirdek veya işlemle ilgili olarak değil, fiziksel terminalin kendisini temsil eden aygıt dosyası nedir?
Tim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.