GNU/Linux Administration

Lehrinhalt

  • Installation und grundlegende Konfiguration von Linux-Systemen
  • Einfache Netzwerkkonfiguration
  • Einrichtung und Verwaltung von Benutzern, Gruppen und Dateirechten
  • Programme mit apt installieren
  • Prozesskontrolle und Bootmanager
  • Einbindung von Linux über Samba in das lokale Netzwerk
  • Einstellung von Diensten für den Systemstart

Inhalte

Ähnlich wie im Grundkurs sind die vorgegebenen Inhalte zum Glück eng eingeschraenkt, was es auch hier ermöglicht, sehr gut auf den speziellen Bedarf der Teilnehmer einzugehen. Mögliche Inhalte sind unter anderem:

  • Server Installation
  • Dual Boot Systeme
  • Linux in heterogenen Netzen (Samba,...)
  • Fortgeschrittene Shell Befehle
    • apt-get (install|remove|autoremove|update|upgrade|dist-upgrade|clean)
    • dpkg -L installed_package
    • apt-cache search | grep, apt-cache show
    • Prozessverwaltung mit ps, kill, killall, pkill, top, htop und watch
    • Multitasking mit [Strg]+[z] und fg
    • users, groups
    • Benutzerverwaltung auf Shellebene: adduser, addgroup (Frontends zu useradd und groupadd), deluser, delgroup (Frontends zu userdel und groupdel)
    • Installation von Programmen, die nicht im Packetmanager sind: tar, configure, make, make install
    • mount, unmount, /etc/fstab
    • Aktuelle und vergangene Logins (Sicherheit): last, lastb, lastlog, w
    • [color]diff
    • Symmetrische und assymetrische Datei und Emailverschlüsselung mit gpg
    • Disc-tuning mit hdparm
    • halt, reboot, shutdown
    • Partitionieren mit GNU parted
    • Firewall Konfiguration/ Masquarading mit firestarter (graphisches Interface)
    • Text-mode Internet: elinks (www), alpine (email), centerim (chat), tin (usenet news), ncftp (ftp), wget (downloading), rtorrent (bittorrent client)
    • Text-mode Dateiverwaltung mit mc
    • Text-mode Windowmanager screen (.screenrc)
    • Stream editing (sed -i 's/old/new/' *.txt oder sed -i 'y/old/new/' *.txt; s/ übersetzt nur das erste Vorkommnis in jeder Zeile während y/ jedes Vorkommnis transliteriert.)
    • Text-mode Multimedia: mpg321, ogg123, moc, ncmpc
    • Verschiedene text-mode tools: units (konvertiert zwischen Einheiten verschiedener Skalen), translate (Deutsch-Englisches offline Wörterbuch)
    • Mausunterstüzung in der Konsole: gpm
    • Zeitversetzte Kommandos mit at, atd
    • Wiederkehrende Jobs mit cron verwalten
    • Virtueller Computer mit qemu -cdrom
    • Nerding für Sysadmins: tetrinetx, tetrinet-client
    • Anzeigen offener Dateien mit lsof
    • menu, pdmenu -c (Menüsystem für die Konsole)
  • Installation und Konfiguration von Grub (pflicht!)
  • Runlevels (Symlinks, init.d Startskripte, init, default Runlevel)
  • Installieren zusaetzlicher Packete
    • Webmin (mit kritischer Analyse)
    • dosbox
    • linux_logo
    • pure-ftpd, proftpd,... (Ftp Server)
  • LAMP (Linux, Apache, MySql, Php)
  • PostgreSQL Datenbankserver
  • ssh, scp
  • VNC - Virtual Network Connection
  • Backups
  • Emacs - Editing Macros, incl. Konfiguration
    • easypg (Interface für GnuPG)
  • Konfigurieren und Kompilieren eines Kernels
  • Defaults für neue user /etc/skel
  • Erstellung von Administrationsskripten mit Python
  • UUID Mechanismus
  • Einrichten von NFS Shares, mounten selbiger
  • Eingehenderes Beschaeftigen mit einem "kleinen" Desktop (Windowmaker, xfce,...)
  • Systemrettung mit einer Live CD (grml,...)
  • Kurzeinführung in LaTeX zum Erstellen eigener Dokumentation
  • Linux Programme unter Windows verwenden: Cygwin (http://www.cygwin.com/)

Nach der Installation

Als erstes sollte man nach der Installation die Quellen für zusätzliche Pakete freigeben (insbesondere für die Installation von Grafikkartentreibern etc.) und danach das System auf den neuesten Stand bringen. Im Textmode geht dies unter Verwendung jeglichen bereits installierten Editors (wie zum Beispiel nano oder vi) durch das Entfernen von Kommentarzeichen vor den relevanten Einträgen in /etc/apt/sources.list

sudo nano /etc/apt/sources.list
sudo aptitude update
sudo aptitude safe-upgrade

Installation von Programmen

Wie in jedem Debian basierten System können Programme/ Pakete einfach mit

sudo aptitude install program

installiert werden. Weiss man den Namen des zu installierenden Paketes nicht genau, so hilft (die Spitzen Klammern sind nicht zu tippen)

apt-cache search <search phrase>

Um vor der Installation mehr Informationen zu dem Paket zu erhalten, hilft

aptitude show program

Falls ein Programm nicht in den vorgegebenen Paketquellen vorhanden ist, so kann die Liste der Quellen erweitert werden und gegebenenfalls um die fehlenden Sourcen ergänzt werden.

sudo emacs -nw /etc/apt/sources.list
sudo aptitude update

Es ist auch möglich, eine in einer Textdatei vorhandene List von Programmen zu installieren (ein Packetname pro Zeile).

aptitude install $(< package_list.txt)

Falls ein Programm auf keinem (oder keinem vertrauenswürdigen apt Server zu finden ist, so kann man Debian Pakete auch ohne apt installieren.

dpkg -i program.deb

Wenn ein Programm jedoch überhaupt nicht als Debian Paket zur Verfügung steht, so kann dessen Source Code heruntergeladen, entpackt, konfiguriert, kompiliert und anschliessend installiert werden. Dies hört sich recht kompliziert an, ist aber wirklich nicht schwer.

wget http://www.anyserver.com/path/to/program/program.tar.gz
tar zvxf program.tar.gz
cd program
./configure
make
sudo make install

Damit ein Kompilieren möglich ist sind einige wichtige Packete zu installieren

sudo apt-get install binutils gcc g++ libc6-dev make 

Viele auf diese Art installierte Programme verlangen auch nach einigen developer Paketen, dies sind Pakete, deren Name auf -dev endet. Das jeweis mitgelieferte configure Skript gibt Auskunft über nachzuinstallierende Pakete, welche dann leicht mit apt-cache search ausfindig gemacht und mit apt-get install installiert werden können. Ein Vorteil dieser Methode ist, dass man Pakete auch ohne Rootrechte kompilieren und installieren kann, vorausgesetzt es ist eine ausreichende Entwicklungsumgebung installieret. Dies Geschieht durch das --prefix Attribut des configure Skripts

./configure --prefix=/home/user/...
make
make install

Shell Scripting

Grundsätzlich bevorzuge ich zur Erstellung von Administrationsskripten die Programmiersprache Python. Ein paar Grundzüge der Verwendung der Bash Shell sollten aber dennoch geläfig sein. Jedes solche Skript beginnt mit
#!/bin/bash
Um das Skript ausführbar zu machen, verwendet man
chmod +x skript.sh

Beachte auch die Hinweise zur IO Redirection in den Unterlagen zur Linux Einführung.

Variable

Variable werden in der Bash durch verwenden eines "=" Zeichens definiert, wobei weder vor noch hinter dem "=" Zeichen ein Leerzeichen sein darf. Zum Beispiel:

myvar="any value"

Um die Ausgabe eines Programms in eine Variable zu speichern, ist folgende Syntax zu verwenden

output=$( ls -la )

Es ist auch möglich, User-Input in einer Variable zu speichern

read userdata

Den Wert der Variablen kann man durch vorstellen eines Dollar-Zeichens ($) auslesen. Zu beachten ist das doppelte Anführungszeichen ("), da bei Verwendung des eines einfachen Anführungszeichen (') Varibale nicht durch deren Inhalt ersetzt werden.

echo "$myvar"

Flusskontrolle und Schleifen

Um Schleifen vorzeitig abzubrechen, stehen die Befehle break und continue zur Verfügung. break verläßt die Schleife (die Ausführung wird nach dem Ende der Schleife fortgesetzt) während continue nur den aktuellen Durchlauf der Schleife abbricht und am Beginn der Schleife fortsetzt.

If

Am Besten ist die if Bedingung anhand eines kleinen Beispiels zu verstehen. Statt der verwendeten Abfrage kann man auch viele andere Kriterien verwenden, zum Beispiel auch Abfragen nach der Existenz oder der Schreibbarkeit einer Datei. Siehe dazu man test

if [[ "$USER" == "gerald" ]]; then
  echo "IF: I'm gerald"
else
  echo "IF: I'm not gerald"
fi

Die generelle Syntax lautet

if expression_1; then
  # commands
elif expression_2; then
  # commands
else
  # commands
fi

Case

Zu beachten ist der doppelte Strichpunkt, der jeden Fall abschließt und dass es im Gegensatz zu einigen anderen Sprachen kein "falling through" zu weiteren Fällen gibt. Sobald eine Bedingung wahr ist, wird der case Block nach Ausführen der darin enthaltenen Kommandos verlassen).
case "$USER" in
root)
  echo "I'm root";;
gerald)
  echo "I'm gerald";;
esac

For

for arg in list
do
  # commands
done

Ein simples Beispiel ist

for file in *
do
  # commands using $file
done

Mit seq ist es möglich, eine for-Schleife eine bestimmte Anzahl von Malen auszuführen

for n in `seq 5`;
do
  # commands
done

Moderner und besser als die Verwendung von seq ist jedoch das {{start..stop..step}} Konstrukt. Zum Beispiel

for n in {1..10..3};
do
  # commands
done

While

while expression
do
  # commands
done

Simple Berechnungen

Bash kann auch für simplere Rechnungen herangezogen werden. Dies geschieht mit der $((rechnung)) Syntax. Zum Beispiel kann das Produkt aus zwei Variablen wie folgt berechnet werden

A=3
B=5
echo $((A * B))

Weitere Informationen

Eine Top-Referenz zum Thema Bash-Programmierung ist der Advanced Bash-Scripting Guide. Zum Beispiel ist dort beschrieben, wie mit Bash Zeichenketten manipuliert werden.

Server

Von den zahllosen in Linux zur Verfügung stehenden Servern sollen hier nur ein paar der wichtigsten kurz besprochen werden.

Samba Fileserver

Samba ist ein Softwarepacket, dass unter anderem eine Implementierung des Server-Message-Block-Protokolls (SMB) fuer Linux zur Verfuegung stellt. Zusammen mit NMB kann man mit SMB auf Linux einen Datei- und Druckserver fuer Windowsnetzwerke einrichten, der sehr stabil laeuft. Nach der Installation mit

sudo apt-get install samba

muessen einige Befehle ausgefuehrt werden und die Konfigurationsdatei sollte auch unbedingt angepasst werden.

sudo mksmbpasswd

erstellt nicht aktive Sambauser aus der Unix passwd Datei; dieser Befehl ist nur noetig, wenn man schon viele vorhandene Benutzer am Unix System hat, die auch zugriff mittels Windows Clients bekommen sollen. Bei manchen Distributionen (zB bei Ubuntu 6.06 Server) wird er automatisch im Zuge der Installation ausgefuehrt. Dieser Befehl sollte nur direkt nach der Installation und nur einmalig ausgefuehrt werden! Welche User bereits fuer Samba eingerichtet sind, kann man normalerweise in der Datei

/etc/samba/smbpasswd

nachlesen. Samba kann aber auch andere Backends als smbpasswd zur Userverwaltung verwenden, wie zB ldap, nis+, tdb,... Im Fall von Ubuntu Linux 6.06 wird tdbsam verwendet und die Daten der vorhandenen User können mit

sudo pdbedit -w -L

in einem smbpasswd aehnlichen Format ausgegeben werden. Wenn ein User neu in Unix erstellt wird, so muss er zusaetzlich in das Usersystem von Samba eingetragen werden

sudo adduser --shell /bin/true username
sudo smbpasswd -a username

Wenn ein User bereits in der Datenbank von Samba vorhanden, jedoch nicht aktiv (enabled) ist, kann er mit

sudo smbpasswd -e username

aktiviert werden, bzw kann man mit

sudo smbpasswd username

ein Passwort erstellen oder veraendern. Ein SMB Share kann in Linux nach der Installation des Packetes smbfs einfach mounten

sudo aptitude install smbfs
mount -t cifs -o username=...,password=...,... //IP/Share /mnt/point

zum Testen gemountet werden. Um dies beim Systemstart automatisch zu erledigen reicht ein entsprechender Eintrag in /etc/fstab, wobei man statt username und password in die Datei zu schreiben einen Verweis zu einer Credentials-Datei (zum Beispiel credentials=/etc/cifspw) verwenden sollte, die aus Sicherheitsgründen nur vom Samba Daemon lesbar ist

sudo cat >> /etc/fstab
//IP/Share  /mnt/point  cifs  credentials=/etc/cifspw,... 0 0

(Hinweis: bei einigen Distributionen muss man als Typ der Partition smbfs statt cifs (Common Internet File System) angeben). Die wohl besten Quellen für Samba sind sowohl das offizielle englische Howto als auch das englische Buch "Using Samba" von O'Reilly, beide gratis online zu lesen unter http://us5.samba.org/samba/docs/man/.

Apache 2 Webserver mit PHP 5

sudo apt-get install apache2 php libapache2-mod-php

Das war es eigentlich schon... damit jeder Benutzer eine eigene homepage unter localhost/~$USER/ zur Verfügung hat, muss das Modul userdir aktiviert werden

sudo a2enmod userdir

Wenn man jedoch PHP auch innerhalb der Benutzerverzeichnisse (~username/public_html) erlauben will, so muss je nach Distribution ev. noch /etc/apache2/mods-available/php5.conf angepasst und danach der Server neu gestartet werden (die notwendigen Änderungen sind zB in Ubuntu 16.04 in der Datei selbst erklärt).

sudo emacs -nw /etc/apache2/mods-available/php7.0.conf

Um sichere Verbindungen (https) zu erlauben, muss ssl aktiviert werden.

sudo a2enmod ssl
sudo a2ensite default-ssl.conf

Um automatisch auf eine sichere Verbindung umzuleiten, kann das rewrite Modul verwendet werden. Dazu muss /etc/apache2/sites-enabled/000-default.conf editiert werden. Die folgenden Zeilen sind hinzuzufügen:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Abschließend ist der server noch neu zu starten, damit die Änderungen in Kraft treten.

sudo /etc/init.d/apache2 restart

Unter Umständen ist es auch interessant ein Programm zur automatischen Analyse der Logdateien des Webservers zu installieren. Ein bekanntes Beispiel ist webalizer, jedoch müssen nach der Installation noch ein paar Anpassungen an der Konfiguration vorgenommen werden. Ausserdem muss es jedes mal ausgeführt werden, wenn man die Auswertung aktualiesiert über seinen Webbrowser betrachten will - dies kann leicht durch einen eintrag in die Cron Tabelle erledigt werden.

sudo apt-get install webalizer
sudo emacs -nw /etc/webalizer/webalizer.conf /etc/crontab

Für mehr Informationen zum Thema Apache, siehe Linux Netzwerk Management.

MySQL Datenbankserver

sudo apt-get install mysql-server php5-mysql

Nach der Installation kann man bereits die gewünschten Datenbanken erstellen. Davor empfiehlt es sich jedoch, ein Passwort für den user "root" der Datenbank zu erstellen. Normale Benutzer für die Datenbank kann man zum Beispiel direkt beim Zuteilen der Rechte einrichten

shell> mysql -h localhost -u root
mysql> SET PASSWORD = PASSWORD('your_password');
mysql> CREATE DATABASE your_database;
mysql> GRANT ALL ON your_database.* TO 'new_user'@'localhost'
    ->    IDENTIFIED BY 'new_user_password';
mysql> quit

In der Folge kann man sich nur mehr mit dem richtigen Passwort anmelden und der Aufruf von MySQL ändert sich zu

mysql -h localhost -u username -p

Wenn man MySQL mit einem schönen Webinterface verwalten möchte, muss man zusätzlich zu Apache und Php noch phpmyadmin installieren

sudo apt-get install phpmyadmin

Die Datenbanken von MySQL werden unter /var/lib/mysql/ gespeichert, wobei jede Datenbank ein Unterverzeichnis hat. Zum Erstellen von Backups empfiehlt es sich aber nicht, diese Dateien direkt zu kopieren - wenn man es dennoch will, so sollte man den MySQL Server dafür beenden. Besser ist die Verwendung von mysqldump, mit dem sich Backups von einzelnen Tabellen und Datenbanken oder allen Datenbanken gleichzeitig erstellen lassen. Im folgenden werden zuerst nur eine Tabelle, dann eine Datenbank und danach alle Datenbanken gleichzeitig in eine Datei gesichert

mysqldump -u user -p databaseName tableNames > filename.sql
mysqldump -u user -p databaseName > filename.sql
mysqldump -u root -p --all-databases > filename.sql

Das Einspielen eines zuvor erstellten Backups ist ebensoleicht - will man nur eine Tabelle oder eine Datenbank wiederhergestellen, verwendet man die Syntax der ersten Zeile, für ein gesamtes "restore" verwendet man jene der zweiten Zeile

mysql -u root -p -D databaseName < filename.sql
mysql -u root -p < filename.sql

Es ist auch möglich, alle Tabellen einer Datenbank in CSV Dateien zu exportieren

mysqldump -u user -p --no-create-info \
                     --tab=/path/to/files \
                     --fields-terminated-by=',' databaseName

bzw. Daten aus CSV Dateien zu importieren (der Name der Tabelle wird vom Dateinamen (ohne dessen Endung) genommen. Die (leere) Tabelle muss aber bereits in MySQL existieren, um CSV Dateien darin importieren zu können

mysqlimport -u user -p \
            --fields-terminated-by=',' databaseName filename.csv

Eine kurze Einführung in die Benutzung von MySQL findet sich unter php_sql.php#mysql.

PostgreSQL Datenbankserver

sudo apt-get install postgresql php-pgsql

PostgreSQL kann wahlweise von der Shell des Betriebssystem mittels einiger Wrappers oder vom eigenen Prompt konfiguriert/ benutzt werde. Ich halte mich hier an die Kommandos, die man direkt in der Shell von Linux benutzt. Solange man noch keine Benutzerrechte festgelegt hat, muss man Eingriffe in die Datenbank als user postgres erledigen.

sudo -u postgres createuser $USER --pwprompt
sudo -u postgres createdb $DBNAME --owner=$USER [-E UNICODE]

Möchte man einen User verwenden, der nicht im System existiert, ist auch pg_hba.conf zu editieren, um den Zugriff zu erlauben (diese Datei befindet sich in Ubuntu 16.04 für Postgres 9.5 in /etc/postgresql/9.5/main/) - wobei die Standardeinstellungen für Zugriffe über das Netzwerk bereits passen. Wenn man also zum Beispiel bei der Verbindung von Owncloud zu Postgres den Fehler "postgresql username and/or password not valid" bekommt liegt es in der Regel daran, dass statt "127.0.0.1" der Begriff "localhost" eingegeben wurde.

local      $DBNAME    $USER         md5

Die Verbindung lässt sich mittels

psql -h localhost -d $DBNAME -U $USER -W

testen.

Für die Administration der Datenbank(en) gibt es wahlweise ein Webinterface

sudo apt-get install phppgadmin

Oder ein lokales (plattformunabhängiges) Programm

sudo apt-get install pgadmin3

Ein Backup kann entweder von einer einzelnen Datenbank

pg_dump -c databaseName > databaseName_backup.sql

oder von allen Datenbanken gleichzeitig erstellt werden

pg_dumpall > postgres_backup.sql

Natürlich kann das Backup auch gleich bei der Erstellung komprimiert werden

pg_dumpall | gzip > postgres_backup.sql.gz

Liegt ein Backup einer einzelnen Datenbank vor, so kann dieses mit

psql databaseName < databaseName_backup.sql

wiederhergestellt werden. Ein Gesamtbackup kann mit

psql -f postgres_backup.sql postgres

wiederhergestellt werden.

NFS - Network File System

Allgemein ist über NFS zu sagen, dass es meiner Meinung nach seit Samba nicht mehr zeitgemäß ist und Samba bevorzugt verwendet werden sollte. Wer es dennoch verwenden möchte, sollte sich der damit verbundenen Sicherheitsrisiken im klaren sein. Diesbezüglich empfiehlt sich eine ausgereifte Firewallkonfiguration mit iptables oder zumindest die Verwendung von /etc/hosts.allow und /etc/hosts.deny. Bei der Firewall darf man aber natürlich nicht darauf vergessen, die notwendigen Ports für die gewünschten Clients freizugeben. Zu berücksichtigende Dienste sind portmap, lockd, rquotad, mountd und statd.
Zu exportierende Verzeichnisse werden in /etc/exports eingetragen. Die Exports können auf einzelne IPs oder ganze Netzwerke limitiert werden und bei Bedarf schreibgeschützt erfolgen. Ansonsten gelten die normalen Unix Benutzerrechte - das heisst ein User am Clientrechner hat über NFS die gleichen Rechte auf die freigegebenen Dateien wie er sie als lokaler Benutzer am Server hätte (die implizierten Sicherheitsprobleme sollte man sich in Ruhe durch den Kopf gehen lassen; ein Zugriff als root ist in der Regel per default gesperrt). Der Inhalt von /etc/hosts könnte zum Beispiel so aussehen

/home         192.168.1.0/255.255.255.0(rw)
/usr/local    192.168.1.2(ro) 192.168.1.3(ro) 192.168.1.4(rw)

Clientseitig kann das Dateisystem entweder einmalig gemounted werden

sudo mount $SERVERIP:/path/on/server /mount/this/here

oder durch einen Eintrag in /etc/fstab bei jedem Neustart verfügbar gemacht werden

$SERVERIP:/path/on/server   /mount/point   nfs   defaults   0 0

VNC - Virtual Network Connection

Mit VNC laesst sich ein grafischer Desktop bequem fernsteuern. Ich empfehle die Verwendung von x11vnc

sudo apt-get install x11vnc

Durch Starten des Servers mit

x11vnc

gibt man seinen Desktop zur Fernsteuerung frei (es empfiehlt sich, die Konfiguration des Servers so anzupassen, dass der Client ein Passwort zur Verbindung eingeben muss). Dabei kann ein Dritter den Desktop des aktuellen Users kontrollieren, was sich besonders für Supporttätigkeiten anbietet. Da der User sieht, was genau man am Desktop macht, besteht eine gute Chance, dass sie beim nächsten mal keine Unterstützung mehr benötigt.

Alternativ kann man auch einen VNC Server verwenden, der eine grafische Remoteverwaltung erlaubt, ohne den aktuellen Desktop zu sehen oder zu verändern.

sudo apt-get install vnc4server
vncserver

Damit der VNC Server auch benutzt werden kann, sollte sichergestellt sein, dass bei Verwendung einer Firewall die entsprechenden Ports freigegeben sind. In der Regel ist das 5900, wobei manchmal auch andere Ports verwendet werden (je nach Konfiguration 5500, 5800, 5801, 5900, 5901,...).

Zum Verbinden mit dem Server benötigt man selbstverstaendlich einen client.

sudo apt-get install xvnc4viewer
vncviewer [server][:Display]

Bei Verbindung zum Standarddisplay (:0) ist es nicht nötig, die Displaynummer anzugeben, in allen anderen Fällen schon.

UUID Mechanismus

Um neue Festplatten hinzufügen zu können, ist es nötig den UUID (Universally Unique Identifier) Mechanismus zu verstehen und anwenden zu können. Früher wurden Festplatten einfach anhand ihrer Position (primary master, primary slave,...) den device files /dev/hda zugeordnet. Mit SCSI und SATA Platten, sowie mit Platten, die über USB angeschlossen sind, geht das natürlich nicht mehr. Um daher eine Partition immer eindeutig ansprechen und sie daher stets an die selbe stelle mounten zu können muss man ihr eine UUID zuordnen. Dies geht mittels:

UUID=`uuidgen -t`
sudo tune2fs -U $UUID device
blkid
sudo reboot

Die eben gemachten Einstellungen kann man wahlweise mit

ls /dev/disk/by-uuid/ -l
blkid
sudo vol_id /dev/sda1

testen. Danach ist die neue UUID in /etc/fstab einzutragen. Dies kann zum Beispiel so aussehen:

UUID=...   /home   ext3   defaults   0   2

Monitoring

Zum Überwachen des Systems bieten sich in Linux zahllose Tools wie iostat, vmstat, netstat, pktstat, ifstat und dstat an. Hier umreisse ich nur ganz kurz das letztgenannte dstat, welches im Wesentlichen die Möglichkeiten aller anderen integriert und sogar erweitert. Der Standardaufruf erfolgt mit

dstat

und gibt einen mit vmstat vergleichbaren Output. Dstat unterstützt eine große Zahl an Optionen und Plugins, welche in der Manpage erklärt sind. Es folgt ein Beispiel, das die Top-Verbraucher des Systems in den Bereichen CPU, IO und Memory 3 mal im Takt von 5 Sekunden auflistet

dstat --top-cpu --top-cputime --top-io --top-mem --top-bio  5 3

Backups

Mit dem Client-/ Serverprogramm partimage kann man sehr einfach ganze Partitionen lokal oder über das Netzwerk sichern. Dabei kann man die Partition wahlweise komprimieren. Inkrementierte Backups sowie teilweise Recovers sind nicht möglich, man kann nur jeweils die ganze Partition sichern bzw. regenerieren.

sudo apt-get install partimage [partimage-server]
sudo partimage

Danach genügt es, den Anweisungen des sehr einfachen ncurses Interfaces zu folgen.

Alternativ dazu kann man auch mit "normalen" Tools wie tar und ssh ein Backup über das Netzwerk erstellen.

tar zcf - directory/ | ssh hostname "cd /backup/; tar zpxvf -"

Sobald eine Kopie erstellt ist, ist es sinnvoll diese durch Verwendung von rsync auf dem aktuellsten Stand zu halten. rsync ermöglicht das synchronisieren von lokalen und remote Backups, wobei nur die Differenz zum letzten Backup übertragen wird. Diese Methode ermöglicht es auch, einfache partielle Recovers durchzuführen. Will man damit ein lokales Backup erstellen, kann man beispielsweise den folgenden Befehl nutzen (bitte auf den fehlenden abschliessenden / in der Quelle achten - fügt man diesen an, so wird der Inhalt des Verzeichnisses synchronisiert, lässt man ihn Weg, so wird das Verzeichnis selbst inklusive des Inhalts synchronisiert)

rsync -av --delete /path/to/source /path/to/destination/

Zum Experimentieren mit rsync empfiehlt sich die Optionen -n (sie zeigt leidiglich an, was bei einer echten Durchführung passieren würde). Für ein Backup über ssh kann es nötig sein, die Option --rsh=ssh anzugeben, falls dies nicht ohnehin default ist. --delete löscht vom Ziel Dateien und Verzeichnisse, die auf der Quelle entfernt wurden - also erst damit handelt es sich um echtes Synchronisieren. Es kann sowohl die Quelle (PULL) also auch das Ziel (PUSH) auf einem entfernten Computer liegen. Ein Beispiel für ein PUSH ist

rsync -avn --rsh=ssh --delete /home/gerald/music \
                              gerald@192.168.1.65:/home/gerald/

Dieses Tool lässt sich auch hervorragend mit cron kombinieren, um die Backups zu automatisieren. Eine gute Ressource zu dem Thema ist http://www.mikerubel.org/computers/rsync_snapshots/. Im wesentlichen genügt es, die obigen Befehle in crontab einzutragen.

crontab -e

Ein typischer Eintrag in crontab (Backup jeden Tag um 01:00 bzw. 03:00) sieht so aus (wobei var in diese Beispiel eine gesonderte Festplatte darstellt)

# m h  dom mon dow   command
  0 1    *   *   *   rsync -a --delete /home /var/backups/
  0 3    *   *   *   rsync -a --delete /etc  /var/backups/

Benötigt man partielle und inkrementelle Backups (bei einem inkrementellen Backup werden mehrere Backups in gewissen Intervallen erstellt, wobei jeweis nur die Differenz zum letzten Backup neu gesichert wird), so empfiehlt sich das Tool rdiff-backup in Verbindung mit dem Interfaceprogramm backupninja, welches sich auch um automatisierte Backups von ldap, maildir, mysql, postgresql, svn und trac kümmert und durch Skripte erweiterbar ist.

sudo apt-get install backupninja

Installation von GNU GRUB, the GRand Unified Bootloader

Falls bei der Installation der Bootloader GRUB nicht mit installiert wurde oder eine spätere Windows-Installation den Bootsektor überschrieben hat, so kann GRUB mit folgenden Kommandos installiert werden, nachdem von einer Live CD wie zum Beispiel grml gebootet wurde:

shell> sudo grub
grub> find /boot/grub/stage1
grub> root (hdX,X)
grub> setup (hd0)

Anstelle von (hdX,X) ist der Output von find /boot/grub/stage1 zu schreiben.

Zugriff auf eine NTFS Partition

Auf NTFS Partitionen kann nach Installation des Packets ntfs-3g sowohl lesend als auch schreibend zugegriffen werden. Als Dateisystem muss sowohl bei Verwendung des Befehls mount als auch in /etc/fstab "ntfs-3g" angegeben werden.

mkdir /mnt/windows
mount -t ntfs-3g -o rw /dev/XXX /mnt/windows

Systemrettung

Falls einmal alles schief geht, können auch nicht mehr bootende Systeme in der Regel noch gerettet werden. Dazu muß man zuerst eine von externen Medien bootfähige Linuxdistribution wie zum Beispiel Grml Live Linux starten. Die externe Distribution muß dabei die gleiche Architektur (32 oder 64 bit) wie die des defekten Systems besitzen. Danach ist das defekte System mittels

mkdir /mnt/fixme
mount /dev/sda2 /mnt/fixme

zu mounten, wobei /dev/sda2 durch die Rootpartition des zu reparierenden Systems auszutauschen ist. Daraufhin werden noch die Verzeichnisse /dev, /proc und /sys dem zu reparierenden System zugänglich gemacht, bevor man die Shell darauf chrooted

mount --bind /dev /mnt/fixme/dev
mount --bind /proc /mnt/fixme/proc
mount --bind /sys /mnt/fixme/sys
chroot /mnt/fixme

Schließlich kann man beginnen, das defekte System zu reparieren - wobei die konkreten Schritte vom Defekt abhängen. Dabei hilft in der Regel eine Suchmaschine beziehungsweise ein Blick auf http://askubuntu.com/ (oder eine ähnliche Seite für die jeweilige Distribution).

Konfigurieren und Kompilieren eines Kernels

Bevor man einen Kernel kompiliert, sollte man sich darüber im Klaren sein, dass das automatische Updatesystem der Distribution einen selbstgebastelten Kernel natürlich nicht mit Sicherheitsupdates versorgen kann. Wenn man dennoch einen eigenen Kernel braucht oder will, so muss man zuerst eine Entwicklungsumgebung installieren, um den Linux Kernel kompilieren zu können. Dazu sind Packete wie gcc, make, libncurses-dev, ncurses-dev, libc6-dev etc. nötig. Danach muss man noch die zu kompilierenden Sourcen herunterladen - das geht entweder ueber ein Packet der Distribution (z.B.: sudo apt-get install linux-source) oder durch Herunterladen des ungepatchten Vanilla Kernels von http://kernel.org/. Letztere Methode hat den Vorteil, einen ganz aktuellen Kernel zu erwerben, der dafür nicht vom Distributor gepatcht ist. Wenn man den Kernel selbst heruntergeladen hat, so muss dieser zuerst entpackt werden

tar -jvxf linux-2.6.xx.x.tar.bz2

Nach dem Entpacken sollte man die enthaltene README Datei lesen

cd linux-2.6.xx.x
less README

Zur Konfiguration hat man einige Moeglichkeiten, die auch in der README Datei erklärt sind. Will man die vorhandene Konfiguration des aktuellen Kernels beibehalten, so reicht ein

make oldconfig

Will man jedoch den Kernel auf die aktuelle Hardware zuschneiden und nicht benoetigte Module deaktivieren, so hat man die Moeglichkeit, zwischen verschiedenen Konfigurationstools, welche alle in der README Datei beschrieben sind, zu wählen. In der Konsole empfiehlt sich in diesem Fall ein

make menuconfig

Wenn man gerne die grafische Benutzeroberfläche KDE verwendet und die zugehörigen Entwicklungspackete installiert sind, so kann man statt dessen auch ein make xconfig bzw. analog für Gnome make gconfig zum Konfigurieren verwenden.
Danach erfolgen das eigentliche Kompilieren und die Installation (dauert je nach Rechner und Kernelkonfiguration zwischen ca. 10 Minuten und einer Stunde).

make
sudo make modules_install install

Je nach Distribution sollte man danach das /boot/ Verzeichnis kontrollieren, ob auch alle gewünschten Dateien vorhanden sind. In /boot/grub/menu.lst muss eventuell noch der neue Kernel eingetragen werden. Nach einem

sudo reboot

sollte man den neuen Kernel bereits verwenden können.
Viel Glück! ;)

Verschiedenes

Manchmal ist es notwendig herauszufinden, ob man sich auf einem 32 oder 64 bit Rechner befindet. Dies läßt sich einfach mit Hilfe von
cat /proc/cpuinfo
erledigen (zum Beispiel bedeutet das Flag "lm" (long mode), dass man sich auf 64 bit Hardware befindet. Manchmal will man aber auch wissen, ob es sich bei der aktuellen Installation um ein 32 bit oder ein 64 bit Linux handelt. Dies geht zum Beispiel mittels
getconf LONG_BIT

Hier folgt eine (unsortierte) Aufstellung einiger der im Kurs gezeigten Webseiten.

Link kurze Beschreibung
http://freshmeat.net/ Tonnenweise Software, englisch
http://www.selflinux.org/ Selflinux (vergleichbar mit Selfhtml, nur eben fuer Linux ;))
http://www.tldp.org/ The Linux Documentation Project, englisch
http://oreilly.com/linux/ Linux und Open Source bei O’Reilly, englisch
http://www.faqs.org/ Sehr gute Informationsquelle: das Internet FAQ (Frequently Asked Questions) Archiv, englisch
http://www.howtoforge.com/ Viele exzellente Tutorials und Howtos auf Englisch
http://debiananwenderhandbuch.de/ Debian GNU/Linux Anwenderhandbuch
http://www.howtoforge.com/ubuntu_internet_explorer Für Webentwickler, die eine Lizenz für Ms Windows haben: Internet Explorer unter Linux installieren
[Valid XHTML 1.1!]