GNU/Linux Grundlagen

Einführung für Systemadministratoren

René Pfeiffer

pfeiffer@luchs.at

Inhalte

Diese Liste gibt einen kurzen Überblick über die behandelten Themenbereiche.

GNU Projekt und Linux® Kern

  • Webseite des GNU Projekts
  • Webseite des Linux® Kerns
  • Kerneltrap - zusammengefaßte Auszüge und Neuigkeiten aus der Linux® Kernel Mailingliste
  • MINIX ist ein Unix® System, welches für Studienzwecke verwendet werden kann.

Freie Software

Man muß unbedingt beachten, daß freie Software nicht dasselbe wie Freie Software ist. Der Begriff „frei” wird oft verschieden ausgelegt und nicht richtig verstanden (ebenso wie die ominöse Phrase „Land der Freiheit”). Dasselbe gilt insbesondere für den Begriff „offen” oder Open Software. Weder „frei”, „offen” noch „open” sagt etwas über die Freiheiten aus, die man mit einer Software hat; das ist in diesem Fall immer von der Lizenz abhängig. Aus diesem Grunde empfiehlt die Free Software Foundation bei Bezug auf echte freie Lizenzen das Wort „frei” immer groß zu schreiben, so wie in Freie Software.

GNU/Linux® System

Der korrekte Begriff für ein „Linux® System” ist daher immer „GNU/Linux® System”. Der feine Unterschied macht klar, welche Komponenten das Betriebssystem ausmachen. Die GNU Software läßt sich auch mit anderen Betriebssystemkernen kombinieren, z.B. GNU/MACH, GNU/BSD oder GNU/Hurd.

GNU/Linux® Distribution

Eine GNU/Linux® Distribution läßt sich sehr leicht selbst erstellen oder modifizieren. Die gängigen Paketverwaltungwerkzeuge erlauben vielseitige Anpassungen und ermöglichen so den Einsatz (deployment) von Software.

Linux Standard Base (LSB)

Link zur Linux Standard Base bei Wikipedia; POSIX ist dort ebenso genauer ausgeführt. Es handelt sich hierbei um ein standardisiertes Application Programming Interface (API), welches die Schnittstelle zwischen Applikation und dem Betriebssystem darstellt.

Abstraktionsschichten

Viele UNIX® Systeme haben die Tradition Resourcen und Geräte als Datei zu verwalten. Das System Plan9 geht einen Schritt weiter und ermöglicht das Ansprechen vom allen über Dateinamen und Pfade. Die Entwickler beantworten damit konsequent die Frage was UNIX® zu erreichen versucht: Repräsentiere alle Ressourcen als Dateien ohne zwischen lokalen und nicht-lokalen Objekten zu unterscheiden.

Dateisysteme

Die Liste ist nicht vollständig. Es gibt noch eine ganze Reihe von Dateisysteme, die gerade in Entwicklung ist oder die spezielle Zwecke erfüllen (z.B. JFFS2 für Flash-Speicher, CramFS, BTRFS, …). Der Linuxkern ist dadurch eine sehr vielseitige Plattform und kann sehr gut an bestimmte Einsatzprofile abgestimmt werden.

Dateibaum

Der Verzeichnisbaum als Ausgabe des Kommandos tree:
      /
      |-- bin/
      |-- boot/
      |-- dev/
      |-- etc/
      |-- home/
      |-- lib/
      |-- lost+found/
      |-- opt/
      |-- proc/
      |-- root/
      |-- sbin/
      |-- sys/
      |-- tmp/
      |-- usr/
      |-- var/

Verzeichnisse mit Kommandos

Das Verzeichnis /usr/X11R6/bin/ hat historische Bedeutung. Meist ist es mittlerweile ein symbolischer Verweis auf /usr/bin. Bestimmte Software speichert ausführbare Kommandos auch in einem Verzeichnis namens libexec/ (wie beispielsweise /usr/local/libexec/.

Lokale Software

Es ist absolut wichtige sämtliche Software, die nicht aus der Distribution stammt, in die Verzeichnisse /opt/ und /usr/local/ zu installieren. Geschieht dies nicht, so kann man versehentlich (oder natürlich auch absichtlich) bestehende Dateien, die vom Paketmanager verwaltet werden, überschreiben. Bei Upgrades können dann wiederum die lokal installierten Dateien der Software, die nicht aus der Distribution stammt, vom Paketmanager überschrieben werden. Eine saubere Trennung ist daher unbedingt einzuhalten!

procfs Dateisystem

Sämtliche Änderungen, die in /proc bzw. dessen Unterverzeichnisse hineingeschrieben werden, werden nicht gespeichert. Man kann sich /proc als eine Schnittstelle zum Kern vorstellen. Daten werden beim Lesen dynamisch erzeugt und beim Hineinschreiben in Register des Kerns geschrieben. Nichts wandert auf die Festplatte.

procfs Beispiele

/dev - Geräte

/dev - Beispiele

/etc - Konfigurationen

/boot - Kern

Bootprozeß

Manche Bootloader verstehen Dateisysteme, andere greifen auf die Festplatten auf Blockebene zu. grub kann beispielsweise Partitionen in den Dateiformaten BSD FFS, DOS FAT16/FAT32, Minix, Linux ext2fs, ReiserFS, JFS, XFS und VSTa fs lesen. Auf diese Art und Weise findet grub den Linuxkern und kann ihn laden. lilo schaut beim der Installation nach in welchen Blöcken auf der Festplatte der Linuxkern liegt. Beim Bootvorgang werden diese Blöcke in der richtigen Reihenfolge gelesen, und der Kern wird gestartet. Bei Bedarf liest lilo auch die Daten der Boot-RAM-Disk auf diese Art und Weise.

Diese unterschiedliche Funktionsweise ist wichtig, denn im Falle von lilo muß nach jeder Änderung an der Datei des Linux® Kerns oder der Boot-RAM-Disk der Bootloader neu geschrieben werden, damit die Blocknummern der Dateien ermittelt werden können. Da grub jedoch die Dateisysteme versteht, muß dieser das nicht tun und reagiert ohne Neuschreiben des Bootloaders auf Änderungen.

Bootmeldungen

Die Ausgabe der Bootmeldungen lassen sich auch auf serielle Ports umleiten. Man gibt dazu dem Linux® Kern die Option console=device,options mit. Beispielsweise führt der Eintrag console=ttyS1,9600 console=tty0 zur Ausgabe der Meldungen auf Gerät /dev/ttyS1 mit 9600 Baud und auf den ersten Bildschirm (tty0).

Run Level

Der Run Level läßt sich zur Laufzeit mit dem Kommando telinit neu setzen.

Initskripte

Die Initskript werden auch System V Skripte genannt, weil sie ursprünglich bei UNIX® Maschinen dieses Zweiges verwendet wurden. Der System V Methode steht der Initialisierungweg der *BSD Systeme gebenüber. Auf BSD Systemen verwendet man nur ein Skript, welches die zu startenden Prozesse angibt.

Bash - Bourne-again shell

Neben der Bash gibt es eine Reihe von anderen Shells. Die Verfügbarkeit hängt vom verwendeten Betriebssystem ab. Die Bash ist sehr weit verbreitet. Man findet oft auch die Korn-Shell, die TENEX-C-Shell (tcsh) oder die Z Shell. Die englische Wikipedia hat einen Vergleich verschiedener Kommandozeileninterpreter.

Wichtige Kommandos

Man Pages - Hilfefunktionen

Die man pages sind in Kategorien eingeordnet.
  1. Ausführbare Programme und Shell Kommandos
  2. Systemfunktionen (system calls), die vom Kern zur Verfügung gestellt werden
  3. Funktionen aus Bibliotheken
  4. Spezielle Dateien (beispielsweise Geräte aus /dev/)
  5. Dateiformate und Konventionen
  6. Spiele
  7. Verschiedenes (Makros, Konventionen, man, groff, …)
  8. Kommandos zur Systemadministration
  9. Kernelfunktionen (nicht Standard)
Man kann Begriffe aus den Sektionen durch Angabe der Nummer auswählen. Beispielsweise gibt es mindestens drei verschiedene Einträge zum Begriff time, die man so unterscheiden kann:
  • man 1 time
  • man 2 time
  • man 7 time

Dateiinformationen

Das ls Kommando listet den Inhalt von Verzeichnissen auf.

lynx@nightfall:~$ ls -l docs/
total 20340
-rw-r--r-- 1 lynx lynx  7562602 2005-12-27 18:26 Astaro.pdf
-rw-r--r-- 1 lynx lynx     9602 2008-04-07 13:08 Bewerbung.odt
drwxr-xr-x 2 lynx lynx     4096 2006-03-16 16:37 cisco
-r-xr-xr-x 1 lynx lynx 12226445 2006-01-13 00:16 e500_english.pdf
-rw-r--r-- 1 lynx lynx   436698 2006-07-19 00:29 Gimp.pdf
-rw-r--r-- 1 lynx lynx    11083 2008-04-07 12:27 Lebenslauf.odt
drwxr-xr-x 2 lynx lynx      146 2006-05-21 13:20 security
lynx@nightfall:~$ 

ls kennt mehrere praktische Optionen:
ls -l -h
zeigt die Größe der Dateien in einem für Menschen lesbaren Format an (K, M, G, …)
ls -a
zeigt auch die versteckten Dateien und Verzeichnisse an (solche, die mit einem . beginnen)
ls -R
zeigt rekursiv alle Unterverzeichnisse an

Berechtigungen im Dateisystem

drwxr-xr-x  3 lynx lynx      4096 2007-01-22 22:18 video
-rw-r--r--  1 lynx lynx    138421 2007-06-09 14:02 xfs_mkfs.pdf
-r--r-----  1 root root       320 2007-12-15 23:13 sudoers
-rw-------  1 root root      1338 2008-01-17 00:10 passwd-
drwxrwxrwt  9 root root       520 2008-04-22 12:10 tmp
crw-------  1 root root      4, 1 2008-04-21 19:38 /dev/tty1
-           Flagge für Verzeichnis, Gerät, Verweis
 rwx        Berechtigungen für Eigentümer (User)
    rwx     Berechtigungen für Gruppe (Group)
       rwx  Berechtigungen für Rest der Welt (Other)

Dieses Berechtigungssystem ist standardmäßig auf jedem GNU/Linux System aktiv. Man kann damit die meisten Zugriffsregeln abdecken, jedoch kann man keine Gruppen ineinander verschachteln. Nur einzelne Benutzerkonten können Mitglied von Gruppen sein. Für komplexere Berechtigungssysteme kann man die Benutzerverwaltung auf Basis von LDAP oder den Linux Extended Attributes/ACLs aufbauen. Die Extended Attributes/ACLs erfordern die Unterstützung des Dateisystems und müssen bei Backups separat gesichert werden. Extended Attributes/ACLs werden von Ext2, Ext3, JFS, XFS und NFS unterstützt.

Editoren

Welchen Editor man wirklich verwendet, ist Geschmackssache. Es ist nur wichtig zu wissen, daß nano und vi auf so ziemlich jedem System verfügbar sind. Für Notfälle sollte man sich also anschauen wie man mit diesen Editoren umgeht. Auf Servern lassen sich leicht andere Editoren nachinstallieren.

Eingabe und Ausgabe

Die Ein-/Ausgabeströme STDOUT, STDIN und STDERR entsprechen geöffneten Dateien mit einer Dateiidentifikation (englisch „file descriptor” oder „file handle”). STDOUT entspricht 0, STDIN entspricht 1, und STDERR entspricht 2. C Programmierer dürften diese IDs kennen.

Shell Pipes

Die Shell Pipe wird sehr oft zum Filtern oder Extrahieren von Daten verwendet (zusammen mit den passenden Werkzeugen).

Verfolgen von Logfiles

Die Kommandos tail und head sind extrem nützlich, wenn man in sehr große Textdateien (≥ 500 MB) reinschauen muß. Durch Angabe der Option -n kann man die Anzahl der Zeilen angeben, die bis zum Ende oder vom Anfang gelesen werden sollen.

Kopieren von Daten

Es gibt die verschiedensten Möglichkeiten Daten zu transportieren. cp und mv funktioniert auf allen Systemen. mc ist dem Norton Commander unter MS DOS nachempfunden. Möchte man Daten über das Netzwerk kopieren, so gibt es eine Reihe von Wegen dies zu tun. Die beste Möglichkeit ist die Secure Shell (SSH). Das mitgelieferte Werkzeug scp stellt ein netzwerkfähiges und verschlüsseltes cp Kommando dar.

Kopieren ganzer Verzeichnisse

Diese Beispiele schauen auf den ersten Blick unübersichtlich und komplex aus. Sie setzen jedoch nur die bisher gezeigten Konzepte um und zeigen die für UNIX® Systeme typische Art an Kommandos zu kombinieren.

Advanced Packaging Tool (APT)

Werkzeuge der Systemadministration

Es gibt noch etliches mehr. Man kann allerdings die meisten Probleme mit Bash, Perl oder Python lösen. Skripting gehört zur Systemadministration dazu.

Über dieses Dokument

Copyright © 2008 by René Pfeiffer <lynx at luchs dot at>. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/).