Mengapa ada begitu banyak / dev / tty di Linux?

27

Di Ubuntu 10,04, jika saya periksa di bawah / dev, ada lebih dari 50 ttys. tty0, tty1, tty2 ....

Saya mengerti tty adalah perangkat karakter untuk konsol input / output.

  1. tetapi mengapa jumlahnya sangat banyak? apakah ini seperti kolam renang?

  2. dan apa perbedaan antara / dev / pts / 0, 1, 2 ..., / dev / tty?

  3. Jika saya membuka terminal, nomor baru dibuat di bawah / dev / pts. tapi saya tidak tahu kapan / dev / tty? digunakan.

    bahkan jika saya membuat koneksi SSH, jumlah / dev / tty s sama.

    dan jika saya melakukannya

    cat /dev/tty0
    

    dan ketik sesuatu di keyboard, saya mendapatkan output yang sesuai. mengapa ini terjadi?

daehee
sumber

Jawaban:

25

Mereka bukan hanya perangkat input / output. Mereka juga melakukan pekerjaan khusus sebagai terminal kontrol untuk suatu sesi, seperti mengirim sinyal (Ctrl + C). / dev / ttyNN adalah konsol virtual, yang merupakan tampilan layar penuh pada monitor.

Terminal mulai dari / dev / tty1. Anda dapat beralih ke konsol ini, biasanya, dengan menekan tombol Ctrl + Alt + Fn.

misal, Ctrl + Alt + F1 akan membawa Anda ke terminal virtual pertama. Saat ini, sebagian besar distribusi Linux menjalankan server X dari tty1. Jadi, menekan Ctrl + Alt + F1 mungkin tidak berpengaruh.

$ ps ax | grep Xorg | grep -v grep
 1504 tty1     Ss+   44:57 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-rfsWyA/database -nolisten tcp vt1

Ctrl + Alt + F2 akan membawa Anda ke terminal kedua. Biasanya distro menjalankan program login (agetty) pada terminal virtual.

$ ps ax | grep tty2 | grep -v grep
31865 tty2     Ss+    0:00 /sbin/agetty tty2 38400

Program masuk memberi Anda prompt masuk dan memungkinkan Anda masuk dengan nama pengguna / kata sandi. Skrip init memutuskan, di mana semua program login akan dijalankan. Jadi tergantung bahwa Anda mungkin atau mungkin tidak melihat prompt masuk, katakan tty9. Untuk kembali ke antarmuka GUI Anda, tekan Ctrl + Alt + F1 (seperti pada contoh output di atas).

/ dev / tty0 adalah perangkat khusus, yang menunjuk ke terminal saat ini. Jadi, terlepas dari dari mana Anda menjalankannya (konsol virtual), apa pun yang dibaca dari / ditulis ke tty0 masuk ke terminal Anda saat ini.

Kolom kedua dalam 'ps ax' juga memberikan terminal pengendali program. Untuk beberapa program, seperti daemon, Anda mungkin melihat bahwa kolomnya adalah '?', Yang berarti mereka tidak terikat ke terminal.

/ dev / pts / 0 dll adalah perangkat terminal psuedo, yang tidak terpasang ke tampilan sistem. misalnya untuk terminal, Anda dapatkan ketika Anda membuka terminal gnome atau terminal GUI lainnya. Ini adalah pendekatan berbasis klien-server di mana sisi klien akan diekspor ke program, seperti bash. Data yang dikirim oleh program ke terminal semu dikirim ke sisi 'server' (yang biasanya dipantau oleh program lain, seperti gnome-terminal). Proses pengendalian (sisi server) menentukan apa yang perlu dikirim ke terminal, yang akhirnya dilihat oleh klien. Perangkat ini membantu Anda untuk membuka banyak 'terminal GUI' tanpa batas pada sistem Anda, masih memberikan terminal lama yang sama seperti kontrol (ioctl (), pengaturan warna, Mengirim sinyal [Ctrl + C] dll.).

Taji
sumber
2
Bagaimana seharusnya orang tahu ini, kecuali menanyakannya di sini? halaman manual?
n611x007
1
@ n611x007 - man /dev/ptsadalah awal yang baik, juga man termios, catatan bahwa klien / server adalah dua arah antara ptys - PTM dan pts - di mana terminal virtual seperti gnome-terminal, atau xterm biasanya terhubung ke master dan shell seperti bash, budak .
wulfgarpro
Pada sistem saya /dev/ttyadalah terminal pengendali saat ini, tetapi saya tidak tahu apa /dev/tty0, bagaimanapun, /dev/tty1adalah KMSCON Linux. Dan /dev/tty7X server.
CMCDragonkai
Namun ini tidak menjawab pertanyaan. Seperti yang dikatakan daehee, ada 64 / dev / ttyN perangkat. 1-8 adalah konsol virtual. ptys terpisah, di bawah / dev / pts. Pada sistem apa, katakanlah, / dev / tty30 pernah digunakan, dan bagaimana?
Andrew McGuinness
1

Saya hanya ingin memperjelas hubungan hal-hal semacam ini.

Pertama, / dev / tty berada pada level proses, bisa ttyn (tty1, tty2, ...), ttySn (ttyS0, ttyS1), pty (pts / 0, pts / 1), dan yang lainnya.

/ dev / tty0 adalah alias dari konsol virtual saat ini (foreground), jadi bisa tty1, tty2, dan sebagainya. Perhatikan bahwa ttyS0 bukan alias; Ini adalah port serial pertama.

/ dev / console adalah konsol sistem, ini menunjuk ke / dev / tty0 sebagai default. Itu bisa ttyn, ttySn, ttyUSBn, lpn, dan sebagainya.

Secara kasar, / dev / tty> / dev / cosole> / dev / tty0

Firo
sumber
Apakah itu kutipan dari suatu tempat, punya referensi untuk itu? Boleh jadi bacaan yang menarik
Xen2050
@ Xen2050 Tidak, tapi harap ini membantu tldp.org/HOWTO/Remote-Serial-Console-HOWTO/…
firo