Unterlagen zum Kurs: Unixgrundlagen

März 1998
M. Feiler, Administrator an der Universität Hohenheim
Dr. G. Preissler
 

kleine Änderungen von Martin Herweg: Ich habe überwiegend Dinge gestrichen, die nur fürs Rechenzentrum der Uni Hohenheim relevant sind.


Inhaltsverzeichnis

Erstellt am: Mon Jan 11 14:45:19 MET 1999 durch html2index c 1997 M.Feiler 
    Vorwort 
    Übersicht über den Kurs 
        Kurs-Termin(e) 
        Erster Tag (Montag) 
        Zweiter Tag (Dienstag) 
        Dritter Tag (Mittwoch) 
        Vierter Tag (Donnerstag) 
    Linux / Unix Grundlagen 
      Für wen Linux nichts ist 
      Warum Linux? Was kann man mit Linux machen?
      Vorstellung der Linux-Installation im CIP4 
      Shells
      Variable, Zuweisung
      Nur ein Dateibaum 
      Die Pipes ( < | > ) und die Filter
      Vorder- und Hintergrund 
      Ein paar Kommandos :
        Allgemeine Befehle / Programme 
          man (Hilfe)
          apropos 
          kpasswd oder passwd 
          startx , xinit, open , .... 
        Dateibaum Operationen 
          ls (besser als dir)
          mkdir (Verzeichnis anlegen) 
          cd (Verzeichnis wechseln)
          pwd (aktuellen Pfad anzeigen) 
          rmdir (Verzeichnis löschen) 
          mv (verschieben) 
          cp (kopieren) 
          ln (eine Datei mit zwei Namen) 
          chmod (Dateieigenschaften ändern) 
        Prozeßoperationen 
          ps (Prozesse anzeigen) 
          kill (Prozeß abschießen) 
          bg
          fg
          top (die gefräßigsten Prozesse anzeigen) 
        Filter 
          grep (bestimmte Zeilen herausfinden) 
          sort (zeilenweise sortieren) 
          banner (GROSS UND FETT) 
          basename (der Programmname ohne Pfad) 
          dirname (der Pfadanteil) 
          strings (strings eines binary) 
          tail (Dateiende) 
          head (Dateianfang) 
          wc (Word Count) 
        Datei-Operationen 
          cat 
          less oder more 
          ispell (Rechtschreibung) 
          awk 
          sed (stream editor) 
          vi bzw. vim (Suizidgefahr!) 
        Netzwerkbefehle 
          route oder netstat -r oder netstat -rn 
          netstat 
          ifconfig 
          ping 
          telnet 
          ftp 
        Den Pinguin landen (Linux herunterfahren) 
          sync 
          reboot, halt und shutdown 
        Speziell für Shellscript 
          line 
          test 
    Die Installation von Linux auf einem PC 
      Systemvoraussetzungen 
      Verträglichkeit mit anderen Systemen 
      Was muß vor der Installation geklärt sein? 
      Partitionieren der Festplatte 
      Installationsquellen, ein Beispiel 
      Anbindung des Rechners ans Institutsnetz/Campusnetz
      Anbindung per Modem von zuhause aus 
        Verbindungsaufbau als Terminal 
          Das Modem kontaktieren 
          Wählen lassen 
        PPP-Setup (Verweise)
      Systemadministration (Basics, Tools)
        Die Systemstart-Mimik 
        Admin-Frontends 
        Benutzerverwaltung 
        Software-Installation 
        Boot-Log 
        Die Netzanbindung 
        Kernel-Modulen 
        Remote einloggen 
        Mounten von Filesysteme 
        Die System- oder Resourcen-Auslastung 
        Das Drucken
        Wiederkehrende Ausführung: Cron 
        Die restlichen Dienste 
      Einige Worte zur Sicherheit (Rechner und Internet)
        Das Passwort 
        Locken oder ausloggen
        /etc/passwd und /etc/shadow 
        Setuid und Verzeichnisse 
        Setuid und Mounting 
        Browser, CGI / Java-Applet und Binaries, die per Mail kommen. 
        Das Netzwerk, ein muss für ssh!
        Physikalischer Zugriff 
        xhost + und das unsichtbare Fenster 
        .rhosts 
        Einschlägige Mailing-Listen abonnieren und Webseiten untersuchen 
    Softwareinstallation. 
      Allgemeines zur Softwareinstallation 
      Woher nimmt man Software? 
      Software Auspacken 
      Software compilieren und installieren 
      Software, der RedHat-Fall 
      Kernel kompilieren 
    Wo bekommt man Hilfe? 
    Copyright & left 
      Zu GNU und Free Software Foundation 
    Glossar 
 
               Von Frames befreien

zum_Inhaltsverzeichnis

Vorwort

Dieses Dokument ist keine vollständige Kursunterlage. Vielmehr soll es helfen, Konzepte und Stärken von Unix am Beispiel von Linux darzustellen. Dies erscheint uns, den Veranstaltern, im Rahmen der steigenden Popularität dieses Unix-Derivates als angemessen.

 Selbst bei Linux ist es aber schon zu einer Vielfalt von Distributionen gekommen. Für das Install-Fest, das wir im Rahmen des Kurses veranstalten möchten, haben wir uns für die Empfehlung der REDHAT-Distribution entschieden. Dies ist eine Distribution, die einerseits dicht am Unix-Standard bleibt, andererseits eine große Verbreitung genießt. Übungen und Beispiele laufen hingegen aus Gründen der Infrastruktur und Systemverfügbarkeit auf einer DLD-Distribution ab.
Dieses Dokument ist in Zusammenarbeit von Mensch und Maschine entstanden. Darum ist es grundsätzlich fehlerbehaftet, trägt keine Unterschrift und ist in jeder Hinsicht ausbaufähig. Wir, die Autoren, können keine Garantie für die Richtigkeit geben, sind aber bei Bekanntwerden von Fehlern gerne bereit, dieses Dokument ggf. zu überarbeiten.

 Bei Fragen und Anregungen wenden Sie sich bitte an:

preissler@uni-hohenheim-de

feiler@uni-hohenheim-de
 
 

Linux / Unix Grundlagen

zum_Inhaltsverzeichnis

Für wen Linux nichts ist

Linux ist ein Betriebssystem (BTS), das ein gewisses technisches Verständnis oder die Bereitschaft dazu (sich mit technischen Dingen zu befassen) voraussetzt. Die Wartung von Unix (insbesondere Linux) ist zwar immer weiter menuegesteuert, doch für die abgefeimten Konstrukte braucht man noch immer die Kommandozeile. (Das ist aber auch gut so.) Um von einem Benutzer als Schreibmaschine benutzt zu werden ist Unix/Linux überdimensioniert. Als Spielekonsole ist Unix und damit Linux ebenfalls eher die zweite Wahl. Wer eine alte Rübenmühle seinen Computer nennt (i286), sollte nicht versuchen Linux zu installieren. Dieses BTS benötigt den "protected mode", der in der Intel-Prozessorfamilie erst mit dem i386 eingeführt wurde. Auf einem Rechner der ständig ein- und ausgeschaltet wird, fühlt sich Linux ebenfalls nicht so recht wohl, obwohl es, gemessen an anderen modernen Betriebssystemen, damit gut umgehen kann.

zum_Inhaltsverzeichnis

Warum Linux? Was kann man mit Linux machen?

Linux ist ein Betriebssystem (BTS), das i.A. so ziemlich alles aus einem Rechner herauskitzelt, was im Rahmen des aktuellen Datenschutzes machbar ist. Linux ist deshalb für Hochleistung (im Homebereich) das geeignete Instrument. Ferner ist es, wie es sich für Unix gehört, zu Comput-Clustern vernetzbar. Wir verweisen sie hier auf das BEOWULF-Projekt (http://cesdis.gsfc.nasa.gov/beowulf/beowulf.html) der Nasa. Andererseits sind die (meisten) Konzepte und Algorithmen, die in Linux als einem etablierten Unix Verwendung finden, seit Jahrzehnten bekannt und erprobt. Das macht sich in der Stabilität deutlich bemerkbar. Für eine Unixmaschine ist eine Uptime von 100 Tagen nichts besonderes. Oft genug ist es ein Stromausfall, der das System dann in die Knie zwingt. Unix ist dafür bekannt ein echtes Multiuser/Multitasking BTS zu sein. Das heißt, daß tatsächlich zwei oder mehr Benutzer zeitgleich ein und dieselbe Maschine nutzen können. Die beiden Benutzer können sich gegenseitig nicht stören. Das heißt, daß jeder Benutzer ein "Stück" Plattenplatz zugeordnet bekommt, den er eigenverantwortlich verwalten muß. Dies birgt den Vorteil, daß private Daten eine hohe Sicherheit vor fremdem Zugriff genießen können. Lediglich, sie teilen sich dann eine knappe Resource, den Prozessor. Jeder Benutzer kann dabei eine komplett eigene Arbeitsumgebung einrichten, die keinen Einfluß auf einen anderen Benutzer hat. Auch kann ein Benutzer nur auf die für ihn bestimmten Daten zugreifen. Das ist für die Verwirklichung des Datenschutzes essentiell. Das ist in einem Betrieb, wie dem eines Rechenzentrums, extrem wichtig. Nur durch solche Konzepte kann die Privatsphäre der Benutzer gewahrt bleiben. Ein weiterer Aspekt, der bei Linux hinzu gekommen ist, heißt Realzeitfähigkeit. Das bedeutet, daß mit Linux Antwortzeiten garantiert werden können. Dies ist die Grundlage dafür, real existierende und zeitkritische Prozesse regeln und steuern zu können. Natürlich gilt auch dabei das oben, bezüglich Multi-User/Multi-Tasking, Gesagte. Linux ist ebenso etwas für die Gattung der Gewohnheitstiere, zu der die meisten Menschen gezählt werden dürfen. Linux ist nicht nur für die Intel-Prozessoren verfügbar, auch Prozessoren wie 680x0 und Alpha werden unterstützt. Für den Anwender heißt dies, daß er plattformübergreifend mit nur einem BTS zu tun hat. Beim Einsatz von Linux ist es, abgesehen von der Performance, egal, ob er sich auf einer Sun Ultra, einem PC oder einer DEC-Alpha-Station einloggt. Er hat dasselbe BTS, dasselbe look & feel und ggf. dieselben Programme. Da Linux ein echtes Kind des Internet ist, gibt es keine Zweifel darüber, ob es wohl voll netzwerk- und internetfähig sei. Insider sagen: Unix ist das Internet. Linux kann als Router, Firewall, Nameserver, Webserver, Webcache, ftp-server, nfs-server u.a.m. eingesetzt werden.
 
 

Shells

Eine SHELL ist das Programm, das die Benutzerschnittstelle darstellt. Sie nimmt Befehle entgegen, prüft die Syntax und bringt die Befehle dann zur Ausführung. Von der Shell wird auch als Kommandozeilenebene gesprochen. In der DOS-Welt hieß die Shell (sofern man das Gebilde Shell nennen darf) command.com oder 4dos.com

 Linux kennt von Natur aus zwei Shells. Dies sind die

        ash     Installationsshell
        bash    Interaktive Arbeitsshell
Natürlich gibt es für Linux auch all die anderen Shells
        csh     rudimentäre Shell mit C-Syntax  
        tcsh    Weiterentwicklung der csh
        (pd)ksh Public domain Korn-Shell 
        zsh     verbesserte ksh, ahmt bash nach.
        ...
Die am weitesten entwickelten und anwenderfreundlichsten Shells sind die bash und die tcsh.
Der Hohenheimer Standardbenutzer erhält normalerweise die tcsh als Loginshell (= startshell), obwohl Linux per default die Bash vergibt. Man kann jederzeit eine neue Shell starten. Dazu ruft man die Shell lediglich mit ihrem Namen auf.
 Beispiel : 
         bash

zum_Inhaltsverzeichnis

Variable, Zuweisung

Im weiteren möchte ich mich in meinen Beispielen auf den/die Syntax der Bourne-Shell (sh) stützen. Die Shells bash, zsh, pdksh, ksh und ash sind dazu weitgehend kompatibel. Dies gilt insbesondere für Variablenzuweisungen und Abfragen, sowie für Kontrollanweisungen ( if , while , case , ... )

Sollten Sie sich jedoch auch für die Syntax der csh-Familie interessien, erhalten Sie die gewünschte Information aus dem Dokument "shsyntax.html" . In einem Unix-System gibt es einige Variable, deren Inhalt für die Funktionalität der Shell und des Systems eine bedeutende Rolle spielen. Zunächst fällt die Variable PATH auf. In ihr wird hinterlegt, wo überall nach ausführbaren Dateien gesucht werden soll. Die Zuweisung in die Variable PATH hinein sieht dann so aus:

       PATH="/client/bin:/usr/local/bin:/bin"
oder auch ohne Anführungsstriche :
       PATH=/client/bin:/usr/local/bin:/bin
Damit hat man PATH "gebügelt"! Da dies aber meist eine nicht so gute Idee ist, will man PATH i.A. nur erweitern. Das heißt, man möchte die Information, also den Inhalt von PATH, auslesen, etwas dazufügen und dann in PATH speichern. Das geht so :
       PATH="$PATH:/addon/bin"
oder besser
       PATH="${PATH}:/addon/bin"
Auch hier kann man die Anführungsstriche weglassen. Was nun tatsächlich passiert, ist dies: Die Shell erhält den Befehl und schaut sich zunächst die Elemente an.
Aus der Sequenz PATH= wird entnommen, daß es sich um eine Zuweisung in PATH hinein handelt. Nun ist noch interessant, was der Inhalt sein soll. Hier findet sich $PATH:/addon/bin. Die Shell weiß nun, daß das Zeichen $ nicht nur einen Buchstaben darstellt. Vielmehr kommt nach dem $ der Name einer Variablen, deren Inhalt gemeint ist. Das $-Zeichen und der Name der Variable wird nun durch den Inhalt der Variablen ersetzt. In unserem Beispiel heißt dies:

Aus

PATH="$PATH:/addon/bin"

 wird so
PATH=/client/bin:/usr/local/bin:/bin:/addon/bin
 

Bezüglich der Zuweisung nochmals zusammengefasst:
<WORT> beschreibt den Namen eines Kontainers
$<WORT> beschreibt den Inhalt des Kontainers

Weitere wichtige Variablen sind :

  MANPATH           Suchpfadangabe für Manpages  
  LD_LIBRARY_PATH   Suchpfadangabe für libraries
  SHELL             Das Shellprogramm mit Pfad
  PS1               Das Aussehen des Promptes 
  DISPLAY           Wo befindet sich mein X-Display ?
                    i.A. DISPLAY=<MachineName>:0.0
  LOGNAME           der Name, unter dem man beim System angemeldet ist
  HOME              Pfadangabe zum Home-Verzeichnis     
  COLUMNS           Spalten des Fensters
  LINES             Zeilen des Fensters
  PWD               Das aktuelle Arbeitsverzeichnis 
  TERM              Typ des Terminals, das man benutzt.

Natürlich kann man auch eine Variable mit Werten belegen, die von der Tastatur (Standard-Eingabe) kommen. Dazu benutzt man den Befehl
        line VARNAME
Dabei ist VARNAME der Name der Variable, in die hineingespeichert werden soll.

zum_Inhaltsverzeichnis

Nur ein Dateibaum

In Unix (und VMS etc.) gibt es nur einen Dateibaum. Alle beteiligten Geräte (Festplatten , CD , Disketten , ...) werden an einer bestimmten Stelle in diesen Dateibaum eingehängt. So kann es sein, daß die Binaries auf einer anderen Platte liegen als die Libraries und diese wiederum auf einer anderen Platte als die Benutzerdaten.

In diesem riesigen Dateibaum, der von hunderten von Benutzern gleichzeitig benutzt werden kann, sollte natürlich Ordnung herrschen. Darum gibt es einen Filesystem-Standard. Dieser ist nicht zwingend, aber sinnvoll. Hier ein grober Überblick über die wichtigsten Verzeichnisse :

  /           Das root-Verzeichnis, hier beginnt alles
  /etc        Konfigurationsdateien
  /bin        Binaries zur System-grundfunktion 
  /usr        UnixSystemResource Benutzerorientierte Programme/Daten 
  /sbin       System-Binaries/ Superuser-Binaries
  /home       Benutzer-Home-Verzeichnisse
  /tmp        temporäre Dateien, kann von Benutzern genutzt werden
  /var        Variable Daten z.B. Logfiles des Systems
  /export     Verzeichnis, das nach außen exportiert wird (-> nfs )
  /local      Verzeichnis, in dem maschinenspezifische Dinge gehalten werden
  /mnt        Verzeichnis, unter dem man etwas temporär mountet
  /cdrom      Typischer mountpoint für CD-ROMs
  /boot       hier befinden sich ggf. kernels
  /root       das Verzeichnis root: Login-Verzeichnis des Systemverwalters
  /lost&found Verzeichnis, in dem crash-Daten zusammengesammelt werden  
  /dev        Device-Dateien, Dateien die z.B. Com-ports repräsentieren   
  /proc       Verzeichnis, das den Systemzustand wiederspiegelt
  .../src     Quell-Dateien (-> /usr/src) z.B. Kernelquellen
  .../doc     Dokumentation (-> /usr/doc)
  .../man     Verzeichnis, das Manpages enthält
  .../bin     Programme
  .../lib     Libraries
Es kann natürlich noch mehr Verzeichnisse geben, abhängig von dem Unix-System, das auf der Maschine läuft, und der Aufgabe, die die Maschine erfüllt.

zum_Inhaltsverzeichnis

Die Pipes ( < | > ) und die Filter

Frage: Was wäre Unix ohne die Pipes ? Antwort: nicht brauchbar ! Pipes sind die Verbindungsstücke zwischen Befehlen. Es ist sehr gute Unix-Manier tausende von kleinen Programmen zu haben, von denen jedes nur eine kleine Teilaufgabe löst, aber die ganz besonders gut und effizient. Um die Teillösungen (Filter) zusammenfügen zu können, benötigt man solche Pipes (Leitungen). In der Graphentheorie: Pipes sind Kanten, Filter sind Stellen/Knoten.

Ein paar Beispiele sprechen mehr als 1000 Worte:

zum_Inhaltsverzeichnis

Vorder- und Hintergrund

Ein Unix-System ist ein Multitasking-System. Das heißt, daß mehr als ein Prozeß läuft. Da aber zu einem Zeitpunkt nur ein Prozeß mit dem Benutzer agieren kann, sind die anderen Prozesse im Hintergrund. Einen Prozeß schickt man in den Hintergrund, indem man ein kaufmännisches Und (&) an den Befehl anhängt.

Beispiel :

   sleep 300  &
Nun schläft der Prozeß im Hintergrund 5 Minuten. Das wollen wir im Vordergrund überprüfen:
   ps | grep sleep 
   
   5668  p0 S    0:00 sleep 300    
Die vordere Zahl ist die Prozessnummer. Der Vordergrundprozeß unterscheidet sich vom Hintergrundprozeß lediglich darin, daß dieser (Vordergrundprozeß) mit der Konsole verbunden ist. Um den im Hintergrund laufenden Prozess in den Vordergrund zu holen, benutzt man den Befehl fg (foreground). ... ok, nun schläft der Prozeß im Vordergrund. Man kann den Prozeß mit ^C (Ctrl-C) wieder abbrechen oder mit ^Z suspendieren. Nach dem ^Z hat man die Wahl, den Prozeß mit fg wieder im Vordergrund laufen zu lassen oder ihn mit bg in den Hintergrund zu schicken oder (gemeinerweise) ihn überhaupt nicht weiter laufen zu lassen.

Es gibt ferner noch Prozessgruppen und Terminal-Control-Prozesse. Diese sind aber vorwiegend für Programmierer interessant. Lediglich beim Start des Programmes XTerm (-ls) kommt man damit eventuell in Kontakt.

Eine moderne Prozesshandhabung (Job-control) arbeitet für gewöhnlich mit diesen Befehlen:

Form    Bedeutung                       Beispiel
&       Im Hintergrund laufen lassen    sleep 300 &
^Z      Stoppt den Fordergrundprozeß   ^Z
jobs    Listet die Prozesse der         
        Prozessgruppe auf               jobs
                                        [1]  Running   netscape &  (wd: ~)
                                        [2]- Stopped   sleep 300 &
                                        [3]+ Stopped   html2index 
%n      Bezeichnung eines der Prozesse  
bg      Bringt einen Prozeß in den 
        Hintergrund                     bg  %2
fg      Bringt einen Prozeß in den 
        Fordergrund                     fg  %2
ps      Zeigt die Liste der Prozesse    ps
                                        ps -ef
                                        ps -aux
kill    Schickt dem Prozeß mit der 
        Nummer mmmm ein Signal, dies 
        ist ggf. ein Signal zum 
        terminieren                     kill -9 mmmm

...     ...                             ...

zum_Inhaltsverzeichnis

Ein paar Kommandos :

An dieser Stelle möchte ich ein paar Befehle oberflächlich vorstellen. Die Liste ist in keinster Weise erschöpfend, sie soll dem Anfänger lediglich den Einstieg erleichtern.

zum_Inhaltsverzeichnis

Allgemeine Befehle / Programme

zum_Inhaltsverzeichnis

man (Hilfe)
Hierbei handelt es sich um einen der wichtigsten Befehle überhaupt. Mit man (Manual) bekommt man den/die Hilfetexte zu einem Befehl angezeigt. Sofern man eine X-Oberfläche sein eigen nennt, ist xman oder tkman eine echte Alternative zur Kommandozeilenversion. Der Aufruf von man gestaltet sich etwa so :
   man ps
oder 
   man man
oder 
   man xman
Für gewöhnlich befinden sich am Ende der Manpage unter der Rubrik SEE ALSO Verweise auf assoziierte Programme. Sollte es Probleme mit man geben, so untersuchen Sie, ob die Variable MANPATH korrekt gesetzt ist. Diese Variable zeigt auf man-Verzeichnisse, z.B.:
MANPATH=/client/man:/client/local/man:usr/man:/usr/local/man:/usr/X11/man
Eine weitere Quelle für Hilfe ist das Verzeichnis /usr/doc . Hier sind normalerweise auch die HOWTO's zu finden.

zum_Inhaltsverzeichnis

apropos
Dieses Kommando zeigt, falls korrekt installiert, alles an, was an Information zu einem bestimmten Begriff verfügbar ist.
Beispiel :
        apropos nfs

zum_Inhaltsverzeichnis

 passwd
Mit passwd stellt man sich ein neues Passwort ein.

zum_Inhaltsverzeichnis

startx , xinit, open , ....
Das sind Befehle zum starten von X11. weitere Informationen hierzu gibt es im diesbezüglichen Kurs und den entsprechenden Unterlagen.

zum_Inhaltsverzeichnis

Dateibaum Operationen

zum_Inhaltsverzeichnis

ls (besser als dir)
ls zeigt den Inhalt eines Verzeichnisses, nur Dateinamen.
ls -l zeigt eine lange Liste, hier werden die Dateigröße und Modebits mitangezeigt.
ls -a zeigt auch die "versteckten" Dateien. Bei Unix werden diese mit einem führenden Punkt gekennzeichnet.

Beispiel :

ls -al 

 Modebits   Hardlinks Eigner   Gruppe  Größe letzte änd.  Dateiname   
...
...
drwxr-xr-x  3 root   root     1024 Mar 14  1997 lib
drwxr-xr-x  2 root   root    12288 Mar 14  1997 lost+found
drwxr-xr-x  2 root   root     1024 Mar 25  1996 mnt
lrwxrwxrwx  1 root   root       18 Jun 12 13:49 patch_list -> /export/patch_list
dr-xr-xr-x  5 root   root        0 Sep 17 14:08 proc
drwxr-----  7 root   root     1024 Sep 24 20:07 root
...
...
Der erste Buchstabe der Modebits sagt etwas über die Art der Datei aus :
        l   link            
        d   directory        
        c   character device
        b   block device
Die Modebits werden in drei Gruppen aufgeteilt: User, Owner u. World . Jede Dreiergruppen bestehen aus :
       r = read
       w = write 
       x = execute.

 für
       Eigner 
       Gruppe
       Welt.
Im Beispiel hat nur der Benutzer root auf das Verzeichnis namens root Zugriff. Außerdem ist patch_list ein Link auf /export/patch_list und /mnt darf von der Gruppe root und aller Welt gelesen und ausgeführt werden. ls kann mit -al dazu gebracht werden, zusätzlich versteckte Dateien anzuzeigen.
Ferner gilt : man ls

zum_Inhaltsverzeichnis

mkdir (Verzeichnis anlegen)
mit mkdir <VERZEICHNIS> wird das Verzeichnis VERZEICHNIS angelegt. Hierzu gibt es nichts weiteres zu sagen außer : man mkdir

zum_Inhaltsverzeichnis

cd (Verzeichnis wechseln)
cd <Verzeichnis> wechselt das aktuelle Arbeitsverzeichnis. cd ohne Parameter wechselt in das HOME-Verzeichnis.
cd *xyz* wechselt in ein Unterverzeichnis, das mit beliebigen Buchstaben beginnt, dann ein xyz aufweist und danach beliebig endet. man cd

zum_Inhaltsverzeichnis

pwd (aktuellen Pfad anzeigen)
Zeigt das aktuelle Verzeichnis an. Die Ausgabe von pwd ist eine logische Sicht. Möchte man den tatsächlichen Pfad wissen, so sollte man /bin/pwd benutzen. man -a pwd (-a heißt alle verfügbaren Seiten )

zum_Inhaltsverzeichnis

rmdir (Verzeichnis löschen)
das Gegenteil zu mkdir. man rmdir

zum_Inhaltsverzeichnis

mv (verschieben)
mv verschiebt eine Datei. Es werden dabei nicht tatsächlich Daten geschoben, vielmehr wird der Erscheinungsort und Erscheinungsname damit modifiziert. man mv

zum_Inhaltsverzeichnis

cp (kopieren)
cp <F1> <F2 > <F3 > <F4 > <TD>
kopiert die Dateien F1, F2, F3 und F4 in das Zielverzeichnis TD
cp -r <D1> <DT>
kopiert rekursiv das gesamte Verzeichnis D1 nach DT
...man cp

zum_Inhaltsverzeichnis

ln (eine Datei mit zwei Namen)
Mit ln kann man einen Link anlegen. Das bedeutet, daß ein und dieselbe Datei unter mehreren Namen in verschiedenen Verzeichnissen auftreten kann. Das macht sich System V (Unix-Standard) extensiv beim Booten und Shutdown zunutze. Wenn möglich sollte man immer Softlinks verwenden. Hardlinks sind nicht so flexibel und dafür gefährlicher.
ln -s <Original> <LinkAufOriginal>
erstellt einen Softlink auf die Datei <Original>. Der Link heißt <LinkAufOriginal>
man ln...

zum_Inhaltsverzeichnis

chmod (Dateieigenschaften ändern)
Wie oben besprochen, hängt die Möglichkeit, ein Programm auszuführen, von den Modesbits ab. Genau diese werden mit diesem Befehl beeinflußt.
chmod 755 <Datei> macht die Datei für den Eigner : lesbar, schreibbar und ausführbar. Für die Gruppe und die Welt wird <Datei> lesbar und ausführbar.
chmod u+x <Datei> setzt das Ausführbar-Bit für den Eigner in der Datei <Datei>

zum_Inhaltsverzeichnis

Prozeßoperationen

zum_Inhaltsverzeichnis

ps (Prozesse anzeigen)
PS zeigt die aktuell laufenden Prozesse und die, die zwar beendet sind, aber für deren Status sich momentan niemand interessiert (Zombies). Natürlich kann auch ps parameterisiert werden. Zumeist tritt ps als ps -aux oder ps -ef auf. Die maßgebliche Information, die ps liefert, ist die Nummer eines Prozesses. man ps

zum_Inhaltsverzeichnis

kill (Prozeß abschießen)
Damit kann man Prozesse töten. Es gibt verschiedene "Munition" für kill. Die schärfste ist
kill -9 <ProzessNr> [<ProzessNr>] ..

zum_Inhaltsverzeichnis

bg
Dieser Befehl schickt einen suspendierten Prozeß in den hintergrund. 

zum_Inhaltsverzeichnis

fg
Dieser Befehl holt einen Prozeß aus dem Suspend-modus oder aus dem Hintergrund in den Vordergrund. 

zum_Inhaltsverzeichnis

top (die gefräßigsten Prozesse anzeigen)
Top ist ein kleines Tool zur Prozeßüberwachung. Einfach ausprobieren! Siehe auch den Absatz über Resourcen-auslastung".

zum_Inhaltsverzeichnis

Filter

zum_Inhaltsverzeichnis

grep (bestimmte Zeilen herausfinden)
Grep findet Zeilen heraus, die einem gewissen Muster entsprechen. Diese Zeilen können unterdrückt oder ausgegeben werden. Es ist möglich nur Dateinamen auszugeben, in denen ein Treffer besteht, oder die, für die kein Treffer besteht.
man grep !

zum_Inhaltsverzeichnis

sort (zeilenweise sortieren)
Dieser Filter ist ein hervorragendes Sortierprogramm. Es können verschiedene Sortiertypen gewählt werden. (Telephon, alphabetisch, numerisch, ...)

zum_Inhaltsverzeichnis

banner (GROSS UND FETT)
banner TEXT
gibt TEXT groß und breit aus.

zum_Inhaltsverzeichnis

basename (der Programmname ohne Pfad)
Liefert den Namen der Datei, z.B basename /x/b/c mit dem Pfad /x/b/c resultiert in der Ausgabe von c.

zum_Inhaltsverzeichnis

dirname (der Pfadanteil)
Dies ist das Gegenstück zu basename. Dirname /x/b/c resultiert in der Ausgabe von /x/b/

zum_Inhaltsverzeichnis

strings (strings eines binary)
Strings filtert die druckbaren Zeichen eines Datenstroms heraus. Nicht druckbare Zeichen werden unterdrückt. Das ist sehr sinnvoll, wenn man sich Programmcode anschauen muß.

zum_Inhaltsverzeichnis

tail (Dateiende)
Das zeigt nur das Ende eines Datenstroms. Tail -f DATEI zeigt das Ende von DATEI ständig an.

zum_Inhaltsverzeichnis

head (Dateianfang)
Das zeigt den Beginn eines Datenstromes oder einer Datei.

zum_Inhaltsverzeichnis

wc (Word Count)
wc gibt Aufschluß darüber, wieviel Buchstaben, Worte und Zeilen eine Datei hat.

zum_Inhaltsverzeichnis

Datei-Operationen

zum_Inhaltsverzeichnis

cat
Liest von stdin (oder von Datei) und gibt das Gelesene durch stdout aus.

zum_Inhaltsverzeichnis

less oder more
Das sind Werkzeuge, um einen Datenstrom seitenweise auszugeben. Less ist dabei wegen der größeren Möglichkeiten den Vorzug zu geben. Beide Programme lassen sich natürlich auch als Filter benutzen.

zum_Inhaltsverzeichnis

ispell (Rechtschreibung)
Mit diesem Programm kann man Worte herausfiltern, die nicht im Rechtschreibelexikon stehen.

zum_Inhaltsverzeichnis

awk
Dies ist ein Interpreter für eine stark C ähnliche Sprache. Der Focus der Sprache liegt aber mehr auf Tabellen und strukturierten Texten. Auch reguläre Ausdrücke können angewandt werden. awk kann auch als Filter fungieren.

zum_Inhaltsverzeichnis

sed (stream editor)
Dies ist die Unix-Antwort auf die Frage, wie man reguläre Sprache/Ausdrücke für operationelle Zwecke abbilden kann. Damit ist "sed" die Implementierung einer der gebräuchlichsten real existierenden (synthetischen) Sprache über einer Grammatik vom Typ 3 (kontextsensitive Grammatik).
Dies ist für Informatiker und Formalisten ein überaus interessantes Thema. Der Compiler- und Interpreterbau besteht hauptsächlich aus diesem Themenkomplex
"Sed" kann natürlich auch als Filter fungieren.

zum_Inhaltsverzeichnis

vi bzw. vim (Suizidgefahr!)
Vi ist einer der wildesten, mächtigsten und kryptischsten Editoren, die es weltweit gibt. Sein Partner aus der DOS-Welt heißt EDLIN.
  vi DATEI      öffnet eine Datei zum Editieren.
           i    man kommt in den Insert-Modus 
           R    man kommt in den Replace-Modus
           A    man kommt in den Append-Modus am Zeilenende
           a    man kommt in den Append-Modus am Punkt
   ESC-Taste    man verläßt die Eingabemodi
     k          Zeichen vor 
     j          Zeichen zurück 
     h          Zeile aufwärts
     l          Zeile abwärts
     J          folgende Zeile an diese anhängen
    dd          Zeile löschen
   5dd          5 Zeilen löschen
     D          Zeile bis zum Ende löschen
     x          Zeichen löschen
     Y          Zeile in Puffer kopieren 
    7Y          7 Zeilen in Puffer kopieren 
     P          Zeile(N) vor Cursor einfügen
     p          Zeile(n) nach Cursor einfügen
     :w         Datei speichern
     :wq        Datei speichern, vi beenden
     :q         vi beenden
     :q!        vi unbedingt beenden
     $          Ans Zeilenende
     ^          An den Zeilenanfang
     
     usw...

Wer sich wirklich für den vi interessiert, sollte das Lernprogramm

   vitutor 

mehrere Male in Ruhe durchspielen.

zum_Inhaltsverzeichnis

Netzwerkbefehle

zum_Inhaltsverzeichnis

route oder netstat -r oder netstat -rn
Zeigt die Routing-tabelle an. Dies ist die Information, wie der Rechner versuchen soll einen anderen Rechner zu erreichen. 

zum_Inhaltsverzeichnis

netstat
Liefert allerlei Information üner die Netzwerkanbindung. 

zum_Inhaltsverzeichnis

ifconfig
damit wird das Interface zum Netzwerk administriert. 

zum_Inhaltsverzeichnis

ping
Mit ping IP_ADRESSE überprüft man, ob der Rechner mit dieser IP_ADRESSE erreichbar ist. Ferner gibt das Programm Aufschluß über die Güte der Verbindung.

zum_Inhaltsverzeichnis

telnet
Das ist das Programm, mit dem man sich auf einem fremden Rechner einloggt. Der Aufruf : telnet <MASCHINE> z.B. telnet pc401.cip4.uni-hohenheim.de

zum_Inhaltsverzeichnis

ftp
Mit FTP kann man Dateien zwischen Rechnern hin und herkopieren. Entweder loggt man sich mit dem normalen Account ein oder man benutzt als Login anonymous und als Passwort die eigene Mailadresse. Abgesehen davon läßt sich RedHat auch per FTP installieren. Eine angemessene Site hierfür ist ftp://ftp.uni-hohenheim.de/pub/mirror/ftp.redhat.com/pub/redhat/redhat-5.0/i386/

zum_Inhaltsverzeichnis

Den Pinguin landen (Linux herunterfahren)

zum_Inhaltsverzeichnis

sync
Mit diesem Befehl wird das System veranlaßt, die Platten auf den tatsächlichen Stand der Dinge zu bringen. Während im normalen Betrieb Daten durchaus nur im Speicher sind, wird bei einem sync der Speicher und die Platte synchronisiert. Das ist beim Herunterfahren wichtig, damit keine Daten verloren gehen.

zum_Inhaltsverzeichnis

reboot, halt und shutdown
Das sind drei Namen, die letztlich dasselbe Programm aufrufen. In Wirklichkeit heißt es tatsächlich shutdown. Man wird sich also mit man shutdown weiterhelfen können. Die Befehle reboot und halt erfreuen sich allerdings größerer Beliebtheit, da diese keine Parameter erfordern.
Beispiele für shutdown :
shutdown -r -t 5 now
shutdown -r -t 5 +0
Diese Befehle rebooten die Maschine und lassen den Prozessen 5 Sekunden Zeit, sich zu verabschieden, dann werden sie erschossen. Wenn man +0 oder now nicht angibt, dann wartet das System eine gewisse Zeit, um eventuell eingeloggten Benutzen die Möglichkeit zu geben, sich auszuloggen.
Shutdown -hnf -t 0 now
das ist der schnellste Weg einen Linuxrechner herunterzufahren. Dieser Befehl wird normalerweise mit CTRL+ALT+DELETE ausgelöst.

zum_Inhaltsverzeichnis

Speziell für Shellscript

zum_Inhaltsverzeichnis

line
Liest eine Zeile von stdin ein und schreibt in eine Variable oder nach stdout.

zum_Inhaltsverzeichnis

test
test testet einen Ausdruck auf Wahrheit. Es wird typischerweise im Zusammenhang mit Kontrollanweisungen benutzt.

An sonsten sei nocheinmal auf das Dokument shsyntax hingewiesen.


zum_Inhaltsverzeichnis

Die Installation von Linux auf einem PC

Linux ist ein recht anpassungsfähiges System, das sich ständig weiterentwickelt. Bemerkbar macht sich dies in der Liste der unterstützten Hardware (HW). Obzwar die Kooperation der Hardware-Hersteller mit den Entwicklern der Modulen und Treiber für Linux oft zu wünschen übrig läßt, gelingt es meist doch recht schnell neue Hardware in das System abzubilden. Dies gilt insbesondere, wenn diese Hardware entweder weit verbreitet ist (dann finden sich mehrere Programmierer), oder wenn diese HW herausragende Eigenschaften besitzt (dann forciert meist eine Institution die Entwicklung eines Treibers). Sollte man bei der Installation von Linux auf exaltierte Hardware stoßen, so ist die Wahrscheinlichkeit hoch, daß auf irgend einem FTP-Server ein genau dazu passendes Modul gefunden werden kann. Andererseits hat man durch die Verfügbarkeit aller Sourcen die Möglichkeit, selbst einen Treiber zu entwickeln, das ist allerdings nicht ganz trivial.

zum_Inhaltsverzeichnis

Systemvoraussetzungen

Minimalsystem (ohne X11 = Windowssystem) :
 
        i386, 
        4MB RAM, 
        50 MB Plattenplatz, 
        Diskettenlaufwerk
Minimalsystem für Linux mit X11 und Kernelquellen :
        i486DX/2, 
        8MB RAM, 
        150MB Plattenplatz, 
        Diskettenlaufwerk, 
        VGA,  
        Maus, 
        (Optional: ss-CDROM )
Rundes Linux System :
        P5, 
        32-128MB Ram, 
        600MB - 1GB Plattenplatz, 
        CDROM, Diskettenlaufwerk, 
        PCI 4MB-SVGA, 
        3-Tasten-Maus, 
        Soundkarte, 
        Streamer (z.B. DAT),
        Monitor entsprechend der Grafikkarte,
        HD und CD sind vorzugsweise SCSI an einem Controller 
        in einem PCI-Slot.
Nach oben existieren nur wenige Grenzen...

zum_Inhaltsverzeichnis

Verträglichkeit mit anderen Systemen

Linux verträgt sich hervorragend mit anderen Systemen auf einer Hardware. Die Frage sollte lauten: Wie fair gehen andere Systeme mit Linux um?
Die Zusammenarbeit mit stellt für Linux kein Problem dar. Vielmehr verhalten sich manche MS-Produkte uncooperativ. In diesem Fall bedeutet dies:
Installiere zuerst MS-Produkte, dann Linux!
Bei umgekehrter Reihenfolge ist die Linux-Partition ernsthaft gefährdet. ( man fdisk ; suche nach DOS 6 )

zum_Inhaltsverzeichnis

Was muß vor der Installation geklärt sein?

Von grundsätzlichem Interesse ist die Hardwareausstattung.
Soll der Computer an einem Netz partizipieren, so sind von dem zuständigen Administrator einige Adressen (z.B. IP-Adresse) etc. zu erfragen. Ggf. ist ein Name für diese Maschine zu benennen.

 Checkliste für die Hardware:

Checkliste für die Netzkonfiguration : Sonstiges :

zum_Inhaltsverzeichnis

Partitionieren der Festplatte

Die Fachwelt ist sich über die Partitionierung nicht ganz einig, da jeder Fragmentierungsgrad Vor- und Nachteile bietet. Sicher ist folgendes:

zum_Inhaltsverzeichnis

Installationsquellen, ein Beispiel

Als Installationsquellen kommen i.A. folgende Medien zum Tragen: Sofern die Hardware nicht von CD booten kann, oder man nicht von CD installieren möchte, ist der Beginn einer Installation ist das Erstellen einer Boot- und Root-Diskette. Die Root-Diskette wird zuweilen auch Rescue-Disk oder Supplement-Disk genannt.
Entweder erstellt man sich diese Diskette mit den angebotenen DOS-Tools, oder man erstellt sie sich auf einem laufenden Linux-System mit dem Befehl dd ( diskdump ). Zunächst mountet man sich das Quellmedium (hier exemplarisch die CD-ROM) in den Dateibaum. Das geht mit:
mount /dev/cdrom /mnt
Nun beginnt die Suche nach dem passenden Disk-Image. Hat man erst die passenden Dateien gefunden, und eine leere Diskette eingelegt, so schreibt man das Diskettenimage (ich unterstelle den Imagenamen /mnt/images/boot.img ) mit
dd if=/mnt/images/boot.img bs=64k of=/dev/fd0 auf die Diskette. Ebenso verfährt man mit der Rescue-, Supplement- oder Root-Disk. Mit diesen Disketten wird dann gebootet und den Installationsanweisungen gefolgt.
Ist man stolzer Besitzer eines modernen CD-ROM-Laufwerkes, so kann der Schritt mit den Bootdisketten entfallen, sofern die CD-ROM bootbar ist.

An dieser Stelle sollte eine Beispielinstallation erfolgen.

zum_Inhaltsverzeichnis

Anbindung des Rechners ans Institutsnetz/Campusnetz

Zu editierende Dateien :

/etc/resolv.conf , für einen Rechner namens rzrechner in der Subdomäne rz.

# /etc/resolv.conf
#
domain rz.uni-hohenheim.de
nameserver 144.41.11.2
nameserver 144.41.13.25
nameserver 129.143.2.1
search rz.uni-hohenheim.de uni-hohenheim.de
/etc/HOSTNAME
rzrechner
/etc/hosts
127.0.0.1       localhost
144.41.13.39    rzrechner.rz.uni-hohenheim.de rzrechner
/etc/NETWORK (falls existent)
IPADDR="144.41.13.39"
NETMASK="255.255.255.0"
NETWORK="144.41.13.0"
BROADCAST="144.41.13.255"
GATEWAY="144.41.13.1"
NAMESERVER="144.41.11.2"
NNTPSERVER="news.uni-hohenheim.de"

/etc/rc.d/rc.inet* oder /etc/rc.d/network oder /etc/rc.d/init.d/network
Diese Dateien sind von Distribution zu Distribution verschieden. Hier möchte ich etwas näher auf RedHat eingehen.

 /etc/rc.d/init.d/network ist das Startskript für das Netzwerk. Diese Datei muß i.A. nicht editiert werden. In dieser Datei werden die Daten aus /etc/sysconfig/network benutzt.

 /etc/sysconfig/network:

NETWORKING=yes
HOSTNAME=rzmachine.RZ.Uni-Hohenheim.DE
DOMAINNAME=RZ.Uni-Hohenheim.DE
GATEWAY=144.41.13.1
GATEWAYDEV=eth0
Außerdem werden bei RedHat-4.2...5.1 auch noch die Skripte aus /etc/sysconfig/network-scripts benötigt. Das gilt auch für die Anbindung mit PPP.

/etc/route.conf:

#
# Route.conf für einen Rechner im Subnetz 13. 
# der routed sollte nicht laufen. 
# Das ist Obliegenheit der Router. 
#
144.41.13.1               0.0.0.0       255.255.255.255         eth0
144.41.13.0               0.0.0.0       255.255.255.0           eth0
0.0.0.0                   144.41.13.1   0.0.0.0                 eth0
127.0.0.0                 0.0.0.0       255.0.0.0               lo

Bei SUSE ist zusätzlich die Datei /etc/rc.config interessant.

zum_Inhaltsverzeichnis

Anbindung per Modem von zuhause aus

An dieser Stelle sei das PPP-HOWTO des Linux-Documentation-Project wärmstens empfohlen. Man unterscheidet grundsätzlich zwei Verbindungstypen. Einerseits kann sich der heimische Computer gegenüber dem System, in das man sich einwählt, wie ein Terminal (Datensichtgerät) verhalten. Das ist der einfachste Fall. Diese Technik reicht aus um ASCII-orientierte Applikationen von zuhause aus bedienen zu können (Mails lesen, programmieren, talken, ...). Andererseits kann man über die serielle Leitung und das Modem auch IP-Verbindungen aufbauen. Dies bedeutet, daß mehrere Applikationen, die serielle Leitung quasi-gleichzeitig benutzen können. Dieser Verbindungstyp ermöglicht beispielsweise das Surfen im WWW von zuhause aus. Dieser Verbindungstyp kann als Aufsatz auf die Standard-Verbindung betrachtet werden. Man spricht in diesem Zusammenhang von einem Protokoll, das zum Austausch von IP-Paketen benutzt wird. Natürlich stehen hier mehrere Protokolle zur Verfügung (Slip, Cslip, PPP). Zum Einwählen in Hohenheim muß man PPP benutzen. 

zum_Inhaltsverzeichnis

Verbindungsaufbau als Terminal

Da dies die Grundlage für PPP ist, will ich zunächst darauf eingehen, wie man eine Standard-Verbindung herstellt. Erst wenn diese Verbindung funktioniert, ist es sinnvoll, sich an PPP heranzumachen. 

zum_Inhaltsverzeichnis

Das Modem kontaktieren
Zunächst muß das Modem natürlich hardwaremäßig angeschlossen werden. Der Port, der unter DOS COM1 heißt, trägt unter Linux den Namen /dev/cua0 und /dev/ttyS0. Entsprechend ist COM2: /dev/cua1 bzw. /dev/ttyS1.
Hat man nun ein Modem angeschlossen, so benötigt man ein Programm, um mit der seriellen Schnittstelle Verbindung aufzunehmen. Eines dieser Programme heißt minicom und ist für gewöhnlich bei allen Linux-Distributionen dabei. Minicom erwartet die Configurationsdateien im /etc. Als root läßt sich minicom mit der Option -s starten, danach kann man all die Einstellungen tätigen (Schnittstelle, baud rate,...). Speichert Root diese Konfiguration ab, so gilt sie ab dato per Default für alle Benutzer. Eine solche Konfigurationsdatei /etc/minirc.* könnte dann so aussehen :
        # Machine-generated file - use "minicom -s" to change parameters.
        pr port         /dev/cua1
        pu baudrate         9600
        pu minit            
        pu mdialpre         
        pu mdialpre2        
        pu mdialpre3        
        pu mdialsuf3        
        pu mconnect         
        pu mnocon1          
        pu mnocon2          
        pu mnocon3          
        pu mnocon4          
        pu mhangup          
        pu mdialtime        1
        pu mrdelay          0
        pu mretries         0
        pu mdropdtr         No 
        pu statusline       disabled
        pu hasdcd           No 
        pu rtscts           No 
        pu xonxoff          No 
        pu sound            No 
        pu histlines        1024

Sollte sich minicom weigern, einem Benutzer Zugriff auf das Modem zu gewähren, so kann das an den Zugriffsrechten für die Device-Files (ggf. Links) oder an einem nicht beseitigten lock (/var/lock) liegen. Wenn die Verbindung zum Modem steht, so antwortet dies auf die Eingabe AT im Normalfall mit OK

zum_Inhaltsverzeichnis

Wählen lassen
Die meisten Modems sind so eingestellt, daß sie durch die Sequenz ATDnnnnnn genau die Nummer nnnnnn wählen.
Versuchen wir es doch einmal:
 ATD 0 0711 458 1906
Falls der angerufene Computer abnimmt, so sollte etwa ein solcher Bildaufbau erscheinen: 
 
atd 0 0711 458 1906
CONNECT 9600

Remote Access Uni Hohenheim (RAS1)

Sie haben folgende Moeglichkeiten:
- Eingabe des Kommandos telnet: startet Telnet-Sitzung (kein Passwort eingeben!)
- Eingabe Ihrer AFS-Kennung: startet PPP-Sitzung 

telnet, AFS-login:

Danach loggt man sich mit dem Focus aus PPP testweise ein :
 
telnet, AFS-login: feilert
Password:  
PPP session from (144.41.19.20) to 144.41.19.42 beginning....~y}#.!}!}!} }4}"
}&} } } } }%}&}).oA}'}

Aha, was sehen wir daraus? Es handelt sich bei diesem Zugang um Die Verbindung sollte nach ein paar Sekunden dann auch wieder automatisch abgebaut werden. 

zum_Inhaltsverzeichnis

PPP-Setup (Verweise)

An dieser Stelle kann ich nur wieder auf die Dokumente PPP-HOWTO des Linux-Documentation-Project hinweisen. Eine weitere Informationsquelle bietet der IX-Artikel Magic Connection 1'96 . Beide Quellen behandelt dieses Thema exzellent. :-)
Um einen Anhaltspunkt zu vermitteln, wie ich mich in Hohenheim einwähle, habe ich nachfolgend die entsprechenden Skripten und Konfigurationsdateien abgebildet. Da ich einen sehr alten Computer mit einem noch älteren UART benutze, musste ich in manchen Bereichen LEERSTELLEN einfügen, um der Mimik Zeit zu geben, sich für die nächste Aktion fit zu machen... Auch hat sich als sinnvoll erwiesen, darauf zu achten, daß die Leitung DTR eingeschaltet ist! Ist dies nicht der Fall, so löse ich das Problem mit minicom. Ich starte das Programm (minicom), um es dann unverzüglich mit <ALT>+A Q zu verlassen, ohne daß die Schnittstelle / Modem zurückgesetzt werden. In seltenen und hartnäckigen Fällen hilft ein Reboot auch weiter. Das liegt nicht an Linux, sondern an IBM und dem diletantischen XT-design, sowie der Idee, immer noch abwärtskompatibel sein zu müssen.
Nun aber zu den (zugegebenermaßen häßlichen) Listings :
 
  
/etc/ppp/options 

> cat /etc/ppp/options

# /etc/ppp/options (kein PAP/CHAP)
# 
# Unveraendert aus der HOWTO übernommen
#
# benutze die modem control lines
modem
# benutze hardware flow control
crtscts
# erzeuge eine default route fuer die Verbindung in der Routingtabelle 
defaultroute
# alle Zeichen der Verbindung koennen genutzt werden
asyncmap 0
# benutze eine maximum transmission packet Groesse von 552 Bytes
mtu 552
# benutze eine maximum receive packet Groesse von 552 Bytes
mru 552
 





/usr/sbin/ppp-on  

> ls -al /usr/sbin/ppp-on

-rwxr-xr-x   1 root     root         2132 Mar 20 22:23 /usr/sbin/ppp-on

> cat /usr/sbin/ppp-on

#!/bin/sh
# This is a PPP-Login-skript ! 
# It is designed to work together with mgetty 
# so You can do both; dail in and dail out. 
#
# Parameter :
#       -d              debugg-mode
#       -r file         Read configfile
#       -n number       Use this phonnumber     
#
#
INTERF="ppp0"            # Interface fuer PPP
RUNLOCK="/var/run"       # Wo laufende Prozesse sich gemeldet haben
LOCKDIR=/var/lock        # Verzeichnis des lock files
DEVICE="cua1"            # Verwendete serielle Schnittstelle
DEVICE="ttyS1"           # Verwendete serielle Schnittstelle
PHONE=" 0 0711 458 1906" # Telefonnummer des Modems des ISPs
PHONE="04581906"         # Telefonnummer des Modems des ISPs
PHONE="00755894388"      # Telefonnummer des Modems des ISPs
PHONE="0103007114581906" # Telefonnummer des Modems des ISPs
PHONE="0101907114581906" # Telefonnummer des Modems des ISPs
USER="feilert"           # Benutzername zum Einloggen
PASSWORD=geheim          # Passwort beim Einloggen
OUR_IP_ADDR="0.0.0.0"    # Die eigene IP Nummer bei der Verwendung von
                         # statischen IP Nummern, ansonsten 0.0.0.0
CHATRETRY=100            # Wie oft soll versucht werden sich einzuwaehlen
CHATSLEEP=25             # wie lange zwichwn den versuchen warten ?
CHATPARAM="-v"           # Parameter for normal CHAT-run
CHATDEBUG="-vV"          # Parameter for DEBUG CHAT-run
DEB=false                # Switch debugging on / off
CHROUTE=true             # aendere die defaultroute auf PPP-Partner

[ "$1" = "-n" ] && PHONE=$2 && CHROUTE=false
[ "$1" = "-d" ] && DEB=true 
[ "$1" = "-r" ] && . $2

$DEB && echo "$0 : Debugmodus ist eingeschaltet"           
$DEB && CHATPARAM=$CHATDEBUG

# Pruefe auf verfuegbarkeit
$DEB && echo " Pruefe auf Lockfile $LOCKDIR/LCK..$DEVICE "
if [ -f $LOCKDIR/LCK..$DEVICE ]
then
   echo "ERROR : PPP device ist gelockt ($LOCKDIR/LCK..$DEVICE)"
   exit 1
fi
$DEB && echo "Kein Lock-file gefunden, "
$DEB && echo "serielle Leitung scheint frei zu sein ... Locke sie" 
echo $$ > $LOCKDIR/LCK..$DEVICE 
sleep 1

# Probe ob die Leitung durch einen Getty oder so was besetzt ist ?
if echo "">dev/$DEVICE 2>dev/null ; then
        $DEB && echo "Serielle leitung ist beschreibbar ! "
else 
   echo "ERROR : PPP device scheint von anderem Prozess blockiert zu sein !"
   echo "        (Z.B. eim Getty  --> /etc/inittab suche nach $DEVICE) "
   exit 1
fi


$DEB && echo " ... Die Leitung zum Modem initialisieren "
# stty 9600 -tostop > /dev/$DEVICE <  /dev/$DEVICE
stty 38400 -tostop > /dev/$DEVICE <  /dev/$DEVICE
# Dieses kann man auch 115200 aendern, wenn die serielle Schnittstelle
# des Modems dieses verkraftet.


$DEB && echo " ... Modem initialisieren"
if chat $CHATPARAM  ABORT BUSY \
        TIMEOUT 3 \
        ""      "AT" \
        OK      "ATZ" \
        OK      "ATE1" \
        OK      "ATQ0" \
        OK      "ATS0" \
        OK      "AT&C1" \
        OK      "AT&S0" > /dev/$DEVICE < /dev/$DEVICE 

then
        $DEB && echo " initialisieren gelungen "
else
        echo "ERROR : Modeminitialisierung ist fehlgeschlagen !"
        $DEB && echo "Entferne Lockfile ..." 
        rm $LOCKDIR/LCK..$DEVICE
        exit 1
fi

# Einwaelen ...  
# Dazu startet man am besten eine Subshell mit einer Eingabeumleitung
$DEB && echo "Einwahl-sequenz beginnt..."


while [ "$CHATRETRY" -gt "0" ] ; do 
  $DEB && echo "Der CHAT $CHATRETRY beginnt ..." > /dev/stderr
  (
  if chat $CHATPARAM ABORT "NO CARRIER" \
        ABORT           BUSY  \
        ABORT           "Invalid Login" \
        ABORT           ERROR \
        TIMEOUT         5 \
        ""              "ATZ" \
        OK              "ATDT$PHONE" \
        TIMEOUT         50 \
        CONNECT         "" \
        TIMEOUT         7 \
        ogin:           "$USER" \
        ssword:         "\\q$PASSWORD"
  then
        $DEB && echo "chat war erfolgreich starte PPPD" >dev/stderr
        # pppd -d -detach /dev/$DEVICE
        pppd -d -detach asyncmap 0 modem crtscts $OUR_IP_ADDR: /dev/$DEVICE &
        sleep 2
  else
        $DEB && echo "chat war ERFOLGLOS.. ggf.spaeterer Versuch..">dev/stderr
        sleep $CHATSLEEP
        exit `expr $CHATRETRY - 1`
   fi

  ) >dev/$DEVICE <dev/$DEVICE
  CHATRETRY=$?
done

# Hier Angekommen sollte der PPPD laufen ! 
# das muss ueberprueft werden
$DEB && echo "Pruefe auf Lockdateien :  "
$DEB && echo "`ls $LOCKDIR/LCK..$DEVICE ` "
$DEB && echo "`ls ${RUNLOCK}/${INTERF}.pid ` "

# Warte auf pppd bis er so weit ist ... 
$DEB &&  printf "Warte auf PPPD : "
PPPS=""
COUNT=0;
while [ "$PPPS" = "" -a "$COUNT" -lt "10" ] ; do
   PPPS=`ifconfig | grep "P-t-P" | cut -f3 -d: | cut -f1 -d' '`
   COUNT=`expr $COUNT + 1` 
   $DEB && printf "." 
   sleep 1      
done
$DEB && echo

if [ -f ${RUNLOCK}/${INTERF}.pid -a "$COUNT" -lt "10" ] ; then
  PPPPID=`ps auxw | grep p[p]pd | cut -c9-15`  
  export PPPPID
  $DEB && echo "Anpassen der Locldatei auf die PID (${PPPPID}) des pppd (wichtig fuer mgetty)."
  echo "${PPPPID}" > ${LOCKDIR}/LCK..${DEVICE}
  $DEB && echo "Setze lock-watcher auf"
  # Das lockfile removen ...
  ( while ps ax|cut -c0-9|grep ${PPPPID}>dev/null 2>1;
  do sleep 10;done;
    $DEB && echo "$0: pppd nichtmehr existend... loesche lock !"
    rm -rf  ${LOCKDIR}/LCK..${DEVICE}
  ) &
 
  $DEB && echo "Modifiziere die Routingtabelle " 
  $DEB && echo "PPPServer=${PPPS} via Interface ${INTERF} "
  # route del -net default > /dev/null 2>1
  $CHROUTE && route add -net default gw ${PPPS} ${INTERF}
  $DEB && echo "Die Verbindung ist hergestellt !"
else
  echo "PPP oder CHAR war NICHT erfolgreich !"  
  rm $LOCKDIR/LCK..$DEVICE
fi
$DEB && echo "ENDE"




/usr/sbin/ppp-off :  

> ls -al /usr/sbin/ppp-off

-rwxr-xr-x   1 root     root          595 Mar 20 21:31 /usr/sbin/ppp-off


> cat /usr/sbin/ppp-off

#!/bin/sh
# Nahezu unveraendert aus der HOWTO übernommen
DEVICE=ppp0

# Falls die PID Datei von ppp0 existiert, laeuft der Daemon.
# Beende ihn.
if [ -r /var/run/$DEVICE.pid ]; then
       kill -INT `cat /var/run/$DEVICE.pid`
        # Falls nicht erfolgreich stelle sicher, dass die PID Datei
        # entfernt wird.
       if [ "$?" != "0" ]; then
               echo "Entferne stale $DEVICE PID Datei."
               rm -f /var/run/$DEVICE.pid
               exit 1
       fi

       # Erfolg. Beendet mit richtigem Status.
       # Hier sollte man die routingtabelle bereinigen !!! 
       echo "$DEVICE link beendet"
       exit 0
fi

 # Der link ist nicht aktiv
echo "$DEVICE link ist nicht aktiv"
exit 1


zum_Inhaltsverzeichnis

Systemadministration (Basics, Tools)

zum_Inhaltsverzeichnis

Die Systemstart-Mimik

Es gibt bei Unix zwei Familien. Je nachdem, aus welcher Familie ein System stammt, läuft der bootstrap ein wenig anders ab. Die beiden Familien sind BSD und SystemV, sprich System Five. Eines haben beide Familien beim Bootstrap gemeinsam: Die Datei /etc/inittab. Diese Datei ist der Anfang des Unix-Lebens. Das erste Skript das von /etc/inittab aus ausgeführt wird, rangiert unter dem Namen sysinit. Unter Linux hat dieses Skript die Abkürzung si. Bei Suse verweisst dieser Eintrag auf /sbin/init.d/boot. In dem Sysinit-Skript werden Dinge wie fsck und mounten von Filesystemen, Installation von Swappartitionen , etc. erledigt. Bis hierher sind sich alle Systeme gleich. Weiter mit der /etc/inittab. In der /etc/inittab wird die erste Möglichkeit geschaffen, daß sich jemand einloggen kann, um das System zu managen. von hier aus werden auch alle anderen Konfigurationsdateien/Startupdateien (indirekt) angestoßen. In dieser Datei wird der Default-Runlevel festgelegt, und je nach Runlevel auch Konfigurations-Shellskripte wie /etc/rc.d/rc.multi angestoßen. In dieser und in einer Handvoll anderer Dateien wird das gesamte System gestartet. Der Bereich /etc/rc.d ist typisch für BSD-ische Systeme. Zu dieser Familie gehört Slackware-Linux, AIX, SunOS usw.
Zu der SystemV-Familie zählt man Solaris, SCO usw. SystemV hat eine andere Methode für die Start-Skripten. Hier wird intensiv von Softlinks Gebrauch gemacht. In SystemV gibt es pro Dienst/Daemon genau ein Start-/Stop-Skript. Die Start-/Stop-Skripte in SystemV akzeptieren genau einen Parameter; dieser muss entweder "start" oder "stop" sein. Ruft man ein solches Skript mit "start" auf, so wird der Dienst gestartet. Entsprechend wird er bei dem Parameter "stop" angehalten. All diese Dateien befinden sich in einem einzigen Verzeichnis. Ich definiere dieses Verzeichnis hier für uns auf :
   /etc/init/init.d
Außer diesem Verzeichnis gibt es auch noch die Verzeichnisse :
        /etc/init/rc0.d
        /etc/init/rc1.d
        /etc/init/rc2.d
        /etc/init/rc3.d
        /etc/init/rc4.d
        /etc/init/rc5.d
        /etc/init/rc6.d
In den Verzeichnissen befinden sich Links der Form
        /etc/init/rc?.d/S??dienstname --> /etc/init/init.d/dienstname
und 
        /etc/init/rc?.d/K??dienstname --> /etc/init/init.d/dienstname
Möchte das System nun aus irgendeinem Grund in einen Runlevel kommen, so schaut es (auch wieder ein Skript) in dem entsprechenden Verzeichnis nach Dateien (die in Wirklichkeit Links nach /etc/init/init.d sind), die mit "S" beginnen, und führt diese in alphabetischer/numerischer Reihenfolge mit dem Parameter "start" aus. Konventionsgemäß kommt nach dem "S" eine zweistellige Zahl, mit der man festlegen kann, an welcher Stelle ein Dienst gestartet werden soll.
Soll ein Dienst in einem Runlevel nicht verfügbar sein, so gibt es einen Softlink auf das entsprechende Skript, der mit einem K beginnt. Diese Skripte (K*) werden mit dem Parameter "stop" ausgeführt, die den Dienst dann stoppen. 

zum_Inhaltsverzeichnis

Admin-Frontends

Der einfachere aber z.T. auch fragwürdigere Weg, die grundlegenden administrativen Tätigkeiten zu erledigen, ist die Nutzung der jeweiligen Frontend's der Systeme. Fragwürdig deshalb, weil die tatsächlichen Aktionen, die betroffenen Dateien und eventuelle "Nebenwirkungen" durch solche Tools verschleiert werden. Andererseits sind manche dieser Frontends so in das System eingewoben, daß sie nahezu unumgänglich sind. Ein Paradebeispiel hierfür bietet AIX mit seinem smit oder smitty. Dieses Tool pflegt gleichzeitig die Datenbank des Systems.
Die Frontend haben bei den verschiedenen Distributionen verschiedene Namen:
     Linux
        Suse    bis V4.3        setup
        Suse    ab  V4.4        yast
        REDHAT                  control-panel   (Nur unter X11)
                                setuptool
                                linuxconf
                                
        Slackware               setup
        DLD                     dldsetup oder dldadmin

     Sun: 
        Solaris                 admintool (Nur unter X11)
                               
     IBM: 
        AIX                     smit (smitty)

zum_Inhaltsverzeichnis

Benutzerverwaltung

Das Management der Benutzer erledigt man am besten mit dem distributionsabhängigen Frontend oder mit den user-Kommandos : useradd und userdel . Useradd und userdel lassen sich hervorragend in Skripte einbauen. 

zum_Inhaltsverzeichnis

Software-Installation

Die Installation von Software-Paketen erledigt man am besten mit dem distributionsabhängigen Frontend oder im Falle von RedHat mit dem Programm RPM
Mit rpm -hiv <Paket> wird ein Paket installiert. man rpm!!!

zum_Inhaltsverzeichnis

Boot-Log

Für einen Administrator ist es sinnvoll zu wissen, was beim Booten vor sich ging. Diese Information erhält man aus den Logfile(s) und aus dem Befehl dmesg, sofern der syslogd läuft/lief.

zum_Inhaltsverzeichnis

Die Netzanbindung

Zur Überwachung des Systems gehört auch herauszufinden, ob die Netzwerkanbindung rund läuft. Dazu stehen die Befehle zur Verfügung.

Um ein Interface erfolgreich konfigurieren zu können, muss auch der Kernel dazu in der Lage sein, oder es muß ein entsprechendes Modul geladen werden können. 

zum_Inhaltsverzeichnis

Kernel-Modulen

Monolitische Unix-Kernel sind in der letzten Zeit aus der Mode gekommen. Das liegt an der immer größer werdenden Hardware- und Funktionalitätsauswahl. Diese Vielfalt kann nicht mehr effizient in einen einzigen Kernel abgebildet werden. Darum hat man begonnen mit "verarmten" und darum schnellen Kernel zu arbeiten. Soll ein spezieller Dienst oder Hardware unterstützt werden, so wird genau der benötigte Treiber zum Kernel dynamisch dazugebunden.
Bei Solaris heißen die Befehle dazu : Für Linux stehen die Befehle zur Verfügung. Die Modulen befinden sich bei Linux konventionsgemäß in Sie werden bei der Kernel-Kompilierung mit hergestellt und in das entsprechende Verzeichnis kopiert. 

zum_Inhaltsverzeichnis

Remote einloggen

Die Entscheidung, von wo aus sich root einloggen darf, wird in getroffen. Bei RedHat besteht diese Datei aus einer Liste von tty's , von denen aus sich root einloggen darf. Fehlt diese Datei, so darf sich root auf jedem TTY einloggen.

zum_Inhaltsverzeichnis

Mounten von Filesysteme

Zugehörige Befehle und Dateien : Wie bereits oben erläutert, werden einzelne Platten in einen einzigen Dateibaum gemountet. Da natürlich schon beim Booten irgendwelche Filesysteme gemountet werden sollen, wird eine Tabelle (/etc/fstab , /etc/vfstab bei Solaris) unterhalten, die beschreibt, welche Laufwerke wann und wie gemountet werden sollen. Bei anderen BTS heißen diese Tabellen etwas anders und sind ggf. etwas anders aufgebaut.
 
> cat /etc/fstab

#
#  Device   Mountpoint       FS-Type  Options          Dump Fsckorder
/dev/hda1   /                ext2     defaults            1 1
/dev/hda3   /var/vice/cache  ext2     defaults            1 2
/dev/hda2   swap             swap     defaults            0 0
/dev/fd0    /mnt/floppy      ext2     noauto              0 0
/dev/cdrom  /mnt/cdrom       iso9660  noauto,ro           0 0
none        /proc            proc     defaults            0 0
/dev/hda4   /dos/c           vfat     user,noexec,nosuid,nodev   0 2
testlin:/export /mnt         nfs      rw,addr=144.41.13.150      0 0
#
# noauto = Do not try to mount at boottime
#
In der Tabelle /etc/mtab (/etc/mnttab bei Solaris) befindet sich die Information darüber, was gerade tatsächlich gemountet ist.
Den Füllgrad der Platten ermittelt man am besten mit df -k .
Arbeitet man mit NFS, so kommen auf der Serverseite noch Dateien dazu. In /etc/exports wird beschrieben, welcher Filesystem-Teilbaum von welcher Maschine gemountet werden darf. Bei Solaris muss man für jeden Filesystem-Teilbaum share aufrufen. Die Datei /etc/dfs/dfstab ist eine Sammlung solcher Share-Aufrufe.
Mit showmount -e <HOSTNAME> bekommt man heraus, welche Verzeichnisse exportiert werden (nach außen zum mounten zur Verfügung stehen). 

zum_Inhaltsverzeichnis

Die System- oder Resourcen-Auslastung

Dazu fallen dem Admin folgende Tools ein : Uptime liefert, neben der Zeit, die das System ununterbrochen "on the fly" ist, auch eine Aussage über die Auslastung.
Top gibt eine gute (sortierte) Übersicht darüber, welche Task auf einem Rechner wieviel Resourcen ( i/o , Memory , Prozessor) schluckt. Schlecht dabei ist, daß top selbst immer einer der Vielfresser ist.
Vmstat bietet ggf. eine detailliertere Ansicht über das momentane Systembefinden. Beispiel :
  
  > vmstat 10 3  ; # unter Solaris aufgerufen : 3 mal im abstand von 10 Sec.

  procs     memory            page            disk          faults      cpu
  r b w   swap  free  re  mf pi po fr de sr s0 s6 -- --   in   sy   cs us sy id
  0 0 0   7352  2368   0   4 15  3  3  0  0  1  1  0  0  175  958  202 11  3 86
  0 0 0  79728  1200   0   0  0  5 16  0  7  1  2  0  0  161  265  141  0  0 100
  0 0 0  79744  1216   6   0 24 99 83  0  0  6  2  0  0  322  429  227  0  3 97
Was die einzelnen Spalten bedeuten steht in der Manpage.
Mit nice kann man beim Start eines Prozesses bestimmen, wie kooperativ (freundlich) er mit der Systemresource "Prozessor" umgehen soll. Gerade für nicht-interaktive Prozesse (Langläufer) sollte man die Freundlichkeit erhöhen.
Mit renice geht das auch im Nachhinein.
Frißt ein Prozeß gar zu viele Resourcen, so bestraft man ihn am besten mit kill oder kill -9. Aber Achtung, wenn der Prozeß gerade im IO steckt, so klappt das eventuell nicht.

zum_Inhaltsverzeichnis

Das Drucken

Das Drucken ist bei den meisten System-Familien ein lästiges und kniffliches Thema. Lediglich DOS hat es auf seine Weise gelöst; Wer drucken will, muß sich einen Drucker kaufen!!! Da die Spool-Subsystemen der verschiedenen System-Anbieter stark voneinander abweichen, sei hier nur Linux (BSD) berücksichtigt
Relevante Files und Befehle : Zur Theorie : ein Benutzer schickt eine Datei zum Drucken in das Drucksystem (lpr -P<Drucker> <Datei>). Nun wird die Datei (falls nicht anders angegeben) in ein Spoolverzeichnis, das dem Drucker zugeordnet ist, kopiert. Eine zusätzliche Informationsdatei wird generiert und der Benutzer erhält den Prompt zurück. Ist der Job für einen Drucker an einem anderen Rechner bestimmt, so nimmt das Spoolsystem Kontakt mit diesem Rechner auf und transferiert den Druckauftrag dorthin in die entsprechende Queue (soviel ich weiß, ohne ein Byte zu ändern). Kommt nun ein Druckjob für einen lokalen Drucker an die Reihe, so wird er zunächst (sofern definiert) durch den Input-Filter geschickt. Dabei kann Accounting vorgenommen werden. Danach kann der Druckjob noch durch eine Menge von Output-Filter geschickt werden, wovon jeder auf seine Weise die Datei umwandelt. Zum Schluß kommt dann tatsächlich auch noch (rein zufällig) ein realer Drucker. Ist die Datei (Druckjob) dort angekommen, wird sie aus dem Spoolverzeichnis gelöscht. Je nach Intellegenz des Filters werden verschiedenen Dateitypen in einen anderen Typ gewandelt. Der Star unter den Filtern ist der APS-FILTER

In Linux wird das Drucken über die Datei /etc/printcap gesteuert. In dieser Datei wird pro Zeile eine printqueue beschrieben. Da eine solche Zeile leicht über 256 Buchstaben enthalten kann, ist es üblich, spätestens nach 79 Zeichen einen maskierten Zeilenumbruch (\<CR>) einzufügen.
Zum Management der Drucker in einem BSD-ischen System möchte ich auf die Drucker-HOWTO lokal und die Drucker-HOWTO bei Marco Budde sowie die Printing-HOWTO (englisch, lokal) oder die Printing-Usage-HOWTO (englisch,lokal) hinweisen.
Ganz allgemein sind die HOWTO's von Sunsite aktueller, aber laaaaaaahm! 

zum_Inhaltsverzeichnis

Wiederkehrende Ausführung: Cron

Ja, ich habe eine Soundkarte integriert, ich habe eine Kuckucksuhr als WAV-Datei und ich will, daß der Kuckuck jede volle Stunde kuckuckt.... Das ist ein typischer Cron-Job.
Relevante Files und Binaries : Das Format der Cron-Tabelle ist bei den verschiedenen Unix-Systemen freundlicherweise, abgesehen von extentions, dasselbe :
 
> crontab -l

# Crontab of Mathias Feiler
#
# Fileformat : 
#
# Die Zahlen können als Skalar   (z.B. 30 ) 
#                        als Liste    (z.B. 0,15,30,45) 
#                        als Intervall (z.B. 1-11) 
#                        oder als wild card (*) 
# angegeben werden. 
#  
# Feldnr        Bedeutung         Werte-mgl.       
# 1             minute            0,1,...,59  oder *
# 2             hour              0,1,...,23  oder *
# 3             day of month      1,2,...,31  oder *
# 4             month             1,2,...,12  oder *
# 5             day of week       0,1,...,6   oder * 0=Sonntag
# 6             Der auszuführende Befehl  
#  
0 * * * * cp /afs/hoh/home/feiler/sound/cuckoo.au /dev/audio
15,30,45  *  *  *  *   cp /afs/hoh/home/feiler/sound/drip.au  /dev/audio
5         8  *  *  *   cp /afs/hoh/home/feiler/sound/gutenmorgen2.au /dev/audio
Editieren würde man die Crontab mit
 
EDITOR=vi
export EDITOR
crontab -e

zum_Inhaltsverzeichnis

Die restlichen Dienste

Für all die anderen administrativen Tasks finden sich in den meisten Fällen die zugehörigen Konfigurationsdateien unterhalb von /etc . Eine Ausnahme bildet X11. Wo die entsprechenden Dateien für X11 liegen, entnehme man bitte der jeweils gültigen Manpage. Außerdem har RedHat Für X11-Konfigurationen das Verzeichniss /etc/X11/*nextgeneration/ eingeführt. Dabei handelt es sich um einen Verhau von Macro-Dateien, die zum Zeitpunkt des startes die fvwm95rc2 neu herstellt. Das ist zwar schön, aber Prozessorintensiv.

zum_Inhaltsverzeichnis

Einige Worte zur Sicherheit (Rechner und Internet)

zum_Inhaltsverzeichnis

Das Passwort

Das Passwort sollte nicht trivial sein! Worte, die in einem Lexikon zu finden sind, haben als Passwort keinen Wert. Knackprogramme benutzen genau solche Lexika, um bekannte Worte vorwärts, rückwärts und in Kombinationen durchzuprobieren.

Der Einwand "man habe keine schützenswerte Daten in seinem Account und müsse darum nicht so viel Aufwand treiben" ist vordergründig verständlich, aber dennoch nicht richtig. Im Beispiel versteht man es besser: Möglicherweise hat ein Mieter in einem Mietshaus tatsächlich keine Wertgegenstände, die ihm schützenswert erscheinen, doch es ist nicht akzeptabel, daß er darum die Haustüre offen stehen läßt und damit den Eigentum der Mitbewohner gefährdet. Obendrein, wenn die Bude abbrennt, wird auch dieser Mieter gewahr, daß das Gebäude, sein Dach über dem Kopf, doch ein schützenswertes Objekt darstellt. Um im Bild zu bleiben, auch die Weitergabe von Schlüsseln (Passworte) an Dritte ist in diesem Rahmen nicht akzeptabel! Aus Sicherheitsgründen sollte man bei Linux auch keinen Kernel kleiner als 2.0.29 wählen. Kernel vor diesem enthalten den sogenannten PING-BUG.

zum_Inhaltsverzeichnis

Locken oder ausloggen

Aus demselben Grund wie zuvor, ist bei Verlassen einer Maschine darauf zu achten, daß man bei allen Consolen ausgeloggt ist oder diese gelockt hat. Vergl.: xlock vlock logout

zum_Inhaltsverzeichnis

/etc/passwd und /etc/shadow

Ein System sollte das Paßwort der Benutzer unbedingt nicht in /etc/passwd speichern! Die Datei /etc/passwd ist für die Welt lesbar und muss es auch sein, damit der eine oder andere Dienst funktioniert. Das Problem dabei ist, daß somit jeder mit einem Cracker bewaffnet auf Passwortsuche gehen kann, solange die Passworte in dieser Datei stehen. Es leuchtet ein, daß ein Passwort, das in einer Datei steht, die nur root lesen kann, diese Hintertüre schließt. Also: Shadow-Passwort (oder ähnliches) benutzen !

zum_Inhaltsverzeichnis

Setuid und Verzeichnisse

Es ist darauf zu achten, daß normale Benutzer in Verzeichnissen wie /etc, /bin, /usr/bin, /sbin usw. keine Schreibberechtigung besitzen. Sollten sie es haben, so können sie dort ein Programm unterbringen (z.B. Verschreiber zu ls oder cd (ls-al ld la ks xs vf ...)) Das Programm wartet, bis es einmal von root aufgerufen wird... und Voila! Es wird ein Programm z.B. mit dem Namen gainr nach /tmp oder sonst wo hin geschrieben, das nichts anderes als eine Shell mit setuid ROOT ist. Ruft man dann als normaler Benutzer gainr auf, so ist man plötzlich root ganz ohne Passwort.
Erste Konsequenz : Ein normaler Benutzer hat NUR Zugriff auf sein Homeverzeichnis und auf /tmp !!!
Zweite Konsequenz : die Variable PATH des Benutzers root muss restriktiv gehalten werden. Das aktuelle Arbeitsverzeichnis hat im PATH von root nichts verloren !
Dritte Konsequenz : Die liste der "setuid root" Programme regelmäßig mit der Frage nach Wachstum kontrollieren.

zum_Inhaltsverzeichnis

Setuid und Mounting

Mit dem Mounten ist es dasselbe, nur noch einfacher für den Hacker. Ein wechselbares Medium darf nie und nimmer setuid-fähig sein ! Ansonsten stellt sich der Hacker zuhause ein Medium her mit einer Shell, die root gehört und das setuid-bit gesetzt hat (vergl. gainr). Dieses mountet er im Zielsystem (oder läßt es vom Admin mounten...) und ...Voila! Einfach aufrufen und fertig!

zum_Inhaltsverzeichnis

Browser, CGI / Java-Applet und Binaries, die per Mail kommen.

Grundsätzlich sind alle Programme, die über einen grauen Kanal von außen kommen, als hoch gefährlich einzustufen. Ein binary, das per Mail kommt und zur Ausführung gebracht wird, kann alles enthalten, wovor sich der Admin in schlimmsten Fieberträumen fürchtet. Auch ein Java-shript kann im Prinzip tun was es will, auch die Datensicherheit korumpieren. Ein einfaches CGI-Skript einer Suchmaschine ist ein echtes Risiko. Wie in der CT 4'98 beschrieben, reicht es aus, ein Semikolon gefolgt von einem subversiven Befehl als Suchbegriff einzugeben und schon steht da anstelle eines grep-Parameters ein falsch abgesetzter grep-Befehl gefolgt von einem Befehl frei nach Hackers Wahl. Auf Grund der Vielzahl von Schwachstellen und Programmierfehler sollten Web-Browser an sich für root tabu sein !!

zum_Inhaltsverzeichnis

Das Netzwerk, ein muss für ssh!

Es ist immer damit zu rechnen, daß irgendwo hinter den nächsten beiden Ecken ein Hacker sein Laptop genau in das Netz-Segment eingeklinkt hat, in dem man sich befindet. Die Folge davon ist, daß alles, was man Klartext über das Netz schickt oder was man geschickt bekommt, mitgelesen werden kann. Das betrifft TCP genau so wie UDP ! Der Hacker muss also nur warten, bis sich irgend ein Benutzer auf einer anderen Maschine einloggt (telnet (pine), ftp ...) und dann genau die folgenden Pakete dieser beiden Maschinen mitprotokollieren. In der Folge erhält er einen Account-Namen und ein Passwort, das dazu paßt. ... Abhilfe schafft man hier durch Verwendung der ssh (SecureShell). Damit baut man einen verschlüsselten Kanal zwischen zwei Rechnern auf. Auch wenn man dann X-Anwendungen startet, benutzen diese den verschlüsselten Kanal. Der Nachteil, den man sich damit verbindet ist, daß verschlüsselung immer prozessorintensiv ist. 

zum_Inhaltsverzeichnis

Physikalischer Zugriff

Der, der physikalischen Zugriff zu einer Maschine hat, ist eigentlich auch schon root! Das liegt daran, daß die Konsole zugreifbar ist. Um es nicht ganz so einfach zu machen, sollten bootfähige und wechselbare Laufwerke (z.B. floppy) von der Boot-Fähigkeit abgehalten werden. Der Durchschnitts-Hacker braucht aber diese Laufwerke ohnehin nicht. Dieser ist mit einer Reset-Taste oder einem Netzstecker sowie einer Console vollkommen zufrieden. Abhilfe: Die Maschine unter Verschluß halten. Keiner Maschine, die nicht unter Verschluß oder dis am Internet angeschlossen ist, ist zu trauen. 

zum_Inhaltsverzeichnis

xhost + und das unsichtbare Fenster

Wer "xhost +" absetzt, der serviert den Hackern die gewünschten Informationen auf einem goldenen Tablett! Das einzige, was der Hacker zu tun hat, ist ein unsichtbares Fenster auf dem Bildschirm zu platzieren. Dieses bekommt natürlich, weil es zu oberst liegt, alle Informationen von Maus und Keyboard exklusiv. Je nach Gutdünken des Hackers werden diese Informationen an die Fenster, an die sie eigentlich gerichtet sind, weitergeleitet oder eben auch nicht. Der Hacker kann alles mitprotokollieren oder das keyboard /maus toten Mann spielen lassen oder alles andere, was das Herz begehrt, mit dem Bildschirm anstellen. Ein Login-Bildschirm über Nacht auf's Display gezaubert, bringt am nächsten Morgen ein sicheres Passwort.

zum_Inhaltsverzeichnis

.rhosts

Es ist grundsätzlich abzulehnen, den eigenen Account gegenüber einem Benutzer zu öffnen, der behauptet, sich auf einer Maschine zu befinden, die ihrerseits behauptet, einen bestimmten Namen zu tragen. Man sieht schon jetzt wie fragil das Konstrukt ist... Jeder kann irgendetwas behaupten, aber darum ist demjenigen noch kein Account zu öffnen.

zum_Inhaltsverzeichnis

Einschlägige Mailing-Listen abonnieren und Webseiten untersuchen

http://internet-security.de
http://www.cert.org/
http://www.ers.ibm.com/
http://www.ccc.de/
THE DENIAL OF SERVICE PAGE
Linux-Mailinglisten

zum_Inhaltsverzeichnis

Softwareinstallation.

Softwareinstallation ist ein weites Thema. Im Rahmen dieses Dokumentes kann unmöglich auf alle Feinheiten eingegangen werden. Spezialitäten werden gänzlich unter den Tisch fallen. So verwendet man in Hohenheim beispielsweise das SW-Konzept. Wer dazu mehr wissen will, der durchsuche diesbezüglich die Hompage des Rechenzentrums der Uni-Hohenheim.

zum_Inhaltsverzeichnis

Allgemeines zur Softwareinstallation

Es ist nicht zwingend, die Pakete in den beschriebenen Verzeichnissen zu halten oder zu kompilieren, es ist jedoch gute Sitte und erhält die Ordnung sowie "Wiederverwendbarkeit"! Es ist aber genausogut möglich, Software im home account zu installieren.

zum_Inhaltsverzeichnis

Woher nimmt man Software?

Zur Recherche benutzt man für weit verbreitete Software eine Suchmaschine des WWW. Schon bekommt man irgendwelche "original homepages" oder "download now" links und URL's. Wer eher speziellere Software sucht, ist mit archie / xarchie besser bedient. Als archie-Server hat sich archie.th-darmstadt.de bewährt. Die Suche soll meist einen substring erfassen und gesucht wird nach einem item. Schon prasseln all die FTP-Sites herein, die irgendwo in ihren Tiefen ein File oder Directory haben, das in seinem Namen diesen Substring enthält.
Man sucht sich den Server seiner Wahl aus, und lädt die Software (mit archie oder ftp oder netscape) herunter.
Die meiste Software für Linux ist im Format : .tar.gz oder kurz: .tgz. RedHat hat jedoch ein etwas eigenes Format, das auf .rpm endet!
Für die weitere Beschreibung will ich das heruntergeladene Paket PAKET-0.0.tar.gz nennen.

zum_Inhaltsverzeichnis

Software Auspacken

Konventionsgemäß befinden wir uns gerade in dem Verzeichnis
 
        /usr/src
In diesem Verzeichnis befindet sich auch die Datei PAKET-0.0.tar.gz. Zunächst entledigen wir uns des .gz:
 
        gunzip PAKET-0.0.tar.gz
Herauskommen sollte dann die Datei PAKET-0.0.tar .
Falls gunzip nicht verfügbar ist... suchen, runterladen!
Nun müssen wir uns um das .tar kümmern. Zunächst wollen wir wissen, was in dem Paket drin ist.
 
        tar -tvpf PAKET-0.0.tar
Wenn nun die Inhaltsangabe ergibt, daß das gesamte Paket nach ./PAKET-0.0/* ausgepackt werden würde, so legen wir damit sofort los.
 
        tar -xvpf PAKET-0.0.tar 
        cd PAKET-0.0
Nun sollte das Verzeichnis /usr/src/PAKET-0.0 vorhanden sein.
Kommt bei der Inhaltsangabe heraus, daß das Paket kein führendes ./PAKET-0.0 enthält, so legen wir uns dieses selbst an, wechseln hinein und packen aus.
        mkdir PAKET-0.0
        cd PAKET-0.0
        tar -xvpf ../PAKET-0.0.tar
Nun sollte der Source-Code in /usr/src/PAKET-0.0 installiert sein.

zum_Inhaltsverzeichnis

Software compilieren und installieren

Wir befinden uns in dem Verzeichnis /usr/src/PAKET-0.0 !
Nun muß man herausfinden, wie die Software zu kompilieren ist. Meist hilft die Datei TODO oder README weiter. Die Regel besagt (in Reihenfolge ):
Was tun wenn.. 
Nr Existiert eine Datei So führe aus um zu erhalten Anmerkung
1 configure ./configure Makefile configure ist ausführbar
2 Imakefile, imakefile xmkmf Makefile .
3 Makefile, makefile  make config  Makefile Beim Kernel üblich
4 Makefile, makefile  make [all] Compilat (Binaries) Erst nach Schritt 1-3
5 Compilat (Binaries) make install Installation benötigt root-Rechte
In den meisten Fällen bekommt man so eine funktionierende Installation. Sollte es nicht so glatt laufen, so kann es dazu führen, daß man die eine oder andere Kleinigkeit im Makefile ändern muß. Das sollte aber nichts Weltbewegendes sein.

zum_Inhaltsverzeichnis

Software, der RedHat-Fall

RedHat hat, wie erwähnt, RPM zur Softwaredistribution eingeführt. Das Installieren eines RPM-Paketes ist denkbar einfach. Nachdem man das Paket ( PAKET-0.0.i386.RPM ), wie oben beschrieben, auf den eigenen Rechner gebracht hat, kopiert man es nach /usr/src/RPMS.
 
        cp PAKET-0.0.i386.RPM /usr/src/RPMS
Dann installiert man den Inhalt mit
        cd /usr/src/RPMS
        rpm -hiv PAKET-0.0.i386.RPM

zum_Inhaltsverzeichnis

Kernel kompilieren

Das ist etwas, was sich ungeheuerlich schwierig anhört, aber in Wirklichkeit ist es einfach! Also... nur Mut!
Das Einzige, auf das man achten sollte, ist, daß man immer von einem funktionierenden (alten) Kernel booten kann. Das erreicht man, in dem man dem laufenden Kernel kopiert, die /etc/lilo.conf editiert und lilo einmal startet. Dies möchte ich hier vorführen:
 
        > cat /etc/lilo.conf 

        boot=/dev/hda
        map=/boot/map
        install=/boot/boot.b
        image=/boot/vmlinuz
                label=linux
                root=/dev/hda1
                read-only
Die image-Zeile verrät, daß das aktuelle Kernel-Image in /boot/vmlinuz gespeichert ist. Dieses kopieren wir.
        cp /boot/vmlinuz /boot/vmlinuz.falback
So, nun gilt es diese Kopie bekannt zu machen. Dazu erweitern wir die /etc/lilo.conf. Zur Verdeutlichung habe ich die neuen oder wichtigen Zeilen hervorgehoben.
 
        > vi /etc/lilo.conf

        boot=/dev/hda 
        map=/boot/map
        install=/boot/boot.b 
        prompt
        timeout=50  
        image=/boot/vmlinuz
                label=linux
                root=/dev/hda1
                read-only
        image=/boot/vmlinuz.falback
                label=falback
                root=/dev/hda1
                read-only
Nachdem die Datei abgespeichert ist, machen wir die Änderungen wirksam. Das erreicht man mit den Aufrufen
        sync
        lilo
        sync
So, nun kann eigentlich nichts mehr passieren. Sollte sich der neue Kernel als operationelle Niete herausstellen, so booten wir einfach den alten Kernel, indem wir am Lilo-Prompt "fallback" eingeben. Auf Grund der Zeile "timeout=50" und "prompt" hat man genau 5 Sekunden Zeit, dieses zu tun.

Das eigentliche Kernel-kompilieren funktioniert so :

Viel Spass wünscht ihr RZ. !

zum_Inhaltsverzeichnis

Wo bekommt man Hilfe?

Hilfe bekommt man einerseits durch die lokalen Dokumente und entsprechende Anzeigewerkzeuge : Auch die Programme selbst reagieren oft auf die Parameter Dann gibt es noch das Internet... Wie man das bedient, sollte eigentlich hinreichend bekannt sein.
Außerdem, man sollte es nicht glauben, gibt es noch immer Bücher.
    
 Unix-Administration 

 Systemadministration unter UNIX  2. oder 3. Auflage
        Nemeth/Snyder/Seebass/Heim
        Prentice Hall
        ISBN 3-8272-9511-4       
        Wertung : englisch, etwas zynisch, fachlich hervorragend       
                behandelt die Systeme :
                Solaris         SunOS
                HP-UX           DEC OSF/1     
                IRIX            BSD/OS


 Essential System Administration 
        AEleen Frisch
        O'Reilly & Associates, Inc.       
        ISBN 1-56592-127-5
        Wertung : englisch, viele praktische Tips, fachlich hervorragend
                behandelt die Systeme :
                Solaris         SunOS
                HP-UX           DEC OSF/1     
                IRIX            BSD/OS
                Linux           SCO
        Deutscher Titel: 
        Unix System Administration
        ISBN 3-930673-045


 Running Linux 2. Edition
        Matt Welsh & Lar Kaufman
        O'Reilly & Associates, Inc.
        ISBN 1-56592-151-8
        Wertung: Focus auf das erste Jahr mit Linux
        Deutscher Titel: 
        Linux-Wegweiser zur Installation & Konfiguration
        ISBN 3-930673-58-4
  

 Security
 
 Practical Unix & Internet Security 2.Edition
        Simson Garfinkel & Gene Spafford
        O'Reilly & Associates, Inc.
        ISBN 1-56592-148-8
 
 
 Allgemein 
 
 Es sind die Bücher von O'Reilly zu empfehlen!            



zum_Inhaltsverzeichnis

Copyright & left

UNIX ist ein EWZ von AT&T

Linux ist ein EWZ von Linus Thorwalds @1997

Red Hat ist ein EWZ von RedHat Ltd.

DLD ist ein EWZ von

GNU ist ein EWZ der Free Software Foundation.

zum_Inhaltsverzeichnis

Zu GNU und Free Software Foundation

GNU-Software unterliegt sämtlich dem GNU-Copyright ! Dieses GNU-Copyright ist auch als COPYLEFT bekannt, da der Inhalt dieses Titels besagt, daß diese Software frei kopierbar ist, nicht verkauft werden darf, und daß entsprechender Quellcode veröffentlicht werden muß. Ferner ist alles, was mit GNU-Produkten erstellt wird (GNU-Teile enthält, z.B. Libraries nach einem Compilevorgang), selbst wieder ein GNU-Produkt. Ein Beispiel :

Müller schreibt ein nettes Programm. Er kompiliert es mit dem GNU-Compiler, den er kostenlos bekommen hat, und welcher GNU-Libraries in das Compilat einbindet. Nun ist sein Programm (das Binary) ebenfalls GNU. Er darf es für sich behalten oder samt Quellcode weitergeben, ganz egal, nur, er darf es nicht verkaufen, und auch niemand sonst darf es. Bei einer (organisierten) Verteilung darf aber eine Gebühr für das Bereitstellen des Datenträgers erhoben werden. Das sind dann die Kosten einer Linux-CD. 

zum_Inhaltsverzeichnis

Glossar

DLD             Deutsche Linux Distribution
                Produkt der Fa.
                Straße
                xxxxx Stuttgart

GNU             Software, die dem Copyright der 
                Free Software Foundation unterliegt
                (Frei kopierbar, unverkäuflich).
 


zum_Inhaltsverzeichnis