Linux: / dev / console, / dev / tty ve / dev / tty0 arasındaki fark


133

Bir Linux sisteminde /dev/console, /dev/ttyve arasındaki fark /dev/tty0nedir?

Kullanımları nedir ve nasıl karşılaştırılır?


3
Ayrıca ilginizi çekebilir bu
Kevin

Yanıtlar:


93

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, kullanıcıların bir sunucuya bağlı seri cihazlarıydı. Şimdi /dev/consoleve /dev/tty0geçerli ekranı temsil eder ve genellikle aynıdır. Sen ekleyerek örneğin kılabilirsiniz console=ttyS0için grub.conf. Bundan sonra /dev/tty0bir monitör ve /dev/consoleöyle /dev/ttyS0.

Egzersiz arasındaki farkı göstermek için /dev/ttyve /dev/tty0:

Ctrl+ Alt+ Tuşlarına basarak 2. konsola geçin F2. Olarak giriş yapın root. Yazın sleep 5; echo tty0 > /dev/tty0. Basın Enterve Alt+ 'ya basarak 3. konsola geçin F3. Şimdi Alt+ 'ya basarak 2. konsola geri dönün F2. Yazın sleep 5; echo tty > /dev/tty, basın Enterve 3. konsola geçin.

Bunun ttysürecin başladığı ve tty0her zaman güncel bir konsol olduğunu görebilirsiniz.


6
güzel egzersiz! Ubuntu kökü kilitler, bu yüzden Ubuntu'da bunu çoğaltmanın bir yolu:$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
SFun28

10
@ SFun28, her zaman kullandım sudo -ive voila - bir kök kabuğu.
André Laszlo

4
root privs gerektiren dosyalara yazmak için bir deyim yankı şeyler | sudo tee / dev / tty0> / dev / null;
Peter Cordes,

Kahretsin. Un unix.stackexchange.com/a/229598/80483 yazdığı zaman , Ī̲ bu cevabın farkında değildi !
Incnis Mrsi

@ SFun28: sudo anycommandçalışırsa, o sudo -izaman kök gitmek için de çalışır. Kök alamayacağınız bir Linux / BSD / Unix diye bir şey yoktur. (O zaman artık Linux / BSD / Unix
olmazdı

60
  • /dev/consoleönyükleme sırasında parametre olarak ayarlanabilen sanal bir cihaz kümesidir. Seri bir aygıta veya sanal bir konsola yönlendirilebilir ve varsayılan olarak işaret eder /dev/tty0. console=Çekirdeğe birden çok seçenek iletildiğinde, konsol çıktısı birden fazla cihaza gidecektir.

  • /dev/tty0 mevcut sanal konsol

  • /dev/tty[1-x]control- alt- F1vb. ile değiştirdiğiniz sanal konsollardan biridir .

  • /dev/ttykonsola açılan bir takma addır (varsa fiziksel, sanal veya sözde aygıt). Diğer cihazların aksine, yazmak için kök ayrıcalıklarına ihtiyacınız yoktur. Ayrıca, bunlar tarafından başlatılanlar cronve benzer toplu işlemler gibi işlemlerin, /dev/ttyhiçbiriyle ilişkili olmadıklarından, kullanılamaz olduğuna dikkat edin. Bu prosesler, bir olması ?içinde TTYsütun ps -efçıkışı.


"/ Dev / tty bu sorguyu sorgulayan işlem tarafından kullanılan konsoldur" ifadesinden sorgulayarak ne demek istiyorsun?
Ron Vince

1
@RonVince Demek istediğim /dev/tty, açmakta olan sürece bağlı olarak farklı bir cihaz olabilir. Cevap güncellendi.
jlliagre 19:15

Teşekkürler. İşlemlerin aslında kendileriyle ilişkili aygıt dosyasına / yerine / den / dev / tty ye yazdığını / okuduğunu biliyor muyum?
Ron Vince

@RonVince Ne yazık ki ne sorduğunuzdan emin değilim. Tekrar yazar mısın?
jlliagre 19:15

1
@RonVince Açma / dev / tty (/dev/ttyFF1,..,n] değil) bir işlemin kullanıcı terminaline bir şeyler yazması için Unix (ve Linux) standardıdır. Taşınabilir olmayan, daha karmaşık ve daha az güvenilir olan herhangi bir cihaza doğrudan yazma. Bir işlem, işlem terminalinin bağlı olduğu asıl cihazın ne olduğunu bilmek zorunda değildir, çekirdek bunu zaten bilir.
jlliagre 20:15

20

/ Dev / konsol

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst

Linux'ta, çekirdek konsolu console= önyükleme seçeneği kullanılarak yapılandırılabilir . Çağıran çekirdek kodu printk(), örneğin bir cihaz yüklendiğinde veya bir hata oluştuğunda mesaj yazabilir. Bu mesajlar ayrıca çekirdek tarafından tamponlanır. (Ayrıca bakınız dmesg). Bir konsol cihazı bulunduğunda ve başlatıldığında, önceden arabelleğe alınmış tüm mesajları alır.

console=Birden fazla konsol yapılandırmak için birden fazla kez geçirebilirsiniz ; mesajlar hepsine yazılır. Görünüşe göre sadece her "tip" bir konsol seçebilirsiniz: Her iki kullanamazsınız console=ttyS0ve console=ttyS1.

Çekirdek dokümantasyonu /dev/console, numaralandırılmış bir karakter cihazı olarak belirlenir (5,1). Bu karakter aygıtını açmak, konsollar listesindeki son tty olan "ana" konsolu açar. init"PID 1" adı verilen veya çekirdek olmayan ilk işlem, /dev/consolestandart çıktıya, standart hataya ve standart girdiye bağlı olarak başlatılır .

Konsollardan hiçbiri bir tty değilse, açılış /dev/console, hatayı döndürür ENODEV("Böyle bir cihaz yok"). Çekirdek olacakbaskıBir mesajı initkaydet ve ne olursa olsun başla . Tty aygıtı olmayan bir çekirdek konsolu örneği için , satır yazıcısına bakın netconsoleveya en sevdiğim konsolum .

Ayrıca okuyarak, konsolların bir listesini görebilirsiniz /sys/class/tty/console/active. systemd belgeleri , gösterilen ilk cihazın ana konsol olduğunu belirtir . Liste aslında çekirdek komut satırının tersi sıradadır. Mevcut çekirdek belgeleri yanlış gösterilen son aygıt, ana ya da "aktif" konsol olduğunu belirtmektedir. Bazı nedenlerden dolayı bu dosyayı değişiklikler için sorgulamak mümkündür (konsol cihazlarının çıkarılması durumunda?).

Bir systemd-nspawnkap içinde, standart /dev/consoledosya sahte terminal cihazı (PTY) ile değiştirilir. Bunlar en iyi sanal terminal cihazları olarak tanımlanır. Dinamik olarak oluşturulurlar ve ayrıca GNOME Terminali gibi grafiksel terminal emülatörleri ve uzaktan erişim için kullanılırlar ssh.

/ Dev / tty0

Linux TTY aygıt, düğümlerin tty1 içinden tty63sanal terminalleridir. Aynı zamanda VT'ler veya sanal konsollar olarak da adlandırılır. Fiziksel konsol aygıt sürücüsünün üstündeki çoklu konsolları simüle ederler. Bir seferde yalnızca bir sanal konsol gösterilir ve kontrol edilir. Aktif terminal, chvtsahip olduğunuz birçok fonksiyon tuşuyla örneğin Ctrl + Alt + F1 kullanılarak veya değiştirilebilir .

Ayrıca kullanarak mevcut VT'yi okuyabilir ve yazabilirsiniz /dev/tty0. tty0normal çekirdek konsolu, örneğin açık bir şekilde seçmediyseniz. "Sistem ilk önce bir VGA kartı arar (bu VT'lerin çalıştırıldığı şeydir) ve sonra bir seri bağlantı noktasıdır". Konsolu ayrıca belirli bir VT'ye, örneğin console=tty1.

"Sisteminizde bir VGA kartınız yoksa, ilk seri port otomatik olarak konsol haline gelecektir." Bir "seri konsol" gibi ttyS0muhtemelen en yaygın alternatiftir tty0. VT sistemini bir seri konsolun üstünde kullanmak mümkün değildir.

/ Dev / TTY

/dev/ttyPOSIX tarafından belirlenen üç standart cihaz dosyaları biridir ( /dev/POSIX tarafından belirlenen üç dizin adlarından biridir). Açmak, mevcut işlemin kontrol terminalini açmakla eşdeğerdir. Kontrol terminali, bir işlem ilk önce bir terminali açtığında, en azından Linux'ta ayarlanır . Örneğin, içinde init, buna atıfta bulunacaktı /dev/console.

Kontrol terminalinden ayrılmak, örneğin bir sistem günlüğü arka plan programı gibi bir arka plan işlemine başlamak için geleneksel olarak gerekli adımlardan biridir . Bir arka plan işlemi olma adımları çok karmaşıktır, ancak spesifik olmak gerekirse, kontrol terminalinden ayrılan adım, setid sistemi çağrısıdır. Daha modern sistemlerde, init sistemi, örneğin systemd, ilk etapta herhangi bir kontrol terminali olmadan servisi başlatır.

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.