Einfuehrung in Unix Michaela K. Harlander GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH August 1992 Dies ist eine Einfuehrung in Unix fuer Benutzer, die noch ueberhaupt keine Erfahrung mit Unix haben. Sie erklaert die wesentlichen Grundlagen von Unix, was man braucht, um eigene Dateien zu erzeugen und Programme zu uebersetzen. Ein kurzer Ueberblick ueber Netzwerke wird ebenso gegeben wie eine Einfuehrung in das X-Window-System. Grundkenntnisse ueber Computer sollten beim Leser vorhanden sein. Eine alphabetische Liste wichtiger Unix-Kommandos ergaenzt diese Einfuehrung. Von Zeit zu Zeit sollte man darauf einen Blick werfen, waehrend man dieses Schriftstueck durcharbeitet. Dieses Dokument enthaelt ausserdem Zusammenstellungen der wichtigsten Kommandos in den Editoren vi und emacs. Inhaltsverzeichnis 1 Grundlagen von Unix 1 2 Aller Anfang : 3 2.1 Benutzerkennung und Passwort 3 2.2 Vom Umgang mit den Maschinen 4 2.3 Einloggen 4 2.4 Eingabe von Kommandos 6 3 Shells 6 3.1 Eigenschaften, Startup-Dateien 6 3.2 History und Job-Control 7 3.3 Das nice Kommando 7 4 Hilfestellungen 8 5 Das Filesystem 9 5.1 Struktur 9 5.2 Dateinamen 10 5.3 Automatische Ergaenzung von Dateinamen 12 5.4 Loeschen und Umbenennen von Dateien 12 5.5 Zugriffsrechte und Dateiattribute 13 5.6 Datensicherung 14 6 Arbeiten mit der Shell 15 6.1 Standard-Eingabe und Standard-Ausgabe 15 6.2 Umleitung der Standard-Dateien 15 6.3 Pipes 16 6.4 Umgebungsvariablen 16 6.5 Aliase 17 6.6 Verwendung von Shell-Sonderzeichen als normale Zeichen18 6.7 Abhilfe in Notfaellen 18 6.8 Shell-Skripts 19 7 Editieren von Dateien 22 7.1 vi 7.2 Emacs 23 8 Compiler 24 9 Arbeiten mit dem Netzwerk 27 9.1 Domain-Namen 27 9.2 Login auf entfernten Maschinen 28 9.3 Uebertragung von Dateien 29 9.4 Elektronische Post 30 9.5 NetNews 33 9.6 Das lokale Netz 33 10 Sicherheit 34 10.1 Warum Sicherheit? 34 10.2 Sicherheitsregeln fuer Benutzer 35 11 Das X-Window-System 36 11.1 Die Rolle der Maus 37 11.2 Startup-Dateien in X 38 11.3 Der Windowmanager 38 11.4 Die Terminalemulation xterm 39 11.5 Einige andere X-Anwendungen 40 11.6 Benutzung von X im Netz 40 A Wichtige Unix-Kommandos 42 A.1 awk 42 A.2 cat A.3 cc A.4 cd A.5 chmod 42 A.6 compress, uncompress und zcat 42 A.7 cp A.8 date 43 A.9 diff A.10 echo 43 A.11 file A.12 find A.13 finger 44 A.14 freeze, melt und fcat 44 A.15 grep 44 A.16 head 45 A.17 kill A.18 ln A.19 lpr und andere Druckerkommandos 46 A.20 ls A.21 mail, Mail und mailx 46 A.22 make 47 A.23 man 47 A.24 mkdir 47 A.25 more 47 A.26 mv 47 A.27 nice 47 A.28 nohup 47 A.29 ps A.30 rm A.31 rmdir 48 A.32 ruptime und rup 48 A.33 rwho und rusers 48 A.34 sed A.35 sort A.36 tail A.37 talk A.38 tar A.39 tee A.40 uptime 50 A.41 wc A.42 which 50 A.43 who 50 B GNU Emacs Referenz-Karte 50 B.1 Aufrufen und Verlassen von Emacs 51 B.2 Dateien 51 B.3 Hilfestellungen 51 B.4 Beheben von Fehlern 51 B.5 Inkrementelle Suche 51 B.6 Bewegen 52 B.7 Killen und Loeschen 52 B.8 Markieren 52 B.9 Ersetzen mit Nachfrage 53 B.10 Mehrere Fenster 53 B.11 Formatieren 53 B.12 Aenderung von Gross- und Kleinschreibung 54 B.13 Der Minipuffer 54 B.14 Puffer 54 B.15 Vertauschen 54 B.16 Ueberpruefung der Rechtschreibung 54 B.17 Tags 54 B.18 Shells 55 B.19 Rmail 55 B.20 Regulaere Ausdruecke 55 B.21 Register 56 B.22 Info 56 B.23 Tastatur-Makros 56 B.24 Kommandos im Umgang mit Emacs Lisp 56 B.25 Einfache Anpassungen 57 B.26 Schreiben von Kommandos 57 C Vi Referenz-Karte 58 C.1 Masseinheiten 58 C.2 Starten und Verlassen von vi 58 C.3 Bewegen 58 C.4 Einfuegen von Text 59 C.5 Loeschen 59 C.6 Aendern 60 C.7 Suchen nach Ausdruecken 60 C.8 Ersetzen von Ausdruecken 61 C.9 Merken von Text 61 C.10 Wiedereinfuegen von Text 61 C.11 Markieren 61 C.12 Shell-Befehle 61 C.13 Verschiedene Kommandos 62 D Einfache regulaere Ausdruecke 62 E Literatur 63 E.1 Samuel's englische Literaturliste 63 E.2 Deutsche Literaturhinweise 69 Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. Dieses Dokument ist per ftp von ftp.informatik.tu-muenchen.de im Verzeichnis pub/doc/os als dintro.ps erhaeltlich. Die in dieser Schrift verwendeten Software- und Hardwarebezeichnungen sind in den meisten Faellen auch eingetragene Warenzeichen und unterliegen als solche den gesetzlichen Bestimmungen. Kommentare, Kritik, Spenden etc. an michaela@genua.sub.org oder harmic@physik.tu-muenchen.de Autorin und Copyrightinhaber uebernehmen keinerlei juristische Verantwortung noch irgendeine Haftung fuer Fehler, fehlende Information oder fuer Schaden, der aus dem Gebrauch dieses Dokumentes resultiert. Vorbemerkungen und Danksagung Diese Einfuehrung ist eine erweiterte Uebersetzung meiner "Introduction to Unix". Bei der Verfassung deutscher Computerliteratur stellt sich die Frage nach der Verwendung englischer oder eingedeutschter Fachbegriffe. Mir persoenlich sagt weder die einfache Uebernahme aller englischen Fachbegriffe zu noch die gewaltsame Eindeutschung derselben. Daher habe ich versucht, einen Mittelweg zu gehen. Ein "Rechenwerk" anstelle der CPU oder gar einen "Heimatkatalog" anstelle des Homedirectories wird man hier nicht finden, aber auch keine "Filename-Expansion", da die Uebersetzung "Dateinamen-Ergaenzung" genauso verstaendlich und lesbar ist wie das Original. Schliesslich sind auch die englischen Begriffe nicht immer gluecklich gewaehlt. In vielen Faellen habe ich aber die englischen Begriffe in Klammern angegeben oder alternativ zu den deutschen verwendet. Es ist eben wesentlich einfacher fuer Sie, das Kommando "y" im Editor vi zu verstehen, wenn Sie wissen, dass es vom englischen "yank" stammt. Da ich die Leserinnen unter den Lesern nicht durch eine maennlich betonte Sprachen verschrecken will, ich aber andererseits die oft verwendeten Formen " Leser/innen" oder gar "LeserInnen" fuer schlicht unlesbar halte, verwende ich maennliche und weibliche Singularformen abwechselnd. Und ein Plural ist fuer mich immer noch geschlechtsneutral. Die Maschinen- und Benutzernamen sind der mittlerweile fuenfbaendigen Trilogie "Per Anhalter durch die Galaxis" von Douglas Adams entlehnt. Dank gebuehrt hier natuerlich allen Leuten, die mich schon bei der ersten englischen Version mit guten Ratschlaegen und Aenderungswuenschen ueberhaeuft haben. Besonders zu nennen ist hier Bernhard Schneck, der mit unzaehligen wertvollen Hinweisen und einigen nicht ganz so wertvollen, aber dafuer umso heftigeren Diskussionen ueber Nomenklatur und aehnliche weltanschauliche Fragen wesentlich zur Verbesserung der Einfuehrung und zur Strapazierung meiner Nerven beitrug. Er und Hannes Faestermann haben das Korrekturlesen der deutschen Version uebernommen. Leser der englischen Version regten eine Vielzahl von Verbesserungen, z.B. den Index, an. Ihnen allen gilt mein herzlicher Dank. Natuerlich ist diese Einfuehrung alles andere als vollkommen. Wenn Sie konkrete Verbesserungsvorschlaege haben, so teilen Sie mir diese bitte mit. Abhaengig von Arbeitsaufwand, Termindruck, Wetter und meiner Stimmungslage werden Sie Ihre Vorschlaege dann in der naechsten Version wiederfinden -- oder auch nicht. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 1 Grundlagen von Unix Unix ist ein Mehrbenutzer- und Mehrprozess-System. Es ermoeglicht, eine Maschine mit anderen Benutzern gemeinsam zu nutzen und mehrere Prozesse gleichzeitig laufen zu lassen. Die Struktur ist etwa folgende: Das Fundament wird von der Hardware gebildet: vom Hauptspeicher, in dem die Prozesse waehrend der Ausfuehrung gehalten werden (allerdings werden die Prozesse manchmal temporaer auf die Festplatten ausgelagert), von der zentralen Recheneinheit (CPU) und eventuell einem Prozessor fuer Fliesskommarechnungen, von den Festplatten, auf denen Dateien und Programme dauerhaft gespeichert werden, sowie vom Netzwerk, das die Maschine, an der Sie arbeiten, mit anderen Maschinen verbindet. Die Systemebene wird im wesentlichen von Management-Systemen fuer die Hardware gebildet. Das Prozessmanagement kuemmert sich sowohl um Ihre Prozesse als auch um die anderer Benutzer, so dass sie sich nicht ueberschneiden und die Rechenleistung untereinander sinnvoll aufteilen. Die CPU kann immer nur ein Programm gleichzeitig bearbeiten, alle anderen Programme muessen waehrenddessen warten. Natuerlich sehen Sie das nicht direkt, da diese Programme sehr haeufig von der CPU gewechselt werden. Wenn allerdings viele Prozesse eine CPU belagern, muss jeder Prozess laenger warten, bis er wieder bearbeitet wird, und die Laufzeit verlaengert sich entsprechend. Alle Prozesse derselben Prioritaet muessen gleich lange warten. Die Prioritaet kann aber geaendert werden, so dass einige Prozesse haeufiger von der CPU bearbeitet werden als andere und somit eine kuerzere Laufzeit haben. Das Filesystem verwaltet den Platz auf den Festplatten und erlaubt es, mehrere Platten als ein homogenes Speichermedium zu sehen. Wenn auf Dateien einer nichtlokalen Platte zugegriffen werden soll, muss das Filesystem das Netzwerk verwenden. Damit ein Netzwerk funktioniert, ist es notwendig, eine "Syntax" fuer den Datentransfer zu definieren. Diese "Syntax" wird ueber Netzwerkprotokolle geregelt. Letztere werden in verschiedene Ebenen unterteilt: Waehrend IP (Internet Protocol) lediglich Datenpakete ueber ein Kabel schickt, stellen TCP (Transmission Control Protocol) und UDP (User Datagram Protocol) weitergehende Faehigkeiten zur Verfuegung. TCP stellt z.B. sicher, dass Daten auch wirklich am Bestimmungsort ankommen, selbst wenn einzelne Datenpakete unterwegs verloren gehen sollten. Um Netzwerk-Anwendungen zu benutzen, muss man aber ueber Netzwerkprotokolle nicht Bescheid wissen. Einige gebraeuchliche Netzwerkanwendungen sind rlogin, das das Einloggen auf einer nicht-lokalen Maschine ermoeglicht, ftp fuer Dateitransfer sowie verschiedene Programme zum Versenden und Empfangen elektronischer Post. Zunaechst jedoch sehen Sie von Ihrem System die Shell, die man am besten als Kommandointerpreter beschreibt. Fuer Sie als Benutzer spielt es keine besondere Rolle, ob Sie ein Programm oder ein Shellkommando aufrufen - ausser in einem wesentlichen Punkt: da es mehrere verschiedene Shells gibt, koennen sich Shellkommandos sogar auf einem einzigen System von Benutzerin zu Benutzerin unterscheiden. Aber nicht nur das traegt zur Verwirrung bei. Es gibt naemlich auch verschiedene Arten von Unix. Moderne Unix-Systeme kann man im wesentlichen in zwei Klassen einteilen: diejenigen, die sich an SYSTEM V anlehnen (SYSTEM V wurde von AT&T entwickelt), und diejenigen, die sich vom BSD der University of California in Berkeley ableiten. [ Fussnote: Eigentlich gilt die Bezeichnung UNIX nur fuer AT&T's (heute USL) Produkt. Wir folgen der allgemein ueblichen Sprachregelung und bezeichnen hier mit Unix alle UNIX-artigen Systeme. Der Terminus "UNIX" bezieht sich nur dann auf das USL-Produkt, wenn wir es nur mit Grossbuchstaben schreiben. ] Die Benutzeroberflaeche der beiden unterscheidet sich in einigen Punkten. Einige Kommandos gibt es nur auf einem der beiden Systeme, andere haben unterschiedliche Syntax. Neuere Versionen von SYSTEM V wie SYSTEM V RELEASE 4 (SVR4) wurden jedoch stark von BSD beeinflusst und kennen viele Kommandos, die frueher nur BSD-Benutzern vorbehalten waren. Daher treffen einige Bemerkungen in dieser Einfuehrung ueber die Besonderheiten von SYSTEM V nicht mehr fuer diese neueren Versionen, sondern nur noch fuer aeltere wie SYSTEM V RELEASE 3 (SVR3) zu. Wenn eine Besonderheit fuer SVR3 angegeben ist, so gilt das i.d.R. auch fuer aeltere SYSTEM V - Versionen. Im Zweifelsfall wende man sich an die Systemhandbuecher. Doch zurueck zum Aufbau von Unix: Die oberste Ebene wird von den Anwendungen gebildet. Das koennen Compiler sein, Editoren, Programme fuer symbolische Mathematik, Graphikprograme etc. Diese und einige Shell- bzw. Systemkommandos werden Sie vermutlich am meisten verwenden, abgesehen natuerlich von eigenen Programmen. Abb. 2 zeigt das Schema eines Mehrbenutzer- und Mehrprozess-Systems. Jeder Benutzer hat eine Shell, die sich von Benutzer zu Benutzer unterscheiden kann. Davon ausgehend kann jede Benutzerin verschiedene Prozesse (tasks, jobs) laufen lassen. Die Prozesse werden im Schema durch ein P gefolgt von einer Ziffer symbolisiert. Da die Prozesse von der Shell aus gestartet worden sind, nennt man sie "Kinder" dieser Shell. Das koennen natuerlich auch weitere Shells sein. Nun, da Sie schon etwas ueber Unix wissen, koennen Sie daran gehen, es auch zubenutzen. Bevor Sie jedoch anfangen zu tippen, sollten Sie wissen, dass Unix Gross- und Kleinbuchstaben unterscheidet. 2.1 Benutzerkennung und Passwort Um an einer Unix-Maschine arbeiten zu koennen, muss man eine Arbeitssitzung anmelden und sich als dazu berechtigter Benutzer ausweisen. Dieser Vorgang heisst einloggen. Bevor man sich einloggen kann, braucht man eine Benutzerkennung (Account). Ueblicherweise erhaelt man diese Kennungen vom Systemverwalter. Dort bekommen Sie einen Loginnamen, der meistens vom richtigen Namen abgeleitet ist. Ferner werden Sie einer Gruppe zugewiesen. Die Gruppe kann z.B. alle Angehoerigen eines Universitaetsinstitutes umfassen, alle Angestellten einer Abteilung, alle Studenten einer Fakultaet etc. Die Gruppenzugehoerigkeit ist wichtig fuer die Zugriffsberechtigungen auf Dateien (siehe Kapitel 5.5). Der Systemverwalter weist Ihnen eine Loginshell zu. Das ist die Shell, mit der Sie nach dem Einloggen arbeiten. Die Eigenschaften verschiedener Shells erklaeren wir noch in Kapitel 3. Die Loginshell kann mit Hilfe des Kommandos chsh auf manchen Systemen geaendert werden. Ausserdem muss ein Passwort fuer die neue Kennung gesetzt werden. Das Passwort dient zur Identifizierung der Benutzerin. Es darf nur dem Besitzer der Kennung bekannt sein und wird in verschluesselter Form gespeichert, so dass niemand, nicht einmal die Systemverwalterin, es lesen kann. Das Passwort sollte mindestens 6 Zeichen lang sein. Mehr als 8 Zeichen werden meistens nicht verwendet, auch wenn ein laengeres Passwort angegeben wird. Neuere Systeme lassen auch laengere Passworte zu. Das Passwort sollte aus einer Mischung von Grossbuchstaben, Kleinbuchstaben, Ziffern und Sonderzeichen bestehen. Die Verwendung von Steuerzeichen ist zwar moeglich, wird aber nicht empfohlen, da dies zu unerwuenschten Effekten fuehren kann. Ein Passwort nur aus Kleinbuchstaben oder nur aus Ziffern ist nicht besonders sicher, da es viel leichter erraten werden kann. Moderne Passwort- Suchprogramme, die uebrigens weit verbreitet sind, haben mit solchen Passwoertern relativ leichtes Spiel. Es sollte auch keine offenkundig mit der Person verbundene Information als Passwort verwendet werden. Name, Telefonnummer etc. als Passwort sind ziemlich fehl am Platz. Auch die Namen bekannter Romanhelden sind eher ungeeignet. Das Passwort sollte etwa alle drei Monate geaendert werden oder sobald man vermutet, dass jemand das Passwort wissen koennte. Zum Aendern verwendet man den Befehl passwd oder yppasswd. 2.2 Vom Umgang mit den Maschinen Bitte achten Sie darauf, dass Sie nicht versehentlich die Maschine oder Peripheriegeraete ein- oder ausschalten. Eine Unix-Maschine wird ueblicherweise nur von der Systemverwalterin unter Verwendung bestimmter Prozeduren ein- oder ausgeschaltet. Einfaches Ausschalten kann grossen Schaden, besonders an den Daten auf den Festplatten, anrichten. In besonderen Notfaellen, z.B. wenn der Computer zu rauchen beginnt, sollten Sie die Maschine natuerlich trotzdem ausschalten, um groesseren Schaden (z.B. Brand) zu vermeiden. Will man eine Maschine benutzen, deren Bildschirm dunkel ist, so drueckt man zunaechst auf eine Taste [ Fussnote: SHIFT und CTRL bzw. STRG sind gut geeignet, da sie keine Eingabe an eventuell laufende Anwendungen verursachen. ] Viele System verwenden naemlich einen Bildschirm-Schoner (Screen-Saver), der den Bildschirm verdunkelt, wenn laengere Zeit keine Eingabe erfolgt. Ein Tastendruck stellt den Bildschirminhalt wieder her. Falls das nicht funktioniert, muss man den Bildschirm einschalten. Vergewissern Sie sich aber, dass Sie wirklich den Schalter fuer den Bildschirm und nicht etwa den fuer die Maschine betaetigen. Dabei sollte man daran denken, dass manche Computer die Recheneinheit im Bildschirmgehaeuse eingebaut haben, so dass der Schalter fuer den Bildschirm zugleich der fuer die Maschine ist. Im Zweifelsfall unbedingt fragen! 2.3 Einloggen Bevor Sie sich einloggen, werden Sie am Bildschirm etwa folgendes sehen: login: Password: Das Passwort erscheint waehrend der Eingabe nicht am Bildschirm, d.h. Sie muessen es "blind" eintippen. Nach der Eingabe von Benutzerkennung und Passwort wird das Passwort ueberprueft. Falls es korrekt eingegeben wurde, wird die Loginshell gestartet und eine Arbeitsumgebung eingerichtet. Was im einzelnen passiert, haengt von verschiedenen Dingen, wie etwa der gewaehlten Loginshell oder dem Terminaltyp ab. Falls Sie eine Workstation oder ein X-Terminal verwenden, werden meistens mehrere Fenster gestartet. Der Umgang mit Fenstern wird im Kapitel 11 ueber das X-Window-System naeher erlaeutert. Falls Sie sich ueber einen PC an eine Workstation einloggen, werden Sie dazu spezielle Software verwenden. Nach dem Login werden die Kurzmitteilungen "message of the day" (motd) ausgegeben, die aktuelle Informationen ueber das System enthalten. Die motd sollte immer sorgfaeltig gelesen werden, da dort ueber wichtige Neuigkeiten wie geplante Ausfallzeiten des Systems und neue Software-Installationen informiert wird. Nach den Kurzmitteilungen erscheint die Eingabeaufforderung (Prompt). Der Prompt ist eine Zeichenfolge, die von der Shell an den Anfang jeder Zeile gesetzt wird, in der eine Eingabe erwartet wird. In den Beispielen dieser Schrift wird ein einfaches $-Zeichen als Eingabeaufforderung verwendet. Das kann von System zu System und von Benutzer zu Benutzer jedoch voellig verschieden sein. Oft enthaelt der Prompt den Namen des Rechners oder des aktuellen Arbeitsverzeichnisses. Fuer die Eingabe der Kommandos ist das natuerlich ohne Bedeutung. Wenn Sie an einer Maschine eingeloggt sind, die an einem Netzwerk angeschlossen ist, so koennen Sie sich an allen anderen Maschinen einloggen, die ueber das Netz erreichbar sind und an denen Sie eine Benutzerkennung haben. Fuer den Login auf einer anderen als der lokalen Maschine, vor der Sie sitzen, muessen Sie das Kommando rlogin oder telnet verwenden. Im Gegensatz zum normalen login muss nun der Name der gewuenschten Maschine angegeben werden (siehe auch Kapitel 9.1). Beispiel: $ rlogin heart_of_gold.magrathea.universe Falls Sie auf der nicht-lokalen Maschine einen anderen Loginnamen haben, verwenden Sie: $ rlogin heart_of_gold.magrathea.universe -l other_loginname Eine telnet-Sitzung sieht so aus: $ telnet heart_of_gold.magrathea.universe Trying 42.42.42.42..... Connected to heart_of_gold.magrathea.universe Escape character is '^]'. UNIVERSE Unix (heart_of_gold) login: loginname Password: Zum Unterschied zwischen telnet und rlogin siehe Kapitel 9.2. Ausloggen kann man sich mit dem Kommando logout oder durch Tippen des EOF-Buchstabens (EOF = end of file). Dieser ist meist C-d, wobei die "Control" (Ctrl) Taste (auf deutschen Tastaturen oft "Strg" fuer Steuerung) und "d" gleichzeitig gedrueckt werden. Einige wenige Systeme verwenden C-z als EOF. Bitte dies erst dann ausprobieren, wenn die anderen beiden Moeglichkeiten nicht funktionieren. Auf den meisten Systemen bewirkt C-z naemlich lediglich das Stoppen eines Jobs. 2.4 Eingabe von Kommandos Die Kommandoeingabe erfolgt durch Angabe des Kommandonamens und eventuell Optionen und/oder Argumenten. Optionen beeinflussen die Wirkungsweise eines Kommandos. Ein Beispiel fuer eine Option, naemlich -l, haben wir bereits beim rlogin-Kommando verwendet. Eine Option besteht typischerweise aus einem Minuszeichen gefolgt von einem Einzelbuchstaben. Mehrere Optionen koennen oft mit einem Minuszeichen gefolgt von den Einzelbuchstaben aller gewuenschten Optionen ohne weitere Zwischenraeume angegeben werden. Einige Programme, z.B. Compiler, verlangen jedoch durch Zwischenraeume getrennte Angabe aller Optionen jeweils mit einem eigenen Minuszeichen. Im Zweifelsfall konsultiere man die Manuale. Argumente spezifizieren die Objekte, auf die ein Kommando wirkt. Will man etwa eine Datei seitenweise ausgeben lassen, so gibt man more dateiname ein. Das Kommando more zeigt Dateien Seite fuer Seite, dateiname gibt an, welche Datei dargestellt werden soll. Eine Kommandozeile wird durch Druecken der Tasten RETURN oder ENTER abgeschlossen und das Kommando vom Rechner ausgefuehrt. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 3 Shells 3.1 Eigenschaften, Startup-Dateien Die Shell kuemmert sich um die Arbeitsumgebung. Sie setzt den Prompt, teilt der Maschine mit, wo nach neuer E-Mail (elektronischer Post) geschaut werden soll etc. Um dies zu tun, fuehrt die Shell mindestens eine Startup-Datei, meistens sogar zwei (siehe Tabelle) aus. Dabei wird die erste Startup-Datei nur von der Login-Shell gelesen, die zweite auch von anderen Shells. Einige Shells ermoeglichen die nochmalige Ausfuehrung bereits eingegebener Kommandozeilen, ohne alles nochmals tippen zu muessen (History-Mechanismus) sowie das zeitweilige Anhalten eines laufenden Jobs (Job-Control). Es folgt eine kurze Uebersicht ueber die Eigenschaften verschiedener Shells. ___shell_____________sh__________csh________________ksh_______________bash____ 1. Startup-Datei .profile .login .profile .bash_profile or .profile 2._Startup-Datei -_ .cshrc $ENV $ENV Eigenschaften nur sehr Job-Control Job-Control Job control elementar einfachen History gute History gute History sh wird auch Bourne Shell genannt. $ENV als zweites Startup-File fuer ksh und bash bedeutet, dass der Name dieser zweiten Datei in der ersten Startup-Datei gesetzt werden kann. Oft wird .kshrc fuer ksh und .bashrc fuer bash verwendet. Das $-Zeichen bedeutet in Kombination mit Shell-Variablen, dass der Wert dieser Variablen eingesetzt werden soll. 3.2 History und Job-Control Die folgende Tabelle gibt einen Ueberblick ueber History-Kommandos in den verschiedenen Shells. ___________Wirkung______________csh______________ksh_____________bash_______ wiederhole letztes Kommando !! r !! wiederhole letztes Kommando, das mit exp begann !exp r exp !exp zeige die letzten Kommandos history history history oder fc -l wiederhole Kommando Nr. n !n r n !n wiederhole letztes Kommando, aber ersetze a durch b ^a^b r a=b ^a^b Es gibt in allen drei Shells noch fortschrittlichere Techniken, um vorangegangene Kommandozeilen zu modifizieren. So erlauben ksh und bash, nach einem vorangegangenen Ausdruck zu suchen und holen die entsprechende Kommandozeile zurueck, so dass sie editiert werden kann. Fuer Einzelheiten wende man sich -- wie ueblich -- ans Handbuch. Auf BSD-Systemen (und SVR4) kann man mit C-z einen bereits laufenden Job anhalten. Das bedeutet, dass die Bearbeitung dieses Prozesses unterbrochen wird und die Eingabeaufforderung der Shell erscheint. Das Kommando jobs zeigt alle gestoppten Jobs mit einer Nummer versehen an. Das Kommando fg %n holt Job Nr. n zurueck in den Vordergrund. fg ohne Argument holt den aktuellen Job zurueck. Dies ist meistens der zuletzt gestoppte Job und wird in der Ausgabe des Kommandos jobs mit einem + markiert. Tippt man nach Stoppen eines Jobs bg %n, so wird Job Nr. n in den Hintergrund geschickt und dort weiter bearbeitet, ohne dass die Shell auf die Beendigung des Jobs wartet. Daher erscheint sofort wieder die Eingabeaufforderung. Man kann einen Job auch direkt im Hintergrund starten, indem man an die entsprechende Kommandozeile ein &-Zeichen anhaengt. Diese Methode funktioniert auch bei Systemen, die das nachtraegliche Stoppen und In-den-Hintergrund-Schicken eines Jobs nicht erlauben (SVR3). 3.3 Das nice Kommando Rechenintensive Jobs koennen eine Maschine fuer andere Benutzer ziemlich unbrauchbar machen, selbst wenn andere Benutzer nur wenig rechenintensive Aufgaben wie Editieren erledigen moechten. Um diese Situation zu entschaerfen, sollten aufwendige Jobs mit einer niedrigeren Prioritaet gestartet werden. Dann naemlich wird z.B. der Editor bevorzugt behandelt, so dass vernuenftiges Arbeiten damit moeglich ist, obwohl auf der Maschine noch ein grosser Job rechnet. Falls keine anderen Prozesse auf der Maschine laufen, wird die Laufzeit des Jobs durch die niedrigere Prioritaet nicht beeinflusst. Prozesse mit gleicher Prioritaet werden von der CPU gleichberechtigt behandelt. Die Prioritaet wird mit Hilfe des nice-Kommandos verringert. Die Skala vonnice-Werten reicht meistens von 0 bis 39, wobei fuer Benutzerprozesse der Wert 20 als Voreinstellung gewaehlt wird. Je hoeher der nice-Wert, desto niedrigerer diePrioritaet (man ist dann "nicer" zu den anderen Benutzern). Ein Benutzer kann uebrigens die Prioritaet seiner Prozesse nur verringern, nicht aber erhoehen. Um einen Job mit niedrigerer Prioritaet zu starten, verwendet man das Kommando nice gefolgt von einem Wert und dem zu startenden Kommando. Um beispielsweise ein Programm mit einem um 10 niedrigeren nice-Wert zu starten, tippt man nice -10 Programm Ungluecklicherweise ist diese Syntax nicht eindeutig, wenn die Benutzerin die Shell csh verwendet. Csh hat naemlich ein eigenes nice-Kommando und dieses verlangt anstelle des "-" ein "+", weil csh dieses Zeichen als Vorzeichen interpretiert und nicht als Options-Minuszeichen wie das systemeigene nice-Kommando, das bei allen anderen Shells verwendet wird. Um dieses Problem zu umgehen, kann man mit dem Kommando /bin/nice immer das systemeigene nice-Kommando mit der "-" Syntax aufrufen. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 4 Hilfestellungen Unix-Systeme stellen eine Vielzahl von online-Hilfestellungen zur Verfuegung. Allerdings sollte man als Anfaenger nicht zuviel von diesen Hilfestellungen erwarten. Ihren wahren Nutzen offenbaren sie erst der etwas geuebteren Unix-Benutzerin. - apropos Ausdruck ist geeignet, wenn man sich an ein Kommando nicht mehr richtig erinnern kann oder das Kommando fuer eine bestimmte Operation nicht kennt. Das System sucht dann in den Ueberschriften der Manuale nach Ausdruck und gibt jeden gefundenen Kontext aus. Anstelle von apropos kann auch man -k verwendet werden. - whatis Kommando liefert eine Kurzbeschreibung von Kommando. - man Kommando liefert eine ausfuehrliche Beschreibung von Kommando. Dieser Befehl ruft die online-Manualseiten auf. Diese Manualseiten enthalten einen Grossteil der in den gedruckten Manualen vorhandenen Informationen, jedoch nicht alles. Im emacs-Editor gibt es ebenfalls ein Informationssystem, das wir zusammen mit emacs in Anhang B.22 behandeln. Manche Rechnerinstallationen haben zusaetzlich noch eigene Informationssysteme fuer lokal spezifische Informationen. Im Problemfall hilft oft der Griff zu den gedruckten Handbuechern. Meistens gibt es dort einen Ordner "Global Index" o.ae., der ein schnelles Auffinden des benoetigten Manuals ermoeglicht. Natuerlich kann man sich auch an eventuell vorhandene Benutzerberatungen oder Programmierberatungen wenden. Der Gang zum Systemverwalter sollte allerdings nur dann erfolgen, wenn alle anderen Moeglichkeiten ausgeschoepft wurden oder die Loesung nur mit Hilfe des Systemverwalters moeglich ist, z.B. wenn die Benutzerkennung gesperrt wurde. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 5 Das Filesystem 5.1 Struktur Unix betrachtet eine Datei (File) als kontinuierlichen Informationsfluss, also im wesentlichen als eine Sequenz von Bytes. Ein Byte definiert eine kleine Informationseinheit (auf vielen Systemen ist ein Byte die Groesse des Speicherplatzes, den ein einzelner Buchstabe benoetigt). Jede Datei hat einen Namen. Eine spezielle Datei, die die Namen anderer Dateien enthaelt, wird Verzeichnis oder Directory genannt. Verzeichnisse werden zur Strukturierung der Dateien auf einem System verwendet. Auch die voreingestellten Eingabe- und Ausgabe-Kanaele sind spezielle Dateien. Die Filesystemstruktur unter Unix ist hierarchisch. Ausgangspunkt ist das root-Directory. Von dort aus entwickelt sich das Filesystem baumartig. Pfadkomponenten werden durch den Schraegstrich / getrennt. Abb. 3 zeigt einen kleinen Ausschnitt eines solchen Datei-Baums, in dem als Beispiel auch das Homedirectory des fiktiven Benutzers "arthur" gezeigt wird. /home/earth/arthur ist das Homedirectory des Benutzers arthur, in dem er sich nach dem Einloggen wiederfindet. arthur gehoert zur Gruppe earth, und in diesem Beispiel gliedert sich der Datei-Baum in die Gruppen auf, bevor er sich in die Homedirectories aufspaltet. Auf den meisten Systemen koennen in csh, bash und ksh die Homedirectories mit der Abkuerzung ~loginname angesprochen werden. Das eigene Homedirectory wird dann einfach mit ~ bezeichnet. Es gibt keine Beschraenkung fuer die Zahl der Unterverzeichnisse. Deswegen sollte man Unterverzeichnisse intensiv als Mittel zur Strukturierung des Homedirectories verwenden. So ist es praktisch, ein Subverzeichnis fuer C-Programme anzulegen und dieses Verzeichnis wieder durch Unterverzeichnisse fuer jedes Projekt zu untergliedern. Ein Subdirectory namens bin wird oft verwendet, um Binaerdateien (ausfuehrbare Programme) abzulegen. Folgende Kommandos braucht man fuer den Umgang mit Directories: mkdir dirname lege das neue Subdirectory dirname an rmdir dirname entferne das (leere!) Verzeichnis dirname cd dirname gehe in das Verzeichnis dirname cd .. gehe im Dateibaum ein Verzeichnis nach oben (Elternverzeichnis) cd gehe ins Homedirectory ls liste die Dateien im Arbeitsverzeichnis ls -l ausfuehrliche Liste des aktuellen Verzeichnisses pwd zeige den Namen des aktuellen Verzeichnisses Das aktuelle Verzeichnis, auch Arbeitsverzeichnis genannt, wird durch einen einzelnen Punkt repraesentiert, das Elternverzeichnis durch zwei Punkte. Beispiel: $ pwd /home/earth/arthur $ mkdir test $ cd test $ pwd /home/earth/arthur/test $ cd ../C $ pwd /home/earth/arthur/C $ cd $ pwd /home/earth/arthur $ 5.2 Dateinamen Unix stellt keine besonderen Ansprueche an Dateinamen und erlaubt im Prinzip alle Zeichen ausser dem Schraegstrich in Dateinamen. Will man allerdings auf Nummer Sicher gehen, so sollte man sich auf folgende Zeichen in Dateinamen beschraenken: - Klein- und Grossbuchstaben - Ziffern - Unterstreichzeichen (_) - Punkt (.) - Minuszeichen (-) Andere Zeichen koennen von der Shell missinterpretiert werden. Bei der Verwendung von Gross- und Kleinbuchstaben sollte man daran denken, dass Unix diese unterscheidet. Dateinamen duerfen bis zu 253 Zeichen lang sein. Einige aeltere SYSTEMV-Maschinen lassen allerdings hoechstens 14 Zeichen lange Dateinamen zu. Ebenso koennen manche Anwendungen nur Dateinamen verarbeiten, die deutlich kuerzer als 253 Zeichen sind. Im Gegensatz zu MS-DOS verwendet Unix keine Extensions (das sind in DOS Teile des Dateinamens, die durch einen Punkt abgetrennt sind und eine spezielle Bedeutung fuer das Betriebssystem haben). Daher kann man in Unix beliebig viele Punkte in einem Dateinamen verwenden, denn der Punkt hat keine spezielle Bedeutung. Die Feststellung, ob eine Datei ausfuehrbar ist etc. erfolgt in Unix ueber andere Mechanismen, waehrend dies in DOS ueber Extensions gesteuert wird. Allerdings verwenden unter Unix einige Anwendungen, z.B. Compiler, die letzten Buchstaben in einem Dateinamen, die durch einen Punkt abgetrennt wurden, zur Einordnung der Dateien. Einige uebliche Endungen sind: .tex TEX-Quellcode .dvi uebersetztes TEX .ps Postscript-Dateien (Postscript ist eine Graphiksprache) .tar Archiv-Datei .Z mittels compress komprimierte Datei .F mittels freeze komprimierte Datei .c C-Quellcode .f FORTRAN-Quellcode Es gibt noch eine Vielzahl solcher Endungen. Die wichtigsten Endungen, die Compiler verwenden, werden im Kapitel ueber Compiler erklaert. Dateinamen, die mit einem Punkt beginnen, sind uensichtbar", d.h. ls zeigt diese Dateien nicht an. So beginnen alle Startup-Dateien mit einem Punkt, da man diese nicht bei jedem ls sehen will. ls -a zeigt auch unsichtbare Dateien an. Um eine Datei anzusprechen, kann man entweder den absoluten oder den relativen Pfadnamen verwenden. Der absolute Pfadname besteht aus dem kompletten Pfad vom root-Verzeichnis / aus bis zu dem Verzeichnis, in dem sich die Datei befindet. Daher beginnen absolute Pfadnamen immer mit einem /. /home/earth/arthur/plots/plot1.ps ist z.B. so ein absoluter Pfadname. Ein relativer Pfadname bezeichnet den Pfad bezueglich des aktuellen Arbeitsverzeichnisses. Man kann daher das Arbeitsverzeichnis auch dadurch definieren, dass der relative Pfadname der darin enthaltenen Dateien der einfache Dateiname ist. Folgende relative Pfadnamen beziehen sich auf dieselbe Datei (s. Abb. 3). relativer Pfadname ausgehend vom Arbeitsverzeichnis plot1.ps aerthur/plots plots/plot1.ps aerthur ../plots/plot1.ps aerthur/C Wenn wir im folgenden nur den einfachen Dateinamen ohne jeden Pfad bezeichnen wollen, werden wir "Basis-Dateiname" verwenden. Ein Basis-Dateiname enthaelt keine Schraegstriche. 5.3 Automatische Ergaenzung von Dateinamen Manchmal muss man mehrere Dateien ansprechen, will aber nicht jeden Namen einzeln eingeben, oder man will einen langen Dateinamen abkuerzen. Die Shell kann Dateinamen automatisch vervollstaendigen (Filename Expansion oder File Globbing genannt). Die wesentlichen Mechanismen sind: - Ein * steht fuer eine beliebige Anzahl von Zeichen, auch fuer null Zeichen. In aerthur/plots listet ls *.ps alle Dateien, die auf .ps enden. - Ein ? steht fuer genau ein Zeichen. ls plot?.ps listet daher plot1.ps, plot2.ps, plot3.ps und plota.ps, aber nicht plot1a.ps. - Wenn nur eine Auswahl von Zeichen repraesentiert werden soll, gibt man eine entsprechende Liste oder einen Bereich in eckigen Klammern an. [ae] kann fuer ein a oder ein e stehen, [a-z] repraesentiert einen beliebigen Kleinbuchstaben. ls plot[1-3].ps listet plot1.ps, plot2.ps und plot3.ps, aber nicht plota.ps oder plot1a.ps. Sonderzeichen, die fuer eine Gruppe von Zeichen stehen, werden oft Wildcards genannt. Speziell ksh und bash bieten umfangreichere Werkzeuge zur Dateinamen-Ergaenzung an. Man wende sich mit viel Geduld gewappnet an die entsprechenden Handbuecher. 5.4 Loeschen und Umbenennen von Dateien mv fname1 fname2 nenne Datei fname1 jetzt fname2; eine bereits existierende Datei fname2 wird dabei geloescht. Der Name des Komman- dos leitet sich von "move" ab. mv fname dir verschiebe die Datei fname in das Verzeichnis dir; die Datei hat nachher denselben Basis-Dateinamen, aber einen anderen Pfadnamen. Wenn dir bereits eine Datei desselben Basis-Datei- namens enthaelt, wird diese ueberschrieben. mv dir1 dir2 schiebe das gesamte Verzeichnis dir1 mit allen Unterverzeichnissen in das Verzeichnis dir2. Falls dir2 schon existiert, wird dir1 Unterverzeichnis von dir2. Falls es noch nicht existiert, wird dir2 neu erzeugt und ist mit dem alten dir1 identisch. dir2 darf kein Unterverzeichnis von dir1 sein. Auf aelteren SYSTEM V-Maschinen kann diese Spielart von mv nicht verwendet werden. cp fname1 fname2 kopiere die Datei fname1 nach fname2; eine bereits existierende Datei fname2 wird dabei ueberschrieben. cp fname1 dir kopiere die Datei fmane1 in das Verzeichnis dir und behalte dabei denselben Basis-Dateinamen. cp -r dir1 dir2 kopiere alle Dateien in dir1 sowie die Unterverzeichnisse rekursiv nach dir2, so dass die Datei/Verzeichnis- Struktur erhalten bleibt. Auf aelteren SYSTEM V-Maschinen ist dies nicht moeglich. rm fname Loesche die Datei fname. Im Gegensatz zu MS-DOS ist dieses Kommando unter Unix unwiderruflich! 5.5 Zugriffsrechte und Dateiattribute Das Kommando ls -lg plot1.ps in aerthur/plots koennte folgende Ausgabe liefern (auf einem BSD-System): -rwxr-xr-- 1 arthur earth 3451 Jul 25 13.15 plot1.ps Die Option -g bewirkt in BSD-Systemen, dass die Gruppenzugehoerigkeit der Datei angezeigt wird. In System-V-Systemen geschieht dies bereits bei Verwendung der Option -l. Dort wird die Ausgabe der Gruppe durch -g abgeschaltet. Das Minuszeichen am Anfang bedeutet, dass es sich bei plot1.ps um eine einfache Datei (also kein Verzeichnis etc.) handelt. Bei einem Verzeichnis waere ein "d" zu sehen. Die naechsten 9 Zeichen erklaeren die Zugriffsrechte fuer diese Datei. Nach der Ziffer 1 fuer die Zahl der Verweise (Links) [ Fussnote: Verweise sind zusaetzliche Namen, unter denen eine Datei angesprochen werden kann. Die Zahl 1 bedeutet, dass diese Datei nur einen Namen hat. Siehe auch S. 45.] steht der Besitzer der Datei, dann die Groesse in Bytes und das Datum der letzten Aenderung. Die letzte Spalte ist der Dateiname. Drei Dinge kann man mit einer Datei tun: lesen, darauf schreiben und ausfuehren. Die Zugriffsrechte legen nun fest, wer was mit dieser Datei tun darf. Dabei werden drei Arten von Benutzern unterschieden: der Besitzer u (user), die Gruppe g (group) und der Rest der Welt o (others). Die drei Rechte werden fuer Lesen mit r (read), fuer Schreiben mit w (write) und fuer Ausfuehren mit x (execute) angegeben. Ein Minuszeichen anstelle eines r, w oder x bedeutet, dass das entsprechende Recht nicht gewaehrt wird. Die ersten drei Zeichen der Zugriffsrechte zeigen, dass der Besitzer der Datei diese lesen, beschreiben und ausfuehren darf. Die naechsten drei Zeichen geben die Rechte fuer die Gruppe (hier earth) an. Die Mitglieder der Gruppe duerfen das File lesen und ausfuehren, aber nicht darauf schreiben. Die letzten drei Zeichen bedeuten, dass die Datei von allen Benutzern, die weder Besitzer noch Gruppenangehoerige sind, zwar gelesen, aber weder beschrieben noch ausgefuehrt werden darf. Zugriffsrechte koennen mittels des Kommandos chmod geaendert werden. Dabei gibt man an, fuer wen die Rechte geaendert werden sollen, naemlich fuer den Besitzer (u), die Gruppe (g), alle anderen (o) oder alle drei zusammen (a fuer all). Ein Plus- bzw. Minuszeichen dient der Angabe, ob ein bestimmtes Recht fuer diese Benutzer hinzugefuegt oder entfernt werden soll. Die Rechte selbst werden durch r, w und x bezeichnet. Mit einem = wird ein Recht komplett neu gesetzt. chmod u-x plot1.ps macht die Datei fuer den Besitzer arthur nicht-ausfuehrbar: $ ls -l plot1.ps -rw-r-xr-- 1 arthur 3451 Jul 25 13.15 plot1.ps Das folgende Kommando sorgt dafuer, dass die Gruppe die Datei nur noch lesen kann: chmod g=r plot1.ps $ ls -l plot1.ps -rw-r--r-- 1 arthur 3451 Jul 25 13.15 plot1.ps Man kann die Zugriffsrechte auch ueber einen Zahlencode angeben. Dabei werdenden Buchstaben r, w, x folgende Werte zugeordnet: r 4, w 2, x 1 Den korrekten Zahlencode erhaelt man durch Addieren der Werte der Rechte jeder Benutzergruppe, d.h. der Code ist eine dreistellige Zahl, bei der jede Ziffer zwischen 0 und 7 liegt. -rw-r--r-- kann somit durch 644 beschrieben werden. Das zuletzt angefuehrte chmod Kommando kann daher durch chmod 644 plot1.ps ersetzt werden. 5.6 Datensicherung Im Falle der Beschaedigung einer Festplatte koennen die Dateien auf dieser Platte verloren gehen. Deswegen ist es unbedingt notwendig, von Dateien von Zeit zu Zeit eine Sicherungskopie anzulegen, so dass das Versagen einer Festplatte nicht zum Datenverlust fuehrt. Auch versehent- liches Loeschen fuehrt gelegentlich zu Datenverlust. An manchen Orten fuehren die Systemverwalter Sicherungskopien aller Dateien durch. Um aber ganz sicher zu sein (auch System- verwalter sind Menschen und koennen die Datensicherung vergessen), sollte man zumindest von wichtigen Dateien eigene Sicherungskopien (Backups) anlegen. Dies kann etwa auf eine Diskette oder eine Bandkassette erfolgen. Um den Backup bequem erledigen zu koennen, ist es guenstig, sich des tar Kommandos zu bedienen, das im Anhang A beschrieben ist. Dieses Kommando kann komplette Verzeichnisse, einschliesslich aller Unterverzeichnisse, zu einer Archiv-Datei zusammenfassen. Um Speicherplatz zu sparen, koennen die resultierenden tar Dateien komprimiert werden, bevor sie auf das externe Speichermedium transportiert werden. Gebraeuchlich ist compress, aber auch das effizientere freeze. Siehe Seite 42 fuer eine Beschreibung von compress und einen Beispiel-Backup; das Kommando freeze ist in Kapitel A.14 erlaeutert. Allerdings besteht bei komprimierten Dateien die Gefahr, dass durch geringfuegige Materialfehler auf den Aufzeichnungsmedien die Dateien nicht mehr ent-komprimiert werden koennen und der Backup somit wertlos wird. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 6 Arbeiten mit der Shell 6.1 Standard-Eingabe und Standard-Ausgabe Viele Programme lesen Eingabeparameter, verarbeiten diese und liefern eine Ausgabe. Daher gibt es in Unix je einen vordefinierten Standard-Eingabe- und Ausgabekanal, die stdin und stdout genannt werden. Beide sind lediglich vordefinierte Dateien. Der Eingabekanal wird i.d.R. mit der Eingabe ueber die Tastatur identifiziert, der Ausgabekanal mit dem Bildschirm. In einer Umgebung mit verschiedenen logischen Terminals, wie etwa in einer Fensterumgebung, wo jedes Fenster ein eigenes logisches Terminal darstellt, sind stdin und stdout fuer jedes Fenster extra definiert. Es gibt noch ein weiteres solches File, das stderr genannt wird und an das Fehlermeldungen weitergegeben werden. Es wird ebenfalls mit dem Terminal identifiziert, ist aber dennoch vom stdout zu unterscheiden. Deswegen koennen stdout und stderr in verschiedene Dateien umgeleitet werden, wenn man die Ausgabe nicht auf dem Bildschirm wuenscht. Verschiedene Dateien sind oft praktisch, wenn die eigentlichen Ergebnisse nicht mit den Fehlermeldungen vermischt werden sollen. 6.2 Umleitung der Standard-Dateien Umleitung bedeutet, dass den Standard-Dateien eine andere Datei zugeordnet wird, z.B. dass die Eingabeparameter aus einer normalen Datei gelesen werden oder die Ausgabe in eine normale Datei erfolgt. Standard-Eingabe wird mittels des Zeichens < umgeleitet. $ Kommando < Eingabedatei liest die Eingabe fuer Kommando aus der Datei Eingabedatei. Standard-Ausgabe wird durch ein >-Zeichen umgeleitet: $ Kommando > Ausgabedatei schreibt die Ausgabe von Kommando in die Ausgabedatei. Eine eventuell bereits existierende Ausgabedatei wird ueberschrieben. Um die Ausgabe an eine Datei anzuhaengen statt diese Datei vorher zu loeschen, ersetzt man das >-Zeichen durch >>. In sh, ksh und bash kann stderr mit 2> umgeleitet werden. Falls stdout bereits umgeleitet wurde und die Fehlermeldungen in der gleichen Datei gewuenscht werden, verwendet man 2>&1. Beispiele: $ Kommando < infile > outfile 2> errfile verwendet die Eingabedaten aus infile, schreibt die Ergebnisse nach outfile und die Fehlermeldungen nach errfile. Die Reihenfolge der Umleitungen der StandardDateien kann ausgetauscht werden. $ Kommando > outfile 2>&1 schreibt die Ergebnisse und Fehlermeldungen nach outfile. In diesem Fall ist die Reihenfolge der Umleitungen wichtig. Stdout muss umgeleitet werden, bevor stderr in dasselbe File umgeleitet werden kann. In csh wird >& verwendet, um stdout und stderr in eine Datei umzuleiten: $ Kommando >& outfile Getrennte Umleitung von stderr ist in csh nicht auf einfache Weise moeglich. 6.3 Pipes Pipes ermoeglichen, dass die Standard-Ausgabe eines Kommandos als Standard-Eingabe eines anderen Kommandos fungiert. Das Symbol fuer eine Pipe ist |. Im folgenden Beispiel will man wissen, ob der Benutzer "arthur" im lokalen Netz eingeloggt ist. Man kann dazu die Ausgabe des rwho-Kommandos verwenden, das alle am lokalen Netz eingeloggten Benutzer auflistet. Diese Ausgabe verwendet man dann als Eingabe fuer das grep-Kommando (grep sucht nach einem Muster und zeigt alle Zeilen an, die dieses Muster enthalten): rwho | grep arthur zeigt alle Zeilen an, die " arthur" enthalten. Ein anderes Beispiel ist ein ausfuehrliches Listing (ls -l) eines umfangreichenVerzeichnisses. Um sich solch eine Liste seitenweise ansehen zu koennen, wird die Ausgabe des ls -l in das more Kommando umgeleitet: ls -l | more 6.4 Umgebungsvariablen Waehrend der Login-Prozedur setzt die Shell verschiedene Umgebungsvariablen. Einige wichtige davon haben wir unten aufgelistet. Um den Wert von VARIABLE angezeigt zu bekommen, verwendet man echo $VARIABLE. echo kopiert seine Argumente auf stdout und das $-Zeichen referenziert VARIABLE, d.h. es setzt deren Wert ein. Umgebungsvariablen unterscheiden sich von normalen Shellvariablen insbesondere dadurch, dass sie an Kinder der Shell vererbt werden. Daher muessen Umgebungsvariablen entweder mit einem speziellen Befehl gesetzt werden (in csh mit setenv) oder explizit fuer Kindprozesse zugaenglich gemacht werden (in sh, ksh und bash durch den Befehl export). TERM Der verwendete Terminaltyp, z.B. xterm oder vt100. Diese Variable wird von vielen Programmen verwendet, um die richtigen Kontroll- zeichen etc. benutzen zu koennen. DISPLAY Das Display; diese Variable ist wichtig, wenn X verwendet wird (siehe Kapitel 11) . PRINTER Der voreingestellte Drucker; wird z.B. von lpr verwendet (siehe Anhang A). PATH Suchpfad, d.i. eine Liste von Verzeichnissen, in denen die Shell nach Kommandos sucht. PS1 Der Ausdruck, der in sh, ksh und bash als (primaerer) Prompt ver wendet wird. prompt Der Ausdruck, der in csh als (primaerer) Prompt verwendet wird. HOME Das Homedirectory, in dem man nach dem Login landet. Um Umgebungsvariablen zu aendern, verwende man - in csh und tcsh: setenv VARIABLE value - in ksh und bash: VARIABLE=value; export VARIABLE Der Suchpfad PATH ist von den auf Seite 11 beschriebenen Pfadnamen zu unterscheiden. Ein absoluter oder relativer Pfadname kennzeichnet eine Datei oder ein Verzeichnis. Der Suchpfad ist eine Liste von Pfadnamen von Verzeichnissen, die durchsucht werden sollen, wenn ein Kommando mittels eines Basis-Dateinamens aufgerufen wird. Um ein weiteres Verzeichnis dem Suchpfad anzugliedern, z.B. weil der Benutzer arthur sein bin-Unterverzeichnis im Suchpfad haben moechte, verwendet man: - in csh: setenv PATH $-PATH":$HOME/bin - in sh, ksh und bash: PATH=$-PATH":$HOME/bin; export PATH Im Suchpfad wird das aktuelle Verzeichnis durch einen Punkt angegeben. Derartige Erweiterungen zum Suchpfad koennen in eine der Startup-Dateien geschrieben werden, so dass sie bei jedem Einloggen ausgefuehrt werden. Damit spart man sich das Tippen ganzer Pfadnamen, sofern das Kommando, das man ausfuehren will, in einem der in PATH gelisteten Verzeichnisse auftaucht. Gibt man ein Kommando mit einem Basis-Dateinamen so sucht die Shell in allen Verzeichnissen des Suchpfades nach diesem Kommando. Dies geschieht genau in der in PATH spezifizierten Reihenfolge. Falls die Shell in keinem dieser Verzeichnisse das gesuchte Kommando findet, so wird die Fehlermeldung command not found ausgegeben. Um ein Kommando aufzurufen, das sich in keinem der Suchpfadverzeichnisse befindet, muss der volle oder der relative Pfadname angegeben werden. Um alle Verzeichnisse zu sehen, die sich momentan im Suchpfad befinden, tippt man echo $PATH. 6.5 Aliase Haeufig gebrauchte Shell-Kommandos will man gerne abkuerzen. Zu diesem Zweck koennen Aliase definiert werden. Besonders bequem ist es, diese Aliase in die zweite der Startup-Dateien zu schreiben. Im folgenden Beispiel definieren wir das Alias ll fuer das Kommando ls -l. - alias ll 'ls -l' in csh - alias ll='ls -l' in ksh und bash Bourne Shell (sh) erlaubt keine Aliase. Neuere Versionen von sh ermoeglichen jedoch die Definition von Funktionen, die Aliase ersetzen koennen. Die richtige Anwendung von Anfuehrungszeichen in der Shell ist nicht einfach. Bei Problemen kann man alle notwendige Information in den Manualen finden (wenn auch oft nicht besonders uebersichtlich). Die oben angegebenen Formen sollten eigentlich in den meisten Faellen gut funktionieren. 6.6 Verwendung von Shell-Sonderzeichen als normale Zeichen Manchmal werden in den Argumenten einer Kommandozeile Zeichen benoetigt, die fuer die Shell eine besondere Bedeutung haben. Da man aber eigentlich nicht die besondere Interpretation durch die Shell wuenscht, muessen solche Zeichen zitiert werden. Zum Beispiel taucht dieses Problem auf, wenn man in einer Datei namens "Telefon" nach " Huber&Sohn" suchen will. grep Huber&Sohn Telefon funktioniert aber nicht, da das & Zeichen der Shell mitteilt, dass das Kommando hier zu Ende ist und im Hintergrund bearbeitet werden soll. Der Rest der Zeile, naemlich Sohn Telefon wird als ein weiteres Kommando interpretiert. Um der Interpretation des &-Zeichens durch die Shell zu entkommen, kann man zwischen den folgenden Moeglichkeiten waehlen: - Stecke den gesuchten Ausdruck in doppelte Anfuehrungszeichen. Alles in doppelten Anfuehrungszeichen wird woertlich interpretiert. Referenzen zu Shellvariablen werden aber dennoch erkannt. Daher funktioniert diese Methode nicht mit $-Zeichen im Such-Ausdruck. Dateinamen-Ergaenzung (File-Globbing) wird nicht durchgefuehrt. - Stecke den gesuchten Ausdruck in einfache Anfuehrungszeichen. Im Gegensatz zu den doppelten Anfuehrungszeichen werden hier Referenzen zu Shellvariablen nicht erkannt. Dateinamen-Ergaenzung wird ebenfalls nicht durchgefuehrt. - Man kann das &-Zeichen direkt zitieren, d.h. man schreibt das Escape-Zeichen der Shell, den Backslash \ davor. Das Escape-Zeichen bewahrt das direkt folgende Zeichen vor der Interpretation durch die Shell. Dieses Zeichen hat aber nichts mit der ESC-Taste zu tun! Damit das Beispiel von oben funktioniert, kann man demnach verwenden: grep "Huber&Sohn" Telefon grep 'Huber&Sohn' Telefon grep Huber\&Sohn Telefon 6.7 Abhilfe in Notfaellen Wenn ein Prozess definitiv etwas ganz anderes tut, als eigentlich beim Start bezweckt, gibt es mehrere Moeglichkeiten, darauf zu reagieren: - Abwarten und Tee trinken, sofern der Prozess nicht destruktiv ist oder viel Rechenzeit verbraucht. - Unterbrechen des Prozesses durch C-c. Dies unterbricht einfache Kommandos, andere koennen etwa zu ihrer Eingabe-Ebene o.ae. zurueckkehren. - Falls das Programm C-c ignoriert, kann man es mit C-\ versuchen. Dies ist eine staerkere Anfrage an die Maschine als C-c, den Prozess zu unterbrechen und produziert normalerweise einen core dump (deswegen findet man nachher eine Datei namens core im aktuellen Verzeichnis des unterbrochenen Programms. Diese Datei beschreibt den Zustand des Programms beim Abbruch und kann zur Fehlersuche mit einem Debugger benutzt werden). - Kille den Prozess von einer anderen Shell aus. Zunaechst muss man mit ps ux (ps ef in SYSTEM V) eine Liste aller aktiven Prozesse des Benutzers erzeugen und dort die Prozess-Identifikationsnummer (PID) des ungehoerigen Prozesses suchen. Mit kill PID kann der Prozess dann terminiert werden. - Falls Sie ohne Fenster-System arbeiten, sollten Sie den Prozess erst mit C-z stoppen (wenn es ein BSD-System ist). Unmittelbar danach kann mit kill % der soeben gestoppte Prozess terminiert werden. Wurden mehrere Prozesse gestoppt, so muss die entsprechende Jobnummer nach dem %-Zeichen eingegeben werden. Die Jobnummer wird von jobs angezeigt. - Kille den Prozess wirklich. Falls das einfache kill-Kommando wie soeben beschrieben nicht funktioniert hat, wiederholt man das Ganze mit kill -9 PID oder kill -9 %. Falls sich das Terminal sehr eigenartig verhaelt, etwa Eingaben nicht anzeigt oder komische Zeichen ausgibt, muss man die Terminalparameter wieder richtig setzen. Ein derartiges Verhalten kann z.B. das Resultat eines vi-Absturzes sein. Man gebe dann C-jstty saneC-j ein. Es kann sein, dass diese Eingabe nicht am Bildschirm erscheint. Die beiden C-j ersetzen dabei RETURN. Einige Systeme wollen anstelle des stty sane ein reset sehen. 6.8 Shell-Skripts Die Shell kann auch als Programmiersprache verwendet werden. Konstruktionen wie Schleifen, Bedingungen etc. sind dazu vorhanden. Die Kommandos sind fuer die einzelnen Shells verschieden, aber sh, ksh und bash haben eine ziemlich grosse gemeinsame Schnittmenge. Die exakte Syntax findet man in den Manualseiten zu den Shells. Falls man Shell-Skripts schreiben will, ist die Verwendung von sh unbedingt zu empfehlen, da sh garantiert in der Minimalversion auf jeder Unix-Maschine vorhanden ist, so dass sh-Shell-Skripts meistens problemlos auf andere Maschinen portiert werden koennen. Shell-Skripts koennen auch einfach dazu dienen, haeufig verwendete Kommandofolgen in eine Datei zu schreiben, denn alles, was in einer Kommandozeile stehen kann, kann auch in einem Shell-Skript stehen. Angenommen, man hat eine solche Datei, so gibt es zwei Moeglichkeiten, diese als Kommando aufzurufen: - Man ruft das Skript explizit mit der zugehoerigen Shell in der Kommandozeile auf: sh Skript Dazu muss die Datei Skript lesbar sein. - Schreibe in Skript folgende erste Zeile: #!/bin/sh Skript kann nun durch einfaches Angeben des Namens in der Kommandozeile aufgerufen werden. Dazu muss Skript allerdings ausfuehrbar sein. Sind die ersten Zeichen einer Datei #!, so erwartet das System als naechstes den Pfad namen eines Interpreters, z.B. einer Shell, und verwendet diesen Interpreter, um die Datei abzuarbeiten. Auf einigen sehr alten SYSTEM-V-Maschinen funktioniert diese Methode nicht. Es folgen einige Beispiele. Das erste verwendet das find-Programm. Um dieses Skript zu verstehen, ist ein Blick auf die Manualseite fuer find sicher von Nutzen. Das folgende Skript durchsucht das Homedirectory und dessen Unterverzeichnisse nach Dateien, die wahrscheinlich nicht mehr gebraucht werden, wie etwa Sicherungsdateien des emacs-Editors (diese enden auf eine Tilde ~), .dvi, .aux oder .log Dateien aus LaTEX-Laeufen sowie core-Dateien. Core-Dateien werden erzeugt, wenn ein Programm wegen eines schwerwiegenden Laufzeitfehlers abgebrochen werden musste. Diese Dateien sind oft sehr gross und koennen daher viel Plattenplatz verbrauchen. Das gelegentliche Durchfuehren einer solchen Aufraeumaktion hilft, weniger Plattenplatz zu beanspruchen. #!/bin/sh echo Beginne mit Aufraeumen... cd find . \( -name '*~' -o -name '*.log' -o -name '*.dvi' -o -name '*.aux' -o -name core \) -ok rm {} \; echo Aufgeraeumt! Das erste cd stellt sicher, dass man sich zu Beginn des Kommandos im Homedirectory befindet. Das find-Kommando startet im aktuellen Arbeitsverzeichnis (also dem Homedirectory), das durch den Punkt dargestellt wird. Es sucht dort und in allen Unterverzeichnissen nach Dateinamen mit den Eigenschaften, die in den zitierten Klammern in Anfuehrungszeichen angegeben werden. Das -name bedeutet, dass nach dem entsprechenden Namen gesucht werden soll, das -o ist ein logisches Oder. Die Ausdruecke mit den Wildcards muessen in Anfuehrungszeichen stehen, um einer Interpretation durch die Shell vorzubeugen. Das -ok rm {} \; bedeutet, dass find jede gefundene Datei loeschen soll, aber vorher jeweils eine Bestaetigung verlangen muss. Die beiden echo-Kommandos geben informative Meldungen aus. Es folgt ein Skript, das eine Archivdatei der tex- und C- Unterverzeichnisse eines Homedirectories anlegen und komprimieren soll. Eine derartige Datei kann dann als Sicherungsdatei auf einer Diskette oder einer Bandkassette gespeichert werden. #!/bin/sh cd tar cvf - tex C | compress > backup.tar.Z echo backup file: backup.tar.Z Derartige einfache Shell-Skripts sind besonders bei komplizierten Kommandos nuetzlich. Das letzte Beispiel fasst einige der typischen Morgenaktivitaeten einer typischen Benutzerin zusammen und kommentiert diese mit aufmunternden Bemerkungen :-) [ Fussnote: Falls die Bedeutung der letzten drei Zeichen unklar sein sollte: das ist ein Smiley! Einfach den Kopf nach links neigen -- na? Diese Smileys werden in elektronischer Post und in Netnews viel verwendet, um Ironie etc. fuer den Fall zu verdeutlichen, dass es der Leser anders nicht verstanden haette. ] Die # Zeichen leiten Kommentare ein, d.h. der Rest der Zeile wird von der Shell ignoriert. Das Beispiel enthaelt auch eine for-Schleife. #!/bin/sh for i in 1 2 3 # eine for-Schleife in sh von 1 bis 3 do # gehoert zur for-Schleife echo Guten Morgen!!! # gibt "Guten Morgen!" am Bildschirm aus sleep 2 # wartet 2 Sekunden (zum Aufwachen) done # beendet die for-Schleife echo # gibt eine Leerzeile aus echo -n Heute ist # das -n verhindert einen Zeilenumbruch # (nur BSD) date # gibt Datum und Zeit aus echo echo Wer ist hier denn sonst noch um diese fruehe Stunde??? rwho _ more # sieht nach anderen Benutzern im Netz echo echo Und wie geht es dieser Maschine?? uptime # zeigt den Status der Maschine echo echo Was haben wir heute zu tun? cat ~/TO_DO # viele Leute schreiben ihre Aufgaben # in eine Datei wie TO_DO echo Ey, jetzt schau nicht so verschlafen aus der Waesche!! Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 7 Editieren von Dateien Auf den meisten Unix-Systemen stehen zwei komfortable Editoren zur Verfuegung: vi und emacs. Neben diesen beiden gibt es auch noch den zeilenorientierten Editor ed. Um eine Datei nicht-interaktiv zu bearbeiten, koennen sed, awk und perl verwendet werden. Um eine Datei nur anzusehen (ohne sie aendern zu koennen), genuegt das cat-Kommando. cat Dateiname stellt die Datei Dateiname auf einmal am Bildschirm dar. Um diese Datei Seite fuer Seite zu zeigen, verwendet man more Dateiname 7.1 vi vi ist immer noch der am meisten verwendete Editor unter Unix, obwohl er nicht so vielseitig ist wie emacs. Leider gibt es keine gute online-Manualseite, die gedruckten Systemhandbuecher enthalten aber meist eine brauchbare Beschreibung von vi. Zum schnellen Nachschlagen ist die Referenzkarte im Anhang dieser Einfuehrung geeignet. vi wird durch den Aufruf vi Dateiname gestartet. Beschwert sich vi darueber, dass der Terminaltyp nicht bekannt ist, so verlaesst man vi erst einmal durch Eingabe von :q! und setzt die Umgebungsvariable TERM (siehe vorangegangenes Kapitel). Falls Ihnen Ihr Terminaltyp nicht bekannt ist, verwenden Sie einfach den "Standardtyp" vt100. vi kennt drei verschiedene Modi: Eingabemodus (Insert Mode), Kommandomodus (Command Mode) und den Letzte-Zeile-Modus (auch ex-Modus oder :-Modus genannt). Nach dem Aufruf von vi befindet man sich im Kommandomodus, d.h. man kann Kommandos, aber keinen Text eingeben. Um in den Eingabemodus zu wechseln, koennen folgende Kommandos verwendet werden: i Eingabe vor der aktuellen Cursorposition a Eingabe direkt hinter der aktuellen Cursorposition o oeffne eine neue Zeile unterhalb der derzeitigen Cursorposition fuer die Eingabe Weitere Kommandos fuer die Eingabe von Text stehen im Anhang C. Um wieder zurueck in den Kommandomodus zu kommen, was z.B. zum Bewegen des Cursors notwendig ist, drueckt man die Taste ESC. Falls man vergessen hat, in welchem Modus man sich gerade befindet, hilft auch ein Druck auf die ESC Taste, denn anschliessend befindet man sich sicher im Kommandomodus: war vorher Eingabemodus eingestellt, so wird in den Kommandomodus gewechselt, war bereits der Kommandomodus eingestellt, so erklingt ein akustisches Signal und vi bleibt im Kommandomodus. Der Kommandomodus dient der Eingabe einfacher Kommandos, z.B. dem Loeschen einer Zeile oder Cursorbewegungen. Diese Kommandos bestehen immer nur aus wenigen Buchstaben, die nirgendwo angezeigt werden. Komplizier- tere Kommandos, wie z.B. das Ersetzen von Mustern im Text oder das Einlesen eines weiteren Files koennen mit diesen einfachen Kommandos nicht bewaeltigt werden. Dafuer gibt es den Letzte-Zeile-Modus. Um in diesen Modus zu wechseln, tippt man einen Doppelpunkt (daher der Name :-Modus). Damit wird in der untersten Zeile eine Kommandozeile zur Eingabe geoeffnet. Alles bis zum naechsten RETURN wird dann als Kommando interpretiert. Diese Kommandos unterscheiden sich aber von denen im einfachen Kommandomodus. Um die Unterscheidung zu erleichtern, leiten wir in dieser Einfuehrung alle Kommandos fuer den Letzte-Zeile-Modus mit dem Doppelpunkt ein, der diesen Kommandos ja stets vorausgeht. vi unterscheidet Gross- und Kleinschreibung. Da die Kommandos im Kommandomodus bei der Eingabe nicht gesehen werden, hilft es oft, die Position der CAPS LOCK-Taste zu kontrollieren, falls sich vi beharrlich weigert, Ihre Befehle zu verstehen. Eine Tilde am Zeilenanfang bedeutet, dass diese Zeile nicht mehr zur Datei gehoert.Dies erleichtert das Erkennen des Dateiendes. vi wird durch ZZ oder :wq verlassen, wobei alle an der Datei vorgenommenen Aenderungen abgespeichert werden. Falls vi verlassen werden soll, ohne die Aenderungen abzuspeichern, so verwendet man :q!. Die wichtigsten Editierkommandos in vi sind im Anhang C zusammengestellt. 7.2 Emacs Emacs ist wesentlich mehr als nur ein Editor. Er ist eine Programmierumgebung, kann zum Lesen von E-Mail verwendet werden und hat ein komfortables Informationssystem. Bei regelmaessiger Benutzung wird man viele weitere Moeglichkeiten zur Verwendung von emacs entdecken. Es soll Leute geben, die ihren emacs ueber Wochen hinweg nicht verlassen (ausser zum Kaffeekochen, das kann emacs leider immer noch nicht). Die Beschreibung von Emacs in dieser Einfuehrung bezieht sich auf den Emacs der Free Software Foundation. Fuer andere Varianten von Emacs konsultiere man die entsprechenden Handbuecher. [Fussnote: Fuer die Free Software Foundation FSF (manchmal GNU-Projekt genannt) arbeiten Mitarbeiter wissenschaftlicher und kommerzieller Organisationen. GNU-Software ist kostenlos erhaeltlich und wird im Quellcode verteilt. Die Software unterliegt speziellen Copyrightbestimmungen. Die FSF arbeitet langfristig an einem freien Unix. ] Um emacs zu starten, tippt man einfach emacs. Geschieht das zum ersten Mal, so sollte unbedingt mit C-h t das Tutorial aufgerufen werden. In einem ca. halbstuendigen Kurs lernt man damit die Grundzuege von emacs kennen. Einen Ueberblick ueber die wichtigsten Kommandos in emacs bietet die Referenzkarte im Anhang B. Mit dem Kommando C-x C-f, gefolgt vom gewuenschten Dateinamen, werden Dateien eingelesen. Emacs achtet dabei auf besondere Endungen der Dateinamen, wie .c oder .tex, und startet fuer diese Dateien einen passenden Modus. Diese Modi erleichtern das Editieren sehr. Der C-Modus rueckt z.B. den Code automatisch passend ein, waehrend man tippt, der TEX-Modus erlaubt es, zueinander gehoerende $-Zeichen und Klammern zu finden (es gibt spezielle Modi fuer LaTEX, die bequeme Abkuerzungen fuer viele LaTEX- Kommandos bereitstellen). Information ueber den aktuellen Modus erhaelt man mit C-h m. In emacs koennen mehrere Dateien gleichzeitig editiert werden. Jeder Editiervorgang erhaelt einen eigenen Pufferbereich. Zwischen den einzelnen Puffern kann beliebig gewechselt und es koennen Teile hin- und herkopiert werden. Das Informationssystem von emacs wird durch C-h i gestartet. Die wichtigsten Kommandos werden angezeigt. Es gibt dort ein Tutorial ueber das Informationssystem selbst. Des weiteren enthaelt das Info-System meist ausfuehrliche Dokumentation zu emacs und anderer Software der FSF. Um ein editiertes File abzuspeichern, verwendet man C-x C-s. Verlassen wird emacs mit C-x C-c. Dabei wird fuer jedes editierte File gefragt, ob die Aenderungen abgespeichert werden sollen. Fuer den Fall eines System-Crashes legt emacs waehrend des Editierens Sicherheitskopien an. Diese heissen #filename#, wobei filename der Name der editierten Datei ist. Nach explizitem Abspeichern der betreffenden Datei wird die Sicherungskopie geloescht. Falls es einmal noetig sein sollte, eine derartige Sicherungskopie ueber die Shell anzusprechen, muessen die #-Zeichen in Anfuehrungszeichen gesetzt werden, da sie fuer die Shell Kommentarsymbole darstellen. Zusaetzlich zu diesen Sicherheitskopien erzeugt emacs eine Kopie der vorletzten explizit abgespeicherten Version des editierten Files. Diese Backup-Dateien heissen filename~. Sie sind nuetzlich, wenn im Uebereifer in einer Datei zuviel geloescht und diese Version auch noch abgespeichert wurde. Kleinere, noch nicht explizit abgespeicherte Malheurs sind einfach durch wiederholte Anwendung der Undo-Funktion C-x u oder C-_ zu beheben. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 8 Compiler Die gebraeuchlichsten Compiler unter Unix sind: cc Der C-Compiler; haeufig in einer ANSI- und einer nicht-ANSI-Version vorhanden (ANSI-C ist standardisiertes C). gcc Der GNU C-Compiler; gcc kennt ANSI- und nicht-ANSI-C. Siehe auch den Info-Eintrag im emacs. CC C++ Compiler (kann auch andere Namen haben) g++ Der GNU C++ Compiler; er ist mit dem gcc kombiniert. f77 Der FORTRAN-Compiler, meistens deutlich erweitertes Fortran 77. Fortran 90 Compiler sind noch sehr selten; sie werden oft durch f90 aufgerufen. pc Der Pascal-Compiler (kann anders heissen); welchen der vielen Pascal-Dialekte Ihr Compiler versteht, ist (hoffentlich) den Manualen zu entnehmen. Der Compilier-Prozess durchlaeuft folgende Stufen: 1. Praeprozessorlauf. Alle Kommentare werden entfernt. Praeprozessoranweisungen werden eingesetzt, sofern der Compiler diese unterstuetzt (z.B. C-Compiler). 2. Uebersetzen. 3. Optimieren, sofern dies beim Compileraufruf gewuenscht wurde. Nach Compilation und Optimierung liegt ein Assembler-Programm vor. 4. Assemblieren. Dies uebersetzt das Assembler-Programm in eine maschinenlesbare Objektdatei. 5. Binden. Alle erzeugten Objektdateien und notwendigen bzw. angeforderten Bibliotheken werden zusammen zu einer ausfuehrbaren Datei gebunden. Folgende Dateiendungen werden ueblicherweise vom jeweiligen Compiler erkannt: .c C-Quellcode-Datei .cc C++ Quellcode-Datei (manchmal auch auf .C endend) .f FORTRAN-Quellcode-Datei (manchmal auch .f77 oder .for) .p Pascal-Quellcode-Datei ( manchmal auch .pas) .s Assembler-Datei .o compilierte (aber noch nicht gebundene) Objektdatei .i C-Quellcode-Datei nach dem Praeprozessorlauf (wird durch Aufruf des Compilers mit -P erzeugt) Folgende Optionen werden von den meisten Compilern erkannt. Compileroptionen muessen getrennt angegeben werden, jede einzelne mit einem Minuszeichen davor. Die Optionen werden durch ein Leerzeichen getrennt. Wegen der genauen Anordnung der Optionen und der erwarteten Argumente ist ein Blick auf die Manualseiten erforderlich. Nach der Auflistung der Optionen geben wir einige typische Beispiele an. -O Erzeugt optimierten Code; das so generierte ausfuehrbare File ist wesentlich schneller. Oft kann zwischen verschiedenen Optimierungsstufen gewaehlt werden. Allerdings koennen die Optimierungsalgorithmen eines Compilers fehlerhaft sein. Deswegen sollte die Optimierung waehrend der Entwicklungsphase eines Programmes eher vorsichtig oder gar nicht eingesetzt werden. -g Erzeugt zusaetzliche Informationen, die benoetigt werden, um ein Programm mit einem Quellcode-Debugger zu untersuchen (siehe weiter unten). -c Die Datei wird compiliert, aber nicht gebunden. Die resultierende Objektdatei hat die Endung .o . -o Name Nennt das ausfuehrbare File Name und nicht a.out, wie der voreingestellte Wert lautet. -l Bibliothek Bindet die Objektdatei mit der angegebenen Bibliothek zusammen. Will man z.B. mathematische Funktionen verwenden, so muessen die Objektdateien mit der Mathematik-Bibliothek libm.a gebunden werden. Da alle Bibliotheken Namen der Form libx.a haben, muss nur der Teil x beim Aufruf unmittelbar nach dem -l angegeben werden. Deswegen bindet man die Mathematik- Bibliothek mit der Option -lm (siehe auch das Beispiel weiter unten). Bei der Angabe mehrerer Bibliotheken, die voneinander abhaengen, ist darauf zu achten, dass eine Bibliothek, die Informationen einer anderen Bibliothek verwendet, vor dieser dazugebunden wird. Um die Datei erster_Versuch.c mit cc zu uebersetzen, wobei optimiert werden soll, aber nicht gebunden, gibt man an: cc -O -c erster_Versuch.c Um die Datei expo.c mit gcc zu uebersetzen, wobei neben der Anlage von Symboltabellen die Mathematik-Bibliothek dazugebunden werden und die ausfuehrbare Datei expo heissen soll, verwendet man: gcc -g -o expo expo.c -lm In der Regel tut ein Programm beim ersten Testlauf nicht genau das, was von ihm erwartet wird. [Fussnote: Manche Leute meinen, das waere eine pessimistische Haltung; ich jedenfalls traue einem Programm ueberhaupt nicht, das beim ersten Mal wirklich zu tun scheint, wofuer es geschrieben wurde. Es liegt ganz sicher nur ein besonders gut versteckter und hinterhaeltiger Fehler vor (Eine Abwandlung von Murphy's Gesetzen: :):! ] Um rein syntaktische Fehler in einem C-Programm zu finden, verwendet man den Syntaxpruefer lint. Aehnliche Pruefprogramme gibt es auch fuer andere Programmiersprachen, allerdings sind sie z.B. fuer FORTRAN leider nicht so verbreitet. Ein Quellcode-Debugger erlaubt es, Schritt fuer Schritt durch ein Programm zulaufen, die Werte von Parametern zu ueberpruefen usw., waehrend gleichzeitig der entsprechende Quellcode angezeigt wird. Leider unterstuetzen viele Debugger auf Unix-Systemen nur C, allerdings scheint sich das langsam zu verbessern. Auf den meisten Unix-Systemen ist der Debugger dbx verfuegbar, auf manchen auch nur der weniger maechtige sdb. Sehr gute Debugger sind die frei erhaeltlichen Debugger gdb und ups sowie einige kommerzielle Produkte. [Fussnote: Die Hersteller von Betriebssystemen gehen leider teilweise dazu ueber, die Unix-typische Entwicklungsumgebung nicht mehr mit dem Betriebssystem auszuliefern, sondern gesondert zu verkaufen. Falls Ihr System dazu gehoert, muessen Sie entweder die entsprechenden Entwicklungspakete kaufen oder die frei erhaeltlichen Pakete (z.B. der FSF) auf Ihren Anlagen installieren oder installieren lassen. ] Um diese Quellcode-Debugger verwenden zu koennen, muss das zu untersuchende Programm mit der -g Option uebersetzt worden sein. Viele Compiler lassen die gleichzeitige Verwendung der Optionen -g und -O nicht zu. Da aber ein Optimierer ohnehin den Fluss eines Programmes sehr veraendern kann, ist dies auch nur in wenigen Faellen wirklich wuenschenswert. Um die Compilierung einfacher und angenehmer zu machen, gibt es das Programm make (siehe Anhang A). Mit make kann das Uebersetzen weitgehend automatisiert werden, was insbesondere bei groesseren Programmierprojekten essentiell ist. Um die Entwicklung mehrerer Programmversionen unter Kontrolle zu halten, existieren Programme wie SCCS oder RCS. Damit koennen aeltere Versionen von Programmen platzsparend gespeichert und leicht wiederhergestellt werden. Diese Programme sind nicht auf allen Systemen verfuegbar. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 9 Arbeiten mit dem Netzwerk Das Netz wurde in dieser Einfuehrung ja schon einige Male erwaehnt: man kann sich darueber an einer entfernten Maschine einloggen etc. Es gibt verschiedene Arten von Netzwerken. Die Unterschiede zwischen den einzelnen Netzen basieren dabei weniger auf unterschiedlichen physikalischen Kabeln, sondern auf den verschiedenen Protokollen, die in diesen Netzen gesprochen werden. Einige bekannte Netze sind BITNET, HEPNET, SPAN (die beiden letzten sind DECnet-Netze) und natuerlich das Internet mit der TCP/IP-Protokollsuite. Es gibt eine Standard-Protokollfamilie, naemlich OSI; sie ist jedoch weltweit noch nicht besonders verbreitet. Derzeit ist TCP/IP am meisten verbreitet, was nicht zuletzt daran liegt, dass jedes moderne Unix eine TCP/IP-Implementation enthaelt. In den folgenden Kapiteln beschraenken wir uns daher auf Anwendungen, die auf der TCP/IP-Protokollsuite aufbauen. 9.1 Domain-Namen Netzwerk-Anwendungen verlangen, dass eine Maschine beim Namen genannt wird. Jede Maschine hat einen eindeutigen Namen, den sog. Domain-Namen. Diese Namen haben folgende Form: Machine.Subdomain1....Subdomainn.Top-Level-Domain Er besteht aus dem eigentlichen Maschinennamen und diversen Subdomains, alles voneinander durch Punkte getrennt. Die letzte Domain in diesem Namen ist die Top-Level-Domain. Jedem Land, das am Domainnamen-System teilnimmt, wird eine solche Top-Level-Domain zugewiesen, ueblicherweise der ISO-2-Buchstaben-Laendercode. Zusaetzlich gibt es sieben Top-Level-Domains, die eher organisatorische Gesichtspunkte beruecksichtigen: EDU Institutionen aus Forschung und Lehre COM kommerzielle Institutionen ORG nicht-kommerzielle Organisationen GOV Regierungseinrichtungen; das koennen auch nationale Forschungslaboratorien sein MIL militaerische Einrichtungen NET groessere Einrichtungen von Netzwerkbetreibern ARPA historisch; wird kaum verwendet Einige der Laendercodes sind AU Australien AT Ossterreich CH Schweiz DE Deutschland DK Daenemark FI Finnland FR Frankreich IL Israel IT Italien JP Japan KR Suedkorea MX Mexiko NL Niederlande NO Norwegen SE Schweden UK Grossbritannien Die USA haben zwar den Laendercode US, er wird aber fast nicht verwendet, da sich die USA hauptsaechlich der sieben organisatorischen Domains bedienen. Diese Domains werden aber auch von anderen Laendern genutzt. Fuer lokale Netzwerke werden oft Aliasnamen definiert, damit beim Adressieren einer lokalen Maschine nicht immer der lange Domainname getippt werden muss. So koennte die Maschine Herz_aus_Gold.Magrathea.Universum im lokalen Netz als Herz_aus_Gold angesprochen werden. 9.2 Login auf entfernten Maschinen Die beiden Programme fuer entfernten Login, telnet und rlogin, wurden bereits in Kapitel 2.3 besprochen. Hier wollen wir daher nur auf die Hauptunterschiede zwischen den beiden eingehen. - rlogin funktioniert nur zwischen Unix-Maschinen. Um sich an einer nicht-Unix-Maschine einzuloggen, braucht man telnet. - Um zu sehr weit entfernten Maschinen eine Verbindung aufzubauen, sollte telnet verwendet werden. In der Regel wird bei solch einer Verbindung naemlich jeder einzelne Buchstabe in ein Datenpaket verpackt (das wesentlich mehr Platz braucht als der einzelne Buchstabe, da dort zusaetzlich Informationen ueber Absender, Adressat etc. enthalten sind) und uebers Netz geschickt. Es waere natuerlich viel oekonomischer, jeweils eine ganze Zeile zu verschicken. Wenn die Leitung schlecht ist (was in Deutschland ausserhalb lokaler Netze fast ueberall der Fall ist, und damit natuerlich auch bei Verbindungen in andere Laender), wird dies eine essentielle Frage. Das Verschicken der Einzelbuchstaben belastet dann die ohnehin schon ueberlasteten Strecken unnoetig. telnet ermoeglicht das Verschicken ganzer Zeilen im sog. Zeilenmodus, d.h. die ganze Zeile wird auf der lokalen Maschine bearbeitet (also auch eventuelle Korrekturen) und nach der Eingabe von RETURN verschickt. Um in den Zeilenmodus zu gelangen, startet man telnet und tippt das Escape-Zeichen von telnet, meist C-], gefolgt vom Kommando mode line. Dieser Modus kann aber nicht fuer Editoren verwendet werden, da diese auf buchstabenweise Verarbeitung der Eingabe angewiesen sind. Um zurueck in den buchstabenorientierten Modus zu schalten, wird das Escape-Zeichen gefolgt von mode character angegeben. - Mit rlogin kann man sich an anderen Maschinen einloggen, ohne ein Passwort anzugeben, indem man in eine Datei namens .rhosts, die im Homedirectory anzulegen ist, die Maschinen eintraegt, von denen aus ein rlogin ohne Passwort gestattet wird. Aus Sicherheitsgruenden wird dringend empfohlen, diesen Mechanismus so wenig wie moeglich zu verwenden: wird naemlich eine der "vertrauenswuerdigen" Kennungen von einem Eindringling geknackt, so sind damit auch alle Kennungen, die rlogin ohne Passwort von dieser Maschine aus erlauben, fuer den Eindringling offen. Eine .rhosts Datei ist auch dann nicht akzeptabel, wenn sie sich auf Maschinen eines lokalen Netzes beschraenkt, auf denen man ohnehin automatisch dasselbe Passwort hat. Auf jeden Fall sollte die Datei .rhosts die Zugriffs- berechtigung 400 haben, d.h. nur fuer den Benutzer selbst lesbar. - Mit telnet kann man noch eine ganze Menge mehr tun als sich lediglich auf entfernten Maschinen einloggen (siehe die Manualseiten zu telnet). 9.3 Uebertragung von Dateien Es gibt zwei Programme zur Dateiuebertragung: rcp und ftp. Die Verwendung von rcp wird nicht empfohlen, da es ein .rhosts File mit den entsprechenden Eintraegen benoetigt. Eine ftp-Sitzung des Benutzers arthur koennte so beginnen: $ ftp Herz_aus_Gold.Magrathea.Universum Connected to Herz_aus_Gold.Magrathea.Universum 220 Herz_aus_Gold FTP server (UNIVERSE OS 77.1) ready. Name (Herz_aus_Gold.Magrathea.Universum:arthur): arthur 331 Password required for arthur. Password: 230 User arthur logged in. ftp> Der Name der Maschine, mit der Verbindung aufgenommen werden soll, wird als Argument zum ftp-Kommando gegeben. Anschliessend muss der Loginname auf dieser Maschine und das zugehoerige Passwort angegeben werden. Danach erwartet ftp ftp-Kommandos. Ein ? listet die moeglichen Kommandos auf. Einige wichtige davon sind ls oder dir Liste das Verzeichnis auf der entfernten Maschine. cd dirname Wechsle ins Verzeichnis dirname auf der entfernten Maschine. lcd dirname Wechsle ins Verzeichnis dirname auf der lokalen Maschine. binary Uebertrage die Dateien im Binaermodus. Dies ist bei laengeren Dateien nuetzlich, da es schneller ist. Binaermodus sollte daher wenn mindestens eine der beiden Maschinen keine Unix-Maschine ist. ascii Schaltet den Uebertragungsmodus von binaer wieder auf den vor eingestellten Wert zurueck. hash Druckt sog. "hash"-Zeichen (#) waehrend des Dateitransfers, um die Geschwindigkeit des Transfers anzuzeigen. Die Menge der uebertragenen Information, die einem hash-Zeichen entspricht, haengt vom ftp-Server ab. get fname Hole Datei fname von der entfernten an die lokale Maschine. put fname Lege die Datei fname der lokalen Maschine auf die entfernte Maschine. mget fileliste Hole alle Dateien in der fileliste von der entfernten auf die lokale Maschine. mput filelist Lege alle Dateien in der fileliste von der lokalen auf die entfernte Maschine. prompt Schalte den interaktiven Modus ein bzw. aus. Dies ist nuetzlich bei Verwendung von mget und mput, die sonst naemlich bei jeder einzelnen Datei, die sie uebertragen sollen, eine Bestaetigung verlangen. quit Schliesse die Verbindung und beende die ftp-Sitzung. Binaerzahlen und Fliesskommazahlen in maschineninterner Darstellung koennen zwischen Maschinen verschiedener Architektur (z.B. zwischen einer DECStation und einer SUN SPARCstation) nicht uebertragen werden. [ Fussnote: Bitte hier auf den Unterschied zwischen einer maschineninternen Fliesskommadarstellung, wie sie z.B. durch den fwrite-Befehl in C erzeugt wird, und einer Fliesskommazahl, die wie Text (z.B. 3.2) abgespeichert wird, achten. Letztere sind natuerlich fuer die Maschine Text und daher auch zwischen verschiedenen Architekturen problemlos zu uebertragen. ] Manche Computerinstallationen am Netz stellen anonymen ftp zur Verfuegung. An diesen Orten gibt es Archive, in denen freie Software abgelegt wird. Auf die Dateien solcher Archive kann man durch anonymen ftp zugreifen, ohne eine Benutzerkennung auf dieser Maschine zu haben. Dazu wird als Benutzername anonymous oder ftp abgegeben, als Passwort die E-Mail-Adresse (!). NIEMALS hier das eigene Passwort angeben! [ Fussnote: Falls das versehentlich doch einmal geschieht, sollten Sie sofort Ihr Passwort aendern, da die Eingabe von Benutzerkennung und Passwort an ftp-Servern i.d.R. protokolliert werden. ] Informationen ueber anonyme ftp-Server erhaelt man meistens aus den NetNews (siehe unten). Bevor man allerdings Dateien von einem weit entfernten ftp-Server holt, sollte man sich in lokalen Archiven umsehen. Anonymer ftp gehoert zu den Dingen, die ohnehin stark ausgelastete Netze noch weiter belasten. Auch das viel erwaehnte Programm archie, das Informationen ueber anonyme ftp-Server von archie-Servern holt, belastet das Netz. An vielen Orten wurden daher sehr gut ausgestattete, lokale Archive installiert, die Dateien wichtiger Archive jede Nacht transferieren. Auf solche Archive sollte man zuerst zugreifen. Im Zweifelsfall kann die Systemverwalterin welche nennen. 9.4 Elektronische Post Das Netz ermoeglicht das Versenden und Empfangen elektronischer Post (E-Mail). Es gibt eine Reihe von Programmen, die den Umgang mit E-Mail ermoeglichen. Einfache Programme sind mail oder mailx, die mit beinahe jedem Unix-System ausgeliefert werden. Im emacs steht rmail zur E-Mail-Bearbeitung zur Verfuegung. Dies wird durch ESC x rmail im emacs gestartet. C-h m gibt eine Uebersicht ueber die Kommandos. Andere komfortable Mail-Programme sind mh und elm. Welche dieser Programme vorhanden sind, ist von System zu System verschieden. Daher werden wir hier auf die Benutzung der verschiedenen Programme nicht eingehen. Es gibt allerdings einige generelle Dinge, die fuer die Benutzung von E-Mail nuetzlich zu wissen sind. Zunaechst einmal braucht man die Adresse der Person, der E-Mail geschickt werden soll. Nehmen wir im Moment an, dass diese Person Zugang zum Internet hat. Die E-Mail-Adresse hat dann folgende Form: name@domainname name ist der Name der Mailbox, das ist so etwas wie ein Briefkasten fuer E-Mail. Auf Unix-Systemen wird dafuer gewoehnlich der Loginname der Benutzerin verwendet. Einige Systeme erlauben es, den vollen Namen des Benutzers zu verwenden. Es gibt noch andere Mailboxen, z.B. Namen von Mailing-Listen, bei denen die E-Mail, die in dieser Mailbox ankommt, an eine Liste von anderen Mailboxen weiterverteilt wird. domainname ist der Domainname, ueber den die Mailbox erreicht werden kann. Das muss nicht unbedingt der Name des Rechners sein, an dem der Empfaenger meistens arbeitet. Deswegen muss einem dieser Domainname mitgeteilt werden. Manchmal ist der Domainname auch ein Aliasname, der von dem Ort definiert wird, zu dem Mail geschickt werden soll. Das geschieht haeufig, um kuerzere Mailadressen zu erhalten, die man sich besser merken kann (siehe das cc: Feld im Mailkopf unten als Beispiel). Ein typischer Mailkopf sieht etwa so aus (abgesehen von Modifikationen, die von Mailprogramm und lokaler Konfiguration abhaengen): To: juser@foo.bar.edu cc: arthur@magrathea.universe Bcc: mein_loginname Subject: Demonstration Hier folgt der eigentliche Text der Mail. To: ist der Adressat, cc: sind Adressen, die eine Kopie der E-Mail erhalten sollen. Diese Adressen erscheinen im Kopf jeder E-Mail, die verschickt wird. Das Bcc: Feld (Blind carbon copy) enthaelt Adressen, die eine Kopie erhalten sollen, aber nicht in den Koepfen der verschickten Mails auftauchen. Meist wird das verwendet, um sich selbst eine Kopie der Mail zu schicken. Da im lokalen Netz ueblicherweise kein Maschinenname in der Mail-Adresse erscheinen muss, genuegt es, hier den eigenen Loginnamen einzusetzen. Im voreingestellten Mail-Kopf, den Ihr Mailprogramm automatisch erzeugt, wird vermutlich nur entweder cc: oder Bcc: auftauchen. Trotzdem koennen beide verwendet werden. Alle Adressfelder koennen mehrere Adressen enthalten. Die einzelnen Adressen werden durch ein Komma voneinander getrennt. Ist die E-Mail verschickt, so findet keine Benachrichtigung statt, ob die Mail korrekt angekommen ist. Die Tatsache, dass die eigene Kopie ankommt, bedeutet nicht, dass auch andere Empfaenger die Mail erhalten haben. Allerdings wird man ueblicherweise informiert, falls die Mail nicht ausgeliefert werden konnte. Erhaelt man innerhalb einiger Tage keine solche Misserfolgsmeldung, kann man ziemlich sicher sein, dass die E-Mail beim Empfaenger angekommen ist, was aber nicht bedeutet, dass die Nachricht auch gelesen wurde. Mit Hilfe des Kommandos finger kann manchmal abgefragt werden, ob jemand seine Mail gelesen hat. Siehe Kapitel A.13. Falls die Auslieferung fehlschlaegt, erhaelt man die Mail mit einem Kommentar= ueber die Ursache des Problems zurueck. Einige haeufige Gruende sind: unknown user Der angegebene Benutzername passte zu keiner Mailbox an dem Ort, wohin die Mail geschickt wurde. Moeglicher- weise haben Sie sich beim Mailboxnamen verschrieben. unknown host Der Domainname konnte nirgends gefunden werden. host has been down for Die Maschine, die die Mail fuer den an gegebenen Domainnamen verwaltet, wurde zwar gefunden, reagiert aber derzeit nicht auf Mailtransfers (z.B. weil sie defekt ist). Soll einer Person E-Mail geschickt werden, die keinen Zugang zum Internet hat, wohl aber zum BITNET, so verwende man einfach die BITNET-Adresse und haenge ein .bitnet hinten dran. Einige Mail-Adressen enthalten % Zeichen, z.B. Name%host1@host2.domain Das bedeutet lediglich, dass die Mail durch ein Gateway (hier host2) laufen muss und ist fuer den Sender der Mail unwichtig. So eine Adresse wird wie jede andere Internet-Adresse behandelt. Mailadressen der folgenden Formen koennen hingegen sehr wohl Probleme bereiten: hostn! ... host2!host1!name ist eine UUCP-Adresse. Die einfachste Umsetzung in eine Internet-Adresse ist name@host1.uucp Falls das nicht funktioniert (ziemlich wahrscheinlich), muss mindestens ein Gateway in der Mailadresse angegeben werden. Versuchen Sie etwas in der Art name%host1%host2 ...hostn-1@hostn.uucp oder hostn-1!hostn-2!....host2!host1!name@hostn.uucp oder fragen Sie Ihren lokalen Mail-Guru. host::name ist eine DECnet-Adresse. Diese Adressen sind schwer in Internet-Adressen umzusetzen, falls es ueberhaupt moeglich ist. Am besten laesst man sich eine andere Adresse von dieser Person geben! 9.5 NetNews Es gibt ein weltweites Informationssystem, das NetNews oder ganz einfach News genannt wird. Dieses System beinhaltet weit mehr als tausend thematisch geordnete Newsgruppen, deren Themen von rein technischen Computerangelegenheiten ueber politische Information bis hin zu Freizeittips und Witzen reichen. Wie viele Newsgruppen tatsaechlich zur Verfuegung stehen, haengt von der lokalen Installation ab. Um News zu lesen, braucht man ein spezielles Programm, einen Newsreader. Es gibt davon ziemlich viele und jeder funktioniert selbstverstaendlich anders als alle anderen. Man informiere sich, welche Newsreader an der lokalen Installation vorhanden sind und wie sie benutzt werden. Doch Vorsicht! Liest man zum ersten Mal News, kann es durchaus passieren,dass alle Newsgruppen als abonniert erklaert werden und die freundliche Meldung auftaucht "there are 120.000 unread articles". Natuerlich kann man Newsgruppen abbestellen. 9.6 Das lokale Netz Das Netz ist nicht nur fuer Login an entfernte Maschinen oder E-Mail wichtig. Auch an Orten, die gar nicht an einem externen Netz angeschlossen sind, gibt es oft ein lokales Netz zwischen den eigenen Maschinen, um die Arbeit damit angenehmer fuer die Benutzer zu machen. Das wird vor allem ueber folgende Mechanismen erreicht: - Netzwerk-Informations-System (NIS), frueher YP (Yellow Pages). [ Fussnote: NIS/YP und NFS wurden von SUN Microsystems entwickelt und von vielen anderen Herstellernlizensiert. Beide sind heutzutage Standard. ] NIS haelt Informationen ueber die Benutzer, wie sie etwa im Passwort-File vorhanden sind, an einem (oder auch mehreren) zentralen NIS-Servern im Netz. Die Dateien sind allen anderen Maschinen zugaenglich. Auf diese Weise sind Passwort und Login-Shell auf allen Maschinen identisch, die in der gleichen NIS-Domain sind und daher ihre Informationen vom gleichen NIS-Server beziehen. Aendert man Passwort oder Login-Shell auf irgendeiner dieser Maschinen, so wird diese Aenderung auf dem NIS-Server gespeichert und ist damit allen Maschinen in dieser NIS-Domain bekannt. - Das Netzwerk-File-System (NFS) erlaubt es, Festplattenplatz ueber das Netz auf verschiedenen Maschinen verfuegbar zu machen. Das ist besonders wichtig fuer das Homedirectory. Mit NFS ist es moeglich, dass Ihr Homedirectory auf allen Maschinen am lokalen Netz dasselbe ist. Physikalisch liegt das Homedirectory auf einer Festplatte, die an einer Maschine, einem sog. Fileserver, haengt. Andere Maschinen koennen diese Platte mounten (vom entsprechenden Befehl mount), so dass sie an diesen Maschinen wie eine lokale Platte verfuegbar ist. Dieser Mechanismus wird auch fuer Anwendungsprogramme verwendet, da es wesentlich einfacher ist, ein einzelnes Programm auf einem Fileserver auf dem aktuellen Stand zu halten als viele lokale Kopien. Oft ist nur ganz wenig Software tatsaechlich lokal an den einzelnen Maschinen vorhanden, waehrend der Rest auf Platten an einem Fileserver gespeichert und ueber NFS zugaenglich gemacht wird. - Drucken kann ein netzwerkweiter Service sein. Dies gestattet, jeden Drucker im lokalen Netz anzusprechen, egal an welcher Maschine er tatsaechlich angeschlossen ist. Ein lokales Netz muss nicht so aussehen wie gerade beschrieben. Allerdings werden Sie es ausgesprochen angenehm finden, wenn es das tut. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 10 Sicherheit 10.1 Warum Sicherheit? Von vielen Benutzern wird Sicherheit als voellig unwichtig und laestig abgetan. Eindringlinge werden als Problem militaerischer Installationen betrachtet. Und schliesslich: wer koennte denn schon etwas mit meiner Benutzerkennung anfangen? So einfach ist die Sache leider nicht. Gibt es schon im lokalen Netz Sicherheitsregeln zu beachten, so gilt das in ungleich hoeherem Ausmass fuer Installationen, die an grosse Netze angeschlossen sind. Doch da die Risiken oft nicht wahrgenommen werden wollen, werden wir hier ein paar der Probleme aufzeigen, vor denen man sich schuetzen sollte. - Ein Arbeitskollege ueberschreibt versehentlich eine Ihrer Dateien, deren Zugriffsberechtigung zu grosszuegig gesetzt war. - Die Putzkolonne schaltet versehentlich eine Maschine aus. Beim Reboot zeigt sich, dass die Daten auf der Festplatte nicht mehr gerettet werden koennen. Die Sicherheitskopie dieser Datei kann nicht gelesen werden, weil die Backup-Routine fehlerhaft ist und nie jemand die Korrektheit dieser Routinen ueberprueft hat. - In einer kleinen Firma ist das Systemverwalter-Passwort Allgemeingut. Eine neue Kollegin startet ein rm-Kommando versehentlich als Systemverwalterin in einem Systemverzeichnis. Wenn Sie besonderes Pech haben, muss das Betriebssystem neu installiert werden, doch niemand von Ihnen hat das Wissen, um so weitgehende Systemverwaltungsaufgaben korrekt zu erledigen. - Ein Kollege ist wuetend auf Sie und nuetzt Ihr unbeaufsichtigtes Terminal, um einer anderen Kollegin beleidigende E-Mail mit Ihrer Benutzerkennung zu schreiben. Anschliessend loescht er Ihren neuesten Report. Diese Probleme koennen sehr wohl in einer Installation auftreten, die von den grossen Netzen weit entfernt ist. In dem Moment, wo es jemanden gibt, der bewusst Schaden anrichten will oder dies aus Unkenntnis tut, muessen Sie Sicherheitsvorkehrungen getroffen haben. Sonst koennen Sie empfindliche Verluste erleiden. Wesentlich gravierender wird das Problem, wenn Sie an einem grossen Netz angeschlossen sind. Dann naemlich sind Sie offen fuer weltweite Attacken. Und denken Sie nicht, dass Ihre unbedeutende Computerinstallation fuer einen Cracker uninteressant ist! [ Fussnote: Insider verwahren sich sehr gegen den von den Medien bevorzugten Terminus "Hacker" imZusammenhang mit illegalen Eindringlingen. Diese werden "Cracker" genannt. Als "Hacker" werden all jene bezeichnet, die Spass daran haben, unter die Oberflaeche eines Computersystems zu schauen. Und das ist meistens ganz und gar nicht mit illegalen Taetigkeiten verbunden. ] Ein schlecht gewartetes System, in das leicht eingedrungen werden kann, ist naemlich ein idealer Stuetzpunkt fuer Leute, die ihre Spur verwischen wollen. Und dann gibt es noch eine Menge Cracker, die einfach ihre "Macht" beweisen wollen, indem sie die Arbeit anderer Menschen zerstoeren. Sie haben also allen Grund, sich zu schuetzen. 10.2 Sicherheitsregeln fuer Benutzer Der Schutz des Systems umfasst mehrere Ebenen: - Schutz der Hardware. Das ist Sache der Systemverwalter und umfasst Dinge wie die Installation unterbrechungsfreier Stromversorgungen, feuersichere De ponierung von Backup-Baendern u.ae. - Schutz des Systems auf Superuser-Ebene. Das ist natuerlich auch Sache der Systemverwaltung. - Schutz des Systems auf Benutzerebene. Das geht Sie an. Als Benutzer koennen Sie in erster Linie Ihre Benutzerkennung schuetzen und darauf achten, ob Ihnen Dinge auffallen, die auf moegliche Eindringlinge hinweisen. Die meisten dieser Massnahmen bedeuten fuer Sie wenig zusaetzlichen Aufwand und gehoeren bald zur taeglichen Routine. Auf einige dieser Massnahmen wurde in dieser Einfuehrung auch schon hingewiesen. - Ihre Kennung wird zuallererst durch Ihr Passwort geschuetzt. Deswegen sollten Sie unbedingt ein gutes Passwort waehlen (s.a. Kapitel 2.1). Bei vielen Installationen an grossen Netzen ist es Crackern moeglich, das verschluesselte Passwort zu erlangen und dann in aller Ruhe mit einem Passwort- Suchprogramm zu bearbeiten. Aendern Sie Ihr Passwort von Zeit zu Zeit. Aendern Sie es auf jeden Fall, wenn Sie glauben, jemand anders kennt Ihr Passwort! Halten Sie Ihr Passwort geheim und waehlen Sie auf verschiedenen Rechner verschiedene Passworte. - Ein weiterer einfacher Schutz sind die Zugriffsberechtigungen (s. Kapitel 5.5). Wenn Dateien nicht von anderen gelesen werden muessen, dann machen Sie sie auch nicht lesbar oder gar schreibbar fuer andere! Hat jemand in einem Ihrer Verzeichnisse Schreibzugriff, so ist es fuer diese Person unter bestimmten Voraussetzungen moeglich, Programme zu installieren, die unbeschraenkten Zugriff auf all Ihre Dateien verschaffen koennen. - Verwenden Sie keine .rhosts-Dateien. - Lassen Sie Ihren Bildschirm nicht einfach in oeffentlich zugaenglichen Raeumen stehen, wenn Sie noch eingeloggt sind und kurz weggehen. Es gibt Programme (z.B. xlock), die ein Bild auf den Schirm werfen oder ihr Terminal sperren und Eingaben erst wieder zulassen, nachdem Sie Ihr Passwort eingetippt haben. - Achten Sie beim Einloggen darauf, ob die Ihnen angezeigte letzte Login-Zeit stimmt. Wenn nicht, koennte Ihre Kennung von jemand anderem benutzt worden sein. - Achten Sie auf Ihre Dateien. Findet sich darunter etwas, was Sie sicher nicht dorthin getan haben, so wenden Sie sich an Ihre Systemverwalterin. Meistens werden Dateien, die von Crackern hinterlassen werden, als "unsichtbare" Dateien angelegt, die mit einem Punkt beginnen. - Legen Sie eigene Backups an und ueberpruefen Sie von Zeit zu Zeit, ob Sie diese auch wieder lesen koennen. Niemand sollte hysterisch werden, wenn es um Computersicherheit geht. Seien Sie sich darueber im klaren, dass der einzig wirklich sichere Computer der ist, der ausgeschaltet in einem Safe steht. Sie koennen Ihren Computer nicht voellig sicher machen, aber Sie koennen eine ganze Menge tun, um die Sicherheit zu erhoehen. Es gibt viele Mechanismen, die weit ueber die hier gegebenen Tips hinausgehen. Wenn Sie sich naeher ueber das Thema Sicherheit informieren wollen, lesen Sie eines der Buecher, auf die im Anhang E hingewiesen wird. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. 11 Das X-Window-System Das X-Window-System ist ein frei erhaeltliches Window-System, das am MIT entwickelt wurde. Es laeuft auf vielen verschiedenen Plattformen und gestattet es, sich Fenster ueber das Netz von einer anderen Maschine oeffnen zu lassen. Die Portabilitaet und die Netzwerkfaehigkeit von X machen es anderen Window-Systemen (wie etwa Sunview) ueberlegen. Es gibt einige graphische Oberflaechen (z.B. Openwindows und Motif), die auf X aufbauen und daher aehnlich zu benutzen sind. Die derzeit aktuelle Version von X ist X11, momentan Release 5 (oft als X11R5 bezeichnet). Die folgenden Ausfuehrungen beziehen sich auf X11. In graphischen Oberflaechen, die auf X11 aufbauen, haben die Kommandos oft andere Namen und Optionen. Die prinzipielle Funktionsweise ist aber dieselbe. Loggt man sich an einer X-faehigen Maschine ein, so erfolgt oft schon der Loginunter X und nach dem Einloggen erscheinen dann meistens mehrere Fenster. An manchen Systemen muss X erst gestartet werden. Das dafuer notwendige Kommando ist oft so etwas wie xinit oder xstart, eine feste Regel gibt es jedoch nicht. Es gibt viele Anwendungen unter X: fflder xterm Terminal-Emulator (das sind die netten Fenster, in denen man Kom mandos absetzen kann); ein ganz einfaches xterm wird mit dem Kommando xterm & gestartet. ffldiverse Window-Manager; diese kuemmern sich um die (Un)Ordnung der Fen ster sowie deren funktionelle und dekorative Verzierungen. ffleinige huebsche kleine Programme, z.B. die Uhr xclock oder xbiff, ein Pro gramm, das visuell und akustisch ueber neue E-Mail informiert. ffleine Vielzahl von Programmen fuer Desktop-Publishing (z.B. FrameMaker oder Publisher), Tabellenkalkulation (z.B. Wingz) etc. 11.1 Die Rolle der Maus 37 fflGraphik-Programme; davon gibt es sehr viele. Einige gebraeuchliche, frei er haeltliche Programme sind das Zeichenprogramm xfig, das Daten-Darstel lungsprogramm xvgr und das ganz hervorragende Programm khoros, das Bild verarbeitung, Datenanalyse und graphisches Programmieren miteinander ver bindet. Ebenso ist eine Vielzahl kommerzieller Graphik-Pakete erhaeltlich. fflmit X kann man sich selbst die graphischen Oberflaechen von Programmen zusammenstellen Viele Dinge um X herum, z.B. welcher Window-Manager verwendet wird oder welche Graphikprogramme zur Verfuegung stehen, sind voellig von der lokalen Installation abhaengig und werden daher hier nicht diskutiert. Auf den folgenden Seiten werden einige grundlegende Dinge zu X erklaert, so dass es Ihnen moeglich sein sollte, sich durch Ihr lokales System durchzukaempfen - auch wenn es sich dabei um einen wahren XDschungel handeln sollte! 11.1 Die Rolle der Maus Sitzt man vor einem X-Window-Bildschirm mit einigen offenen Fenstern, so sieht man, dass das Bewegen der Maus den sog. Mauscursor ueber den Bildschirm bewegt. Wenn er sich innerhalb eines Fensters befindet, so kann dieses als aktiv, d.h. zur Eingabe bereit, markiert werden. So eine Markierung erfolgt etwa ueber einen Farbwechsel der Titelleiste. Manche Window-Manager verlangen hingegen, dass ein Fenster durch eine zusaetzliche Aktion wie das Druecken eines Mausknopfes aktiviert wird. Wenn kein Fenster aktiv ist und man dennoch eine Eingabe versucht, so geschieht ueberhaupt nichts. Der reine Hintergrund, auf dem sich all die Fenster und sonstigen Anwendungenbefinden, heisst Root Window. Die Wirkung, die durch das Druecken einer der drei Maustasten erzielt wird, haengtvom Kontext ab, in dem dieser Knopf gedrueckt wird. Der Kontext besteht aus ffldem Hintergrund, vor dem sich der Mauscursor bei Druecken des Knopfes be findet: war es vor dem Root Window, vor einem Fensterkoerper oder vor einer Titelleiste? fflden Modifikations-Tasten (Shift, Ctrl, Meta), die gleichzeitig mit der Mausta ste gedrueckt werden. Hier ist eine Liste von gebraeuchlichen Kontexts und ihren Wirkungen. Die resultierenden Aktionen, die in dieser Liste aufgefuehrt werden, koennen nur Beispiele sein, da sie in den meisten Faellen vom Window-Manager und lokalen Konfigurationen abhaengen. Root Window Menues, z.B. fuer Logins auf anderen Maschinen oder Fenster-Operationen; dies ist voellig von der lokalen Konfiguration abhaengig. Fensterkoerper + Meta- oder Alt-Taste kann z.B. fuer Operationen mit sich ueberlappenden Fenstern verwendet werden: um etwa ein Fenster aus dem "Fenster-Stapel" nach oben oder nach unten zu bringen. Dies ist vom Window-Manager abhaengig. 38 11 DAS X-WINDOW-SYSTEM Fensterkoerper + Ctrl- (oder Strg-) Taste Menues, mit denen fuer die einzelnen Fenster Terminaleigenschaften geaendert, Schiebebal ken (Scrollbars) eingeschaltet oder die Schriftarten veraendert wer den koennen. Titelleiste eines Fensters Bewegen eines Fensters, sowie A"ndern der Position des Fensters im Fenster-Stapel; abhaengig vom Windowma nager. Groessenversteller in der Titelleiste dient zum A"ndern der Fenster Groesse; haengt vom Windowmanager ab, wird aber sehr haeufig ver wendet (oft ein kleines Kaestchen am rechten Rand der Titelleiste). Der genaue Mechanismus ist aber fuer verschiedene Windowmanager unterschiedlich. Icon-Marke in der Titelleiste verwandelt das Fenster in ein kleines Kaestchen (Icon), das am Rand des Bildschirms erscheint. Haengt vom Windowmanager ab, wird aber sehr haeufig verwendet. Icon der Mausdruck auf einem Icon restauriert das Fenster wieder, von dem der Icon erzeugt wurde. Am besten probieren Sie gleich einmal aus, welchen Effekt die verschiedenen Maustasten auf den diversen Kontexten auf Ihrem System haben! 11.2 Startup-Dateien in X Aehnlich wie die Shell hat auch das X-Window-System Startup-Dateien. Diese kon trollieren z.B., welche Farbe und Schriftart ein xterm als Voreinstellung hat, welche Anwendungen automatisch nach dem Login gestartet werden, wo System-Meldungen erscheinen sollen usw. Leider gibt es (abgesehen von der Datei .Xdefaults) keine Konventionen, wie diese Startup-Dateien heissen. Die Namen haengen daher von der lokalen Installation ab. Die Syntax von .Xdefaults ist dem Manual zu X zu entnehmen. 11.3 Der Windowmanager Dieses Ding ist _neben Ihnen_ verantwortlich fuer das Chaos auf Ihrem Bildschirm. Meistens fuehrt der Windowmanager an der Seite des Bildschirms eine Liste aller derzeit laufenden X-Anwendungen. Er stattet die xterms mit Titelleiste, Groessenversteller und Icon-Marke aus. Oft werden auch mehrere Pull-Down-Menues zur Verfuegung gestellt, die durch Druecken der Mausknoepfe vor dem Root-Window zugaenglich werden. Eine der Aufgaben des Windowmanagers ist es, Fenster zu bewegen und an dierichtige Stelle zu setzen. Erscheint ein neues Fenster, so zeigt der Windowmanager meist ein Gitter, das am Maus-Cursor haengt. Mit Hilfe des Mauscursors kann nun dieses Gitter an die gewuenschte Stelle des Bildschirmes gebracht werden. Druecken einer Maustaste positioniert das Fenster. Auch Windowmanager haben Startup-Dateien. Diese Dateien enthalten u.a. dieBeschreibung der Menues, die unter verschiedenen Kontexten verfuegbar sind. 11.4 Die Terminalemulation xterm 39 11.4 Die Terminalemulation xterm Der einfachste Weg, ein xterm zu starten, ist durch Eingabe des Kommandos xterm & Dabei nicht das &-Zeichen fuer den Start im Hintergrund vergessen, da sonst die Shell, von der aus das Kommando abgesetzt wurde, darauf wartet, dass das neue xterm beendet ist, bevor der Prompt wieder erscheint. Es gibt einige Optionen, mit denen man das Erscheinungsbild des xterm steuernkann. Hier eine kleine Liste: -fn Schriftart das Fenster erscheint mit der angegebenen Schriftart (Font). Leider gibt es keine einfache und bequeme Moeglichkeit, sich alle verfuegbaren Schriftarten anzusehen. Die Kommandos xlsfonts, xfd fontname und besonders xfontsel koennen dabei helfen, sofern sie auf Ihrem System vorhanden sind (siehe auch die entsprechen den Manuale). Einige gebraeuchliche Schriftarten sind 6x10 (sehr klein), 6x13, 7x14, 10x20 (gross). Diese Fontnamen sind uebrigens Abkuerzungen; Fontnamen unter X sind naemlich sehr lang. Siehe dazu auch die Manuale zu X und xterm. -geometry Geometrie dient zur Angabe von Groesse und Plazierung des Fensters. Geometrie ist ein Ausdruck der Form " Spalten x Reihen +xoffset +yoffset". Das bedeutet, dass ein xterm so viele Zeichen pro Zeile haben soll, wie Spalten, und so viele Zeilen, wie Reihen angegeben sind. xoffset und yoffset bestimmen den Ort des Fen sters. Sie werden in Pixeln vom linken Bildrand bzw. vom oberen Bildrand aus gemessen. Ersetzt man die + Zeichen durch -, so wird von rechts bzw. von unten aus gemessen. Es koennen auch nur die Reihen und Spalten oder nur die Plazierung angegeben werden. In nerhalb der Option duerfen keine Leerzeichen auftauchen. -bg Farbe setzt die Hintergrund-Farbe. Farben koennen mit besonde ren Farbnamen angegeben werden. Die Farbnamen koennen durch showrgb aufgerufen werden. -fg Farbe setzt die Farbe des Fenstervordergrundes. -n Name Der Name des Fenster im iconifizierten Zustand. -T Titel Der Titel des Fensters, der in der Titelleiste erscheint. -e Kommando Kommando wird ausgefuehrt, wenn das Fenster aktiviert wur de. Diese Option muss als letzte angegeben werden. xterm -fn 7x14 -g 80x60 -n Manual -T Manual -e man xterm & startet ein langes Fenster mit einem etwas groesseren Font, das als Icon und in der Titelleiste " Manual" genannt wird. In diesem Fenster wird die Manualseite fuer xterm aufgerufen. Einige Windowmanager koennen einen Teil dieser Optionen ignorieren. Die Optionen fn, geometry, bg und fg werden von fast allen X-Anwendungen erkannt. 40 11 DAS X-WINDOW-SYSTEM 11.5 Einige andere X-Anwendungen Die folgenden Anwendungen haben einige gemeinsame Optionen. Mit -bg und -fg koennen Hintergrund- und Vordergrund-Farbe gewaehlt werden. Die -geometryOption legt die Geometrie der Anwendung fest. Im Gegensatz zu xterm wird die Groesse in der Regel in Pixeln angegeben. xbiff kleiner Briefkasten, der die Farbe aendert und piepst, wenn E-Mail ankommt. xload graphische Anzeige der Maschinenauslastung. xclock eine " analoge" Uhr. Mit der Option -d wird eine digitale Anzeige daraus, wobei zusaetzlich das Datum angezeigt wird. oclock aenaloge", runde Uhr. xcalc wissenschaftlicher Desktop-Rechner. xman eine angenehm zu benutzende X-Variante des man-Kommandos. 11.6 Benutzung von X im Netz Stellen Sie sich ein xterm vor, in dem Sie einen rlogin an eine andere Maschine laufen haben. Sie wollen nun auf dieser anderen Maschine eine X-Anwendung starten, aber diese natuerlich auf dem Bildschirm, vor dem Sie sitzen, dargestellt haben. Diese Situation ist ziemlich haeufig gegeben, wenn spezielle Programme nur an einigen Maschinen verfuegbar sind. Damit das funktioniert, muessen Sie folgendes tun: fflTeilen Sie der entfernten Maschine mit, wo die X-Anwendung dargestellt wer den soll. Dazu setzen Sie die Variable DISPLAY auf der entfernten Maschine auf den Display-Namen Ihrer lokalen Maschine. Der Display-Name ist Maschinenname:0 falls an der Maschine nur ein Bildschirm haengt. Bei mehreren Bildschirmen aendert sich lediglich die Ziffer am Ende des Display-Namens. Das Setzen der DISPLAY Variable wuerde in ksh und bash durch folgendes Kommando auf der entfernten Maschine geschehen: export DISPLAY=lokaler_Maschinenname:0 fflFalls die Angabe des korrekten Displays noch nicht genuegt, muessen Sie der entfernten Maschine explizit erlauben, Fenster auf Ihrem Bildschirm zu oeffnen. Dies geschieht durch Absetzen des Kommandos xhost Name_der_entfernten_Maschine auf der lokalen Maschine. Sind diese beiden Schritte durchlaufen, so genuegt es, das Kommando fuer die XAnwendung auf der entfernten Maschine zu geben. Oft genuegt auch nur der erste Schritt. 11.6 Benutzung von X im Netz 41 Es gibt einige besonders dumme Programme, die sich unter X beschweren, wennman sie auf der eigenen, lokalen Maschine ausfuehren will. Zunaechst sollte man nachsehen, ob die Variable DISPLAY richtig gesetzt ist (das gilt auch fuer weniger dumme Programme) und sie eventuell richtig setzen. Hilft das immer noch nichts, muss man das xhost Kommando auf der lokalen Maschine mit dem lokalen Maschinennamen angeben. Es ist laecherlich, aber Computer sind halt nun einmal dumm und manche Programme eben auch. 42 A WICHTIGE UNIX-KOMMANDOS Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. A Wichtige Unix-Kommandos Wir listen hier in alphabetischer Reihenfolge einige wichtige Unix-Kommandos zusammen mit den gebraeuchlichsten Optionen auf. Natuerlich kann solch eine Aufzaehlung in keiner Weise die Manualseiten ersetzen und erhebt auf keinen Fall Anspruch auf Vollstaendigkeit. Sie soll Sie lediglich mit wichtigen Kommandos bekanntmachen und andere erwaehnen, ohne deren Benutzung genau zu erklaeren. Die Beschreibungen gelten sowohl fuer System-V-Derivate als auch fuer BSD-Systeme, sofern nichts anderes angegeben ist. A.1 awk awk ist ein Programm, um Muster zu erkennen und zu verarbeiten. Es ist maechtiger als sed, aber nicht so vielseitig wie perl. awk gehoert zur Standardausruestung eines Unix. A.2 cat cat Filename gibt den Inhalt der Datei Filename am Bildschirm aus. Die Ausgabe kann auch in eine andere Datei umgeleitet werden: cat file1 > file2 schreibt den Inhalt der Datei file1 in die Datei file2. cat file1 file2 file3 > file4 haengt die ersten drei Dateien aneinander an und leitet die resultierende Ausgabe in die Datei file4 um. Aber Vorsicht! cat file1 file2 > file1 zerstoert die Datei file1, da sie zuerst fuer den Schreibvorgang geoeffnet und damit auf Laenge Null reduziert wird, bevor das cat-Kommando ausgefuehrt wird. A.3 cc ist der C-Compiler Ihres Systems. Die einfachste Art der Benutzung ist: cc file.c Damit wird die Datei file.c compiliert und eine ausfuehrbare Datei namens a.out erzeugt. Genaueres steht in Kapitel 8. A.4 cd cd dirname aendert das aktuelle Verzeichnis. Es wird dann dirname. Siehe auch Kapitel 5.1. A.5 chmod aendert die Zugriffsberechtigungen einer Datei oder eines Verzeichnisses. Siehe Kapitel 5.5. A.6 compress, uncompress und zcat Diese Kommandos dienen dazu, Dateien zu komprimieren und wieder aus dem komprimierten Zustand zu restaurieren. Sie werden folgendermassen verwendet: compress filename uncompress filename.Z zcat filename.Z compress reduziert die Groesse der Datei filename und speichert das komprimierte Resultat in der Datei filename.Z ab, sofern dies moeglich ist. uncompress stellt die komprimierte Datei in ihrer urspruenglichen Form wieder her. Diekomprimierte Datei wird dabei geloescht. zcat ist dasselbe wie uncompress mit dem Unterschied, dass das komprimierte File erhalten bleibt. Die Ausgabe erfolgt bei zcat in stdout. Um ein komprimiertes Archiv Ihres Unterverzeichnisses C anzulegen, koennen Sie folgendeBefehlssequenz benutzen: tar cvf - C _ compress > C.tar.Z Dadurch erhalten Sie eine Datei C.tar.Z. Das Minuszeichen im tar-Kommando veranlasst tar dazu, die Ausgabe nach stdout zu schreiben. Stdout wird dann mit Hilfe der Pipe _ als stdin in das Kommando compress umgeleitet. Da compress die Eingabe aus stdin erhaelt, kann es keinen Namen fuer die .Z-Datei finden. Daher erfolgt am Ende des Kommandos eine explizite Umleitung in die gewuenschte Datei. Um den Inhalt dieses Archives wiederherzustellen, verwendet man die Kommandozeile zcat C.tar.Z _ tar xvf Das Minuszeichen informiert tar, dass die Eingabe ueber stdin erfolgt (ueber die Pipe). Diese Programme koennen durch das deutlich effizientere freeze ersetzt werden (siehe Abschnitt A.14). A.7 cp cp Quelldatei Zieldatei cp Dateiliste Verzeichnis cp kopiert Dateien und Verzeichnisse. Siehe Kapitel 5.4. A.8 date zeigt Datum und Uhrzeit an. A.9 diff diff file1 file2 zeigt die Differenzen zwischen den Dateien file1 und file2 an. A.10 echo kopiert seine Argumente nach stdout. echo wird oft verwendet, um den Wert von Shell-Variablen auszugeben (zur Erinnerung: Shell-Variablen werden mit $ referenziert). $ echo a a $ a=b $ echo $a b $ Das Kommando a=b ist in csh ungueltig und muss durch set a=b ersetzt werden. A.11 file file Dateiliste klassifiziert die Dateien in der Dateiliste nach ihrem Inhalt. Moegliche Attribute sind z.B. ascii text, executable, C source code u.ae. A.12 find find Verzeichnis-Liste Ausdruck sucht Dateien, die sich in einem Verzeichnis der Verzeichnis-Liste befinden und die Anforderungen von Ausdruck erfuellen. Ausdruck kann dabei auch Kommandos enthalten, die auf gefundene Dateien angewendet werden sollen. find hat eine ziemlich komplexe Syntax, so dass wir hier nicht naeher darauf eingehen. Zudem kann es ein sehr zeitaufwendiges Kommando sein. Aus diesem Grund sollte man NIEMALS einen find von einem Verzeichnis aus starten, das weit oben in der Verzeichnis-Hierarchie steht wie etwa / oder /home. In solch einem Fall wuerde sich find durch saemtliche Verzeichnisse unterhalb dieses weit oben angesiedelten Verzeichnisses durcharbeiten, um alle Dateien in allen Unterverzeichnissen auf die Kriterien von Ausdruck hin zu ueberpruefen. Je nach Groesse und Organisation der betroffenen Filesysteme kann ein solcher find mehrere Stunden dauern und die entsprechenden Maschinen unbenutzbar machen. A.13 finger finger name@host finger liefert Informationen ueber Benutzer, z.B. ob sie ihre Mail gelesen haben, welche Telefonnummer sie haben etc. Wird nur ein Loginname angegeben, sieht finger auf der lokalen Maschine (manchmal auch auf dem lokalen Netz) nach. Wird nur @host angegeben, so wird Information ueber alle Benutzer ausgegeben, die derzeit an host eingeloggt sind. host kann dabei ein beliebiger Rechner am Internet sein. Mit der Option -l erhaelt man ausfuehrlichere Information. Einige Systeme haben diesen nuetzlichen Service aus Sicherheitsgruenden abgestellt. A.14 freeze, melt und fcat freeze filename melt filename.F fcat filename.F freeze ist ein effizienteres Kompressionsprogramm als compress. Die Dateien werden bei freeze durch komprimierte Dateien, die durch die Endung .F gekennzeichnet werden, ersetzt. Wird kein Dateiname angegeben, so wird die Eingabe von stdin gelesen. Restaurieren erfolgt durch das Kommando unfreeze oder (gleichwertig) melt. Wird die Ausgabe nach stdout gewuenscht, so verwendet man fcat; dabei bleibt (wie bei zcat) die komprimierte Datei erhalten. A.15 grep grep Muster Dateiliste sucht nach Muster in den Dateien der Dateiliste, welche auch Verzeichnisse enthalten kann. In letzterem Fall werden saemtliche Dateien der entsprechenden Verzeichnisse durchsucht. Angenommen, Sie haben eine Datei mit Telefonnummern namens telnum und moechten die Telefonnummer eines " Peter" heraussuchen. Sie erhalten Sie mit dem Kommando grep Peter telnum Mit Hilfe der Option -i koennen Sie die Unterscheidung von Gross- und Kleinbuchstaben abschalten. A.16 head head -n filename gibt die ersten n Zeilen der Datei filename auf dem Bildschirm aus. Die Voreinstellung fuer n ist 10. A.17 kill kill PID-Liste beendet die Prozesse, die durch die PID-Liste gekennzeichnet sind, wobei PID fuer ProzessIdentifikationsnummer steht. Die PID wird durch Ausfuehren des ps Kommandos erhalten. Sie koennen nur Ihre eigenen Prozesse killen. Falls das kill Kommendo dazu aber nicht genuegt, versuchen Sie kill -9 anstelle von kill. In Shells, die Job-Control unterstuetzen, koennen Sie kill %jobnummer fuer gestoppte Jobs oder Jobs im Hintergrund verwenden. Jobnummer ist die Nummer des zu killenden Jobs und wird vom Kommando jobs angezeigt. A.18 ln ln file link erzeugt einen sog. harten Verweis (Link) zu einer existierenden Datei, d.h. diese Datei kann jetzt mit zwei Namen aufgerufen werden: mit dem urspruenglichen Namen und mit dem soeben geschaffenen Verweisnamen. Beide haben denselben Status. Wird einer der beiden Namen geloescht, so ist die Datei noch immer unter dem anderen Namen zugaenglich. Auf neueren Systemen koennen auch sog. symbolische Verweise mit Hilfe der -s Option erzeugt werden. Dieser Verweis hat nicht denselben Status wie der urspruengliche Dateiname. Der symbolische Verweis ist eine eigene Datei, die den Namen der Datei enthaelt, auf die der Verweis zeigt. Wird daher das urspruengliche File geloescht, so zeigt der symbolische Verweis auf ein nicht mehr existierendes File und auf die Daten kann nicht mehr zugegriffen werden. Im Gegensatz zum harten Verweis koennen symbolische Verweise jedoch auch auf ein Verzeichnis erfolgen. A.19 lpr und andere Druckerkommandos Die Kommandos lpr, lpq und lprm gelten unter BSD, die entsprechenden Kommandos unter System V sind lp, lpstat und cancel. lpr -Ppname file-liste lpr schickt die Dateien der file-liste auf den Drucker, der pname heisst. InformierenSie sich ueber die Druckernamen Ihrer Installation. Typische Namen fuer Drucker sind "lp" fuer einen Zeilendrucker und "ps" fuer einen PostScript-faehigen Laserdrucker. Wird die Umgebungsvariable PRINTER auf den Namen eines Druckers gesetzt (siehe Kapitel 6.4), so wird dieses der voreingestellte Drucker. Verwenden Sie nun lpr ohne Angabe eines Druckers, so werden die zu druckenden Dateien automatisch an den Drucker geschickt, der in PRINTER gesetzt wurde. Eine PostScript-Datei darf NIE zu einem nicht PostScript-faehigen Drucker (z.B. zu einem Zeilendrucker) geschickt werden. Das Resultat waere naemlich der Ausdruck aller PostScript-Kommandos, nicht aber der gewuenschte Text oder die erwuenschte Graphik. Geschieht dies versehentlich, so sollten Sie unbedingt diesen Druckjob mit Hilfe der Kommandos lpq und lprm aus der Druckerschlange nehmen (siehe unten), da sonst eine Menge Papier verschwendet wird. Die Jobs in der Druckerschlange eines bestimmten Druckers koennen mit lpq -Ppname aufgelistet werden. Dabei wird auch die Jobnummer jedes Druckjobs angezeigt. Wollen Sie nun einen Job aus der Druckerschlange entfernen, so verwenden Sie das Kommando lprm -Ppname job-nummer wobei job-nummer die Jobnummer Ihres Druckauftrages laut lpq ist. Selbstverstaendlich koennen Sie nur Ihre eigenen Druckauftraege loeschen. A.20 ls ls file-liste gibt Information ueber die Dateien in file-liste aus. Dabei darf file-liste auch Verzeichnisse enthalten, so dass alle Dateien dieser Verzeichnisse aufgefuehrt werden. Wird die file-liste weggelassen, so erscheint eine Liste der Dateien im aktuellen Verzeichnis. Folgende Optionen fuer ls sind oft nuetzlich: -a zeige auch Dateien, die mit einem Punkt beginnen -l zeige ausfuehrliche Informationen ueber die Dateien einschliesslich der Zugriffsberechtigungen -F zeige einen / nach jedem Verzeichnis, einen * nach jeder ausfuehrbaren Datei und (auf Systemen, die das unterstuetzen) ein @ nach symbolischen Verweisen. A.21 mail, Mail und mailx mail ist ein sehr einfaches Programm zum Lesen und Verschicken von E-Mail. Es stellt nur elementarste Moeglichkeiten zum Editieren beim Schreiben von Mail zur Verfuegung. Mail (BSD) und mailx (SYSTEM V) sind etwas besser. Wir empfehlen aber, ein komfortableres Mail-System zu verwenden, z.B. rmail, elm oder mh. Der Gebrauch von rmail ist in der Emacs-Referenzkarte in Anhang B beschrieben. A.22 make ist ein nuetzliches Werkzeug, um den Compilationsprozess bequemer zu gestalten. Es ermoeglicht, dass automatisch nur immer diejenigen Dateien neu compiliert werden, die sich seit der letzten Compilation geaendert haben, sowie die Dateien, die von geaenderten Dateien abhaengen. Das Kommando make verarbeitet die Datei Makefile oder auch makefile, die Anweisungen fuer die Compilation enthalten, z.B. die Abhaengigkeiten von Dateien. Wegen der genauen Syntax und einer ausfuehrlichen Beschreibung wende man sich an die Manuale oder an ein Buch ueber make. Fuer die GNU-Version von make gibt es eine sehr gute Dokumentation (info-Eintrag im emacs), die auch als Einfuehrung in andere make-Versionen dienen kann. A.23 man man Kommando gibt die Manualseiten fuer Kommando aus. Die -k Option gibt alle Ueberschriften der Manuale aus, in denen der Suchbegriff Kommando gefunden wurde. Naehere Information ueber Hilfestellungen in Unix ist im Kapitel 4 zu finden. A.24 mkdir mkdir Verzeichnis-Liste erzeugt die in der Liste angegebenen Verzeichnisse. A.25 more more Datei-Liste gibt die Dateien in der Liste Seite fuer Seite aus. Auf manchen alten System-V-Maschinen muss statt dessen pg verwendet werden. A.26 mv mv vorhandene_Datei neue_Datei benennt eine Datei um. Siehe auch Kapitel 5.4. A.27 nice erniedrigt die Prioritaet eines Prozesses, um die Maschine fuer andere Aufgaben nicht zu sehr zu blockieren. Siehe Kapitel 3.3. A.28 nohup nohup Kommando stellt sicher, dass der durch Kommando gestartete Prozess nicht beim Logout beendet wird. Wenn keine Ausgabedateien angegeben werden, werden sowohl stderr als auch stdout in die Datei nohup.out umgeleitet. nohup startet Prozesse automatisch mit etwas erniedrigter Prioritaet. Wird csh verwendet, so wird durch das Starten eines Prozesses im Hintergrund bereits sichergestellt, dass er beim Logout nicht beendet wird. Daher ist das nohup-Kommando in csh unnoetig. Dies gilt aber nicht fuer tcsh. A.29 ps informiert ueber den Status aktiver Prozesse. Ohne Angabe von Optionen erhaelt man lediglich Information ueber die eigenen Prozesse, die vom selben Terminal wie das ps Kommando gestartet wurden. In einem Window-System stellt aber jedes Fenster ein eigenes Terminal dar. Um alle eigenen Prozesse zu ueberblicken, verwendet man daher (in BSD) ps -ux Um Prozesse anderer Benutzer ebenfalls angezeigt zu bekommen, verwendet man (in BSD) ps -aux Beschraenkung auf Prozesse, die gerade wirklich am laufen sind, liefert die Option -r. Wuenscht man, dass alle Zeilen ganz ausgeschrieben werden und nicht nach 80 Zeichen abgebrochen werden, kann dies durch Angabe von ww bei den Optionen erreicht werden. Die Ausgabe von ps erfolgt in mehreren Spalten. Einige interessante sind (BSD): USER Besitzer des Prozesses PID Prozess-Identifikations-Nummer %CPU Prozentsatz der CPU-Zeit, die der Prozess gerade verbraucht %MEM Prozentsatz des benutzen Hauptspeichers SZ Groesse des Prozesses RSS aktuelle Groesse des Prozesses im Hauptspeicher TIME bisher verbrauchte CPU-Zeit in Sekunden COMMAND das Kommando, mit dem der Prozess gestartet wurde Optionen und Ausgabe von ps unterscheiden sich auf System-V-Maschinen deutlich vom hier besprochenen BSD-Fall. Die zu aux analogen Optionen sind ef. Die Option -u gefolgt von einem Benutzernamen informiert ueber alle Prozesse dieses Benutzers. Fuer weitere Optionen wende man sich an das Manual. A.30 rm rm Datei-Liste loescht die Dateien in der Liste. Es gibt keine Moeglichkeit, den Effekt dieses Befehls ungeschehen zu machen! Die Option -i bewirkt, dass bei jeder Datei noch einmal nachgefragt wird, ob sie wirklich geloescht werden soll. A.31 rmdir rmdir Verzeichnis-Liste loescht die leeren Verzeichnisse in der Liste. Verzeichnisse, die noch Dateien enthalten, werden nicht geloescht. A.32 ruptime und rup Diese beiden Kommandos geben den Status der Maschinen am lokalen Netz an. A.33 rwho und rusers Diese Kommandos zeigen an, wer am lokalen Netz eingeloggt ist. Das Kommando rusers braucht etwas laenger. rwho ist an manchen Installationen nicht verfuegbar, da es zu grosse Netzlast verursacht. Wegen Optionen siehe die Manualseiten. A.34 sed ist ein nicht-interaktiver Editor. Genaue Beschreibung in den Manualseiten. A.35 sort sortiert Dateien in ASCII-Sequenz oder anderen Ordnungen, die durch Optionen ausgewaehlt werden. Lexikalische Ordnung wird z.B. durch die Option -d erhalten. Es kann ebenso ausgewaehlt werden, nach welchem Eintrag in jeder Zeile sortiert werden soll. Siehe die Manuale. A.36 tail tail Dateiname gibt die letzten Zeilen der Datei Dateiname aus. A.37 talk talk loginname@hostname bittet die Benutzerin loginname am Rechner hostname, mit Ihnen ein "Gespraech" ueber das Netz zu beginnen. Ist die Benutzerin auf derselben Maschine eingeloggt wie Sie, so genuegt die Angabe von loginname in der Kommandozeile. Ein Gespraech ueber talk wird mit C-c beendet. Zwischen verschiedenen Architekturen ist es oft nicht moeglich, talk zu verwenden. Mit Hilfe des Kommandos mesg kann ein Benutzer vermeiden, dass er durch talk-Anfragen gestoert wird. Der Initiator des talk erhaelt dann die Meldung Your party is refusing messages. A.38 tar tar Key Optionen Datei-Liste erzeugt eine Archiv-Datei oder restauriert Dateien einer Archiv-Datei. Der Key entscheidet, ob ein Archiv angelegt oder von einem Archiv gelesen werden soll: c erzeuge eine Archiv-Datei x extrahiere Dateien aus einer Archiv-Datei t liste den Inhalt der Archiv-Datei Die wichtigsten Optionen sind: v geschwaetzig; listet die bearbeiteten Dateien auf f gibt an, dass das naechste Argument der Name einer Datei ist, von der gelesen oder auf die geschrieben werden soll (je nachdem , was zum Key passt); wird anstelle eines Dateinamens ein Minuszeichen angegeben, so wird stdin bzw. stdout verwendet. h folge bei der Erzeugung einer Archivdatei auch symbolischen Verweisen und fuege diese Dateien mit in das Archiv ein. Um ein Archiv Ihres C-Unterverzeichnisses in Ihrem Homedirectory zu erzeugen, wuerden Sie das folgende Kommando verwenden: tar -cvf C.tar C Dies liefert eine Archivdatei namens C.tar. Mit Hilfe des Kommandos tar -xvf C.tar wird der Inhalt des Archives wieder in seiner urspruenglichen Form restauriert. A.39 tee tee Datei-Liste kopiert stdin nach stdout sowie die angegebenen Dateien. Um an Dateien anzuhaengen, verwende man die -a Option. a.out | tee outfile gibt die Resultate der ausfuehrbaren Datei a.out am Bildschirm aus, schreibt sie aber gleichzeitig in die Datei outfile. A.40 uptime gibt den Status Ihrer Maschine aus: wie lange sie laeuft, wie viele Benutzer eingeloggt sind und wie stark die Maschine ausgelastet ist. A.41 wc wc Datei-Liste zaehlt Zeilen, Woerter und Buchstaben der Dateien in der Liste und gibt das Resultat aus. Will man auswaehlen, was gezaehlt werden soll, so geschieht dies mit den Optionen l (Zeilen), w (Woerter) und c (Buchstaben). Wird keine Option angegeben, so wird alles gezaehlt. A.42 which which Dateiname zeigt den absoluten Pfadnamen der Datei an. which sucht aber nur in den Verzeichnissen nach der Datei, die in der Variable PATH angegeben sind. A.43 who zeigt an, welche Benutzer an Ihrer Maschine eingeloggt sind. Copyright (c) 1992 GeNUA Gesellschaft fuer Netzwerk- und Unix-Administration mbH Alle Rechte vorbehalten Version D1.0 Es ist gestattet, von diesem Dokument Kopien zum nicht-kommerziellen Gebrauch anzufertigen, sofern das Copyright und diese Notiz auf allen Kopien erhalten bleiben. Sollten Sie diese Schrift darueber hinausgehend nutzen wollen, so wenden Sie sich bitte an die GeNUA mbH, Leoprechtingstr. 13, D - 8000 Muenchen 83. [ HINWEIS: Der folgende Text wurde von einem anderen Format nach ASCII konvertiert, dabei sind wahrscheinlich nicht alle Tastenbezeichnungen korrekt gewandelt worden. ] B GNU Emacs Referenz-Karte In dieser Referenzkarte bedeutet C-k "druecke die Control- (Strg-) Taste und die k-Taste gleichzeitig". M-k bedeutet "druecke die Meta-Taste und das k gleichzeitig". Die Meta-Taste kann mit Meta oder auch mit Alt beschriftet sein. Falls das alles nicht funktioniert, kann die ESC-Taste verwendet werden. In diesem Fall drueckt man zuerst kurz die ESC-Taste und danach die entsprechende Taste. Diese Referenzkarte ist eine Uebersetzung der englischen Referenzkarte der Free Software Foundation, fuer die folgendes Copyright gilt: Copyright (c) 1987 Free Software Foundation, Inc. designed by Stephen Gildea, March 1987 v1.9 for GNU Emacs version 18 on Unix systems Permission is granted to make and distribute copies of this card provided the copyright notice and this permission notice are preserved on all copies. For copies of the GNU Emacs manual, write to the Free Software Foundation, Inc., 675 Massachusetts Ave, Cambridge MA 02139. B.1 Aufrufen und Verlassen von Emacs Um Emacs aufzurufen, tippt man einfach den Namen: emacs Siehe unten, wie eine Datei zum Editieren eingelesen wird stoppe Emacs C-z verlasse Emacs auf Dauer C-x C-c B.2 Dateien Einlesen einer Datei in Emacs C-x C-f Abspeichern einer Datei auf der Platte C-x C-s Einfuegen einer anderen Datei in diesen Puffer C-x i ersetze diese Datei mit der, die Sie wirklich wollten C-x C-v schreibe den Puffer in eine anzugebende Datei C-x C-w starte Dired, den Verzeichnis-Editor C-x d B.3 Hilfestellungen Das Hilfssystem ist einfach. Tippen Sie C-h und folgen Sie den Anweisungen. Benutzen Sie Emacs zum ersten Mal, starten Sie mit C-h t das Tutorial. (Diese Karte setzt das Tutorial voraus). loswerden des Hilfe-Fensters C-x 1 weiterblaettern im Hilfe-Fenster ESC C-v apropos: zeige Kommandos, die Ausdruck enthalten C-h a zeige Funktion, mit der eine Taste belegt ist C-h c beschreibe eine Funktion C-h f gib Modus-spezifische Information C-h m B.4 Beheben von Fehlern Abbrechen eines teilweise getippten oder aus- C-g gefuehrten Kommandos Restauriere eine durch einen Systemabsturz verlo- M-x recover-file rene Datei loesche eine ungewollte Aenderung C-x u oder C-_ restauriere den urspruenglichen Inhalt eines Puffers M-x revert-buffer Neuaufbau des Bildschirms C-l B.5 Inkrementelle Suche suche vorwaerts C-s suche rueckwaerts C-r suche regulaeren Ausdruck C-M-s Wiederholte Verwendung von C-s oder C-r setzt die Suche in der entsprechenden Richtung fort. beende inkrementelle Suche ESC loesche Wirkung des letzen Buchstabens DEL Abbrechen der aktuellen Suche C-g Sucht Emacs noch, so bricht C-g den noch nicht erfolgten Teil der Suche ab, ansonsten den gesamten Suchvorgang. B.6 Bewegen Cursor-Bewegung: Groesse der Bewegung rueckwaerts vorwaerts Buchstabe C-b C-f Wort M-b M-f Zeile C-p C-n gehe zum Zeilenanfang (oder -ende) C-a C-e Satz M-a M-e Absatz M-[ M-] Seite C-x [ C-x ] sexp C-M-b C-M-f Funktion C-M-a C-M-e gehe zum Pufferanfang (oder -ende) M-< M-> Bildschirm-Bewegung: blaettere zum naechsten Schirm C-v blaettere zum vorhergehenden Schirm M-v blaettere nach links C-x < blaettere nach rechts C-x > B.7 Killen und Loeschen zu killende Groesse rueckwaerts vorwaerts Buchstabe (loeschen, nicht killen) DEL C-d Wort M-DEL M-d Zeile (bis zum Ende) M-0 C-k C-k Satz C-x DEL M-k sexp M-- C-M-k C-M-k kill Bereich (Region) C-w kill bis zum naechsten Erscheinen von Zeichen M-z Zeichen Wiedergabe (yank) der zuletzt gekillten Groesse C-y ersetze letzte Wiedergabe mit vorausgehendem Kill M-y B.8 Markieren setze Marke hier C-@ oder C-SPC vertausche Punkt und Marke C-x C-x setze Marke arg Worte weiter M-@ markiere Absatz M-h markiere Seite C-x C-p markiere sexp C-M-@ markiere Funktion C-M-h markiere ganzen Puffer C-x h B.9 Ersetzen mit Nachfrage interaktiv einen Textstring ersetzen M-% unter Verwendung regulaerer Ausdruecke M-x query-replace-regexp Gueltige Antworten beim Ersetzen mit Nachfrage sind ersetze dieses, gehe zum naechsten SPC ersetze dieses, aber gehe nicht weiter , springe zum naechsten ohne zu ersetzen DEL ersetze alle uebrigen passenden Ausdruecke ! zurueck zum letzten passenden Ausdruck ^ verlasse Ersetzen mit Nachfrage ESC beginne rekursives Editieren (verlassen mit C-M-c) C-r B.10 Mehrere Fenster loesche alle anderen Fenster C-x 1 loesche dieses Fenster C-x 0 teile Fenster vertikal C-x 2 teile Fenster horizontal C-x 5 blaettere anderes Fenster vorwaerts C-M-v springe mit Cursor ins andere Fenster C-x o vergroessere Fensterlaenge C-x ^ verkleinere Fensterbreite C-x vergroessere Fensterbreite C-x " verkleinere Fensterlaenge M-x shrink-window waehle Puffer in anderem Fenster C-x 4 b Einlesen einer Datei im anderen Fenster C-x 4 f Zusammenstellung von Mail im anderen Fenster C-x 4 m starte Dired im anderen Fenster C-x 4 d finde ein Tag im anderen Fenster C-x 4 . B.11 Formatieren Einruecken der aktuellen Zeile (Modus-abhaengig) TAB Einruecken des Bereiches (Modus-abhaengig) C-M-" Einruecken von sexp (Modus-abhaengig) C-M-q rigoroses Einruecken des Bereiches um arg Spalten C-x TAB Einfuegen eines Zeilenumbruchs C-o schiebe Rest der Zeile vertikal nach unten C-M-o loesche Leerzeilen um aktuelle Position (Point) C-x C-o loesche saemtlichen Leerraum um aktuelle Position M-" setze genau ein Leerzeichen an die aktuelle Position M-SPC fuelle Absatz M-q fuelle Bereich M-g setze die Fuellspalte C-x f setze das Praefix, mit dem jede Zeile starten soll C-x . B.12 Aenderung von Gross- und Kleinschreibung schreibe ganzes Wort gross M-u schreibe ganzes Wort klein M-l schreibe Wortanfang gross M-c schreibe ganzen Bereich gross C-x C-u schreibe ganzen Bereich klein C-x C-l schreibe Anfangsbuchstaben im Bereich gross M-x capitalize-region B.13 Der Minipuffer Folgende Tastenbelegungen sind im Minipuffer definiert: ergaenze soweit wie moeglich TAB ergaenze bis zu einem Wort SPC ergaenze und fuehre aus RET zeige moegliche Ergaenzungen ? Abbruch des Kommandos C-g Tippen Sie C-x ESC, um das letzte Kommando im Minipuffer zu editieren und zu wiederholen. Dann sind die folgenden Tastenbelegungen definiert: vorhergehendes Minipuffer-Kommando M-p naechstes Minipuffer-Kommando M-n B.14 Puffer waehle anderen Puffer C-x b Liste alle Puffer C-x C-b kille einen Puffer C-x k B.15 Vertauschen vertausche Buchstaben C-t vertausche Worte M-t vertausche Zeilen C-x C-t vertausche sexps C-M-t B.16 Ueberpruefung der Rechtschreibung pruefe aktuelles Wort M-$ pruefe alle Woerter im Bereich M-x spell-region pruefe gesamten Puffer M-x spell-buffer (Anm.: hier wird generell ein englisches Woerterbuch verwendet) B.17 Tags finde Tag M-. finde naechstes Vorkommen des Tag C-u M-. gib neues Tags-File an M-x visit-tags-table regexp-Suche in allen Dateien der Tags- M-x tags-search Tabelle Ersetzen mit Nachfrage in allen Dateien M-x tags-query-replace Fortsetzen der letzen Tags-Suche oder Erset- M-, zen mit Nachfrage B.18 Shells Ausfuehren eines Shell-Kommandos M-! Anwenden eines Shell-Kommandos auf den Bereich M-_ filtere Bereich durch ein Shell-Kommando C-u M-_ starte eine Shell im Fenster *shell* M-x shell B.19 Rmail blaettere vorwaerts SPC blaettere rueckwaerts DEL Anfang der Nachricht . (dot) naechste nicht-geloeschte Nachricht n vorhergehende nicht-geloeschte Nachricht p naechste Nachricht M-n vorhergehende Nachricht M-p loesche Nachricht d loesche Nachricht und aktualisiere C-d mache Loeschen der Nachricht ungueltig u antworte auf Nachricht r schicke Nachricht an jemanden weiter (forward) f schicke Mail m hole neu angekommene Mail g verlasse Rmail q gebe Nachricht in ein anderes Rmail-File aus o gebe Nachricht im Unix-Mail-Format aus C-o zeige Zusammenfassung der Kopfzeilen h B.20 Regulaere Ausdruecke Folgendes hat spezielle Bedeutung innerhalb regulaerer Ausdruecke: irgendein Einzelbuchstabe . (dot) keine oder mehrere Wiederholungen * keine oder eine Wiederholungen ? irgendein Buchstabe im Set [ . . ] irgendein Buchstabe ausserhalb des Sets [^ . ] Zeilenanfang ^ Zeilenende $ zitiere spezielles Zeichen c \c alternatives oder \| Gruppieren \( . . \) nte Gruppe \n Pufferanfang \` Pufferende \' Wortabbruch \b nicht Anfang oder Ende eines Wortes \B Wortanfang \< Wortende \> irgendein Wort-Syntax-Buchstabe \w irgendein nicht-Wort-Syntax-Buchstabe \W Buchstabe mit Syntax c ssc Buchstabe mit Syntax anders als c \Sc B.21 Register kopiere Bereich in Register C-x x fuege Registerinhalt ein C-x g speichere aktuelle Position im Register C-x / gehe zur abgespeicherten Position C-x j B.22 Info starte das Info-Dokumentationssystem C-h i Bewegung innerhalb eines Knotens (Node): blaettere vorwaerts SPC blaettere rueckwaerts DEL Anfang des Knotens . (dot) Bewegung zwischen Knoten: naechster Knoten n vorhergehender Knoten p gehe nach oben u waehle Menuepunkt beim Namen m waehle den nten Menuepunkt durch Nummer (1-5) n folge dem Querverweis (zurueck mit l) f zurueck zum letzten gesehenen Knoten l zurueck zum Verzeichnis-Knoten d gehe zu irgendeinem Knoten mit Namen g Andere: starte Info-Tutorial h liste Info-Kommandos ? verlasse Info q suche in Knoten nach regulaerem Ausdruck s B.23 Tastatur-Makros beginne Definition eines Tastatur-Makros C-x ( beende Definition des Tastatur-Makros C-x ) Ausfuehren des zuletzt definierten Tastatur- C-x e Makros haenge an letzten Tastatur-Makro an C-u C-x ( benenne letzten Tastatur-Makro M-x name-last-kbd-macro fuege Lisp-Definition in Puffer ein M-x insert-kbd-macro B.24 Kommandos im Umgang mit Emacs Lisp Auswertung von sexp vor aktueller Position C-x C-e Auswertung des aktuellen defun C-M-x Auswertung des Bereiches M-x eval-region Auswertung des ganzen Puffers M-x eval-current-buffer Lesen und Auswerten des Minipuffers M-ESC Wiederausfuehren des letzten Minipuffer- C-x ESC Kommandos Lesen und Auswerten der Emacs Lisp Datei M-x load-file Laden vom Standard-System-Verzeichnis M-x load-library B.25 Einfache Anpassungen Hier sind einige Beispiele fuer globale Tastaturbelegungen in Emacs Lisp. Beachten Sie, dass nicht mit ""M-# gearbeitet werden kann, sondern ""e# verwendet werden muss. (global-set-key ""C-cg" 'goto-line) (global-set-key ""e"C-r" 'isearch-backward-regexp) (global-set-key ""e#" 'query-replace-regexp) Beispiel einer Variablenzuweisung in Emacs Lisp: (setq backup-by-copying-when-linked t) B.26 Schreiben von Kommandos (defun () "" (interactive "