DEBIAN – Tipps

Debian-Referenz

Kapitel 8 – Debian-Tipps


8.1 Booten des Systems

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


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-Taste/Umschalt-Taste gedrückt werden, um einen
automatischen Bootvorgang zu unterbrechen), 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-Installationsets 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 und 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:

  • Starten von update-rc.d ?dm stop 99 1 2 3 4 5 6 .
  • Einfügen von "exit 0" am Anfang der
    /etc/init.d/?dm Dateien.
  • Umbenennen aller /etc/rc2.d/S99?dm Dateien
    in /etc/rc2.d/K99?dm.
  • Entfernen aller /etc/rc2.d/S99?dm Dateien.
  • Starten von :>/etc/X11/default-display-manager

Hier muss die Nummer in rc2.d dem Runlevel entsprechen,
das in der /etc/inittab Datei 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 startx Kommando 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
(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 aber handhabt 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: (usually)
(hd0,3) /dev/hda4 F: (usually)
(hd1,3) /dev/hdb4 ?

Vergleichen Sie /usr/share/doc/grub/README.Debian 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.27
beschrieben oder dass 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


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 cp Programm 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. Desweiteren 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 tar Kommando 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:

  • rcs: Backups, auch mehrerer älterer Versionen, nur für Texte
  • rdiff-backup: Backups, auch mehrerer älterer Versionen.
    Symbolische Links werden unterstützt.
  • pdumpfs: Backups, auch mehrerer älterer Versionen in einem
    Dateisystem. Symbolische Links werden unterstützt.
  • rsync: 1-Wege Synchronisation
  • unison: 2-Wege Synchronisation
  • arch: Mehr-Wege Synchronisation mit Server-Backups, auch mehrerer
    älterer Versionen. Es gibt keine Dinge wie "Arbeitsverzeichnis".
  • subversion: Mehr-Wege Synchronisation mit Server-Backups, auch
    mehrerer älterer Versionen, Apache.

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.26
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
Plan9’s 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 Archiven auf. Sehen 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 das selbe ü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‘ stellt die Tastatur wieder her, nachdem beispielsweise X abgestürzt ist.
`0′ setzt den Level mit dem Fehlermeldungen auf der Konsole ausgegeben werden
herunter. `k‘ (system attention key) killt alle Prozesse auf der aktuellen
virtuellen Konsole. `t‘ beendet alle Prozesse des aktuellen Terminals außer
init. `i‘ killt alle Prozesse außer init.

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

Debian Standard Kernel sind, zur Zeit der 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.


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 hier 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:

  • 0: KERN_EMERG, System ist unbenutzbar
  • 1: KERN_ALERT, sofortiger Eingriff nötig
  • 2: KERN_CRIT, kritischer Zustand
  • 3: KERN_ERR, Fehler
  • 4: KERN_WARNING, Warnung
  • 5: KERN_NOTICE, normale aber bedeutende Nachricht
  • 6: KERN_INFO, Information
  • 7: KERN_DEBUG, reine debug Nachricht

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 # 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 auch 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 dosDatei

8.6.12 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.13 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.14 Extrahieren von Unterschieden und Einbringen von Updates für Quelldateien

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

     $ diff -u Datei.alt Datei.neu1 > Datei.patch0
$ diff -u alt/Datei neu1/Datei > Datei.patch1

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.patch0
$ patch -p1 Datei < Datei.patch1

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.15 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.16 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 read Kommando 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
<Freizeichen>, <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.17 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.18 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:

  • Shell-Schleife:

         for x in *.ext; do
    if test -f "$x"; then
    Kommando "$x"
    fi
    done
  • find und xargs Kombination:

         find . -type f -maxdepth 1 -name '*.ext' -print0 | 
    xargs -0 -n 1 Kommando
  • find mit -exec Option mit einem Kommando:

         find . -type f -maxdepth 1 -name '*.ext' 
    -exec Kommando '{}' ;
  • find mit -exec Option mit einem kurzen Shell-Skript:

         find . -type f -maxdepth 1 -name '*.ext' 
    -exec sh -c "Kommando '{}' && echo 'erfolgreich'" ;

8.6.19 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.20 Text oder ein Mailing-Listenarchiv 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 Mailing-Liste geladen wird, kann munpack
benutzt werden, um den MIME-Inhalt zu extrahieren.


8.6.21 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.22 Formatierte Ausgabe einer Handbuchseite

The following will print a manual page into a PostScript file/printer.

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

8.6.23 Merge two PostScript or PDF files

You can merge two PostScript or PDF files.

     $ 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.24 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.25 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.26 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. (Ein anderer Editor als vi kann mit der
Umgebungsvariablen EDITOR festgelegt 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 Email an Paul
15 14 1 * * $HOME/bin/monthly
# starte um 22:00 an Werktagen (1-5), schicke Email 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.27 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

  • Kommando-Rückholung,
  • Kopieren-Einfügen,
  • protokollieren,
  • Eingabe von Umlauten und
  • die Möglichkeit eine komplette Sitzung an einem Terminal anzuhalten und später
    fortzusetzen.

8.6.27.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.

  1. 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.
  2. 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.)
  3. 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.27.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.27.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.27.4 screen-Äquivalent unter X

Siehe Paket xmove und dort xmove(1).


8.6.28 Grundlagen – Prüfung des Netzwerks

Installiere um die grundlegenden Funktionen des Netzwerks zu überprüfen
netkit-ping, traceroute, dnsutils,
ipchains (für 2.2 Kernel), iptables (für 2.4 Kernel),
und das net-tools Paket und führe folgende Sequenz aus:

     $ 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 {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.29 Email aus dem lokalen Spooler leiten (flush)

Um Email aus dem lokalen Spooler weiterzuleiten:

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

-qff wäre wohl die bessere Wahl in dem Skript
/etc/ppp/ip-up.d/exim.


8.6.30 ‚Frozen‘ Email aus dem lokalen Spooler entfernen

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

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

8.6.31 Redeliver mbox contents

You need to manually deliver mails to the sorted mailboxes in your home
directory from /var/mail/username if your home
directory became full and procmail failed. After making disk space in the home
directory, run:

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

8.6.32 Dateiinhalte zurücksetzen

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

     $ :>dateiname

8.6.33 Dummy-Dateien

Die folgenden Befehle erzeugen 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)

8.6.34 chroot

Wenn man neben seiner Debian-Distribution noch eine andere installiert hat
(dies kann auch jede andere Distribution sein), z.B. auf der Partition
/dev/hda1, dann kann dieses zweite System mit dem
aktuellen Kernel ohne Warmstart gestartet werden.

     # mount /dev/hda1 /mnt/target
... dies nimmt an, dass das zweite System auf /dev/hda1 liegt
# chroot /mnt/target
... Jetzt wird der Inhalt von /dev/hda1 als root-Verzeichnis betrachtet
# mount proc /proc # reine Vorsicht
... Ausgeführte Befehle stammen nun von /dev/hda1

So kann man verschiedene Stabilitätszweige (stable/testing/unstable) auf einer
Maschine testen. Eine weitere Möglichkeit wäre, ein fremdes System per NFS zu
mounten und chroot auf dieses neu gemountete Verzeichnis
anzuwenden.

Ein auf chroot basierendes System kann leicht mit
debootstrap (in Woody) erzeugt werden.

     # mkdir potatochroot
# debootstrap potato potatochroot
# chroot potatochroot
# apt-setup # set-up /etc/apt/sources.list

Es gibt ein ausgefeilteres chroot-Paket, pbuilder.
Es erzeugt eine chroot-Umgebung und stellt ein Debian-Paket in
dieser Sandbox zusammen. So kann man Paketabhängigkeiten definieren, erkennen
und aufzulösen.

See http://www.debian.org/releases/stable/i386/ch-preparing#s-linux-upgrade


8.6.35 How to check hard links

You can check whether two files are the same file with two hard links by:

      
$ ls -li file1 file2

8.6.36 Ein Festplatten-Image mounten

Wenn file.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 bytes/Sektor


8.6.37 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=myname,uid=my_uid,gid=my_gid"
# smbclient -L 192.168.1.2 # Freigaben anzeigen

Die Netzwerk-Nachbarschaft kann angezeigt werden mit:

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

8.6.38 Utilities for foreign filesystems

Many foreign filesystems have Linux kernel support, and can thus be accessed
simply by mounting the devices containing the filesystems. For certain
filesystems, there are also a few specialized tools to access the filesystems
without mounting the devices. This is accomplished with user-space programs so
that kernel filesystem support is not needed.

  • mtools: for MSDOS filesystem (MS-DOS, Windows)
  • cpmtools: for CP-M filesystem
  • hfsutils: for HFS filesystem (native Macintosh)
  • hfsplus: for HFS+ filesystem (modern Macintosh)

In order to create and check an MS-DOS FAT filesystem, dosfstools
is useful.


8.7 Typical mistakes to be noted

Here are few examples of dangerous actions. The negative impacts will be
enhanced if you are using privileged account: root.


8.7.1 rm -rf .*

In "rm -rf .*", ".*" expands to
include "." and "..", and if you
happen to have privileges to write to the parent directory then you’ll end up
removing all directories next to your current directory as
well.

  • "rm -rf ." : removes everything under current directory
    and current directory itself.
  • "rm -rf *" : removes every non-dot files and non-dot
    directories under current directory
  • "rm -rf .[^.]*" : removes every dot files and
    dot-directories under current directory.
  • "rm -rf .*" : removes everything under parent directory
    and parent directory itself.

8.7.2 rm /etc/passwd

Loss of some important files such as /etc/passwd through your
stupidity is tough. The Debian system makes regular backups of them in
/var/backups. When you restore these files, you may manually have
to set the proper permissions.

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

See also Wiederherstellung von
Paketauswahldaten, Abschnitt 6.3.4
.

Debian-Referenz

CVS, Mon 3. Apr 2005, 22:57:58 UTC

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


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert