GNU/Linux Grundlagen
Einführung für Systemadministratoren
René Pfeiffer
pfeiffer@luchs.at
Inhalte
- GNU + Linux® = Betriebssystem
- Überblick über Distributionen
- Linux Standard Base (LSB)
- Booten, Dateisysteme, Geräte
- Arbeiten mit der Shell
- Netzwerkkonfiguration (TCP/IP)
Diese Liste gibt einen kurzen Überblick über die behandelten Themenbereiche.
GNU Projekt und Linux® Kern
- GNU = GNU's Not Unix®
- Projekt zum Nachbau einer freien Unix® Umgebung
- Begründet im Jahre 1984 von Richard M. Stallman
- Linux® Kern
- Projekt zum Nachbau eines MINIX Systems
- 1991 begonnen von Linus Torvalds
- 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
- Freie Software heißt
- unter der General Public License (GPL) oder
- einer damit kompatiblen Lizenz lizensiert.
- Freie Software hat vier Freiheiten
- Nutzung der Software ohne jede Einschränkung
- Kopien dürfen verteilt werden (kostenlos oder kostenpflichtig); Empfänger erhält dieselben Freiheiten
- Code darf studiert und angepaßt werden
- Alle Veränderungen unterliegen derselben Lizenz
- Freie Software ≠ proprietäre Software
- Beide können kommerziell oder nichtkommerziell sein
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
- Kombination ergibt erst das Betriebssystem
- Linux® stellt den Kern
- Verwaltung der Hardware und Resourcen,
- Dateisysteme,
- I/O und CPU Scheduling,…
- GNU stellt die Werkzeuge zum Verwalten/Arbeiten
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
- Distribution ist abgepackte Software
- Distribution haben meist einen Installer
- System zum Paketmanagement
- Red Hat Package Manager (RPM)
- Advanced Packaging Tool (APT)
- Portage
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)
- Sammlung von Standards für GNU/Linux® Systeme
- LSB regelt Bibliotheken, Programme, Dateien,…
- einheitliche Verzeichnisstruktur
- basiert auf POSIX Spezifikation
- Kooperation mehrerer Distributoren
- LSB Version 3.2 aktuell
- LSB ist ISO Norm
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
- Linux® ist dateiorientiert
- Blockgeräte sind Dateien,
- serielle/parallele Ports sind Dateien,
- FIFO Schlangen sind Dateien,
- CPU Register sind Dateien,…
- Resourcen werden
- transparent und
- besser zu verwalten
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
- Dateisysteme
- ext2/ext3/ext4, JFS, XFS, ReiserFS, ISO 9660, UFS, FAT
- NCP, NFS 2/3/4, SMB, CIFS
- Cluster oder verteilte Dateisysteme
- GFS2 (Red Hat), OCFS2 (Oracle®)
- Coda, AFS
- Kompatibilität
- NTFS, ADFS, Amiga FFS, Apple HFS/HFS+
- BeFS, EFS (Irix), FreeVxFS (Veritas), HPFS (OS/2)
- QNX4 (nur Lesen), System V FS, UFS (*BSD, nur Lesen)
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
- /bin/ und /usr/bin/ enthalten Kommandos
- /sbin/ und /usr/sbin/ enthalten Systemkommandos (für root)
- /usr/X11R6/bin/ enthält Software für grafische Oberfläche
- /lib/ und /usr/lib/ enthält Bibliotheken
- /home/ enthält Benutzerdaten
- /tmp/ kann von jedem beschrieben werden
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
- /opt/ und /usr/local/ enthalten „Nachbau” von /
- Ort für lokale Installationen
- Installationen sind nicht Teil der Distribution
- nützlich für Anpassungen oder eigenen Code
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
- /proc ist virtuell
- /proc ist Schnittstelle zum Kern
- Einträge lassen sich beschreiben und lesen
- Dokumentation in den Kernquellen Documentation/filesystems/proc.txt
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
- cat /proc/interrupts
- cat /proc/cpuinfo
- echo 0 > /proc/sys/net/ipv4/ip_forward
- echo 16777216 > /proc/sys/net/core/wmem_max
- ls /proc/1
/dev - Geräte
- Geräte lassen sich wie Dateien ansprechen
- /dev/ enthält Gerätedateien
- Einträge in /dev/ sind entweder
- statisch oder
- dynamisch durch udev Prozeß verwaltet
/dev - Beispiele
- /dev/hda1 - erster PATA Controller, Master, Partition 1
- /dev/hdf7 - dritter PATA Controller, Slave, Partition 7
- /dev/sdc3 - „dritte” SCSI-Disk, Partition 3
- /dev/tty1 - erste Eingabe-Console
- /dev/ttyS0 - erster serieller Port
- /dev/ttyUSB0 - serieller Port an USB-Adapter
- /dev/rfcomm0 - erstes Bluetooth RFCOMM TTY Gerät
/etc - Konfigurationen
- /etc/ enthält Systemkonfigurationen
- System-/Benutzerkonten
- Netzwerkeinstellungen
- Dateisysteminformationen, …
- /etc/ - enthält globale Applikationskonfigurationen
/boot - Kern
- /boot/ enthält
- den Linuxkern
- die Init-RAM-Disk (optional)
- die Symbol-/Modultabelle
- Bootloader läd Kern
- Nach dem Booten kann /boot/ ausgehängt werden
- Module des Kern liegen in /lib/modules/…
Bootprozeß
- BIOS läd Bootblock und Bootloader
- Bootloader ist meist lilo oder grub
- Bootloader läd Linux® Kern
- Kern übernimmt System
- Initialisierung der Hardware
- Mount des / Dateisystems (änderbar mit „root=”)
- Aufruf von /sbin/init (änderbar mir „boot=”)
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
- Bootmeldungen nützlich zur Diagnose
- Alle Treiber melden sich beim Booten
- Bootmeldungen lassen sich auf serielle Console umleiten
- Nachträgliches Anschauen unter
- /var/log/dmesg oder
- durch Kommando dmesg
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
- 0 - Systemhalt
- 1 - Einzelbenutzer
- 2-4 - benutzerdefiniert (Mehrbenutzermodus)
- 5 - Mehrbenutzermodus mit X11/Xorg
- 6 - Neustart
Der Run Level läßt sich zur Laufzeit mit dem Kommando telinit neu setzen.
Initskripte
- Prozesse werden pro Run Level gestartet
- Aktivität wird durch Initskripte geregelt
- /etc/init.d/ enthält Skripte
- /etc/rcX.d/ enthalten Links auf Skripte
- Links sind mit S (Start) und K (Kill) markiert
- Zahl gibt Priorität an
- /etc/rc.local wird zuletzt ausgeführt
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
- Bash ist verbreitete Shell
- Kommandozeileninterpreter (≡Shell)
- skriptfähig
- automatische Vervollständigung
- Befehlsgeschichte, …
- Textbasierte Oberfläche
- Schnittstelle für Fernwartung
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
- System: top, ps, procinfo, df, sysctl
- Netzwerk: ip, ifconfig, route, netstat, ping, telnet, hping, traceroute
- Dateisysteme: mount, umount, mkfs, fsck, dd
- Dateien: cd, ls, cp, mv, rm, rmdir, mkdir, stat, touch, du, tar,
chmod, chown, chgrp
- Text: grep, less, more
- Serielle Console: minicom
Man Pages - Hilfefunktionen
- man zeigt Hilfstexte an
- man man
- man ifconfig
- man 2 time
- apropos bietet eine Suchfunktion
- apropos time
- apropos copy
- perldoc für Perlskripte
- funktioniert nur für eingebaute Dokumentation
- perldoc perlskript.pl
Die
man pages sind in Kategorien eingeordnet.
- Ausführbare Programme und Shell Kommandos
- Systemfunktionen (system calls), die vom Kern zur Verfügung gestellt werden
- Funktionen aus Bibliotheken
- Spezielle Dateien (beispielsweise Geräte aus /dev/)
- Dateiformate und Konventionen
- Spiele
- Verschiedenes (Makros, Konventionen, man, groff, …)
- Kommandos zur Systemadministration
- 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
- GNU nano (inspiriert von Pines pico)
- mcedit (für Kenner des Norton Commander)
- vi/vim
- GNU emacs
- joe (für Kenner von WordStar und Turbo C)
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
- E/A Ströme: STDOUT, STDIN & STDERR
- Shell kann diese umleiten
- > leitet STDOUT um
- < leitet STDIN um
- 2> leitet STDERR um
- Umleiten von Ausgaben und Eingaben
- mysqldump > backup.sql
- mysql -h db.serv.er < backup.sql
- ls -l > /tmp/listing.txt
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
- Ausgabe kann als Eingabe verwendet werden
- ls -l | grep "2008-08-08 22" | less
- | ist die sogenannte „Pipe”
- cat emails.txt | sort | uniq > liste.txt
Die Shell Pipe wird sehr oft zum Filtern oder Extrahieren von Daten verwendet (zusammen mit den
passenden Werkzeugen).
Verfolgen von Logfiles
- Manchmal möchte man mitlesen
- tail -f /var/log/syslog
- tail -f /var/log/mail.info | grep NOQUEUE
- Strg-C beendet das Kommando
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
- Lokal: cp, mv, mc
- Netzwerk: ftp, wget, curl, ssh/scp, nc/netcat
- Inkrementell: rsync
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
- Lokal, rekursiv, mit allen Berechtigungen
- cd /pfad/verzeichnis
- tar -cSf - . | ( cd /ziel; tar -Sxfp -)
- Vernetzt, rekursiv, mit allen Berechtigungen
- cd /pfad/verzeichnis
- tar -cSzf - . | ssh server.at.xy tar -xz -C /ziel
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)
- Aktualisieren der Datenbank: aptitude update
- Suchen von Paketen
- aptitude search ipv6
- aptitude search mime | grep perl
- Installieren von Software
- aptitude install libmime-lite-perl
- Systemupgrades: aptitude upgrade
Werkzeuge der Systemadministration
- Bash Skripte
- Perl/Python Skripte
- Awk Skripte
- C/C++ Programme (Power Tools)
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/).