[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ weiter ]


Debian-Referenz
Kapitel 8 - Debian-Tipps


8.1 Booten des Systems

Detaillierte Informationen über den Boot-Prompt (also die Eingabeaufforderung beim Systemstart) gibt es im BootPrompt-HOWTO des LDP.


8.1.1 "Ich habe das root-Passwort vergessen!" (1)

Sobald man Zugriff auf die Tastatur eines Rechners hat, kann das System gestartet werden und ein Login stattfinden, auch ohne das root-Passwort zu kennen. (Dies setzt allerdings voraus, dass keine zusätzlichen Schutzmaßnahmen ergriffen wurden, wie z.B. ein BIOS-Passwort oder eine Passwortabfrage durch lilo, was ein Booten des Systems verhindern würde.)

Dies ist ein Vorgehen, das keine externen Boot-Medien und Änderungen der BIOS-Einstellungen benötigt. Die Bezeichnung für die voreingestellte Boot-Option sei "Linux".

Sobald die lilo-Boot-Meldung boot: erscheint (auf einigen Systemen muss die Shift-/Umschalt-Taste gedrückt werden, um einen automatischen Bootvorgang zu unterbrechen und wenn lilo den Framebuffer verwendet, muss TAB gedrückt werden, um die eingegebenen Optionen zu sehen), ist Folgendes einzugeben:

     boot: Linux init=/bin/sh

Das System startet nun den Kernel und daraufhin das Programm /bin/sh anstelle des üblichen init-Prozesses. Die nun erlangte Shell hat root-Privilegien. Da das Hauptverzeichnis / nur les- aber nicht schreibbar ist und viele während des üblichen Boot-Prozesses eingeklinkten Verzeichnisse nicht erreichbar sind, müssen diese nachträglich gemountet werden, um ein vernünftiges Arbeiten zu ermöglichen:

     init-2.03# mount -n -o remount,rw /
     init-2.03# mount -avt nonfs,noproc,nosmbfs
     init-2.03# cd /etc
     init-2.03# vi passwd
     init-2.03# vi shadow

(Wenn in der Datei /etc/passwd das zweite Datenfeld bei allen Einträgen ein "x" ist, dann benutzt das System shadow-Passwörter. In diesem Fall muss statt /etc/passwd die Datei /etc/shadow editiert werden.) Um das root-Passwort zurückzusetzen, muss das zweite Feld des root-Eintrags gelöscht werden. Nach einem Neustart ist das root-Passwort leer und kann neu vergeben werden. Wenn das System in den Runlevel 1 fährt, wird (zumindest bei Debian-Versionen nach Potato) ein Passwort benötigt.

Ein Editor im /bin/-Verzeichnis ist absolut empfehlenswert, für den Fall, dass der /usr/-Baum nicht erreichbar ist (siehe dazu auch Rettungseditoren, Abschnitt 11.2).

Für Notfälle hat sich außerdem sash (stand alone shell) bewährt. Wenn das System nicht mehr gebootet werden kann, geben Sie am lilo-Prompt Folgendes ein:

     boot: Linux init=/bin/sash

Das Programm sash dient als Ersatz für sh, selbst wenn /bin/sh nicht nutzbar ist. Es ist statisch gelinkt und hat viele Standardbefehle eingebaut. (Wenn sash gestartet ist, wird "help" eine kurze Referenz anzeigen.)


8.1.2 "Ich habe das root-Passwort vergessen!" (2)

Starten Sie das System mit einer Rettungsdiskette/-CD. Sei /dev/hda3 die Root-Partition. Dann kann die Passwortdatei editiert werden durch:

     # mkdir fixit
     # mount /dev/hda3 fixit
     # cd fixit/etc
     # vi shadow
     # vi passwd

Der Vorteil dieser Variante ist, dass ein eventuell vergebenes lilo-Passwort umgangen werden kann. Erforderlich ist allerdings, dass im BIOS die Einstellung für das Boot-Laufwerk manipuliert werden kann (falls es nicht schon entsprechend eingestellt ist).


8.1.3 Das System kann nicht gestartet werden

Dies ist kein Problem, selbst wenn Sie keine Boot-Diskette während der Installation angelegt haben. Wenn lilo defekt ist, können Sie die Boot-Disk des Debian-Installationssets verwenden und davon Ihr System booten. Wenn Ihre Root-Partition /dev/hda12 ist und im Runlevel 3 gestartet werden soll, geben Sie Folgendes am Boot-Prompt ein:

     boot: rescue root=/dev/hda12 3

Danach haben Sie ein fast vollständig funktionsfähiges System mit dem Kernel des Installationsmediums gestartet. (Es kann einige kleinere Probleme aufgrund fehlender Kerneleigenschaften oder Module geben.)

Vergleichen Sie Installation eines Pakets in ein nicht bootfähiges System, Abschnitt 6.3.6 wenn Sie ein defektes System haben.

Benötigen Sie eine angepasste Boot-Diskette, folgen Sie den Anweisungen in readme.txt auf der Rettungsdiskette.


8.1.4 Abschalten von X beim Booten

Dem Nachjagen von unstable/sid ist lustig, aber ein fehlerhaftes xdm, gdm, kdm oder wdm, das während des Boot-Prozesses gestartet wird, kann sehr unangenehm sein.

Zuerst sollten Sie Zugang zu einer root-Shell erlangen, indem Sie Folgendes am Boot-Prompt eingeben:

     boot: Linux vga=normal s

Hier steht Linux für das Kernel-Image, das Sie starten; "vga=normal" stellt sicher, dass lilo im normalen VGA-Modus startet und "s" (oder "S") ist der Parameter der an init weitergegeben wird und für Single-User-Modus steht. Geben Sie das root-Passwort am Prompt ein.

Es gibt mehrere Möglichkeiten alle Daemonen die X starten zu deaktivieren:

Hier muss die Nummer in rc2.d dem Runlevel entsprechen, das in der Datei /etc/inittab angegeben wurde. ?dm bedeutet, dass das Kommando mehrfach ausgeführt wird, wobei es jeweils durch xdm, gdm, kdm und wdm ersetzt wird.

Nur der erste Weg ist "der eine wahre Weg" in Debian. Der letzte ist einfach, funktioniert aber nur in Debian und erfordert, dass der Display-Manager später mit dpkg-reconfigure gesetzt wird. Alles andere sind allgemeine Methoden, um Daemonen zu deaktivieren.

Sie können immer noch X mit dem Kommando startx von einer beliebigen Konsole starten.


8.1.5 Weitere Tricks mit dem Boot-Prompt

Mittels des lilo-Boot-Prompts kann das System in einem beliebigen Runlevel gestartet werden. Details dazu finden sich im BootPrompt-HOWTO des LDP.

Soll das System im Runlevel 4 starten, verwenden Sie folgende Eingabe am lilo-Boot-Prompt.

     boot: Linux 4

Wenn das System im normal funktionierendem Einzelnutzer-Modus gestartet werden soll und Sie das root-Passwort kennen, so kann eins der folgenden Beispiele am lilo-Boot-Prompt verwendet werden.

     boot: Linux S
     boot: Linux 1
     boot: Linux -s

Auch der benutzte Speicherbereich kann eingeschränkt werden. Das folgende Beispiel weist das System an, nur 48MB des verfügbaren Speichers zu belegen.

     boot: Linux mem=48M

Achtung: Wird an dieser Stelle mehr Speicher angegeben als vorhanden, wird der Kernel abstürzen. Wenn man mehr als 64 MB Speicher hat, kann es bei alten Kernels und/oder Mainboards passieren, dass das System nur 64MB nutzt. In diesem Fall kann man versuchen den ungenutzten Speicher mit mem=128M zu aktivieren. Äquivalent dazu ist ein Eintrag in der Datei /etc/lilo.conf.


8.1.6 Setzen von GRUB-Boot-Parametern

GRUB ist ein neuer Boot-Manager des GNU Hurd-Projekts und ist viel flexibler als Lilo, handhabt aber die Boot-Parameter etwas anders.

     grub> find /vmlinuz
     grub> root (hd0,0)
     grub> kernel /vmlinuz root=/dev/hda1
     grub> initrd /initrd
     grub> boot

Sie müssen die Hurd-Gerätenamen kennen:

     Hurd/GRUB           Linux               MSDOS/Windows
      (fd0)               /dev/fd0            A:
      (hd0,0)             /dev/hda1           C: (normalerweise)
      (hd0,3)             /dev/hda4           F: (normalerweise)
      (hd1,3)             /dev/hdb4           ?

Vergleichen Sie /usr/share/doc/grub/README.Debian.gz und /usr/share/doc/grub-doc/html/ für Details.


8.2 Aufzeichnung von Aktivitäten


8.2.1 Aufzeichnen von Shell-Eingaben

Um ein Unix-artiges System gekonnt zu administrieren, sind mitunter knifflige oder raffinierte Aufgaben zu erledigen. Machen Sie sich deshalb mit den grundlegenden Konfigurationsaufgaben vertraut, so dass Sie im Notfall wissen, wo Sie Hand anlegen müssen. Fensterbasierte Konfigurations-Werkzeuge sind nett und bequem, nutzen aber nichts, wenn man versucht eine defekte X-Window-Konfiguration wieder herzustellen.

Die Aufzeichnung von Tastatur-Eingaben ist, insbesondere als root, hin und wieder nützlich.

Emacs: M-x shell startet die Aufzeichnung. ("M" steht hier für die Meta-Taste, meist Alt oder auch Esc.) C-x C-w schreibt die aufgezeichnete Sequenz in eine Datei.

Shell: Verwenden Sie das screen-Kommando mit "^A H", wie in Konsolenumschaltung mit screen, Abschnitt 8.6.28 beschrieben oder das script-Kommando.

     $ script
     Script wurde gestartet, die Datei ist typescript
      ... irgendwelche Eingaben ...
      Strg-D
     $ col -bx <typescript >Sicherung
     $ vi Sicherung

Falls das script-Programm fehlt, kann diese Funktion mit der Shell simuliert werden:

     $ bash -i 2>&1 | tee typescript

8.2.2 X-Aktivitäten aufzeichnen

Um den grafischen Bildschirm aufzunehmen, auch X-Terminals und andere beliebige Fenster, kann gimp benutzt werden. Alternativen sind xwd (xbase-clients), import (imagemagick) und scrot (scrot).


8.3 Kopieren und Archivieren eines Unterverzeichnis

Diese Kopier- und Archivierungskommandos bieten die Grundlagen für eine Sicherung des Systems und der Daten. Ein Beispiel eines einfachen Backup-Skripts findet sich unter dem Namen backup in den Beispielskripten.


8.3.1 Grundlegende Kommandos zum Kopieren eines Unterverzeichnis

Möchte man seine Verzeichnisstruktur neu arrangieren, verschiebt man den Inhalt inklusive Datei-Links wie folgt:

     Standardmethode:
     # cp -a /source/directory /dest/directory # erfordert GNU cp
     # (cd /source/directory && tar cf - . ) | \
             (cd /dest/directory && tar xvfp - )
     Wenn ein harter Link beteiligt ist, benötigt man eine pedantische
     Methode:
     # cd /Pfad/zum/alten/Verzeichnis
     # find . -depth -print0 | afio -p -xv -0a /neues/Verzeichnis
     Vom entfernten Rechner:
     # (cd /Quell/Verzeichnis && tar cf - . ) | \
             ssh user@host.dom (cd /Ziel/Verzeichnis && tar xvfp - )
     Wenn es keine Links gibt:
     # scp -pr user1@host1.dom:/Quell/Verzeichnis \
               user2@host2.dom:/Ziel/Verzeichnis

Hier gilt scp <==> rcp und ssh <==> rsh.

Die folgenden vergleichenden Informationen zum Kopieren eines kompletten Unterverzeichnis wurden von Manoj Srivastava srivasta@debian.org auf debian-user@lists.debian.org aufgeführt.


8.3.2 cp

Ursprünglich war das Programm cp für diesen Zweck nicht gut geeignet, da es keine symbolischen Links auflösen oder harte Links beibehalten konnte. Ein anderer Punkt waren spärliche (sparse) Dateien (Dateien mit Löchern).

Die GNU-Version von cp überwand zwar diese Probleme, doch auf nicht-GNU-Systemen kann es noch zu Schwierigkeiten kommen. Des Weiteren kann cp keine kleinen, portablen Archive erzeugen.

     % cp -a . neuesverzeichnis

8.3.3 tar

Das Archivierungsprogramm tar kann im Gegensatz zu cp mit symbolischen Links umgehen. Obwohl cpio mit speziellen Dateien umgehen kann, konnten ältere tar-Versionen dies nicht.

Wenn tar auf mehrere harte Links einer Datei stößt, wird nur einmal die Datei in das Archiv kopiert; die Datei kann dann nur unter dem Namen der ursprünglichen Datei zurückgewonnen werden. cpio dagegen kopiert für jeden harten Link die komplette Datei in das Archiv, so dass sie unter jedem der Link-Namen wiedergeholt werden kann.

Das Kommando tar hat die Option für das Packen mit .bz2-Dateien zwischen Potato und Woody umbenannt. Empfohlen wird deshalb in Skripten die Option --bzip2 statt der Kurzform -I (Potato) oder -j (Woody).


8.3.4 pax

Hinter dem Namen pax (IEEE-Standard 1003.2-1992, Seiten 380–388 (Abschnitt 4.48) und Seiten 936–940 (Abschnitt E.4.48)) verbirgt sich ein multifunktionales POSIX-Werkzeug zum Austausch von portablen Archiven. pax liest und schreibt Archive, listet deren Inhalt auf und kopiert Verzeichnishierarchien. pax arbeitet unabhängig von einem spezifischen Archivformat und unterstützt eine große Bandbreite an Formaten.

pax ist noch neu und es können noch Kinderkrankheiten auftreten.

     # apt-get install pax
     $ pax -rw -p e . newdir
      oder
     $ find . -depth  | pax -rw -p e  newdir

8.3.5 cpio

Das Kommando verwaltet die gleichnamigen Archive oder auch solche, die mit tar erstellt wurden. Das Archiv kann statt einer Datei auch eine Pipe oder ein Magnetband sein.

     $ find . -depth -print0 | cpio --null --sparse -pvd new-dir

8.3.6 afio

afio ersetzt cpio. Es liest dessen Archive schneller, unterstützt mehr Laufwerksoptionen, hat eine bessere Fehlerkorrektur und kann das Archiv auf mehrere Medien verteilen. Die Kompression mit afio ist zuverlässiger als die von tar und cpio. Am besten benutzt man afio in Backup-Skripts als "Archiv-Maschinerie".

     $ find . -depth -print0 | afio -px -0a new-dir

Ich mache alle meine Backups auf Band mit afio.


8.4 Differenzielles Backup und Datensynchronisation

Differenzielle Backups und Datensynchronisation kann mit verschiedenen Methoden implementiert werden:

Kombinationen einer dieser Methoden mit der Archivierungsmethode, die in Kopieren und Archivieren eines Unterverzeichnis, Abschnitt 8.3 beschrieben ist, und den automatisierten Jobs in Terminplanung für Prozesse (cron, at), Abschnitt 8.6.27 bilden ein nettes Backup-System.

Ich werde drei einfach zu nutzende Hilfsmittel angeben.


8.4.1 Differenzielles Backup mit rdiff

rdiff-backup bietet ein nettes und einfaches Backup mit differenziellen Versionen für beliebige Dateitypen, inklusive symbolischen Links. Sichern des Großteils von ~/ nach /mnt/backup:

     $ rdiff-backup --include ~/tmp/keep --exclude ~/tmp  ~/ /mnt/backup

Wiederherstellen von drei Tage alten Daten aus diesem Archiv nach ~/old:

     $ rdiff-backup -r 3D /mnt/backup ~/old

Vergleichen Sie rdiff-backup(1).


8.4.2 Tägliches Backup mit pdumpfs

pdumpfs ist ein einfaches System zum täglichen Backup, ähnlich zu Plan9s dumpfs, das tägliche Schnappschüsse bewahrt. Man kann auf die letzten Schnappschüsse zu beliebiger Zeit zugreifen, um eine Datei eines bestimmten Tages wiederherzustellen. Führen Sie ein Backup Ihres Homeverzeichnisses mit pdumpfs und cron aus!

pdumpfs erstellt die Schnappschüsse YYYY/MM/DD im Zielverzeichnis. Alle Quelldateien werden in das Schnappschussverzeichnis kopiert, wenn pdumpfs das erste Mal gestartet wird. Beim zweiten und folgenden Male kopiert pdumpfs nur aktualisierte oder neu erstellte Dateien und speichert nicht geänderte Dateien als harte Links auf die Dateien vom Schnappschuss des letzten Tages, um Speicherplatz zu sparen.

     $ pdumpfs src-dir dest-dir [dest-basename]

Vergleichen Sie pdumpfs(8).


8.4.3 Regelmäßige differenzielle Backups mit RCS

Changetrack zeichnet Änderungen von textbasierten Konfigurationsdateien regelmäßig in RCS-Depots auf. Lesen Sie changetrack(1).

     # apt-get install changetrack
     # vi changetrack.conf

8.5 Wiederherstellen eines eingefrorenen Systems


8.5.1 Einen Prozess killen/beenden

top hilft außer Kontrolle geratene Prozesse zu identifizieren. `P' sortiert die Spalten nach CPU-Last, `M' nach Speicherverbrauch und `k' kann einen Prozess "abschießen". Alternativ kann das BSD-artige ps aux | less oder System V-artige ps -efH | less verwendet werden. Die System V-artige Syntax zeigt die IDs der Elternprozesse (PPID), die zum Killen von Zombie-Kindprozessen genutzt werden können.

Verwenden Sie kill zum Killen eines Prozesses mittels der Prozess-ID-Nummer (oder um ihm Signale zu senden). killall bewerkstelligt dasselbe über den Namen des Programms. Oft verwendete Signale sind

      1: HUP,  Daemon neustarten
     15: TERM, normales Beenden
      9: KILL, erzwungenes Beenden

8.5.2 Alt-SysRq

Wenn der Kernel mit Unterstützung der "magischen SysRq-Taste" kompiliert wurde, kann das System mit etwas Glück auch aus dem totalen Nirwana geholt werden. Drücken von Alt-SysRq (SysRq ist oft mit "Druck" beschriftet) bei einem i386, gefolgt von einer der Tasten r 0 k e i s u b, aktiviert die Kernel-Notbremse.

`r' (un`r'aw) stellt die Tastatur wieder her, nachdem beispielsweise X abgestürzt ist. `0' setzt das Level, mit dem Fehlermeldungen auf der Konsole ausgegeben werden, herunter. `k' (sa`k', system attention key) killt alle Prozesse auf der aktuellen virtuellen Konsole. `e' (t`e'rminate) beendet alle Prozesse des aktuellen Terminals außer init. `i' (k`i'll) killt alle Prozesse außer init.

`S'ync, `u'mount und re`b'oot sind wirklich nur für den allerletzten Notfall.

Debian-Standardkernel sind, zur Zeit während dieses Dokument geschrieben wird, nicht mit dieser Option kompiliert. Es muss zur Nutzung dieser Taste ein neuer Kernel kompiliert werden. Detaillierte Informationen finden sich in /usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz oder /usr/src/kernel-version/Documentation/sysrq.txt.gz.


8.6 Elegante kleine Kommandos zum Merken


8.6.1 Dateibetrachter

less ist der Standard-Dateibetrachter, der Textdateien seitenweise ausgibt. Hilfe bietet `h'. less kann mehr als dessen Urahn more. Es kann mit eval $(lesspipe) oder eval $(lessfile) in einer Shell-Startdatei überladen (erweitert) werden. Sehen Sie hierzu /usr/share/doc/lessf/LESSOPEN. Die Option -R erlaubt die Ausgabe von Sonderzeichen (raw characters) und schaltet die ANSI-Farbsequenzen ein. Vergleichen Sie less(1).

w3m kann für einige Code-Systeme (EUC) eine Alternative sein.


8.6.2 Freier Speicher

free und top informieren über freien Speicher und dessen Verbrauch. Sorgen Sie sich nicht um die Größe des "used"-Eintrags in der zweite Datenzeile, sondern lesen Sie den Wert darunter ab (hier: 38792)

     $ free -k # für 256MB Hauptspeicher
                  total       used       free     shared    buffers cached
     Mem:        257136     230456      26680      45736     116136 75528
     -/+ buffers/cache:      38792     218344
     Swap:       264996          0     264996

Die präzise Menge an Hauptspeicher, die zur Verfügung steht, kann mit grep '^Memory' /var/log/dmesg bestätigt werden, was in diesem Fall "Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)" ergibt.

     Total         = 262144k = 256M (1k=1024, 1M=1024k)
     Free to dmesg = 256984k = Total - kernel - reserved - data - init
     Free to shell = 257136k = Total - kernel - reserved - data

Etwa 5MB können nicht vom System verwendet werden, da der Kernel sie in Beschlag nimmt.


8.6.3 Setzen der Uhrzeit (BIOS)

     # date MMDDhhmmCCYY
     # hwclock --utc --systohc
     # hwclock --show

Dies setzt die Hardware-Uhr auf MM/DD hh:mm, CCYY. Dabei stehen die Kürzel für DD=Tag, MM=Monat, hh=Stunde, mm=Minute, CCYY=Jahr. Die Zeiten werden in lokaler Zeit ausgegeben, die Hardware-Uhr verwendet jedoch UTC als Zeitzone.

Falls die Hardware-Zeit (BIOS) auf GMT gesetzt ist, muss UTC=yes in /etc/default/rcS eingetragen sein.


8.6.4 Setzen der Uhrzeit (NTP)

Referenz: Managing Accurate Date and Time HOWTO.


8.6.4.1 Setzen der Zeit bei permanenter Internet-Verbindung

Die Uhrzeit kann automatisch mit Hilfe eines Zeit-Servers korrekt gesetzt werden:

     # ntpdate server

Dies sollte in /etc/cron.daily/ verwendet werden, wenn man eine permanente Internet-Verbindung hat.


8.6.4.2 Setzen der Uhrzeit bei sporadischer Internet-Verbindung

Das Paket chrony hilft hier weiter.


8.6.5 Konsole-Eigenschaften wie den Bildschirmschoner steuern

Zum Deaktivieren des Bildschirmschoners sind folgende Kommandos geeignet:

Auf der Konsole:

     # setterm -powersave off

Start der kon2 (kanji) Konsole mit:

     # kon -SaveTime 0

Während X-Windows läuft:

     # xset s off
      oder
     # xset -dpms
      oder
     # xscreensaver-command -prefs

Lesen Sie die entsprechenden Handbuchseiten, um zu erfahren, wie man andere Eigenschaften der Konsole steuert. Vergleichen Sie auch stty(1) zum Ändern und zur Ausgabe von Terminal-Line-Einstellungen.


8.6.6 Durchsuchen von Datenbanken zur Systemverwaltung

Die glibc-Bibliothek ermöglicht das Durchsuchen von System-Datenbanken, nach beispielsweise passwd, group, hosts, services, protocols oder networks mittels getent(1).

     getent database [key ...]

8.6.7 Sound abstellen (beep)

Im Zweifelsfall kann man immer den Stecker des Lautsprechers herausziehen ;-) Für die Bash-Shell gilt:

     echo "set bell-style none" >> ~/.inputrc

8.6.8 Fehlermeldungen auf der Konsole

Wenn übermäßig viele Fehlermeldungen die Konsole unbrauchbar werden lassen, sollte man zuerst in /etc/init.d/klogd nachsehen. Um das Warnlevel zu ändern, kann man KLOGD="-c 3" setzen. Neustart des Daemons mit /etc/init.d/klogd restart aktiviert die neuen Werte. Alternativ kann dmesg -n3 benutzt werden.

Das Warnlevel schlüsselt sich wie folgt auf:

Wenn eine bestimmte unkritische Fehlermeldung oft auftritt, kann diese auch durch einen trivialen Kernelpatch unterbunden werden. (Siehe dazu das Beispiel shutup-abit-bp6 im Beispielverzeichnis.)

Auch ein Blick in /etc/syslog.conf kann hilfreich sein, um zu verstehen, welche Nachrichten auf der Konsole ausgegeben werden.


8.6.9 Setzen des korrekten Konsole-Typs

Die Konsole wird in Unix-artigen Systemen üblicherweise mit den Routinen aus der (n)curses-Bibliothek angesteuert. Dies erlaubt eine im Wesentlichen von der Terminal-Art unabhängige Ausgabe mit vernünftiger Update-Strategie. Siehe ncurses(3X) und terminfo(5).

Debian bietet eine ganze Reihe von Voreinstellungen:

     $ toe | less                  # alle Einträge
     $ toe /etc/terminfo/ | less   # durch Benutzer einstellbare Einträge

Die Auswahl kann durch Export der Umgebungsvariablen TERM aktiviert werden.

Wenn der terminfo-Eintrag für xterm mit einem xterm, das remote aufgerufen wird und das nicht auf Debian läuft, nicht funktioniert, kann der Terminaltyp von "xterm" auch auf eine der primitiveren Varianten, wie "xterm-r6", umgestellt werden. Sehen Sie /usr/share/doc/libncurses5/FAQ für weitere Informationen. Der kleinste gemeinsame Nenner für terminfo ist "dumb".


8.6.10 Die Konsole wiederherstellen

Ist der Bildschirm auf Grund von cat Binärdatei unleserlich (und sogar eingetippte Kommandos sind nicht sichtbar), so hilft:

     $ reset

8.6.11 Konvertieren einer Textdatei von DOS nach Unix

Eine DOS-Textdatei (Zeilenende von ^M^J), kann mit einem einzigen Kommando in eine Unix-Textdatei (Zeilenende = ^J) umgewandelt werden:

     # apt-get install sysutils
     $ dos2unix DOS-Datei

8.6.12 Konvertierung einer Textdatei mit recode

Folgendes wird Textdateien zwischen DOS-, Mac- und Unix-Zeilenende-Stilen umwandeln:

     $ recode /cl../cr <dos.txt >mac.txt
     $ recode /cr.. <mac.txt >unix.txt
     $ recode ../cl <unix.txt >dos.txt

Das freie recode konvertiert Dateien zwischen verschiedenen Zeichensätzen und Surfaces mittels:

     $ recode Zeichensatz1/Surface1..Zeichensatz2/Surface2 \
       <Eingabe.txt >Ausgabe.txt

Üblicherweise verwendete Zeichensätze sind (siehe auch Introduction to locales, Abschnitt 9.7.3)[4]:

Gebräuchliche Surfaces sind[5]:

Weitere Informationen finden sich in der entsprechenden Beschreibung in info recode.

Es gibt auch spezialisiertere Konvertierungswerkzeuge:


8.6.13 Ersetzung regulärer Ausdrücke

Alle Vorkommen des regulären Ausdrucks REGEX können durch TEXT in allen Dateien DATEIEN ersetzt werden durch:

     $ perl -i -p -e 's/REGEX/TEXT/g;' DATEIEN ...

-i zeigt an, dass die Orginaldateien bearbeitet werden, -p sorgt ausdrücklich für die Iteration über die Dateinamen. Wenn der reguläre Ausdruck kompliziert ist, kann man sich versichern, indem man die Originaldateien behält: Durch -i.bak anstelle von -i bleiben die Originale erhalten und bekommen die Endung .bak.


8.6.14 Bearbeiten einer Datei mittels eines Skripts

Das folgende Skript entfernt die Zeilen 5–10 und 16–20 ohne Umweg über eine temporäre Datei.

     #!/bin/bash
     ed $1 <<EOF
     16,20d
     5,10d
     w
     q
     EOF

Die ed-Kommandos sind die selben wie beim vi im Kommandomodus. Das Bearbeiten der Datei von hinten erleichtert die Arbeit.


8.6.15 Extrahieren von Unterschieden und Einbringen von Updates für Quelldateien

Die folgenden Kommandos bestimmen die Unterschiede zwischen zwei Quelldateien und erzeugen diff-Dateien Datei.patch1 und Datei.patch2 im "unified"-Stil:

     $ diff -u Datei.alt Datei.neu > Datei.patch1
     $ diff -u alt/Datei neu/Datei > Datei.patch2

Die Diff-Datei (alternativ wird sie auch Patch-Datei genannt) wird verwendet, um Veränderungen zu beschreiben. Jeder der diese Datei erhält, kann diese Änderungen auf eine andere Datei wie folgt anwenden:

     $ patch -p0 Datei < Datei.patch1
     $ patch -p1 Datei < Datei.patch2

Wenn drei Versionen des Quellcodes vorliegen, können diese einfacher mit diff3 vermengt werden:

     $ diff3 -m Datei.meine Datei.alt Datei.deine > Datei

8.6.16 Eine große Datei in kleine zerlegen

     $ split -b 650m Datei   # in 650MB große Stücke trennen
     $ cat x* >großeDatei    # wieder zusammenfügen

8.6.17 Extrahieren von Daten aus Tabellen in Textdateien

Sei DPL der Name einer Textdatei, in welcher alle vorherigen Debian-Projektleiter mit Namen und Einführungsdatum, durch Freizeichen getrennt, aufgeführt sind.

     Ian     Murdock   August  1993
     Bruce   Perens    April   1996
     Ian     Jackson   Januar  1998
     Wichert Akkerman  Januar  1999
     Ben     Collins   April   2001
     Bdale   Garbee    April   2002
     Martin  Michlmayr März    2003

Awk wird oft benutzt, um Daten aus dieser Art von Datei zu extrahieren.

     $ awk '{ print $3 }' <DPL                   # Monat des Beginns
     August
     April
     Januar
     Januar
     April
     April
     März
     $ awk '($1=="Ian") { print }' <DPL          # Vorname Ian
     Ian     Murdock   August  1993
     Ian     Jackson   Januar  1998
     $ awk '($2=="Perens") { print $3,$4 }' <DPL # wann fing Perens an
     April 1996

Shells wie Bash sind ebenfalls in der Lage, Dateien dieser Art auszulesen:

     $ while read Vorname Nachname Monat Jahr; do 
         echo $Monat
       done <DPL
     ... selbe Ausgabe wie beim ersten Awk-Beispiel

Das eingebaute Kommando read verwendet die Zeichen in $IFS (interne Feld-Separatoren), um Zeilen in Wörter aufzuteilen.

Wenn IFS auf ":" gesetzt wird, kann /etc/passwd leicht mit der Shell ausgelesen werden:

     $ altIFS="$IFS"   # alten Wert sichern
     $ IFS=":"
     $ while read Benutzer Passwort uid gid Zeilenrest; do
         if [ "$Benutzer" = "osamu" ]; then 
           echo "$Benutzer's ID ist $uid"
         fi
       done < /etc/passwd
     osamu's ID ist 1001
     $ IFS="$altIFS"   # Wert zurücksetzen

(Wenn Awk dazu verwendet wird, so wird der Spaltentrenner mit FS=":" angegeben.)

IFS wird auch von der Shell benutzt, um die Ergebnisse von Parameterauswertungen, Kommando-Substitutionen und arithmetischen Auswertungen aufzuteilen. Dies geschieht nicht innerhalb von doppelten oder einfachen Anführungszeichen. Der Standardwert von IFS sind die Werte <Leerzeichen>, <Tabulator> und <neue Zeile>.

Man muss bei der Verwendung von IFS-Tricks vorsichtig sein. Eigenartige Dinge können geschehen, wenn die Shell Teile eines Skripts als Eingabe interpretiert.

     $ IFS=":,"                        # ":" und "," seien Feldtrenner
     $ echo IFS=$IFS,   IFS="$IFS"     # echo ist ein Bash Kommando
     IFS=  , IFS=:,
     $ date -R                         # nur eine Kommandoausgabe
     Sat, 23 Aug 2003 08:30:15 +0200
     $ echo $(date -R)                 # Untershell --> Eingabe der Haupt-Shell
     Sat  23 Aug 2003 08 30 36 +0200
     $ unset IFS                       # zurücksetzen von IFS auf den Standardwert
     $ echo $(date -R)
     Sat, 23 Aug 2003 08:30:50 +0200

8.6.18 Skript-Auszüge für Pipe-Kommandos

Hier folgen einige kleine lehrreiche Beispiele zur Verwendung von Pipes:

     find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
                          # Finde alle Dateien unterhalb /usr 
                          # mit Ausnahme bestimmter Pfade
     xargs -n 1 Kommando  # Starte Kommando für alle Eingaben von stdin
     xargs -n 1 echo |    # Beliebige Leerzeichen werden zu Zeilenumbrüchen
     xargs echo      |    # alle Zeilen zu einer zusammenfassen
     grep -e Muster|     # Gebe Zeilen aus, die Muster 
                          # enthalten
     cut -d: -f3 -|       # gebe das dritte Feld aus, : sei Trenner  
                          # (z.B. für die Passwortdatei passwd)
     awk '{ print $3 }' | # extrahiere das dritte Feld, Freizeichen sei Trenner
     awk -F'\t' '{ print $3 }' |
                          # gib drittes Feld aus mit Tab als Trenner
     col -bx |            # Entferne Backspace und expandiere Tabs zu Leerzeichen
     expand -|            # expandiere Tabs zu Leerzeichen
     sort -u|             # Sortiere und entferne doppelte Einträge
     
     tr '\n' ' '|         # mehrere Zeilen zu einer zusammenfügen
     tr '\r' ''|          # CR entfernen
     tr 'A-Z' 'a-z'|      # Großbuchstaben in Kleinbuchstaben umwandeln
     sed 's/^/# /'|       # aus der Zeile einen Kommentar machen
     sed 's/\.ext//g'|    # Entferne .ext
     sed  -n -e 2p|       # zeige die zweite Zeile
     head -n 2 -|         # zeige die ersten beiden Zeilen
     tail -n 2 -|         # zeige die letzten beiden Zeilen

8.6.19 Skript-Auszüge zum Durchlaufen mehrerer Dateien

Die folgenden Möglichkeiten zum Durchlaufen aller auf *.ext passenden Dateien sind auch dann geeignet, wenn die Dateinamen Sonderzeichen wie Leerzeichen enthalten und bewirken alle dasselbe:


8.6.20 Kurze Perl-Skripte

Obwohl jedes Awk-Skript automatisch in ein Perl-Skript mittels a2p(1) umgeschrieben werden kann, sollten einzeilige Awk-Skripte am besten manuell nach Perl konvertiert werden. Zum Beispiel ist

     awk '($2=="1957") { print $3 }' |

äquivalent zu allen der folgenden Zeilen:

     perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |
     perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |
     perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |
     perl -lane 'print $F[2] if $F[1] eq "1957"' |

Da alle Leerräume im perl-Argument in der obigen Zeile entfernt werden können und unter Ausnutzung der automatischen Umwandlung zwischen Zahlen und Zeichenketten in Perl kann auch Folgendes verwendet werden:

     perl -lane 'print$F[2]if$F[1]eq+1957' |

Man vergleiche perlrun(1) für die Kommandozeilenoptionen. Für noch verrücktere Perl-Skripte wird auf http://perlgolf.sourceforge.net verwiesen.


8.6.21 Text oder ein Mailinglistenarchiv aus einer Webseite extrahieren

Das Folgende liest eine Webseite aus und schreibt die Ausgabe in eine Textdatei. Dies ist sehr nützlich, wenn man Konfigurationen aus dem Web kopieren will.

     $ lynx -dump http://www.adresse.de/info.html >Textdatei

links und w3m können hier auch verwendet werden, die Ergebnisse sich aber eventuell leicht unterschiedlich.

Falls ein Archiv einer Mailingliste geladen wird, kann munpack benutzt werden, um den MIME-Inhalt zu extrahieren.


8.6.22 Formatierte Ausgabe von Webseiten

Um eine Webseite zu drucken, kann diese in das PostScript-Format umgewandelt werden:

     $ apt-get install html2ps
     $ html2ps URL | lpr

Man vergleiche lpr/lpd, Abschnitt 3.6.1. Alternativ können auch das a2ps oder mpage Paket zum Erzeugen von PostScript-Dateien verwendet werden.


8.6.23 Formatierte Ausgabe einer Handbuchseite

Das Folgende druckt eine Handbuchseite in eine PostScript-Datei/Drucker.

     $ man -Tps some-manpage | lpr
     $ man -Tps some-manpage | mpage -2 | lpr

8.6.24 Vermengen zweier PostScript- oder PDF-Dateien

Zwei PostScript- oder PDF-Dateien können wie folgt zu einer zusammengefasst werden:

     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \
       -sOutputFile=bla.ps -f foo1.ps foo2.ps
     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
       -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf

8.6.25 Ausführungsdauer messen

Um die verschiedenen Zeiten, die mit einem Prozessablauf verbunden sind, anzuzeigen, kann time verwendet werden.

     # time some-command >/dev/null
     real    0m0.035s       # "Echte" Zeit
     user    0m0.000s       # Zeit in Benutzermodus
     sys     0m0.020s       # Zeit in Kernelmodus

8.6.26 nice-Befehl

Der nice-Befehl dient dazu, die Priorität eines Prozesses zu setzen. Dessen Verwandter renice (Paket bsdutils) ändert die Priorität eines bereits laufenden Prozesses. Letzteres kann auch aus top heraus geschehen. Ein nice-Wert von 19 bedeutet niedrigste Priorität – der Prozess ist langsam –, absteigend wird die Priorität erhöht. Kleinere Werte als 0 kann nur der Administrator setzen, -20 ist die höchste Priorität.

     # nice  -19 top                                         # sehr nett
     # nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # sehr schnell

Manchmal kann ein sehr langsamer Prozess dem System mehr schaden als nützen, also ist Vorsicht geboten.


8.6.27 Terminplanung für Prozesse (cron, at)

Mit cron und at können zu bestimmten Terminen Befehle ausgeführt werden. Siehe at(1), crontab(5), crontab(8).

Die Tabelle für wiederkehrende Ausführung kann mit crontab -e bearbeitet werden. Beispiele einer crontab-Tabelle:

     # Verwende /bin/sh zur Ausführung, egal was passwd sagt
     SHELL=/bin/sh
     # Standardausgabe wird an `paul' geschickt.
     MAILTO=paul
     # Min Stunde TagDesMonats Monat TagDerWoche Befehl (Komma wird 'und')
     # starte um 00:05, jeden Tag
     5  0  *  * *   $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
     # starte unm 14:15 am Monatsersten -- Ausgabe per E-Mail an Paul
     15 14 1  * *   $HOME/bin/monthly
     # starte um 22:00 an Werktagen (1-5), schicke E-Mail an Joe. % für Zeilenumbruch, letztes % für cc:
     0 22 *   * 1-5 mail -s "Es ist 10 Uhr" joe%Joe,%%Gute Nacht?%.%%
     23 */2 1 2 *   echo "Startet 23 Minuten nach 0 Uhr, 2 Uhr, 4 Uhr ..., am 1. Feb."
     5  4 *   * sun echo "Startet um 04:05 jeden Sonntag"
     # Startet um 03:40 an jedem ersten Montag des Monats
     40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && command -args

Um einen Befehl zur einmaligen Ausführung zu terminieren dient at

     $ echo 'command -args'| at 3:40 monday

8.6.28 Konsolenumschaltung mit screen

Mit screen kann man mehrere virtuelle Terminals auf einer einzigen Konsole starten, jedes mit einer eigenen interaktiven Shell. Selbst wenn man immer zwischen virtuellen Terminals umschalten kann oder mehrere xterm-Fenster offen hält, sollte man sich screen wegen seiner vielfältigen Möglichkeiten anschauen. Dazu gehören


8.6.28.1 Beispiel für einen Fernzugriff

Wenn man sich häufig mit einem VT100-Terminal-Programm über ein Netzwerk auf einem PC einwählt, wird man das Sitzungsmanagement mit screen sicherlich nützlich finden.

  • Angenommen man ist über eine Telefonverbindung eingeloggt, eine screen-Sitzung ist gestartet und man hat einen längeren Text mit einem Editor geschrieben. Aus irgendwelchen Gründen, muss man jetzt die Verbindung unterbrechen.

  • Durch Drücken von ^A d wird die aktuelle Sitzung gesichert. (Noch schneller geht es mit ^A DD, dann wird sogar gleich der Logout für einen vorgenommen.)

  • Wenn man sich später wieder einwählt kann man mit screen -r die Sitzung holen, und screen wird die Sitzung so restaurieren, wie sie verlassen wurde.


  • 8.6.28.2 Typische screen-Befehle

    Wenn der screen-Prozess gestartet ist, reicht dieser alle Tastatureingaben an das aktuelle Fenster, bis auf die Kommandosequenz, die auf ^A voreingestellt ist. Alle screen-Befehle beginnen mit ^A und werden dann von einem einzelnen Buchstaben gefolgt (ggf. folgen dann die Parameter). Beispiele für Befehle:

         ^A ?     Hilfe (Tastaturbelegung)
         ^A c     Neues Fenster und wechsele dorthin
         ^A n     Gehe zum nächsten Fenster
         ^A p     Gehe zum vorherigen Fenster
         ^A 0     Gehe zum Fenster Nummer 0
         ^A w     Zeige eine Liste der Fenster
         ^A a     Gebe das ^A an die Applikation weiter
         ^A h     Hardcopy des Fensters in Datei
         ^A H     Starte/Beende Protokoll des aktuellen Fensters in eine Datei
         ^A ^X    Sichere das Terminal mit einem Passwort
         ^A d     Aktuelle Sitzung vom Terminal abmelden
         ^A DD    Vom Terminal abmelden und Logout
    

    Dies ist nur eine kleine Auswahl der Befehle, die das mächtige screen unterstützt. Siehe screen(1) für weitere Details.


    8.6.28.3 Backspace und/oder Strg-H in einer screen Sitzung

    Wenn die Backspace- oder Strg-H-Taste während einer screen-Sitzung nicht funktionieren, muss die Zeile

         bindkey -k kb stuff "\177"
    

    in der Datei /etc/screenrc auskommentiert ("#") werden.


    8.6.28.4 screen-Äquivalent unter X

    Siehe Paket xmove und dort xmove(1).


    8.6.29 Grundlagen – Prüfung des Netzwerks

    Zu installierende Pakete, um die grundlegenden Funktionen des Netzwerks zu überprüfen: netkit-ping, traceroute, dnsutils, ipchains (für 2.2er Kernel), iptables (für 2.4er Kernel) und das net-tools-Paket. Nun sollte man folgende Sequenz ausführen:

         $ ping yahoo.com            # teste Internetverbindung
         $ traceroute yahoo.com      # tracen der IP-Pakete
         $ ifconfig                  # testen der host-Konfiguration
         $ route -n                  # testen der routing-Konfiguration
         $ dig [@dns-server.com] host.dom [{a|mx|any}] |less
               # teste host.dom DNS-Einträge am dns-server.com 
               # und suche dort nach {a|mx|any} Eintrag
         $ ipchains -L -n |less      # teste packet-Filter (2.2 kernel)
         $ iptables -L -n |less      # teste packet-Filter (2.4 kernel)
         $ netstat -a                # Finde alle offenen Ports
         $ netstat -l --inet         # Finde alle auf Eingabe wartenden Ports
         $ netstat -ln --tcp         # Ebenso (TCP, numerisch) Ports
    

    8.6.30 E-Mail aus dem lokalen Spooler leiten (flush)

    Um E-Mail aus dem lokalen Spooler weiterzuleiten:

         # exim -q    # wartende E-Mail anstoßen
         # exim -qf   # alle E-Mails weiterleiten
         # exim -qff  # dasselbe, auch E-Mail mit Status 'frozen' wird weitergeleitet
    

    -qff wäre wohl die bessere Wahl in dem Skript /etc/ppp/ip-up.d/exim. Für Sarge muss exim durch exim4 ersetzt werden.


    8.6.31 Eingefrorene E-Mails aus dem lokalen Spooler entfernen

    Um nicht weiter vermittelbare E-Mails aus dem lokalen Spooler zu entfernen und eine Fehlermeldung zurückzugeben dient:

         # exim -Mg `mailq | grep frozen | awk '{ print $3 }'`
    

    Für Sarge muss exim durch exim4 ersetzt werden.


    8.6.32 Neuausliefern von mbox-Inhalten

    Falls das Homeverzeichnis voll wurde und procmail fehlschlug, muss man E-Mails aus /var/mail/Benutzername erneut manuell in die sortierten Postfächer im Homeverzeichnis ausliefern. Nachdem Plattenplatz im Homeverzeichnis bereitgestellt wurde, ist Folgendes zu starten:

         # /etc/init.d/exim stop
         # formail -s procmail </var/mail/Benutzername
         # /etc/init.d/exim start
    

    Für Sarge muss exim durch exim4 ersetzt werden.


    8.6.33 Dateiinhalte zurücksetzen

    Um eine Datei zurückzusetzen, z.B. eine Log-Datei, sollte nicht rm benutzt werden, da diese Dateien im Sekundenrhythmus geschrieben werden. Sicherer ist:

         $ :>zu_leerende_Datei
    

    8.6.34 Dummy-Dateien

    Die folgenden Befehle erzeugen Dummy- oder leere Dateien beliebiger Größe:

         $ dd if=/dev/zero    of=Dateiname bs=1k count=5 # 5KB große, aber leere Datei
         $ dd if=/dev/urandom of=Dateiname bs=1M count=7 # 7MB mit Zufallsinhalt
         $ touch Dateiname #erzeuge 0B Datei (wenn sie existiert, setze mtime neu)
    

    Die folgenden Kommandos werden, wenn sie von der Shell der Debian-Boot-Diskette gestartet werden, beispielsweise den gesamten Inhalt der Festplatte /dev/hda für die meisten praktischen Gegebenheiten löschen.

         # dd if=/dev/urandom of=/dev/hda; dd if=/dev/zero of=/dev/hda
    

    8.6.35 chroot

    Das Programm chroot, chroot(8), ermöglicht es, verschiedene Instanzen der GNU/Linux-Umgebung in einem einfachen System simultan ohne Neustart laufen zu lassen.

    Es ist auch möglich, ein ressourcenhungriges Programm wie apt-get oder dselect im Chroot eines schnellen Rechners laufen zu lassen, während das Dateisystem eines langsamen Systems per NFS les- und schreibbar gemountet wurde und der Chroot auf den Einhängepunkt verweist.


    8.6.35.1 Betreiben einer anderen Debian-Distribution mit chroot

    Ein auf chroot basierendes System kann leicht mit dem debootstrap-Kommando in Sarge erzeugt werden. Für Distributionen, die neuer als Sarge sind, kann stattdessen auch cdebootstrap mit entsprechender Option verwendet werden. Um zum Beispiel ein Sid-Chroot in /sid-root zu erzeugen, wenn man einen schnellen Internet-Zugang hat:

         main # cd /; mkdir /sid-root
         main # debootstrap sid /sid-root http://ftp.debian.org/debian/
         ... beobachten, wie das gesamte System heruntergeladen wird
         main # echo "proc-sid /sid-root/proc proc none 0 0" >> /etc/fstab
         main # mount proc-sid /sid-root/proc -t proc
         main # cp /etc/hosts /sid-root/etc/hosts
         main # chroot /sid-root /bin/bash
         chroot # cd /dev; /sbin/MAKEDEV generic; cd -
         chroot # apt-setup # Einrichten von /etc/apt/sources.list
         chroot # vi /etc/apt/sources.list # Quellen auf unstable setzen
         chroot # dselect  # oder aptitude, installieren von mc und vim :-)
    

    Zu diesem Punkt sollte ein voll funktionsfähiges Debian-System zur Verfügung stehen, in dem man ohne Angst, die Hauptinstallation zu beeinflussen, herumspielen kann.

    Dieser debootstrap-Trick kann auch verwendet werden, um Debian auf einem System ohne ein Debian-Installationsmedium, aber dafür mit dem einer anderen GNU/Linux-Distribution, zu installieren. Siehe http://www.debian.org/releases/stable/i386/apcs04.


    8.6.35.2 Einrichten eines Logins für chroot

    Eingeben von chroot /sid-root /bin/bash ist einfach, behält aber alle Umgebungsvariablen bei, was man eventuell nicht möchte, und hat andere Probleme. Ein viel besserer Ansatz ist es, einen anderen Login-Prozess auf einem separaten virtuellen Terminal zu starten, mit dem man sich direkt am Chroot anmelden kann.

    Da auf Standard-Debian-Systemen auf tty1 bis tty6 Linux-Konsolen und auf tty7 das X Window System läuft, wird tty8 als Beispiel für die Chroot-Konsole verwendet. Nach der Erzeugung eines Chroot-Systems wie in Betreiben einer anderen Debian-Distribution mit chroot, Abschnitt 8.6.35.1 beschrieben, ist Folgendes in einer root-Shell im Hauptsystem einzugeben:

         main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\
                "/sbin/getty 38400 tty8" >> /etc/inittab
         main # init q    # init neuladen
    

    8.6.35.3 Einrichten von X für chroot

    Die aktuellste Version von X und GNOME soll sicher in einem Chroot laufen? Das ist möglich! Das folgende Beispiel wird GDM auf dem virtuellen Terminal vt9 starten.

    Zuerst ist ein Chroot-System, wie unter Betreiben einer anderen Debian-Distribution mit chroot, Abschnitt 8.6.35.1 beschrieben, zu installieren. Aus dem Hauptsystem sind einige wichtige Konfigurationsdateien in das Chroot-System zu kopieren.

         main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4
         main # chroot /sid-root # oder Verwendung der Chroot-Konsole
         chroot # cd /dev; /sbin/MAKEDEV generic; cd -
         chroot # apt-get install gdm gnome x-window-system
         chroot # vi /etc/gdm/gdm.conf # in [servers] s/vt7/vt9/ ersetzen
         chroot # /etc/init.d/gdm start
    

    /etc/gdm/gdm.conf wurde editiert, um die erste virtuelle Konsole von vt7 in vt9 abzuändern.

    Nun kann leicht zwischen der vollen X-Umgebung im Chroot und im Hauptsystem umgeschaltet werden, indem man die virtuellen Linux-Terminals wechselt. Zum Beispiel durch Drücken von Strg-Alt-F7 und Strg-Alt-F9. Haben Sie Spaß!

    [FIXME] Einen Kommentar und Link zum Init-Skript des gdm im Chroot hinzufügen.


    8.6.35.4 Andere Distributionen mit chroot laufen lassen

    Eine Chroot-Umgebung für eine andere Linux-Distribution kann leicht erstellt werden. Sie installieren ein System in eine andere Partition unter Verwendung des Installationsprogramms der anderen Distribution. Falls dessen Root-Partition sich in /dev/hda9 befindet:

         main # cd /; mkdir /andere-Dist
         main # mount -t ext3 /dev/hda9 /andere-Dist
         main # chroot /andere-Dist /bin/bash
    

    Dann ist wie in Betreiben einer anderen Debian-Distribution mit chroot, Abschnitt 8.6.35.1, Einrichten eines Logins für chroot, Abschnitt 8.6.35.2 und Einrichten von X für chroot, Abschnitt 8.6.35.3 zu verfahren.


    8.6.35.5 Erstellen eines Pakets mit chroot

    Es gibt ein ausgefeilteres chroot-Paket, pbuilder. Es erzeugt eine chroot-Umgebung und stellt ein Debian-Paket in dieser Sandbox zusammen. Es ist ideal zum Überprüfen von Bauabhängigkeiten und zum Sicherstellen, dass falsche Paketabhängigkeiten nicht in den erzeugten Paketen existieren.


    8.6.36 Tests auf harte Links

    Man kann wie folgt überprüfen, ob zwei Dateien die selbe Datei mit zwei harten Links sind:

          
         $ ls -li Datei1 Datei2
    

    8.6.37 Ein Festplatten-Image mounten

    Wenn Datei.img ein Festplatten-Image enthält und die Quellfestplatte eine Konfiguration wie xxxx = (Byte/Sektor) * (Sektor/Zylinder) hat, dann kann dieses Image mit dem folgenden Befehl nach /mnt gemountet werden:

         # mount -o loop,offset=xxxx file.img /mnt
    

    Die meisten Festplatten haben 512 Byte/Sektor.


    8.6.38 Samba

    Grundlagen, um auf Windows-Dateien zuzugreifen:

         # mount -t smbfs -o username=myname,uid=my_uid,gid=my_gid \
           //server/share /mnt/smb # freigegebene Windows-Laufwerke mounten
         # smbmount //server/share /mnt/smb \
           -o "username=mein_name,uid=meine_uid,gid=meine_gid"
         # smbclient -L 192.168.1.2 # Freigaben anzeigen
    

    Die Samba-Netzwerk-Nachbarschaft kann angezeigt werden mit:

         # smbclient -N -L eigene_IP_Adresse | less
         # nmblookup -T "*"
    

    8.6.39 Werkzeuge für fremde Dateisysteme

    Viele fremde Dateisysteme werden vom Linux-Kernel unterstützt, so dass man durch einfaches Einbinden der Geräte auf diese zugreifen kann. Für bestimmte Dateisysteme, gibt es auch ein paar spezielle Werkzeuge zum Zugriff auf Dateisysteme ohne die Geräte einzubinden. Dies wird durch User-Space-Programme erreicht, so dass Kernel-Unterstützung für diese Dateisysteme nicht benötigt wird.

    Um MS-DOS-FAT-Dateisysteme zu erzeugen und zu überprüfen, ist das Paket dosfstools nützlich.


    8.7 Typische Fehler

    Es werden einige Beispiele gefährlicher Aktionen aufgeführt. Die negativen Auswirkungen werden verstärkt, wenn das privilegierte Konto root verwendet wird.


    8.7.1 rm -rf .*

    Die Verwendung von Jokerzeichen in Kommandozeilenargumenten wie in "rm -rf .*" kann gefährliche Auswirkungen haben, da ".*" beim Expandieren auch "." und ".." enthält. Glücklicherweise prüft die aktuelle Version des "rm"-Kommandos in der Debian-Distribution die Dateinamen im Argument und verweigert die Entfernung von "." und "..". Dies ist jedoch nicht immer der Fall. Man kann das Folgende versuchen, um zu testen, wie Joker in Dateinamen funktionieren.


    8.7.2 rm /etc/passwd

    Der Verlust einiger wichtiger Dateien wie /etc/passwd durch eigenes Verschulden ist schlimm. Das Debian-System macht regelmäßig Sicherheitskopien dieser Dateien in /var/backups/. Wenn diese Dateien wiederhergestellt werden, muss man eventuell die Rechte manuell anpassen.

         # cp /var/backups/passwd /etc/passwd
         # chmod 644 /etc/passwd
    

    Siehe auch Wiederherstellung von Paketauswahldaten, Abschnitt 6.3.4.


    [ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ weiter ]


    Debian-Referenz

    CVS, Don 18. Jan 2007, 11:52:59 UTC

    Osamu Aoki osamu#at#debian.org
    Übersetzer: Jens Seidel tux-master#at#web.de
    Autoren, Abschnitt A.1