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

Ron Vince
sumber
@ 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.

Incnis Mrsi
sumber
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.

schily
sumber
"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