[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ weiter ]
Detaillierte Informationen über den Boot-Prompt (also die Eingabeaufforderung
beim Systemstart) gibt es im BootPrompt-HOWTO
des LDP.
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.)
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).
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.
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:
Starten von update-rc.d -f ?dm remove; 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 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.
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
.
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.
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
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
).
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
.
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.
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
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).
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
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
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
.
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-Weg-Synchronisation
unison
: 2-Wege-Synchronisation
cvs
: Mehr-Wege-Synchronisation mit Server-Backups, auch mehrerer
älterer Versionen, nur für Texte, ausgereift. Vergleichen Sie mit Concurrent Versions System (CVS) – System für
simultane Versionen, Abschnitt 12.1.
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.27 bilden ein nettes Backup-System.
Ich werde drei einfach zu nutzende Hilfsmittel angeben.
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)
.
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)
.
Changetrack
zeichnet Änderungen von textbasierten
Konfigurationsdateien regelmäßig in RCS-Depots auf. Lesen Sie
changetrack(1)
.
# apt-get install changetrack # vi changetrack.conf
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
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
.
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.
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.
# 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.
Referenz: Managing
Accurate Date and Time HOWTO
.
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.
Das Paket chrony
hilft hier weiter.
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.
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 ...]
Im Zweifelsfall kann man immer den Stecker des Lautsprechers herausziehen ;-) Für die Bash-Shell gilt:
echo "set bell-style none" >> ~/.inputrc
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:
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.
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".
Ist der Bildschirm auf Grund von cat Binärdatei unleserlich (und sogar eingetippte Kommandos sind nicht sichtbar), so hilft:
$ reset
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
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]:
us — ASCII (7 Bit)
l1 — ISO Latin-1 (ISO-8859-1, westliches Europa, 8 Bit)
KOI8-RU — KOI8-RU für Russisch (Unix)
SJIS — Shift-JIS für Japanisch (Microsoft)
ISO2022JP — E-Mail-Kodierung für Japanisch (7 Bit)
u2 — UCS-2 (Universal Character Set, 2 Byte)
u8 — UTF-8 (Universal Transformation Format, 8 Bit)
Gebräuchliche Surfaces sind[5]:
/cr — Wagenrücklauf als Zeilenende (Mac-Text)
/cl — Wagenrücklauf und Zeilenumbruch als Zeilenende (DOS-Text)
/ — Zeilenumbruch als Zeilenende (Unix-Text)
/d1 — Menschenlesbare Byte-weise Dezimalausgabe
/x1 — Menschenlesbare Byte-weise Hexadezimalausgabe
/64 — Base64-kodierter Text
/QP — Quoted-Printable-kodierter Text
Weitere Informationen finden sich in der entsprechenden Beschreibung in info recode.
Es gibt auch spezialisiertere Konvertierungswerkzeuge:
Zeichensatzkonvertierung:
iconv
— Locale-Kodierungskonvertierungen
konwert
— raffinierte Kodierungskonvertierungen
Binärdateikonvertierung:
uuencode
und uudecode
— für Unix.
mimencode
— für E-Mails.
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.
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.
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
$ split -b 650m Datei # in 650MB große Stücke trennen $ cat x* >großeDatei # wieder zusammenfügen
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
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
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 (Dieses Beispiel verwendet mehrere Zeilen mit PS2=" ". Um dasselbe in einer Zeile zu erreichen, muss ein Semikolon für jeden Zeilenumbruch eingefügt werden.):
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'" \;
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.
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.
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.
Das Folgende druckt eine Handbuchseite in eine PostScript-Datei/Drucker.
$ man -Tps some-manpage | lpr $ man -Tps some-manpage | mpage -2 | lpr
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
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
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.
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
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.
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.
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.
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.
screen
-Äquivalent unter X
Siehe Paket xmove
und dort xmove(1)
.
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
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.
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.
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.
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
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
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.
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
.
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
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.
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.
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.
Man kann wie folgt überprüfen, ob zwei Dateien die selbe Datei mit zwei harten Links sind:
$ ls -li Datei1 Datei2
mount
en
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.
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 "*"
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.
mtools
: für MSDOS-Dateisysteme (MS-DOS, Windows)
cpmtools
: für CP/M-Dateisysteme
hfsutils
: für HFS-Dateisysteme (nativer Macintosh)
hfsplus
: für HFS+-Dateisysteme (moderner Macintosh)
Um MS-DOS-FAT-Dateisysteme zu erzeugen und zu überprüfen, ist das Paket
dosfstools
nützlich.
Es werden einige Beispiele gefährlicher Aktionen aufgeführt. Die negativen Auswirkungen werden verstärkt, wenn das privilegierte Konto root verwendet wird.
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.
"echo .": listet das aktuelle Verzeichnis und alles darin auf.
"echo *": listet jede Nicht-Punktdatei und Nicht-Punktverzeichnisse im aktuellen Verzeichnis auf.
"echo .[^.]*": listet jede Punktdatei und alle Punktverzeichnisse im aktuellen Verzeichnis auf.
"echo .*": listet das Elternverzeichnis und alles darin auf.
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 UTCosamu#at#debian.org
tux-master#at#web.de