Bagaimana Linux menggunakan / dev / tty dan / dev / tty0


8

Saya dapat melihat perbedaan antara / dev / tty dan / dev / tty0 dengan menguji metode yang disediakan dari pertanyaan ini . Tapi saya benar-benar bertanya-tanya tentang penggunaan praktis dari perangkat tersebut (seperti situasi yang akan digunakan).


@ 0xC0000022L Entah bagaimana, saya tidak dapat menghubungkan tty dengan sda karena tidak seperti sda, tty memiliki 3 kategori berbeda (tty, tty0, tty [1, .., N]).
Ron Vince

Saya pikir analogi yang diberikan oleh @ 0xC0000022L cukup menyesatkan. Keduanya /dev/sdadan /dev/sda1menunjuk perangkat blok tertentu (satu kebetulan menjadi bagian dari yang lain). /dev/tty, di sisi lain, adalah perangkat virtual yang terkait dengan tty spesifik lainnya.
Celada

Jawaban:


16

/dev/ttyadalah tty mengendalikan proses saat ini , untuk setiap proses yang benar-benar membuka file khusus ini. Ini belum tentu merupakan perangkat konsol virtual ( /dev/ttyn ), dan dapat berupa, port serial, dll. Jika tty yang mengendalikan bukan konsol virtual, maka prosesnya belum berinteraksi dengan perangkat konsol bahkan jika pseudottynya benar-benar diterapkan pada konsol sistem. E. g. untuk sebuah shell di emulator terminal di bawah server X yang berjalan secara lokal, program-program tersebut membentuk rantai interaksi seperti:

   Unix shell
     ⇕ /dev/pts/2(≡ /dev/ttyuntuk prosesnya)
 driver pty kernel
     ⇕ /dev/ptmx
 terminal emulator
     ⇕ protokol
   X Window X server
     ⇕ /dev/tty7(≡ /dev/ttyuntuk server)
 konsol sistem
zxc↿⇂ [_̈░░]
    pengguna

Penggunaan /dev/ttyprogram oleh userland meliputi:

  • Tulis sesuatu ke terminal pengendali, abaikan semua pengalihan dan pipa;
  • Buat ioctl () - lihat tty_ioctl (4);
  • Misalnya, lepaskan dari terminal (TIOCNOTTY).

/dev/tty0adalah konsol virtual aktif dari sistem operasi . File khusus ini tidak mungkin digunakan secara signifikan oleh perangkat lunak sistem, tetapi /dev/consolesebenarnya merupakan "alias" untuktty0 dan /dev/consoletelah banyak digunakan oleh daemon syslog dan, kadang-kadang, oleh kernel itu sendiri.

Eksperimen untuk menunjukkan perbedaan: jalankan rootshell pada tty3( Ctrl+ Alt+ F3) atau di emulator terminal. Sekarang

# sleep 2; echo test >/dev/tty

lalu dengan cepat Ctrl+ Alt+ F2, tunggu dua detik, dan Ctrl+ Alt+ apa pun kembali. Di mana Anda melihat hasilnya?
Dan sekarang tes yang sama untuk /dev/tty0.


Jawaban Anda tidak berbeda dengan jawaban yang diberikan oleh pertanyaan yang saya tautkan dalam pertanyaan saya. Yang saya pedulikan adalah proses bagaimana kernel menggunakannya bersama-sama.
Ron Vince

@Ron Vince: diperbarui.
Incnis Mrsi

Apakah wajib untuk proses menulis ke / dev / tty alih-alih spesifik / dev / tty [1, .., N]?
Ron Vince

@Ron Vince: Sekali lagi, sebuah proses dieksekusi dalam sesi SSH (secara teknis, anak dari sshd), atau di xtermjendela, belum spesifik / dev / tty  n . Itu tidak berinteraksi dengan perangkat dari konsol sistem , karena itu melekat pada perangkat pseudo-terminal. Ini tidak menghalangi dari pembukaan / dev / tty  n jika itu adalah proses root, atau pengguna yang sama masuk logty tty  n . Akan menambahkan beberapa poin tentang "tty spesifik" untuk jawabannya.
Incnis Mrsi

Katakanlah saya menggunakan xterm yang merupakan terminal emulator. Apakah ini rantainya (xterm -> / dev / tty -> / dev / pty -> / dev / tty [1, .., N] -> shell)? Untuk / dev / tty0, saya pikir saya jelas tentang itu. Output dari setiap proses dan kernel akan dikirim ke / dev / tty [1, .., N] yang ditangani oleh driver perangkat tty sekarang. Ini adalah rantai (kernel / proses -> / dev / tty0 -> saat ini / dev / tty [1, .., N])
Ron Vince

2

/ dev / tty adalah tty pengendali untuk setiap proses. Ini mungkin kulitmu.

Jika proses Anda tidak memiliki tty pengendali, / dev / tty tidak tersedia, mis. Ini berlaku untuk daemon.

Jika proses Anda memiliki tty pengendali, maka / dev / tty adalah driver alias ke driver tty asli yang digunakan proses Anda untuk stdin, stdout atau stderr.

Lihat man -s7d ttyuntuk informasi lebih lanjut. Perhatikan bahwa bagian di mana manual ini berada mungkin berbeda antara OS yang berbeda dan tidak boleh bingung dengan halaman manual di bagian 1. Jadi, periksa misalnya man -k tty.


"alias ke driver tty asli yang digunakan proses Anda". Apakah teks yang dikutip mengacu pada tty [1, .., N]?
Ron Vince

Alias ​​driver adalah sesuatu yang berbeda dari sekadar alias. Ini adalah driver yang berbeda tetapi mengarahkan kerja ke apa pun proses Anda benar-benar terhubung.
schily

Jika saya mengerti dengan benar (lihat juga tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3 ), / dev / tty adalah antarmuka untuk proses saat ini (saat ini diproses oleh CPU) ke / dev / tty [1, .., N]. Sementara itu, / dev / tty0 adalah untuk output data yang bukan milik spesifik / dev / tty [1, .., N], oleh karena itu output ke / dev / tty [1, .., N] yang termasuk dalam proses saat ini . Jika itu benar, saya ingin tahu kapan / dev / tty0 benar-benar digunakan.
Ron Vince

Jika Anda tidak memiliki rumah sendiri, kemungkinan masuk alternatif ke rumah itu tidak akan memberi Anda rumah.
schily

Jadi, / dev / tty0 adalah untuk output data ke sesi shell superuser saat ini (terkait dengan / dev / tty [1, .., N]).
Ron Vince
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.