Praktikum "UNIX"

von Prof. Jürgen Plate

7. Kommunikationsdienste

UNIX stellt eine Reihe von Diensten zur Kommunikation der Benutzer untereinander zur Verfügung. Einen Dienst haben Sie schon kennengelernt: write. Dieser Befehl hat noch einen nahen Verwandten, der jedoch meist nur vom Systemverwalter verwendet wird:

wall

Dieses Kommando (/etc/wall) liest einen Text von der Standardeingabe und sendet ihn an alle angemeldeten Benutzer.

Es gibt daneben die Möglichkeit, Benutzer auch dann zu informieren, wenn sie nicht eingeloggt sind.

news [-nas]

Dieses Kommando informiert über Neuigkeiten. Bei Aufruf werden alle Dateien des Verzeichnisses /var/news angezeigt, die vom jeweiligen Benutzer noch nicht gelesen wurden. Mit der DEL-Taste (normalerweise Ctrl-C) kann eine Meldung abgebrochen werden. Abbruch von news mit DEL DEL.

Optionen:

-a Alle "News-Dateien" anzeigen (auch schon gelesene)
-n Nur die Dateinamen anzeigen das Kommando legt eine Datei namens '.news_time' an, deren Zugriffsdatum bei jedem Aufruf aktualisiert wird. Durch den Vergleich mit diesem Datum kann 'news' feststellen, welche Dateien noch nicht angezeigt wurden. Dieses Kommando hat nichts mit den Netnews (Usenet News) zu tun, auf die später eingegangen wird. Ein lokal installiertes Usenet-Newssystem ist normalerweise wesentlich besser für den Informationsaustausch geeignet als das 'news'-Kommando. Heute wird mal wohl auch auf WWW-basierte Systeme zurückgreifen, die übrigens auch mit einem textbasierten Browser (Lynx) gelesen werden können.

7.1 Das UNIX Mailsystem

Man kann aber auch Benutzer erreichen, die gerade nicht am Rechner arbeiten. Mit dem Mail-System kann elektronische Post an andere Benutzer verschickt werden. Zu diesem Zweck gibt es das Verzeichnis /var/spool/mail (früher '/usr/mail' oder '/var/mail'), in dem für jeden Benutzer, der Post erhalten hat, eine Datei existiert, deren Name mit dem Loginnamen des Benutzers übereinstimmt. Mit den Kommandos mail oder der Erweiterung mailx kann Post an andere Benutzer verschickt werden und die empfangene elektronische Post bearbeitet werden. An dieser Stelle wird die lokale Nutzung des Mail-Systems behandelt, später dann die Anwendung im Netz. Übrigens - mit 'Mail' meine ich immer die elektronische Mail von Computer zu Computer. Zunächst das primitivste aller Mail-Programme:

Post versenden mail Login-Name(n)

Versenden von Post an einen oder mehrere andere Benutzer. Bei mehreren Namen sind diese durch Leerzeichen zu trennen. Mail liest den Text von der Standardeingabe. Der Text kann nicht nur mit CTRL-D (End of File) sondern auch mit einer Zeile beendet werden, die nur einen Punkt enthält.

Das Mail-Kommando ergänzt den Brief um einen Briefkopf, in dem Absender und Absendezeitpunkt verzeichnet sind. Der Mailkopf enthält einzelne Zeilen, die sich anhand eines Schlüsselwortes identifizieren lassen ("From", "To", usw.). Zum Versand an ferne Rechner käme dann noch ein "Briefumschlag" hinzu. Normalerweise sorgt das Mail-Kommando nicht selbst für den Versand, sondern es übergibt den Brief an ein anderes, speziell für den Mailversand konzipiertes Programm.

Wir haben es hier also mit einem Frontend, dem 'Mail User Agent' (mail, mailx, elm, pine,...), und einem Backend, dem 'Mail Transport Agent' (sendmail, smail, ...), zu tun. Der MTA sorgt auch für die Weiterleitung ankommender Post an den richtigen Empfänger.

Kann der Brief nicht zugestellt werden (z. B. unbekannter Empfänger), gibt mail eine Fehlermeldung aus. Gleichzeitig erhält man den eigenen Brief, ergänzt um Zusatzinformationen per mail retour. Fehlerhafte Briefe werden auch (je nach Einstellung des MTA) an einen besonderen Pseudo-Empfänger namens 'postmaster' geschickt. Dieser Benutzer steht nicht in der Passwortdatei, sndern es ist ein sogenanntes 'Mail-Alias' für den Systemverwalter oder einen Beauftragten. An den 'postmaster' kann man sich auch wenden, wenn man Fragen im Zusammenhang mit Mail hat (z. B. wenn man einen Empfänger sucht). Beispiel für das Versenden einer Mail:

$ mail markus 
Lieber Markus,

leider habe ich dich heute nicht getroffen. Ich brauche 
dringend das UNIX-Buch, das ich Dir neulich geliehen habe. 
Bitte leg es doch in mein Fach. Danke. 

Gruss, Hans 
. 

Wenn der Benutzer markus mehrere Mails erhalten hat, wird er über diesen Brief nicht besonders glücklich sein, denn jeder Mailer (MUA) zeigt normalerweise erst einmal den Absender und eine Betreff-Zeile an. Letztere besitzt aber der obige Brief garnicht. Man sollte also eine "Subject:"-Zeile anbringen. Das geht recht gut mit dem verbesserten 'mail'-Kommando, 'mailx'. Hier kann man in der Kommandozeile ein "Subject" angeben:

mailx -s "UNIX-Buch" markus 

.... 

'mail' und 'mailx' werden eigentlich nur noch verwendet, wenn nichts besseres da ist - oder wenn es darum geht in Kommandodateien (Shellskripts) Mail automatisch zu versenden, da man mit Ausgabeumleitung oder Pipe die Ausgabe eines Programms direkt an den MUA übergeben kann.

Eine Nachricht über eingegangene Post erhält der Benutzer beim Login mit der Meldung you have mail.

Er kann dann mit einem Mail-Kommando seine Post ansehen (und gleich antworten). Der Unterschied zum Senden besteht bei mail und mailx im Fehlen der Empfänger-Logins. mail arbeitet interaktiv - man kann so alle Briefe nacheinander bearbeiten. Die obige Ausgabe stützt sich auch auf das Mail-Kommando.

mail [-ehpqr] [-f datei] [-F login-name]

Bearbeiten empfangener Briefe. Die zuletzt eingegangenen Briefe werden zuerst angezeigt (LIFO).

Optionen:

-eKeine Bearbeitung, nur anzeigen, ob Post vorliegt. mail antwortet mit 0 oder 1 (=keine Post/Post).
-hNur numerierte Liste der Briefköpfe anzeigen, danach in den interaktiven Modus gehen.
-pAlle Briefe ohne interaktive Steuerung ausgeben.
-qAbbruchtaste beendet mail (im Normalfall wird damit nur die Ausgabe des aktuellen Briefs abgebrochen).
-rAnzeige der Briefe nach Alter, den ältesten zuerst (FIFO).
-f dateimail bietet die Möglichkeit, Briefe in einer benutzereigenen Datei zu speichern. Statt des Standardnamens "mbox" wird der angegebene Name verwendet.

Beim Lesen der Post im interaktiven Modus (der Aufruf von mail ohne Parameter ist die Regel) meldet sich mail mit dem Fragezeichen als Prompt. Danach können zahlreiche Kommandos gegeben werden. Die Ausgabe kann mit CTRL-S angehalten und mit CTRL-Q fortgesetzt werden. Für den Anfang reichen ein paar Tasten:

CR,n,+zum nächste Brief gehen
dlöscht den angezeigten Brief (markiert als "gelöscht")
paktuellen Brief nochmals ausgeben.
-vorherigen Brief nochmals ausgeben.
sBrief in der Datei mbox speichern. Hinter s kann auch ein Dateiname angegeben werden.
wwie s, jedoch ohne Briefkopf. m Brief weiterleiten. Hinter m muß ein Login-Name angegeben werden.
rAntworten, der Empfänger wird von mail dem Brief entnommen.
!Ausführen des hinter dem ! angegebenen UNIX-Kommandos.
qmail verlassen, als gelöscht markierte Briefe entfernen
x mail abbrechen - alles bleibt, wie es war.

Das Kommand 'mailx' zeigt beim Start zumindest eine Übersicht der eingegangenen Post (Subject und Absender) und bietet komfortablere Bearbeitung (z. B. Löschen aller Mails auf einmal oder die oben erwähnte Subject-Angabe).

Programme wie 'elm', 'pine' oder 'mutt' arbeiten interaktiv und stellen eine komfortablere Benutzer-Schnittstelle dar. Deshalb werden sie normalerweise verwendet. Eine detaillierte Beschreibung dieser Programme würde jedoch den Rahmen dieses Skripts sprengen.

Weiterleiten von Mails

Bei früheren Versionen von 'mail' konnte die Post an einen anderen Benutzer mit der Option "-F login-name" umgeleitet werden (z. B. für die Urlaubsvertretung). Vorher muß der Briefkasten vollständig geleert werden. Die Umleitung erlaubt natürlich auch das Weiterschicken an den eigenen Account auf fremden Rechnern (so laufen z. B. alle Mails an den Systemadministrator auf einem Rechner zusammen).

Bei allen sendmail- oder smail-basierten Systemen ist die Umleitung einfacher. Der Benutzer muß lediglich in seinem Home-Directory eine Datei namens ".forward" anlegen und in dieser Datei eine (korrekte) Mailadresse eintragen. Sollen mehrere Empfänger angesprochen werden, sind die Namen durch Kommas zu trennen.

Der Mechanismus geht jedoch noch weiter. Wird eine Datei mit vollständigem Pfad angegeben (die Weiterleitungszeile beginnt also mit einem '/'), dann landet die Post in der angegebenen Datei. Ein weiterer Schritt ist die Angabe einer Pipe in ein Programm oder Skript, das die Mail weiterverarbeitet (z. B. "| tuwas"). Beim Erstellen des Skripts ist zu beachten, daß keinerlei Pfade oder Voreinstellungen vorausgesetzt werden dürfen und gewisse Sicherheitsmaßnahmen zu beachten sind. Ein recht bekanntes Programm, das eingehende Mail vorsortieren oder unerwünschte Mail gleich löschen kann ist beispielsweise 'procmail'.

Mailsysteme, die auf 'smail' oder 'sendmail' basieren, bieten noch einige weitere Features. Die Datei /etc/aliases ist hier von besonderem Interesse, da sich damit einige Mail-Dienste realisieren lassen:

7.2 Verbindung zu anderen UNIX-Rechnern

Der Datenaustauschmit anderen UNIX-Rechnern kann nicht nur über lokale Netze (LAN) sondern auch über Wähl- und Standleitungen der Post erfolgen (WAN). Es stehen folgenden Möglichkeiten zur Verfügung:

7.2.1 Am Anfang war das Modem

Zunächst wurde eine Möglichkeit gesucht, z. B. die Post über eine Kette mehrerer anderer Rechner weiterzuleiten und gegebenfalls auch einmal Dateien zu transferieren. Es entstanden die Programme, die heute unter dem Oberbegriff 'uucp' zusammengefaßt sind. Die Abkürzung 'uucp' steht für 'Unix to Unix Copy'. Bei uucp handelt es sich um ein System von Programmen und Protokollen zum Offline-Datentransfer, d. h. Mail, Kopieraufträge oder die Ausführung von Kommandos wurde zunächst in Form von Auftragsdateien in einem Verzeichnis (meist /var/spool/uucp) abgelegt.

In regelmäßigen Zeitabständen wird dann der eigentliche Datentransfer gestartet (Programm 'uucio' = Unix to Unix Copy I/O). Per Modem wird Kontakt zu einem entfernten Rechner aufgenommen und wechselseitig Daten ausgetauscht. Ist alles erledigt, wird die Verbindung wieder unterbrochen.

Heute wird vieles online im Netz erledigt, aber uucp hat immer noch seine Daseinsberechtigung, z. B. zum Austausch von Mail und Usenet-News. Wenn jemand beispielsweise sowieso nur einmal am Tag seine Mail bearbeitet dann kann dies offline, d. h. lokal geschehen und der Transfer irgendwann Nachts oder im Lauf des Tages erfolgen. Uucp-Software gibt es auch für andere Betriebssysteme (z. B. das Paket 'Waffle' für DOS) und so ist auch ein platformübergreifender Datenverkehr möglich. Außerdem kommt man so auch in Gegenden an seine Mail, in denen nur eine Telefonverbindung verfügbar ist. Das Thema wird im Kapitel über das Internet nochmals aufgegriffen. Um erreichbar und von anderen Rechnern unterscheidbar zu sein, braucht jedes System einen eindeutigen Knotennamen. Mit deren Hilfe gab es dann auch die erste Möglichkeit, Benutzer auf anderen Rechnern zu adressieren.

uname [-amnrsv]

Ausgabe des Knotennamens und weiterer Info. Wichtig sind:
s System Name des Rechners
n Knotenname des Rechners

Das Versenden von Post an ein anderes System erfolgte anfangs durch Angabe von Knotennahmen und Loginnamen des Empfängers, getrennt durch ein Ausrufezeichen, z. B.:

mailx -s "Konferenz an 12.7." werk2!hans

Die übrige Bedienung von mail erfolgt dann wie schon beschrieben. Es ist auch möglich, die Post über mehrere Knoten zu leiten, wenn zwischen dem eigenen Rechner und den Zielrechner keine direkte Verbindung besteht. Angenommen alle Rechner eines Unternehmens sind pr uucp gekoppelt, dann könnte der mail-Aufruf so aussehen:

mailx -s "Konferenz am 12.7." werk1!werk2!werk4!klaus

Nachteil dieser Wegbeschreibung, die wegen der Ausrufezeichen als 'Bang-Path' bezeichnet wird, ist die Festlegung ebe gerade auf einen Weg. Ist der Rechner "werk2" gerade nicht betriebsbereit, bleibt die Post hängen. Deshalb ist man schon sehr bald zu einer wegeunabhängigen Adressierung übergegangen, der an anderer Stelle beschriebenen Domain-Adressierung, die heute verwendet wird. Manchmal findet man noch Mischformen, bei denen sozusagen die letzte Wegstrecke noch als Bangpath notiert ist. Es gibt eine ganze Reihe von uucp-Kommandos:

uucp [Optionen] Quelldatei(en) Zieldatei

(Unix to Unix Copy) Kopieren von Dateien zwischen zwei Unix-Systemen. Für Quell- und Zeildatei kann dabei folgendes angegeben werden: Der Pfadname kann angegeben werden als:
  • ~Loginname[Pfadname]
    (absoluter Pfad) - uucp setzt für die Tilde ~ dann den Pfad zum Home-Directory des Benutzers ein.
  • ~/Pfadname
    uucp setzt für die Tilde ~ dem Pfad /usr/spool/uucppublic/ ein und hängt den angegebenen Pfad an.

    Von den Optionen werden nur einige vorgestellt:
    -jgibt die Auftragskennung aus
    -mSendet an der Aufrufer einen mail-Mitteilung über den Erfolg der Kopieraktion
    -nEmpfänger-Loginname Der Empfänger wird per mail über den Kopiervorgang informiert.

    uux [-jmu] Kommandostring

    (Unix to Unix command eXecution) Ermöglicht die Ausführung eines Kommandos auf einem anderen UNIX-Rechner. Die Dateien des Kommandos können auf eine ausgewählten Maschinen liegen. Der Kommandostring ist ähnlich aufgebaut wie bei uucp:

    Knotenname[~Loginname]Kommando

    Mit "uux Konotenname!login" kann man sich auf dem fremden Rechner anmelden, als ob man an einem seiner Terminals wäre. Dazu wird oft aber auch das folgende Kommando angeboten:

    cu [Optionen] Knotenname

    (Call Unix) Einloggen am Rechner mit dem angegebenen Knotennanmen. Es erfolgt dann ganz normal die Login-Aufforderung des entfernten Rechners - sozusagen die Minimalform eines Terminalprogramms für das Modem. cu wird heute fast nur noch verwendet, um angeschlossene Modems zu testen, Mit dem Parameter "-l" kann man eine Schnittstelle direkt ansprechen, z. B. cu -l /dev/ttyS0.

    Die uu-Kommandogruppe kennt noch eine Reihe weiterer Kommandos für den Verkehr zwischen UNIX-Rechnern - siehe weiterführende Literatur. uucp-Verbindungen sind jedoch in jedem Fall für Mail, Netnews und gelegentliche Dateitransfers ausreichend. Sehr viel komfortabler wird es jedoch, wenn über Netzwerkkabel, Standleitung, Modemverbindung oder sogar Satellitenfunk die einzelnen Systeme direkt vernetzt sind.

    7.2.2 Die Internet-Protokollfamilie

    Am häufigsten eingesetzt wird das Internet-Protokoll = TCP/IP (Transmission Control Protocol/Internet Protocol). Über TCP/IP lassen sich auch unterschiedliche Rechner miteinander vernetzen. Es deckt die untersten 4 Schichten des OSI-Modells ab (Bitübertragung, Datensicherung, Vermittlung, Transport). Einige Funktionen reichen jedoch bis zur Applikationsschicht hinauf. Grundsätzlich können TCP/IP-Verbindungen über die unterschiedlichsten Medien erfolgen. Durch die Verbindung zweier Netze entsteht so ein größeres Netz (Inter-Net). Dies hat zu einer weltweiten Vernetzung von Rechnern mit TCP/IP geführt, die unter dem Namen "Internet" läuft.

    Die Installation und Initialisierung von TCP/IP komplett zu beschreiben, würde die Grenzen dieses Skripts sicherlich sprengen. Eine solche Beschreibung ist auch ziemlich überflüssig, da nahezu jeder Hersteller eigene Installationsroutinen zur Verfügung stellt. Leider sind diese unter Unix nicht einheitlich, jedoch läuft die Einrichtung von TCP/IP zumeist schon während der Installation des Betriebssystems ab. Aus diesem Grund beschränken wir uns auf die allgemein wichtigen Kommandos und Konfigurationsdateien.

    Für weitergehende Information zur Netzwerktechnik sei auf das Skript Internet-Einführung.

    Schnittstellenkonfiguration mit dem ifconfig-Kommando

    Das Starten von TCP/IP erfolgt (unter Unix) durch Shell-Skripte, die je nach Unix-Derivat anders heißen und sich an ganz unterschiedlichen Stellen des jeweiligen Dateisystems befinden können. So unterschiedlich die Shell-Skripte auch sein mögen, die Initialisierung erfolgt in jedem Falle durch das ifconfig-Kommando. Hier wird auch die Initialisierung der Netzwerkschnittstellen vorgenommen. Dabei gibt es folgende Arten von Schnittstellen: Das Loopback-Interface ist eine spezielle Schnittstelle, die zum lokalen System zurückgeführt. Dies bedeutet, daß alle Daten, die durch das Loopback-Interface geschickt werden, wieder im lokalen System empfangen werden, Dieser Mechanismus erlaubt eine Kommunikation von lokalen Prozessen über TCP/IP und wird insbesondere von TCP/IP-Verwaltungsprozessen, aber auch von anderen Diensten genutzt (so z.B. bei Datenbanken). Die Standard-Internet-Adresse der Loopback-Schnittstelle ist 127.0.0.1 und sollte, obwohl es theoretisch möglich ist, nicht verändert werden. Initialisiert wird das LoopbackInterface durch das Kommando:

    ifconfig lo0 127.0.0.1

    Broadcast-Interfaces sind die üblichen Schnittstellen zu lokalen Netzwerken, über die mehrere Systeme erreichbar sind, und über die Broadcasts, also Nachrichten an alle, verschickt werden. Es handelt sich dabei um Schnittstellen zu Ethernet und TokenRing. Neben der Internet-Adresse werden bei der Initiatisierung des Broadcast-Interfaces auch die Netzmaske und die Broadcast-Adresse angegeben:

    ifconfig eth0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255

    Neben den Broadcast-Schnittstellen gibt es noch die sogenannten Point-to-Point-Schnittstellen. Sie sind dadurch gekennzeichnet, daß man nur über sie ein anderes System erreichen kann. Beispiele sind SLIP (Serial Line IP) und das Point-to-Point-Protokoll PPP, die Verbindungen über die serielle Schnittstelle oder per Modem/ISDN-Adapter WAN-Verbindungen zulassen. Die Initialisierung einer Point-to-Point-Schnittstelle hat z.B. die folgende Form:

    ifconfig ppp0 192.168.1.1 192.168.1.2 netmask 255.255.255.240

    So eine PPP-Verbindung bildet ein eigenständiges Netzwerk. Sollen mehrere Verbindungen kombiniert werden, so muß eine Unterteilung in Subnetze erfolgen. Das heißt, daß eine entsprechende Netzmaske gewählt werden muß. Wird als Argument für das ifconfig-Kommando nur der Name der Schnittstelle angegeben, so bezieht sich das auf die aktuelle Konfiguration der Schnittstelle, die dann ausgegeben wird:

    eth0      Link encap:10Mbps Ethernet  HWaddr 00:20:18:03:0B:F5
              inet addr:10.10.10.4  Bcast:10.10.10.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0
              TX packets:0 errors:0 dropped:0 overruns:0
              Interrupt:11 Base address:0x340
    

    Systemnamen und Internet-Adressen: /etc/hosts

    In dieser Datei werden die Systeme des Netzwerks mit ihrem Systemnamen und die dazu gehörenden Internet-Adressen aufgelistet. Die Einträge in die Datei /etc/hosts haben die folgende allgemeine Form:

    Internet-Adresse Name Aliase ...

    Dazu ein Beispiel:

    127.0.0.1   localhost
    192.168.0.1 sun1-lbs micky
    192.168.0.2 sun2-lbs minnie
    192.168.0.3 sun3-lbs goofy
    192.168.0.4 sun4-lbs donald
    192.168.0.5 sun5-lbs dagobert
    192.168.0.6 sun6-lbs daisy
    192.168.0.7 sun7-lbs tick
    192.168.0.8 sun8-lbs trick
    192.168.0.9 sun9-lbs track
    

    Nach der Internet-Adresse wird der "offizielle" Name des Systems angegeben, gefolgt von Alias-Namen für dieses System. Wird als Argument für ein Netzwerk-Kommando ein Name angegeben, so wird in dieser Datei die zugehörige Internet-Adresse ermittelt. Erst über die Adresse wird eine Verbindung zum Zielsystem aufgebaut. Die Datei /etc/hosts wird jedoch auch für den umgekehrten Vorgang benutzt. Mit einem IP-Datagram wird nur die Internet-Adresse des sendenden Systems mitgeschickt. Soll nun der zugehörige Name ermittelt werden, so geschieht dies ebenfalls mittels dieser Datei. Das Resultat ist jedoch immer der "offizielle" Name des Systems. Deshalb ist darauf zu achten, daß stets dieser Name verwendet werden muß, wenn ein Rechnername in weiteren Konfigurationsdateien eingetragen wird.

    Natürlich reicht das System mit /etc/hosts höchstens für ein lokales Kleinstnetz mit einer handvoll Rechner aus, denn auf jedem Rechner muß die /etc/hosts auf dem aktuellen Stand gehalten werden. Diesem Problem sahen sich auch bald die Väter des Internet gegenüber und so wurde die größte weltweit verteilte Datenbank, das Domain Name System (DNS) erfunden. Es gibt eine Software, welche die Namensdatenbank verwaltet und auf Anfrage zu einem Rechnernanen die IP-Adresse liefert oder umgekehrt. Das Programm ist unter UNIX in der Regel BIND (Berkely Internet Name Daemon). Es läuft als "Nameserver" auf normalerweise mindestens zwei Rechnern einer Domain. Mehr darüber finden Sie im DNS-Kapitel des Internet-Skripts. Für den Rechner, der DNS nutzen will gibt es zwei Dateien, /etc/hosts.conf und /etc/resolv.conf, die festlegen, wie der Nameserver genutzt wird. In /etc/hosts.conf wird festgelegt, wie der Namenssuche erfogen soll:

    order hosts bind
    multi on
    
    Mit order hosts bind wird festgelegt, daß zuerst in der lokalten Datenbank /etc/hosts gesucht werden soll und erst dann eine Nameserveranfrage an einen fernen Rechner gestartet wird. Die Datei /etc/resolv.conf enthält Infos über den Nameserver:
    search mydomain.net
    nameserver 10.10.10.4
    nameserver 10.10.10.1
    

    Wie die Datei /etc/hosts enthält auch die Datei /etc/networks Adressen und Namen. Diesmal sind es allerdings Namen für Netzwerke. Die Funktion dieser Datei ist durchaus mit der /etc/hosts vergleichbar: Netzwerk-Namen werden in Netzwerk-Adressen umgesetzt und umgekehrt. Die allgemeine Form eines Eintrags sieht dann so aus:

    Netzwerk-Name Netzwerk-Adresse Netzwerk-Aliase ...

    Zum Beispiel:

    loopback  127 
    admin-net 192.168.1 
    dev-net   192.168.2
    

    Eine weitere Datei ist für die Zuordnung der Portnummern zu den einzelnen Diensten wie Telnet, FTP, WWW, Mail, usw. zuständig. In dieser Datei, /etc/services, werden der Name des Dienstes, die Portnummer, das Transportprotokoll (UDP oder TCP) und Service-Aliase angegeben. Die allgemeine Form eines Eintrags in /etc/services hat die Form:

    Service-Name Portnummer/Protokoll Service-Aliases

    Wichtig: Hier sind nur Portnummern für Server spezifiziert. Client-Programme bekommen beim Verbindungsaufbau eine beliebige, freie Portnummer zugewiesen. So kann der Server wieder auf der Standard-Portnummer aus /etc/services auf einen weiteren Verbindungswunsch warten. Die spezifizierten Portnummern sind auf allen Rechnern im Netz gleich. Die Server-Programme entnehmen dieser Datei, auf welchen Port sie zugreifen müssen. Die Client-Programme finden hier die entsprechenden Portnummern ihrer Server. In /etc/services werden die Portnummern für TCP- und UDP-Dienste spezifiziert. Die Portnummern für diese beiden Transport-Protokolle sind völlig unabhängig voneinander. Trotzdem ist es im allgemeinen üblich, gleiche Portnummern für beide Protokolle zu benutzen, wenn ein Dienst über beide Transportprotokolle verfügbar ist.

    Ein Ausschnitt aus /etc/services:

    tcpmux            1/tcp                              # TCP port service multiplexer
    echo              7/tcp
    echo              7/udp
    discard           9/tcp          sink null
    discard           9/udp          sink null
    systat           11/tcp          users
    daytime          13/tcp
    daytime          13/udp
    netstat          15/tcp
    qotd             17/tcp          quote
    msp              18/tcp                      # message send protocol
    msp              18/udp                      # message send protocol
    chargen          19/tcp          ttytst source
    chargen          19/udp          ttytst source
    ftp              21/tcp
    #                22 - unassigned
    telnet           23/tcp
    #                24 - private
    smtp             25/tcp          mail
    #                26 - unassigned
    time             37/tcp          timserver
    time             37/udp          timserver
    rlp              39/udp          resource    # resource location
    nameserver       42/tcp          name        # IEN 116
    whois            43/tcp          nicname
    domain           53/tcp          nameserver  # name-domain server
    domain           53/udp          nameserver
    mtp              57/tcp                      # deprecated
    bootps           67/tcp                      # BOOTP server
    bootps           67/udp
    bootpc           68/tcp                      # BOOTP client
    bootpc           68/udp
    tftp             69/udp
    gopher           70/tcp                      # Internet Gopher
    gopher           70/udp
    rje              77/tcp          netrjs
    finger           79/tcp
    www              80/tcp          http         # WorldWideWeb HTTP
    www              80/udp                       # HyperText Transfer Protocol
    link             87/tcp          ttylink
    kerberos         88/tcp          krb5         # Kerberos v5
    kerberos         88/udp
    supdup           95/tcp
    #                100 - reserved
    hostnames        101/tcp          hostname    # usually from sri-nic
    iso-tsap         102/tcp          tsap        # part of ISODE.
    csnet-ns         105/tcp          cso-ns      # also used by CSO name server
    csnet-ns         105/udp          cso-ns
    rtelnet          107/tcp                      # Remote Telnet
    rtelnet          107/udp
    pop2             109/tcp          postoffice  # POP version 2
    pop2             109/udp
    pop3             110/tcp                      # POP version 3
    pop3             110/udp
    sunrpc           111/tcp
    sunrpc           111/udp
    auth             113/tcp          tap ident authentication
    sftp             115/tcp
    uucp-path        117/tcp
    nntp             119/tcp          readnews untp # USENET News Transfer Protocol
    ntp              123/tcp
    ntp              123/udp                      # Network Time Protocol
    netbios-ns       137/tcp                      # NETBIOS Name Service
    netbios-ns       137/udp
    netbios-dgm      138/tcp                      # NETBIOS Datagram Service
    netbios-dgm      138/udp
    netbios-ssn      139/tcp                      # NETBIOS session service
    netbios-ssn      139/udp
    imap2            143/tcp                      # Interim Mail Access Proto v2
    imap2            143/udp
    .....
    

    Es gibt bei UNIX zwei Möglichkeiten, einen Netzdienst anzubieten:

    Die erste Möglichkeit wird man bei stark frequentierten Diensten verwenden (z. B. http, smtp), da hier gleich der Server angesprochenwerden kann und nicht erst gestartet werden muß. Bei allen anderen Diensten nimmt man in der Regel den inetd. Dieser Prozeß hat einen Tabelle, in der steht, für welchen Port welches Programm zu starten ist - also eine recht flexible Angelegenheit. Will man beispielsweise einen neuen FTP-Server (etwa wu-ftpd statt des Standard-ftpd) einsetzen, so genügt das Ändern der Tabelle in der Datei /etc/inetd.conf und ein Restart des inetd (Kommando: telinit q. Ja, ohne "-" vor dem "q"). Man kann durch Auskommentieren von Zeilen in der inetd.conf auch nicht benötigte Netzdienste sperren und so den Rechner gegen Eindringlinge sicherer machen. Hier ein Auszug aus der Datei:
    # See "man 8 inetd" for more information.
    #
    # If you make changes to this file, either reboot your machine or send the
    # inetd a HUP signal.
    #
    #       
    #
    # These are standard services.
    #
    ftp         stream     tcp     nowait     root     /usr/sbin/wu.ftpd     wu.ftpd -a
    # ftp       stream     tcp     nowait     root     /usr/sbin/in.ftpd     in.ftpd
    telnet      stream     tcp     nowait     root     /usr/sbin/in.telnetd  in.telnetd
    # nntp      stream     tcp     nowait     root     tcpd     in.nntpd
    smtp        stream     tcp     nowait     root     /usr/sbin/sendmail    sendmail -v
    printer     stream     tcp     nowait     root     /usr/bin/lpd          lpd -i
    #
    # Shell, login, exec and talk are BSD protocols.
    #
    shell       stream     tcp     nowait     root     /usr/sbin/in.rshd     in.rshd -L
    login       stream     tcp     nowait     root     /usr/sbin/in.rlogind  in.rlogind
    exec        stream     tcp     nowait     root     /usr/sbin/in.rexecd   in.rexecd
    # talk      dgram      udp     wait       root     /usr/sbin/in.talkd    in.talkd
    # ntalk     dgram      udp     wait       root     /usr/sbin/in.talkd    in.talkd
    #
    # Kerberos authenticated services
    #
    # klogin    stream     tcp     nowait     root     /usr/sbin/tcpd     rlogind -k
    # eklogin   stream     tcp     nowait     root     /usr/sbin/tcpd     rlogind -k -x
    # kshell    stream     tcp     nowait     root     /usr/sbin/tcpd     rshd -k
    #
    # Services run ONLY on the Kerberos server
    #
    # krbupdate stream     tcp     nowait     root     /usr/sbin/tcpd     registerd
    # kpasswd   stream     tcp     nowait     root     /usr/sbin/tcpd     kpasswdd
    #
    # Pop et al
    #
    # pop2      stream     tcp     nowait     root     /usr/sbin/in.pop2d in.pop2d
    pop3        stream     tcp     nowait     root     /usr/sbin/popper   popper -s
    #
    # Comsat - has to do with mail.
    #
    # comsat    dgram     udp     wait     root        /usr/sbin/tcpd     in.comsat
    #
    # The Internet UUCP service.
    #
    # uucp      stream     tcp     nowait     uucp     /usr/sbin/tcpd     /usr/lib/uucp/uucico     -l
    #
    # Tftp service is provided primarily for booting.  Most sites
    # run this only on machines acting as "boot servers." 
    #
    # tftp      dgram     udp     wait     nobody      /usr/sbin/tcpd     in.tftpd
    # bootps    dgram     udp     wait     root        /usr/sbin/bootpd   bootpd
    #
    # Finger, systat and netstat give out user information which may be
    # valuable to potential "system crackers."  Many sites choose to disable 
    # some or all of these services to improve security.
    # Try "telnet localhost systat" and "telnet localhost netstat" to see that
    # information yourself!
    #
    finger      stream     tcp     nowait     nobody   /usr/sbin/in.fingerd    in.fingerd   -w
    systat      stream     tcp     nowait     nobody   /bin/ps                 /bin/ps      -auwwx
    netstat     stream     tcp     nowait     root     /bin/netstat            /bin/netstat -a
    ident       stream     tcp     nowait     root     /usr/sbin/in.identd     in.identd
    #
    # These are to start Samba, an smb server that can export filesystems to
    # Pathworks, Lanmanager for DOS, Windows for Workgroups, Windows95, Lanmanager
    # for Windows, Lanmanager for OS/2, Windows NT, etc.  Lanmanager for dos is
    # available via ftp from ftp.microsoft.com in bussys/MSclient/dos/. Please read
    # the licensing stuff before downloading. Use the TCP/IP option in the client.
    # Add your server to the \etc\lmhosts (or equivalent) file on the client.
    netbios-ssn   stream   tcp     nowait     root    /usr/bin/smbd    smbd
    netbios-ns    dgram    udp     wait       root    /usr/bin/nmbd    nmbd
    # End.
    

    Als letzte der Konfigurations-Dateien soll die /etc/protocols behandelt werden. Hier werden die über IP arbeitenden Protokolle aufgelistet. Die allgemeine Form eines Eintrags hat die Form:

    Protokoll-Name Protokoll-Nummer Protokoll-Aliase ...

    Zum Beispiel:

    ip   0  IP     # internet protocol, pseudo protocol number 
    icmp 1  ICMP   # internet control message protocol 
    igmp 2  IGMP   # internet group multicast protocol
    ggp  3  GGP    # gateway-gateway protocol 
    tcp  6  TCP    # transmission control protocol 
    egp  8  EGP    # Exterior-Gateway Protocol 
    PUP 12  PUP    # PARC universal packet protocol 
    udp 17  UDP    # user datagram protocol 
    idp     22     IDP        # WhatsThis?
    hello 63 HELLO # HELLO Routing Protocol
    raw     255     RAW        # RAW IP interface
    

    Die Protokoll-Nummer wird im Header des Internet-Protokolls angegeben.

    7.2.3 Netzwerk-Kommandos

    Vorab sollen ganz kurz einige Remote-Kommandos besprochen werden. Aus Berkley-UNIX in die Release 4 übernommen wurde die Familie der sogenannten 'R-Kommandos' (weil sie alle mit "r" beginnen). Sie erlauben komfortable Kommunikation zwischen UNIX-Rechnern auf der Basis von TCP/IP.

    Jeder Rechner im Netz (= Host) besitzt eine Datei /etc/hosts.equiv, in der "vertrauenswürdige" Rechner eingetragen sind. Wollen sich Benutzer von einem dieser Rechner auf dem lokalen Computer einloggen, brauchen sie kein Passwort für den Rechner-Rechner-Übergang (wobei "Benutzer" auch Dämonprozesse sein können --> automatischer Datenaustausch möglich). Enthält die Datei nur eine Zeile mit einem '+'-Zeichen, werden alle angeschlossenen Rechner akzeptiert. Gibt es keine "vertrauenswürdigen" Rechner, ist jeweils die Eingabe des Login-Paßwortes nötig. Außerdem funktioniert das Ganze nur, wenn man auf Quell-und Zielrechner die gleiche Benutzerkennung hat.

    Die Benutzer eines Rechners können auf einen anderen Rechner im Home-Verzeichnis eine Datei namens '.rhosts' anlegen, über deren Einträge entschieden wird, von welchem Rechner aus der Benutzer sich ohne Passwort einloggen darf.

    rlogin [-l Benutzername]

    Rechnername Einloggen auf einem anderen Rechner im Netz. Nach Eingabe des Passwortes können Sie auf diesem Rechner genauso arbeiten, wie auf den lokalen Rechner (fehlt die explizite Angabe einer Benutzerkennung, wird die Benutzerkennung automatisch übertragen).

    rcp [-r] Quellrechner:datei Zielrechner:datei

    Kopieren von Dateien zwischen zwei Rechnern. Beim eigenen Rechner kann die Angabe Quell-/Zielrecher entfallen. Die Option "-r" erlaubt das Kopieren ganzer Verzeichnisbäume.

    rsh Host Kommando

    Erzeugen einer Shell auf einen fernen Rechner im Netz. Die Ausgaben erfolgen über die lokale Shell. Umleitung der Ausgabe auf dem Host durch Quoten des Umleitungssymbols ('>').

    rwho

    Who am Remote-Rechner

    Weitere Netzwerkprogramme, die man ständig zum Fern-Login braucht, sind 'telnet' und 'ftp'. An dieser Stelle gibt es eine kurze Bedienungsanleitung, im Internet-Skript werden die Hintergründe erklärt.

    telnet

    telnet eignet sich besonders für die Kommunikation von UNIX-Rechnern mit Computern, die andere Betriebssysteme verwenden. Um eine Telnet-Sitzung zu starten wird telnet aufgerufen. Danach lassen sich telnet-Kommandos geben:

    telnet oder telnet Rechnername

    Für die Kommunikation gibt es eine ganze Reihe von Befehlen, z. B.:

    helpHilfe
    openVerbindung aufbauen
    closeVerbindung beenden
    displayBetriebsparameter anzeigen
    quitTelnet beenden

    Beispiel: Verbindung zum Rechner sun1-lbs

    telnet sun1-lbs

    Telnet reagiert daraufhin mit:

    Trying to ..... 
    Connect to sun1-lbs 
    Escape Character is '^]'
    
    Jetzt folgt die normale Loginsequenz auf dem Rechner sun1-lbs. Um weitere Kommandos an Telnet geben zu können, muß der Befehl mit dem angegeben Escape-Character eingeleitet werden (im Beispiel das ESC-Zeichen). Beenden der Verbindung erfolgt in diesem Fall mit "^] quit" oder einfach Ctrl-D.

    telnet kann auch vorzüglich zum Testen von Verbindungen und Servern verwendet werden. Bei Kenntnis der Protokolle (nachlesbar in den entsprechenden RFCs) kann ein Protokoll wie SMTP, NNTP, HTTP, usw. auch von Hand nachgebildet werden. Man kann so durch eine telnet-Verbindung nachsehen, ob auf einem fernen System Mail-, News-, WWW- oder andere Dienste laufen.

    ftp (File Transfer Protocol)

    Der Verbindungsaufbau erfolgt wie bei Telnet, indem man dem FTP-Programm den gewünschten Zielrechner angibt. Bei erfolgreicher Verbindung kommt vom fernen Rechner wieder ein Login-Prompt. FTP funktioniert aber auch, wenn man auf dem fernen Rechner keine Benutzerberechtigung hat, denn viele Rechner bieten große Dateibereiche über sogenannten 'anonymen' FTP. Man gibt in diesem Fall als Benutzernamen 'ftp' ein und als Passwort die eigene Mailadresse. Danach kann man sich im öffentlichen Dateibereich tummeln.

    Neben den Kommandos für den "Normalbenutzer" gibt es noch Testkommandos, die recht hilfreich sind, wenn man einen fernen Rechner nicht erreicht oder, um mehr über das Netz zu erfahren.

    ping

    Falls man mit dem Kommando ping zuerst einmal "Ping-Pong" assoziert, liegt man gar nicht so falsch. Allerdings werden hier keine Zelluloidbälle, sondern Datenpakete hin und her geschickt. Man kann mit ping testen, ob ein Rechner im Netz erreichbar ist. Das Programm ping erzeugt ICMP-Echo-Request-Pakete, die mit ICMP-Echo-Response-Paketen beantwortet werden, wenn sie das angegebene System erreichen. Das Zielsystem kann durch seinen Systemnamen (falls in der /etc/hosts oder im Nameservice enthalten) oder durch seine Internet-Adresse angegeben werden. Durch den einfachen Aufruf

    $ ping donald

    erhält man je nach System die Meldung "donald is alive." oder es wird pro Sekunde 1 Datenpaket gesendet. Die als Echo zurückkommenden Pakete werden angezeigt. Ab gebrochen wird das Ping-Pong-Spiel durch das Interrupt-Signal (Delete, Ctrl-C). Nach dem Abruch von ping wird noch eine kurze Statistik ausgegeben. (die Wortkarge Variante von ping muß man durch die Option "-s" zur Dauerarbeit bringen). Besonders interessant ist die Angabe "packet loss", also der Prozentsatz der nicht be antworteten Pakete. Bei einer einwand freien Verbindung, insbesondere in einem lokalen Netz, sollte hier eigentlich immer 0% stehen. Im Falle von 100% ist definitiv etwas nicht in Ordnung. Passiert dies bei allen Systemen, so ist das Netz defekt. Beispiel:

    $ ping www.e-technik.fh-muenchen.de
    PING www.e-technik.fh-muenchen.de (129.187.206.140): 56 data bytes
    64 bytes from 129.187.206.140: icmp_seq=0 ttl=242 time=48.9 ms
    64 bytes from 129.187.206.140: icmp_seq=1 ttl=242 time=41.9 ms
    64 bytes from 129.187.206.140: icmp_seq=2 ttl=242 time=41.3 ms
    64 bytes from 129.187.206.140: icmp_seq=3 ttl=242 time=39.9 ms
    64 bytes from 129.187.206.140: icmp_seq=4 ttl=242 time=44.9 ms
    64 bytes from 129.187.206.140: icmp_seq=5 ttl=242 time=42.9 ms
    64 bytes from 129.187.206.140: icmp_seq=6 ttl=242 time=45.4 ms
    64 bytes from 129.187.206.140: icmp_seq=7 ttl=242 time=40.5 ms
    64 bytes from 129.187.206.140: icmp_seq=8 ttl=242 time=41.4 ms
    64 bytes from 129.187.206.140: icmp_seq=9 ttl=242 time=42.3 ms
    
    --- www.e-technik.fh-muenchen.de ping statistics ---
    10 packets transmitted, 10 packets received, 0% packet loss
    round-trip min/avg/max = 39.9/42.9/48.9 ms
    

    arp

    Das "Address Resolution Protocol" dient der Zuordnung von Internet-Adressen zu Ethernet-Adressen. Zu diesern Zwecke existiert eine Adreßumwandlungstabelle (adress-translation table), die normalerweise vom ARP selbständig aktualisiert wird. Mit der Option "-a" wird der aktuelle Inhalt der Tabelle ausgegeben, z.B.:
    $ arp -a
    Net to Media Table
    Device   IP Address  -------             Mask      Flags   Phys Addr 
    ------ --------------------------- --------------- ----- -----------------
    le0    brokrz.lrz-muenchen.de      255.255.255.255       00:00:a2:0f:76:97
    le0    infoserv.rz.fh-muenchen.de  255.255.255.255       00:e0:29:06:18:d3
    le0    flynt.rz.fh-muenchen.de     255.255.255.255       00:e0:29:08:49:f1
    le0    kobra.rz.fh-muenchen.de     255.255.255.255       00:08:c7:a9:6c:cc
    le0    netmon.rz.fh-muenchen.de    255.255.255.255       00:e0:29:0e:83:92
    le0    linux4.rz.fh-muenchen.de    255.255.255.255       00:00:c0:93:19:d3
    le0    linux5.rz.fh-muenchen.de    255.255.255.255       00:00:c0:37:19:d3
    le0    door2.rz.fh-muenchen.de     255.255.255.255       00:00:c0:3f:fb:a7
    le0    wapserv                     255.255.255.255 SP    08:00:20:23:02:88
    le0    sun10.rz.fh-muenchen.de     255.255.255.255       08:00:20:86:ce:5e
    le0    kiosk1.rz.fh-muenchen.de    255.255.255.255       00:00:c0:60:af:d7
    le0    satellit.rz.fh-muenchen.de  255.255.255.255       08:00:20:71:77:b4
    le0    kaputt.rz.fh-muenchen.de    255.255.255.255       00:50:56:82:f0:f0
    
    Mit Hilfe der Option "-d" können Einträge aus dieser Tabelle gelöscht werden. Die Einträge sind jedoch nicht nicht permanent, sondem nach einer gewissen Zeit verschwinden sie wieder. Daher ist es meistens nicht notwendig einen Eintrag manuell zu entfernen.

    netstat

    Mit Hilfe des Programms netstat können Status-Information über TCP/IP ausgegeben werden. Bei der Fehlersuche kann sich dieses Programm ebenfalls als durchaus nützlich erweisen. So wird mit der Option "-i" eine Statistik über die Benutzung der Schnittstellen ausgegeben. Die Statistik zeigt die Namen der installierten Schnittstellen, die "Maximal transmission unit" als die maximale Paketgröße des Netzwerks, das Netzwerk, zu dem die Schnittstelle führt und die Adresse der Schnittstelle.
    Kernel Interface table
    Iface   MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
    lo     3584   0    220      0      0      0    220      0      0      0 BLRU
    eth0   1500   0      0      0      0      0      0      0      0      0 BRU
    
    Möchte man die Angaben numerisch, so verwendet man netstat -in. Von besonderem Interesse sind die letzten fünf Spalten. Hier werden die Anzahl von empfangenen und gesendeten Paketen, die Anzahl der dabei auftretenden Fehler, sowie die Anzahl der Kollisionen ausgegeben, in die das System verwickelt waren. Sind die Zahlen lpkts und Opkts gleich Null oder ist Opkts gleich Oerrs, so liegt ein mehr oder weniger gravierendes Hardware-Problem vor. Die Anzahl der Kollisionen sollte bei jedem System im Netz unter 5% von Opkts liegen. In die sem Fall arbeiten die Netzwerkschnittstellen effizient. Eine weitere interessante Option des netstat-Kommandos ist die Möglichkeit, sich die aktuellen Verbindungen und aktiven Server mittels der Option "-a" anzeigen zu lassen. Bei diesem Aufruf werden zunächst die zur Zeit benutzten Verbindungen ausgegeben. Dies ist dadurch gekennzeichnet, daß in der Spalte (state) der Zustand ESTABLISHED anaeaeben wird. An .schließend werden alle aktiven Server Prozesse ance-eben, d.h. alle Server, die zur Zeit erreichbar sind. Ein Auszug aus der Ausgabe von netstat -a könnte beispielsweise so aussehen:
    Active Internet connections (including servers)
    Proto Recv-Q Send-Q Local Address          Foreign Address        (State)       User
    tcp        0      0 *:netbios-ssn          *:*                    LISTEN        root       
    tcp        0      0 *:nntp                 *:*                    LISTEN        root       
    tcp        0      0 *:auth                 *:*                    LISTEN        root       
    tcp        0      0 *:sunrpc               *:*                    LISTEN        root       
    tcp        0      0 *:pop3                 *:*                    LISTEN        root       
    tcp        0      0 *:www                  *:*                    LISTEN        root       
    tcp        0      0 *:finger               *:*                    LISTEN        root       
    tcp        0      0 *:midinet              *:*                    LISTEN        root       
    tcp        0      0 *:http-rman            *:*                    LISTEN        root       
    tcp        0      0 *:btx                  *:*                    LISTEN        root       
    tcp        0      0 *:smtp                 *:*                    LISTEN        root       
    tcp        0      0 *:telnet               *:*                    LISTEN        root       
    tcp        0      0 *:ftp                  *:*                    LISTEN        root       
    tcp        0      0 *:netstat              *:*                    LISTEN        root       
    tcp        0      0 *:systat               *:*                    LISTEN        root       
    tcp        0      0 *:printer              *:*                    LISTEN        root       
    tcp        0      0 *:shell                *:*                    LISTEN        root       
    tcp        0      0 *:login                *:*                    LISTEN        root       
    tcp        0      0 *:exec                 *:*                    LISTEN        root       
    udp        0      0 *:rplay                *:*                    
    udp        0      0 *:netbios-ns           *:*                    
    udp        0      0 *:sunrpc               *:*                    
    udp        0      0 *:ntalk                *:*                    
    udp        0      0 *:talk                 *:*                    
    udp        0      0 *:syslog               *:*                    
    raw        0      0 *:1                    *:*                    
    Active UNIX domain sockets
    Proto RefCnt Flags      Type            State           Inode Path
    unix  1      [ ACC ]    SOCK_STREAM     LISTENING         417 /dev/log
    unix  2      [ ]        SOCK_STREAM     CONNECTED         440 
    unix  2      [ ]        SOCK_STREAM     UNCONNECTED       441 /dev/log
    unix  2      [ ]        SOCK_STREAM     CONNECTED         499 
    unix  2      [ ]        SOCK_STREAM     UNCONNECTED       500 /dev/log
    unix  2      [ ]        SOCK_STREAM     CONNECTED         517 
    unix  2      [ ]        SOCK_STREAM     UNCONNECTED       518 /dev/log
    
    Die erste Spalte enthält das Transportprotokoll. Die zweite und dritte Spalte sagen etwas über die Anzahl der Bytes in der Empfangs- bzw. Sende-Warteschlange aus. Die nächsten beiden Spalten geben lokale und ferne Adressen einer Verbindung an. Diese Adressen bestehen aus der Internet-Adresse und der Portnummer der Kommunikationspartner. Ist der Rechner in der /etc/hosts bzw. der Dienst in der /etc/services eingetragen, so werden statt der Adressen Rechnername bzw. der Name des Services aus gegeben. Dies läßt sich durch den Aufruf von netstat -in verhindern. Handelt es sich 4611 um einen Eintrag für einen aktiven Server, so wird die lokale Adresse in der Form "*.<portnummer>" und ferne Adressen in der Form "*.*" angegeben. Diese Art der Ausgabe zeigt an, daß der entsprechende Dienst bereit ist. Bei TCP-Diensten zeigt zusätzlich die letzte Spalte an, daß der Server auf LISTEN aesetzt ist. Kommt für einen speziellen Dienst keine Verbindung zustande, obwohl andere Programme (z.B. ping) funktionieren. so kann man mittels netstat -a auf dem Zielsystem überprüfen, ob der Server dort aktiv ist. Nur dann kann eine entsprechende Verbindung überhaupt aufgebaut werden.

    traceroute

    Um festzustellen, welchen Weg die Datenpakete zu einem fernen Rechner nehmen und wie "gut" die Verbindung dorthin ist, kann man 'traceroute' einsetzen. Das Programm schickt UDP-Pakete mit unterschiedlicher "Lebensdauer" an einen unbenutzten Port und wertet so die Fehlermeldungen der einzelnen Router und Gateways aus. Dem Kommando wird wie bei Ping nur der Rechnername oder eine IP-Nummer als Parameter übergeben. Für jeden Gateway wird dann auf dem Bildschirm eine Zeile ausgegeben:
    Zähler Gateway-Name Gateway-IP-Nummer "round-trip"-Zeit (3 Werte)
    Traceroute sendet jeweils drei Datenpakete. Wenn auf ein Paket keine Antwort erfolgt, wird ein Sternchen (*) ausgegeben. Ist ein Gateway nicht erreichbar, wird statt einer Zeitangabe '!N' (network unreachable) oder '!H' (host unreachable) ausgegeben. Man kann so feststellen, wo eine Verbindung unterbrochen ist, und auch, welchen Weg die Daten nehmen - wo also der Zielrechner in etwa steht. Bei grafischen Benutzerschnittstellen erfolgt die Parameterangabe über Dialogfelder und nicht in der Kommandozeile.
    $ traceroute www.linux.org
    traceroute to www.linux.org (198.182.196.56), 30 hops max, 40 byte packets
     1  space-gw2m (194.97.64.8)  2.758 ms  3.637 ms  2.491 ms
     2  Cisco-M-IV.Space.Net (195.30.0.123)  6.413 ms  4.118 ms  4.107 ms
     3  Cisco-M-Fe0-0.Space.Net (195.30.0.126)  4.826 ms  4.508 ms  5.53 ms
     4  Cisco-ECRC-H1-0.Space.Net (193.149.44.2)  5.977 ms  6.273 ms  20.832 ms
     5  munich-ebs2-s0-0-0.ebone.net (192.121.158.189)  14.415 ms  17.018 ms  8.575 ms
     6  newyork-ebs1-s5-0-0.ebone.net (195.158.224.21)  137.35 ms  139.103 ms  138.14 ms
     7  serial0-0-1.br1.nyc4.ALTER.NET (137.39.23.81)  137.132 ms  141.742 ms  141.207 ms
     8  134.ATM2-0.XR1.NYC4.ALTER.NET (146.188.177.178)  135.375 ms  128.12 ms  165.913 ms
     9  189.ATM3-0.TR1.EWR1.ALTER.NET (146.188.179.54)  141.83 ms  144.798 ms  362.469 ms
    10  105.ATM4-0.TR1.DCA1.ALTER.NET (146.188.136.185)  145.321 ms  147.889 ms  152.43 ms
    11  299.ATM6-0.XR1.TCO1.ALTER.NET (146.188.161.169)  354.577 ms  133.535 ms  348.647 ms
    12  193.ATM8-0-0.GW2.TCO1.ALTER.NET (146.188.160.49)  152.444 ms  369.313 ms  150.106 ms
    13  uu-peer.oc12-core.ai.net (205.134.160.2)  365.008 ms  509.81 ms  144.898 ms
    14  border-ai.invlogic.com (205.134.175.254)  270.065 ms  341.586 ms  153.441 ms
    15  router.invlogic.com (198.182.196.1)  356.496 ms  506.371 ms  532.983 ms
    16  www.linux.org (198.182.196.56)  584.957 ms  300.612 ms  380.004 ms
    

    7.2.4 Binärdaten per Mail (oder News) versenden

    Da nach wie vor 7-Bit-ASCII als kleinster gemeinsamer Standard für News und Mail gilt, lassen sich Binärdateien nicht ohne weiteres posten. Abhilfe schaffen hier die Programme UUENCODE und UUDECODE, mit deren Hilfe binäre Daten auf den Bereich der druckbaren ASCII-Zeichen (Großbuchstaben, Ziffern und Sonderzeichen) abbilden lassen. Es werden also Bytes in 6-Bit-Worten codiert und in Zeilen umbrochen. Die mit UUENCODE erzeugte Datei ist nun zwar größer als die Ursprungsdatei, sie läßt sich aber problemlos per News oder Mail verbreiten. Die "uuencodete" Datei enthält am Anfang eine Zeile mit Zugriffsrechte und den Dateinamen:

    begin 644 camera.wav Danach folgen die codierten Daten und als Abschluß eine Zeile

    end

    Eine weitere Form der Codierung findet man bei der Verbreitung von Programmquellen und anderen zusammengehörenden Texten (Programmquellen bestehen in der Regel aus mehreren Quelldateien, Manualpages, Makefile, usw.). Diese Dateien kann man zu sogenannten 'Shell-Archiven' zusammenfassen. Hier wird ein komplettes Shell-Skript gepostet, das die Dateien in Form einzelner Here-Dokumente enthält. Man startet das Skript, wodurch die einzelnen Dateien ausgepackt und meist auch noch auf Korrektheit (Prüfsumme) geprüft werden. Hier als Beispiel der Anfang eines Shell-Archivs:

    #! /bin/sh 
    # This is a shell archive. Remove anything before this line, then 
    # feed it into a shell via "sh file" or similar. To overwrite 
    # existing files, type "sh file -c". 
    # Contents: bells.sh hells-bells.au.uu 
    PATH=/bin:/usr/bin:/usr/ucb ; export PATH 
    echo If this archive is complete, you will see the following message: 
    echo ' "shar: End of archive."' 
    if test -f 'bells.sh' -a "${1}" != "-c" ; then 
      echo shar: Will not clobber existing file \"'bells.sh'\"
    else 
      echo shar: Extracting \"'bells.sh'\" \(581 characters\) 
    sed "s/^X//" >'bells.sh' <<'END_OF_FILE' 
    X#!/bin/
    X 
    XBELL=/usr/local/sounds/hells-bells.au
    XPLAY=/usr/local/bin/play 
    XVOL=40 XDATE=`date +%H:%M`
     XMINUTE=`echo $DATE
    | sed -e 's/.*://'`
     XHOUR=`echo $DATE | sed -e 's/:.*//'` 
    X 
     ....
    

    Um mehrere Dateien in einer einzigen zusammenzufassen verwendet man in der Regel das tar-Kommando (Tape ARchive), nur wird hier nicht auf das Band geschrieben, sondern alle Dateien und Verzeichnisse in eine einzige Datei geschrieben (Option "f"). Analog kann ein Archiv dann wieder "ausgepackt" werden.

    tar cvf datei(en) archiv Archiv erzeugen (c = create)
    tar xvf archivArchiv auspacken (x = extract)
    tar tvf archivArchiv ansehen
    (das "v" steht wieder mal für "verbose")

    Um z. B. alle Dateien des Verzeichnisses 'bin' (und dessen Unterverzeichnisse) in einem Archiv zu sichern, geben das Kommando:

    tar cvf bin binaeres.tar

    tar kann aber auch verwendet werden, um ganze Dateibäume auf der Platte zu verschieben:

    (cd Quelldir ; tar cvf - ) | (cd Zieldir ; tar xvfp - )

    Damit Übertragungszeit beim ftp gespart wird, kann man nun das Archiv noch komprimieren, wozu bei fast allen Systemen die Kommandos pack/unpack bzw. compress/uncompress existieren:

    pack datei

    komprimiert die Datei und ersetzt sie durch die komprimierte Version, wobei an den Namen die Endung ".z" angehängt wird. Mit

    unpack datei.z

    wird die Datei wiederhergestellt.

    compress datei

    komprimiert die Datei und ersetzt sie durch die komprimierte Version, wobei an den Namen die Endung ".Z" angehängt wird. Mit

    uncompress datei.Z

    wird die Datei wiederhergestellt, wobei das Ergebnis von compress wesentlich kompakter als bei pack ist.

    In letzter Zeit wurde der GNU-Zip zum Standard. Er liefert bessere Ergebnisse als compress und kann auch mit pack oder compress bearbeitete Dateien bearbeiten. Die Aufrufe lauten:

    gzip datei

    zum Komprimieren und

    gunzip datei oder gzip -d datei

    zum Dekomprimieren.

    7.3 NFS - Network File System

    NFS erlaubt das Einbinden einer beliebigen Platten-Partition eines Computers in das Dateisystem eines anderen Rechners. Dazu wird entweder per mount-Befehl oder über die Datei /etc/fstab bzw. /etc/vfstab angegeben, welches Verzeichnis eines fernen Rechners auf welches lokale Verzeichnis gemountet werden soll.

    Die einzige Konfigurationsdatei für den NFS-Dämon des NFS-Servers ist die Datei /etc/exports mit folgendem Format:

    Verzeichnis-Pfad     Rechnernamen (Optionen)
    
    Links steht das Verzeichnis, das der NFS-Server exportieren soll, beispielsweise /home/public oder /cdrom. In der Mitte stehen die Rechner, die Zugriff auf das Verzeichnis haben sollen, und danach in Klammern die Optionen. ACHTUNG: Beachten Sie das Leerzeichen zwischen den Rechnernamen und den Optionen! Nach jeder Änderung der Datei müssen Sie den Portmapper neu starten und dann den NFS-Dämon neu einlesen lassen.

    Die zugriffsberechtigten Client-Rechner können Sie auf drei Arten definieren:

    Die gebräuchlichsten Optionen sind:

    Im folgenden Beispiel sollen folgende Zugriffe möglich sein: Auf die erste CD-ROM bekommen die Clients nur Lesezugriff. Der Rechner boss.netzmafia.de benötigt root-Zugriff auf /install knecht.netzmafia.de darf ebenfalls auf /install zugreifen, allerdings ohne daß Dateien des Benutzers root als solche erscheinen. Die Home-Verzeichnisse aller Benutzer auf dem Server exportiert der Server an alle Rechner im Subnetz, damit die Benutzer auf allen Clients das gleiche Home-Verzeichnis bekommen:

    # /etc/exports
    #
    /cdrom     *.netzmafia.de (ro)
    /install   boss.netzmafia.de (rw,no-root-squash) \
               knecht.netzmafia.de (ro,root-squash)
    /home      192.168.253.255/255.255.255.255
    
    Beim Client werden die Verzeichnisse unter Angabe des Servernamens (durch Doppelpunkt getrennt) eingebunden. Das kann entweder per mount-Kommando geschehen, z. B. durch:
    mount nfs.netzmafia.de:/cdrom -t nfs /opt/cdrom
    
    oder in der Datei /etc/fstab, z. B.:
          .
          .
    nfs.netzmafia.de:/cdrom    /opt/cdrom  nfs  ro         0 0
    nfs.netzmafia.de:/home     /home       nfs  defaults   0 0
          .
          .
    

    Zum Inhaltsverzeichnis Zum nächsten Abschnitt
    Copyright © FH München, FB 04, Prof. Jürgen Plate