Kapitel 5 Terminal-Ein- und Ausgabe
Bisher wurde die Ausgabe auf dem Bildschirm immer verwendet, ohne jemals näher darauf eingegangen zu sein. Zur perfekten Interaktion gehört neben der Bildschirmausgabe die Benutzereingabe. In diesem Kapitel werden Sie alles Nötige zur Ein- und Ausgabe erfahren. Außerdem soll der Begriff »Terminal« ein wenig genauer erläutert werden.
5.1 Von Terminals zu Pseudo-Terminals
 
Obwohl in der Praxis heute eigentlich keine echten Terminals mehr verwendet werden, ist von ihnen immer noch die Rede. Terminals selbst sahen in der Regel aus wie gewöhnliche Desktop-Computer, meist mit einem schwarz-weißen (bzw. schwarz-grünen) Bildschirm, obwohl für ein Terminal nicht zwangsläufig ein Monitor genutzt werden muss. Solche Terminals waren über eine Leitung direkt mit einem UNIX-Rechner verbunden – also sind (waren) Terminals niemals Bestandteil des Betriebssystems selbst. Ein Betriebssystem lief auch ohne Terminal weiter (ähnlich, wie Ihr System auch ohne eine Internetverbindung läuft). Wenn ein solches Terminal eingeschaltet wurde, wartete schon ein Prozess namens »getty« (Get Terminal) »horchend« darauf und öffnete eine neue Session (Sitzung). Es wurde bereits erwähnt, dass eine Session nichts anderes ist, als die Zeit, ab der sich ein Benutzer mit einer Login-Shell eingeloggt hat, und die endet, wenn dieser sich wieder vom System verabschiedet.
Heute werden kaum noch echte Terminals (im eigentlichen Sinne) eingesetzt, sondern vorzugsweise Terminal-Emulationen. Terminal-Emulationen wiederum sind Programme, die vorgeben, ein Terminal zu sein.
Unter den meisten Linux-UNIX-Systemen stehen einem mehrere »virtuelle« Terminals zur Verfügung, die mit der Tastenkombination (Strg)+(Alt)+(F1) bis meistens (Strg)+(Alt)+(F7) erreicht werden können. Wenn Ihr System hochgefahren wird, bekommen Sie in der Regel als erstes Terminal (Strg)+ (Alt)+(F1) zu Gesicht. Arbeiten Sie ohne grafische Oberfläche, so ist dies gewöhnlich auch Ihre Login-Shell. Bei einer grafischen Oberfläche wird zumeist ein anderes Terminal (unter Linux bspw. (Strg)+(Alt)+(F7)) benutzt. Trotzdem können Sie jederzeit über (Strg)+(Alt)+(Fn) eine »echte« Login-Shell verwenden.
Auf jeder dieser Textkonsolen ((Strg)+(Alt)+(F1) bis (Strg)+(Alt)+(Fn)) »horchen« die Getty-Prozesse, bis sich ein Benutzer einloggt, so zum Beispiel:
you@host > ps -e | grep getty
3092 tty1 00:00:00 getty
3093 tty2 00:00:00 getty
3095 tty4 00:00:00 getty
3096 tty5 00:00:00 getty
3097 tty6 00:00:00 getty
Unter Linux werden Sie hierbei statt »getty« vermutlich den Namen »mingetty« vorfinden. Im Beispiel fällt außerdem auf, dass die Textkonsolen »tty0« und »tty3« fehlen. Dies kann nur bedeuten, dass sich hier jemand eingeloggt hat:
you@host > who | grep tty3
tot tty3 Mar 1 23:28
Sobald der User »tot« seine Session wieder beendet, wird ein neuer Getty-Prozess gestartet, der horchend darauf wartet, dass sich wieder jemand in der Textkonsole »tty3« einloggt.
Die Textfenster grafischer Oberflächen werden als Pseudo-Terminal bezeichnet (Abk. »pts« oder auch »ttyp« – betriebssystemspezifisch). Im Gegensatz zu einer Terminal-Emulation verläuft die Geräteeinstellung zu den Pseudo-Terminals dynamisch – sprich, ein Pseudo-Terminal existiert nur dann, wenn eine Verbindung besteht. In welchem Pseudo-Terminal Sie sich gerade befinden, sofern Sie unter einer grafischen Oberfläche eine Konsole geöffnet haben, können Sie mit dem Kommando tty ermitteln:
[ --- Linux --- ]
you@host > tty
/dev/pts/40
[ --- oder unter FreeBSD --- ]
you@host > tty
/dev/ttyp1
Der Name eines solchen Pseudo-Terminals ist eine Zahl im Verzeichnis /dev/pts. Die Namensvergabe beginnt gewöhnlich bei 0 und wird automatisch erhöht. Einen Überblick, welche Pseudo-Terminals gerade für welche User bereitgestellt werden, finden Sie im entsprechenden Verzeichnis:
you@host > ls -l /dev/pts
insgesamt 0
crw--w---- 1 tot tty 136, 37 2005–03–01 22:46 37
crw------- 1 tot tty 136, 38 2005–03–01 22:46 38
crw------- 1 tot tty 136, 39 2005–03–01 22:46 39
crw------- 1 you tty 136, 40 2005–03–02 00:35 40
Hier finden Sie insgesamt vier Pseudo-Terminal-Einträge. Drei für den User »tot« und einen für »you«.
Das Gleiche finden Sie auch unter BSD-UNIX mit
you@host > ls -l /dev/ttyp*
crw-rw-rw- 1 root wheel 5, 0 22 Mär 21:54 /dev/ttyp0
crw--w---- 1 martin tty 5, 1 13 Mai 08:58 /dev/ttyp1
crw--w---- 1 martin tty 5, 2 13 Mai 07:43 /dev/ttyp2
crw--w---- 1 martin tty 5, 3 13 Mai 08:48 /dev/ttyp3
crw-rw-rw- 1 root wheel 5, 4 13 Mai 08:48 /dev/ttyp4
crw-rw-rw- 1 root wheel 5, 5 12 Mai 16:31 /dev/ttyp5
crw-rw-rw- 1 root wheel 5, 6 12 Mai 23:01 /dev/ttyp6
crw-rw-rw- 1 root wheel 5, 7 12 Mai 14:37 /dev/ttyp7
crw-rw-rw- 1 root wheel 5, 8 12 Mai 14:22 /dev/ttyp8
crw-rw-rw- 1 root wheel 5, 9 12 Mai 14:26 /dev/ttyp9
crw-rw-rw- 1 root wheel 5, 10 12 Mai 17:20 /dev/ttypa
crw-rw-rw- 1 root wheel 5, 11 23 Apr 11:23 /dev/ttypb
...
nur mit dem Unterschied, dass bei der Namensvergabe der Wert nach 9 (»ttyp9«) nicht mehr um 1 inkrementiert wird, sondern mit dem ersten Buchstaben des Alphabets fortgefahren wird.
Pseudo-Terminals können neben den normalen Terminalverbindungen auch im Netzwerk (TCP/IP) eingesetzt werden. Dies ist möglich, weil der X-Server für grafische Anwendungen auch über ein Netzwerkprotokoll verfügt und damit verbunden ist.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|