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:
ls | grep xyz
Die Ausgabe von ls (zeigt den Inhalt eines Directories, vgl.: dir)
wird als Eingabe für den Filter grep benutzt. Grep sucht alle Zeilen
heraus, die die Zeichenkette xyz beinhalten.
ps -aux | grep netscape | cut -c9-16 > nc_proc_nr.txt
ps -aux gibt alle Prozesse mit allerlei Zusatzinformation aus. Diese
Ausgabe wird nach grep geleitet. Grep sucht die Zeilen heraus, in denen
netscape vorkommt. Diese Zeilen (die aus der Standardausgabe von grep kommen)
wird dem Filter cut mittels Pipe in die Standardeingabe geleitet. Dieser
Filter läßt nun von jeder Zeile nur die Zeichen von Position
9 bis 16 übrig (das sind bei ps -aux zufällig die Prozessnummern)
und gibt das Resultat durch die Standardausgabe aus. Das was aus cut herauskommt,
wird mittels > in die Datei nc_proc_nr.txt gespeichert. Die Datei wird
auf jeden Fall zuvor leer gemacht.
grep $LOGNAME < /etc/passwd | cut -d: -f7
oder
cat /etc/passwd | grep $LOGNAME | cut -d: -f7
oder
grep $LOGNAME /etc/passwd | cut -d: -f7
Dieser Befehl sucht heraus, welche Shell als Loginshell in /etc/passwd
eingetragen ist, und das geht so:
Mit < wird aus der Datei /etc/passwd der Inhalt ausgelesen. Dieser
Inhalt wird in grep geleitet. Grep grept nach dem Inhalt der Variable LOGNAME
und gibt die Zeilen, die passen, durch die Standardausgabe aus. Diese wird
nach cut umgeleitet. Cut sucht nun das 7. Feld heraus, wobei die Felder
mit : getrennt werden; die beiden anderen Befehle tun dasselbe.
ROOT_UID=` grep root /etc/passwd | cut -d: -f3 `
Dieser Befehl sucht aus der /etc/passwd die Benutzernummer von root.
Die Ausgabe des Befehles wird vermittels den Rückwärts-Apostroph
als String der Variablen ROOT_UID als Inhalt zugewiesen. Würde man
an dieser Stelle Vorwärts-Apostrophen benutzen, so hieße das,
daß der String "grep root /etc/passwd | cut -d: -f3" in die Variable
ROOT_UID geschrieben würde, es wäre dann eine primitive Zuweisung.
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
DOS
OS/2
WinNT
Win95
Andere Unix-Systeme
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:
-
Prozessortyp (i386, i486, P5, P6, 680x0 , ...)
-
Controllertyp : SCSI (Typ & HW ), (E)IDE, RLL , MFM
-
Partitionen : Welche auf welcher Platte ?
-
Maus : Welche Art? ( PS/2, serielle, ...)
-
Grafikkarte : Hersteller, Typ, Chipsatz, weitere Daten
-
Monitor : Hersteller, Typ, maximale Frequenzen, weitere Daten
-
Angeschlossener Drucker : PS , PCL, kompatibel mit ...
-
CD-ROM: Atapi, SCSI, ...
-
Scanner: Hersteller, Typ , Anschluß, ...
-
Netzwerkkarte: Hersteller und Typ
-
Sonstige Hardwaredaten
Checkliste für die Netzkonfiguration :
Sonstiges :
-
Welche Distribution, woher bekommt man die Files?
-
Wer gibt ggf. Hilfestellungen, wann?
-
Welches Profil (Server, Multimedia, X-Terminal, SW-Entwicklung, ...)
-
Wer übernimmt die Verwaltung der Maschine?
-
Für welchen Benutzerkreis ist die Maschine gedacht?
-
In welchem Kontext soll die Maschine laufen (Intra- oder Internet)?
-
usw...
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:
-
Mindestens eine Partition für das System selbst.
Die Fachleute streiten sich darüber, ob es sinnvoll ist /tmp /var
/usr und / auf je eine eigene Partition zu legen. Es kann auch sinnvoll
sein, /var und /tmp zusammen zu legen, oder /tmp oder /var in eine Ramdisk
zu verbannen. Es gibt die interessantesten Überlegungen hierzu. Auch
die Position der Partition auf der Platte kann Einfluß auf die Performance
nehmen.
-
Eine Partition für Swap, Swap = 2 * RAM ; SWAP < 128 MB
Dies ist ein Schätzwert. Bei kleinen Systemen würde ich 3*RAM
vorschlagen. Bei Systemen mit 128MB RAM, je nach Profil, eher ein als zwei
Partitionen mit 128MB für swap.
-
Eine Partition für Benutzerdaten. (/home)
Diese Partition entfällt in einer typischen Hohenheimer Installation,
da hier das AFS benutzt wird.
-
Beim Einsatz von AFS: 50MB bis 500MB AFS-Cache
Die Größe des Caches sollte entsprechend der Bandbreite
der Netzwerkanbindung gewählt werden. Der Verwaltungsaufwand für
den Cache steigt überproportional. So ergibt sich, daß bei einer
Anbindung mit 10MBit/s eine sinnvolle Cachegröße zwischen 50MB
bis 100MB liegt. Handelt es sich um eine deutlich langsamere Anbindung,
so sollte der Cache entsprechend größer ausgelegt werden, um
"pagen" zu vermeiden bzw. zu minimieren.
zum_Inhaltsverzeichnis
Installationsquellen, ein Beispiel
Als Installationsquellen kommen i.A. folgende Medien zum Tragen:
-
CD-ROM
-
Eine Partition auf einer angeschlossenen, gemounteten Festplatte
-
Ein per NFS gemountetes Verzeichnis
-
Ein Installationsserver (NFS oder FTP)
-
per Disketten, wird heute eigentlich nicht mehr angeboten.
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
-
einen PPP-Protokoll (nicht Slip)
-
eine dynamische IP-Adresszuweisung für den heimischen Rechner
-
einen aktiven PPP-Server
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)
-
/var/log/boot.msg
-
/var/log/messages
-
/var/log/....
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
-
ifconfig
-
netstat (netstat -r)
-
route
-
ping
-
traceroute
-
nslookup
-
cat /proc/net/*
-
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 :
-
modinfo
-
modload
-
modunload
-
Für Linux stehen die Befehle
-
lsmod
-
insmod
-
modprobe
-
rmmod
zur Verfügung. Die Modulen befinden sich bei Linux konventionsgemäß
in
-
/usr/lib/modules/<KernelVersion>/*/*
Sie werden bei der Kernel-Kompilierung mit
-
make modules
-
make modules_install
hergestellt und in das entsprechende Verzeichnis kopiert.
zum_Inhaltsverzeichnis
Remote einloggen
Die Entscheidung, von wo aus sich root einloggen darf, wird in
-
/etc/default/login (Solaris, CONSOLE-Zeile )
-
/etc/securetty (RedHat)
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 :
-
Allgemein
-
/etc/fstab (Linux)
-
/etc/vfstab (Solaris)
-
/etc/mtab (keine Konfigurationsdatei)
-
/etc/mnttab (keine Konfigurationsdatei)
-
df
-
mount
-
umount
-
Zusätzlich für NFS
-
/etc/exports (Linux)
-
/etc/dfs/dfstab (Solaris)
-
share (Solaris)
-
showmount -e
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
-
top
-
vmstat
-
iostat (Solaris)
-
nice
-
renice
-
kill -9
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 :
-
/etc/printcap
-
/var/spool/lpd/*
-
lpr [-P<Drucker>] [<Datei>]
-
lpc (line printer control program)
-
lprm (remove jobs from the line printer spooling queue)
-
pr (convert text files for printing)
-
lpq (spool queue examination program)
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 :
-
crontab [-e] [-l]
-
/var/spool/cron/crontabs/*
-
/var/spool/cron/tabs/*
-
/etc/crontab (Linux)
-
/var/spool/cron/allow (Linux)
-
/var/spool/cron/deny (Linux)/LI>
-
/etc/cron.d/cron.allow (Solaris)
-
/etc/cron.d/cron.deny (Solaris)
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 :
-
make config
oder
-
make menuconfig
-
make clean
-
make dep
-
make zImage
-
make zlilo
-
make modules
-
make modules_install
Viel Spass wünscht ihr RZ. !
zum_Inhaltsverzeichnis
Wo bekommt man Hilfe?
Hilfe bekommt man einerseits durch die lokalen Dokumente und entsprechende
Anzeigewerkzeuge :
-
/usr/doc
-
man
-
xman
-
tkman
-
apropos
-
www: Suchmaschinen
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