Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!news.rediris.es!newsmi-us.news.garr.it!NewsITBone-GARR!news.mailgate.org!fu-berlin.de!uni-berlin.de!not-for-mail
From: faq@dcoul.de (dcoul-FAQ Team)
Newsgroups: de.comp.os.unix.linux.infos,de.answers,news.answers
Subject: de.comp.os.unix.linux.infos - FAQ (section2)
Followup-To: poster
Date: Sun, 23 May 2004 16:22:05 +0000 (UTC)
Organization: dcoul-FAQ Team
Lines: 902
Sender: Andreas Metzler <dcoulfaq@downhill.at.eu.org>
Approved: news-answers-request@MIT.EDU
Expires: Sun, 27 Jun 2004 09:42:04 GMT
Message-ID: <dcoul-faq_2004144182204@mid.downhill.at.eu.org>
References: <dcoul-faq_2004144182155@mid.downhill.at.eu.org>
Reply-To: feedback01@dcoul.de
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de b/EPvRNzIrNWXYJ0LASZqA2y4madtxHYZiJLGJzlEoKCBPQW8=
Summary: This is the FAQ of the german newsgroup hierarchy 
	de.comp.os.unix.linux (dcoul). This article provides answers to 
	linux and usenet questions. The text is written in german.
User-Agent: mkPosting.pl by Thomas Nesges <ThomasNesges@TNT-Computer.de>
X-Disclaimer: Approval for *.answers is based on form, not content.
Xref: senator-bedfellow.mit.edu de.comp.os.unix.linux.infos:3496 de.answers:10513 news.answers:271410

Archive-name: de/comp/linux/dcoul-faq/section2
Posting-frequency: monthly
Last-modified: 2004-05-23 18:21:03
Version: CVS revision 1.139
URL: http://www.dcoul.de/faq/

                                              http://www.dcoul.de/faq/
  _________________________________________________________________

2. Allgemeine Linux-Fragen

2.1 Ich bekomme beim Compilieren die Meldung, es sei ein Signal 11
aufgetreten. Was bedeutet das?

Das weist häufig auf fehlerhafte Hardware hin (z.B. defekte oder zu
langsame Speicherchips). Zu Signal 11 gibt es eine ausführliche FAQ
unter http://www.bitwizard.nl/sig11/.
Enthält der Rechner einen AMD K6 älterer Bauart und mehr als 32MB RAM,
kann es durch einen Fehler im Prozessor zum Auftreten des Signal 11
kommen. Der Fehler wird u.a. durch einige im gcc vorkommende
Codesegmente ausgelöst (der K6 hält die Sequenz fälschlicherweise für
selbstmodifizierenden Code und behandelt sie falsch). Ab der
Prozessorrevision B9732 (auf dem Prozessor aufgedruckt) ist der Fehler
behoben. AMD hat für die Prozessoren mit dem Fehler einen Umtausch
angeboten.

2.2 Ich habe mir ein kleines Testprogramm compiliert, aber wenn ich es
aufrufe, passiert gar nichts. Warum?

Ein häufig unter Linux (und natürlich anderen Unix-Derivaten)
gemachter Fehler ist es, ein Programm test zu nennen. Es gibt ein
Systemkommando mit dem Namen test, das einen logischen Ausdruck
auswertet und mit dem man z.B. überprüfen kann, ob eine bestimmte
Datei existiert (und noch einiges mehr). Wenn man ein Programm test
nennt und es aufruft, wird der eingestellte Suchpfad (enthalten in der
Shellvariable PATH) von vorne nach hinten durchsucht, bis ein Programm
mit dem Namen test gefunden wird. Das Verzeichnis, in dem sich das
Systemkommando test befindet, steht in der PATH-Variable in der Regel
weiter vorne als das eigene Home- oder Arbeitsverzeichnis, so das
nicht das gerade selbst compilierte Programm ausgeführt wird, sondern
das System-test. Dieses erzeugt keine Ausgabe, sondern setzt, je nach
dem Ergebnis des als Parameter übergebenen logischen Ausdrucks,
lediglich einen Fehlercode, den man in der Shell abfragen kann. Es
sieht also so aus, als ob das Programm nichts tut.
Bei manchen Shells ist test auch ein in die Shell integrierter Befehl,
so dass bei der Eingabe von test überhaupt kein externes Programm
ausgeführt wird. Dies lässt sich umgehen, indem das aufzurufende
Programm mit vollem Pfad (/foo/test) bzw. in dem entsprechenden
Verzeichnis mit ./test aufgerufen wird (vgl. auch Warum kann ich ein
Programm als normaler User starten, aber nicht als root?).

2.3 Warum kann ich ein Programm als normaler User starten, aber nicht
als root?

Wenn das Programm im aktuellen Verzeichnis steht, ist es
wahrscheinlich so, dass der Suchpfad für den normalen Benutzer das
Verzeichnis ".", d.h. das jeweils aktuelle Verzeichnis, enthält, der
Suchpfad für root aus Sicherheitsgründen aber nicht. Unter Linux/Unix
ist es standardmäßig so, dass das aktuelle Verzeichnis NICHT im
Suchpfad steht, da man andernfalls sehr einfach ein trojanisches Pferd
mit einem gebräuchlichen Namen irgendwo ablegen könnte und nur darauf
warten müsste, dass root im entsprechenden Verzeichnis (versehentlich)
das Programm startet. Bsp: ein trojanisches Pferd mit dem Namen sl (ls
als Dreher) in /tmp. Sobald root in /tmp wäre und versehentlich sl
statt ls tippt, kann das trojanische Pferd alles tun, was es möchte,
da es Root-Rechte hat, so z.B. irgendwo eine SUID-root-Shell anlegen
o.ä.
Möchte man das Programm trotzdem starten, kann man es explizit mit
voller Pfadangabe aufrufen (/foo/bar/Programm) oder in Kurzform mit
./Programm, da der Punkt für das aktuelle Verzeichnis steht.

2.4 Welche Libc-Version ist neuer: 5.4.4 oder 5.4.38?

Libc 5.4.38 ist neuer. Die verschiedenen Versionsteile bzw. minor
releases sind bei der libc immer durch Punkte getrennt, d.h. 38 ist
als achtunddreißig zu verstehen, nicht als drei acht.

2.5 Warum kann ich mich nicht als root über telnet einloggen?

Das ist ein Sicherheitsfeature. So wird verhindert, dass man direkt
mit einem Brute-Force-Attacke versuchen kann, das Root-Passwort
heraus- zubekommen. Man muss sich als normaler User einloggen und dann
mit su -l Root-Rechte erlangen, wobei das Root-Passwort abgefragt
wird. Ein Eindringling muss somit mindestens zwei Passworte knacken,
um root zu werden. Sinnvollerweise ist das Root-Passwort dabei
natürlich ein anderes als das User-Passwort.
Immer daran denken: wer selbst (z.B. über PPP) ins Netz kommt,
ermöglicht damit auch Anderen, an den eigenen Rechner zu kommen.
Telnet hat dabei ein grundsätzliches Sicherheitsproblem: es überträgt
auch die Kennworte im Klartext und ermöglicht es dadurch einem
Angreifer, vergleichsweise einfach an Kennworte zu kommen. Es ist
daher durchaus lohnenswert, sich Gedanken über die Verwendung eines
verschlüsselnden Verfahrens zu machen, z.B. SSH o.ä., wobei telnet
dann vollständig deaktiviert werden kann. Mit OpenSSH
<http://www.openssh.com/> liegt inzwischen eine komplette freie
Implementierung des SSH-Protokolls vor. Sie wird inzwischen bei den
meisten Linuxdistributionen (bei Debian im Paket "ssh") mitgeliefert.

2.6 Warum kann ich meine CD nicht mehr aus meinem CD-Laufwerk nehmen?

Wenn eine CD mit dem Kommando mount in den Verzeichnisbaum eingebunden
ist (manche Distributionen machen das beim Booten automatisch, falls
eine CD eingelegt ist), ist der Auswurfknopf des Laufwerks gesperrt,
damit die CD nicht versehentlich entnommen werden kann. Dies hat
mehrere Gründe: Bei einem beschreibbaren Wechselmedium (MO, PD, ZIP
etc.) darf dieses erst entnommen werden, wenn alle Puffer auf das
Medium zurückgeschrieben wurden (Linux arbeitet mit Write-Cache, d.h.
Daten werden nicht immer sofort auf das Medium geschrieben, sondern
zunächst nur im Hauptspeicher gesammelt und erst bei Bedarf auf das
Medium geschrieben). Erst nach dem Unmounten des Mediums (mit umount)
kann man sicher sein, dass die Daten auch wirklich geschrieben wurden,
so dass das System die vorherige Entnahme des Mediums verhindert.
Außerdem wird so verhindert, dass einem anderen Prozess bzw. dessen
Benutzer, der noch Dateien auf dem Medium geöffnet hat, dieses
entzogen wird, was zu Programmfehlern und ggf. Datenverlust führen
würde. Wenn ein umount-Befehl ausgeführt wurde, kann man sicher sein,
dass keine Dateien auf dem Medium mehr geöffnet waren.
Der Befehl zum Unmounten lautet umount <Verzeichnis>, wobei
<Verzeichnis> dasjenige ist, in das die CD eingeklinkt wurde, in der
Regel /cdrom.
Einige ältere CDROM-Laufwerke unterstützen die Verriegelung des
Auswurfknopfes nicht, dennoch sollte auch hier immer erst ein
umount-Kommando ausgeführt werden, bevor das Medium entnommen wird.

2.7 Warum kann ich keine ZIP-Disk mounten, obwohl der Kernel das
Laufwerk beim Booten ordnungsgemäß erkannt hat? Ich erhalte beim
Mountversuch lediglich die Meldung mount: wrong fs type, bad option,
bad superblock on /dev/hdc, or too many mounted file systems.

ZIP-Medien sind standardmäßig partitioniert wie eine Festplatte, d.h.
man muss beim Mounten die Partition und nicht nur das Gerät angeben.
Gegeben sei ein ATAPI-ZIP als Master am sekundären Controller, also
wäre das ZIP-Laufwerk über /dev/hdc anzusprechen. Bei Medien von
Iomega ist die Partition an vierter Stelle in der Partitionstabelle
angelegt, d.h. der Mount-Befehl müsste mount /dev/hdc4 /mnt lauten.
Bei Fremdherstellermedien kann die Partitionsnummer eine andere sein.

2.8 Was bedeutet die Meldung /dev/hdaX has reached maximal mount
count; check forced beim Booten?

Beim Booten wird normalerweise das Programm fsck (FileSystemChecK)
aufgerufen, welches überprüft, ob die interne Struktur des
Dateisystems noch konsistent ist. Wenn Linux korrekt beendet wird und
die Platten sauber unmounted sind, wird auf der jeweiligen Partition
eine Markierung gesetzt, die alles ok besagt (Clean-Flag). Wenn diese
Markierung vorhanden ist, nimmt fsck beim nächsten Aufruf keine
detaillierte Überprüfung der Partition vor. Da sich eventuell aber
doch irgendwann ein Fehler eingeschlichen haben könnte, wird nach
einer gewissen Anzahl von Mountvorgängen (maximal mount count)
trotzdem eine Prüfung durchgeführt, auch wenn die Markierung alles ok
signalisiert (daher die Meldung check *forced*). Die Überprüfung kann
bei großen Partitionen mit vielen Dateien durchaus einige Minuten
dauern. Die Anzahl der Mountvorgänge, nach denen zwangsweise ein
fsck-Lauf stattfindet, lässt sich mit Hilfe des Programms tune2fs
einstellen.

2.9 Ich benutze für meinen Internetzugang ISDN mit SyncPPP (ipppd) und
Dial-On-Demand. Das funktioniert auch, aber nur einmal. Sobald die
Verbindung abgebaut wurde, wird sie nicht automatisch wieder
aufgebaut.

Beim Abbau der Verbindung wird vom ipppd die Defaultroute auf das
ISDN-Interface gelöscht, so dass weitere IP-Pakete keinen neuen
Verbindungsaufbau triggern können, da sie mangels Route nicht auf das
ISDN-Interface geleitet werden. Abhilfe: in /etc/ppp/ip-down die
Defaultroute wieder auf das ISDN-Interface setzen. /etc/ppp/ip-down
wird vom ipppd nach dem Abbau der Verbindung automatisch ausgeführt.

2.10 Wie kann ich ein ext2-Dateisystem defragmentieren?

Es gibt dazu ein Programm im Alphastadium auf sunsite.unc.edu,
allerdings wird von der Benutzung regelmäßig abgeraten, sowohl wegen
der damit verbundenen Gefahren als auch aus grundsätzlichen
Erwägungen, welche ein Text von Kristian Koehntopp erklärt, zu finden
in der SuSE-Support-Datenbank unter
http://sdb.suse.de/sdb/de/html/ext2frag.html.

2.11 In meiner Shell kann ich keine Umlaute eingeben und die Del/Entf-
Taste arbeitet nicht so, wie sie soll (das Zeichen unter dem Cursor
löschen). Wie kann ich das ändern?

Das lässt sich (zumindest für die Standard-Shell unter Linux, die
bash) ändern, in dem man in die Datei .inputrc im Homeverzeichnis die
folgenden Zeilen einträgt:
set meta-flag on
set convert-meta off
set output-meta on
"\e[3~": delete-char
Bei halbwegs aktueller bash (bzw. readline) genügt es, stattdessen die
locales richtig zu setzen, z.B. LC_CTYPE=de_DE.

2.12 Warum kann ich ein RPM-Paket, das ich gerade mit rpm -i
foo-1.0-1.i386.rpm installiert habe, nicht mit rpm -e
foo-1.0-1.i386.rpm wieder deinstallieren? RPM meldet nur: package
foo-1.0-1.i386.rpm is not installed.

RPM unterscheidet zwischen dem Namen der Datei und dem Namen des
Paketes. Dies ermöglicht es z.B., ein RPM-Paket auch mit verkürztem
Namen auf einer DOS-Diskette abzuspeichern und es trotzdem mit dem
korrekten Namen zu installieren. Der Name des Paketes ist in der Datei
abgelegt und kann mit rpm -qp foo-1.0-1.i386.rpm abgefragt werden. Im
vorgenannten Beispiel soll das Paket foo-1.0-1 heißen, so dass die
Deinstallation einfach mittels rpm -e foo-1.0-1 oder auch mit der
Kurzform rpm -e foo (Weglassen der Versionsnummern) erfolgen kann.

2.13 Wie kann ich auf der Kommandozeile (d.h. ohne X-basierte
Programme verwenden zu müssen) ftp über einen Proxy benutzen?

In diesem Fall bietet sich Lynx an. Lynx ist ein Webbrowser für die
Textkonsole, der auch ftp über ftp-fähige http-Proxies beherrscht. Um
Lynx den passenden Proxy bekanntzumachen, muss man lediglich die
beiden Shell-Variablen http_proxy und ftp_proxy auf die URL des
jeweiligen Proxies setzen, z.B. so:
bash> export http_proxy=http://mein.http.proxy.de:8080/
bash> export ftp_proxy=http://mein.http.proxy.de:8080/
Alternativ kann man die Proxies für lynx auch in /etc/lynx.cfg setzen.
Eine andere Möglichkeit ist die Verwendung des Programms wget, das
entgegen seinem Namen nicht nur mit Web- sondern auch mit ftp-Servern
und entsprechenden Proxies umgehen kann.

2.14 Bei Anleitungen zur Netzwerkkonfiguration findet man häufig
Angaben wie 192.168.1.0/24. Was bedeutet das /24?

Es handelt sich hier um eine Kurzschreibweise der Netzmaske. Die Zahl
steht für die Anzahl der 1-Bits, die in der Netzmaske den Netzwerkteil
der davorstehenden Adresse angeben. In diesem Beispiel sind es 24
1-Bits, die Netzmaske ist also in binärer Schreibweise
11111111.11111111.11111111.00000000 bzw. dezimal 255.255.255.0.

2.15 Warum werden Textdateien im Querformat (jeweils 2 Seiten auf
einem A4-Blatt) gedruckt und wie kann man das ändern?

Das ist abhängig von der Konfiguration des Druckerfilters. Bei
Systemen, die Apsfilter verwenden (z.B. SuSE), kann man das in der
Datei /etc/apsfilterrc konfigurieren. Dort gibt es einen Eintrag
FEATURE, bei dem die verschiedenen Möglichkeiten in den
Kommentarzeilen beschrieben sind.

2.16 Wie kann ich auf meine DOS-formatierten Disketten zugreifen?

Eine Diskette ist für Linux prinzipiell nichts anderes als jeder
andere Datenträger, d.h. man kann eine Diskette genauso mounten, wie
eine Festplattenpartition. In diesem Fall muss nur der passende
Dateisystem-Typ angegeben werden, also z.B. so:
mount -t vfat /dev/fd0 /mnt/floppy.
Dabei steht vfat für lange Dateinamen in Windows95-Art und das
Verzeichnis /mnt/floppy muss existieren. Vor dem Entnehmen der
Diskette muss diese _unbedingt_ mittels umount /mnt/floppy wieder
unmounted werden, sonst kann es zu Datenverlusten kommen ! Da es doch
recht umständlich ist, auf diese Art auf Disketten zuzugreifen, gibt
es die mtools. Das sind Befehle, die den wichtigsten DOS-Befehlen mit
einem vorangestellten m entsprechen, also z.B. mdir, mcopy, mtype etc.
Damit kann man, ohne die Diskette mounten zu müssen, z.B. eine Datei
von Diskette auf die Platte kopieren: mcopy A:foo.txt /tmp/.

2.17 Wie kann ich LILO wieder aus dem MBR entfernen?

Am einfachsten ist es, MS-DOS zu booten und fdisk /MBR aufzurufen.
Eine hinreichend neue DOS-Version vorausgesetzt, wird damit der MBR
mit dem Standard-Bootblock überschrieben. Diese Funktion von fdisk ist
AFAIK nicht offiziell dokumentiert und funktioniert mit einigen
fdisk-Versionen nicht.
Bei WindowsXP sollte es genügen (ungetestet), von der XP
Installations-CD zu booten und anschließend folgend Schritte
auszuführen: Installation reparieren (R), Reparaturkonsole wählen (K),
Partition wählen (1), FIXMBR und FIXBOOT starten.
Soweit unter Linux ein Backup des Original-Bootblocks vorhanden ist,
kann dieser auch unter Linux wie im Manual zu lilo beschrieben per dd
oder mit lilo -u wieder installiert werden.

2.18 Wie kann ich auf meinen Streamer zugreifen?

Häufig wird gefragt, wie denn ein Streamerband gemounted werden kann.
Die Antwort ist recht einfach: gar nicht (zumindest nicht unter
Linux).
Ein Streamer ist unter Linux ein sogenanntes Character-Device, d.h. es
gibt darauf kein Dateisystem, das man mounten könnte. Zum Schreiben
auf und zum Lesen vom Band verwendet man entsprechende Programme, z.B.
tar und cpio. Für diese Programme ist ein Streamer eine Blackbox, d.h.
dass z.B. tar nicht weiß, an welche Stelle auf dem Band gerade
geschrieben wird und tar kann das Band auch nicht vor- oder
zurückspulen. Für Bandoperationen (vor- oder zurückspulen, löschen,
Suchen einer bestimmten Bandstelle, etc.) gibt es das Programm mt
(magnetic tape). Für mt ist das Band wiederum eine Blackbox: mt kennt
nicht die Daten auf dem Band, es kennt aber z.B. die Position des
Bandes. Tar und mt ergänzen sich daher.
Bei beiden Programmen muss man das zum Streamer gehörende Device
angeben. Wie das Device heißt, hängt von der Art des Streamers ab. Der
erste SCSI-Streamer im System heißt /dev/st0, ein QIC-80- oder
Travan-Floppystreamer wird über /dev/ftape angesprochen und einer der
bisher noch recht seltenen ATAPI-Streamer heißt z.B. /dev/hdb, d.h. er
erhält die Bezeichnung, die eine Festplatte an gleicher Stelle
erhalten würde. Bei den Device-Bezeichnungen muss noch eine wichtige
Unterscheidung getroffen werden: die bisherigen Beispiele sind
sogenannte rewinding devices, d.h. nach dem Ende jeder Schreib- oder
Leseoperation wird das Band automatisch an den Anfang zurückgespult,
so dass ein weiterer Schreibvorgang die vorhandenen Daten
überschreiben würde. Möchte man, dass das Band nach dem Ende eines
Schreib- oder Lesevorgangs an der Stelle stehen bleibt, an der es
zuletzt war, muss als Device das entsprechende nonrewinding device
angegeben werden, also z.B. /dev/nst0 oder /dev/nftape.
Wie bekommt man jetzt die Daten aufs Band? Dazu ein Beispiel mit einem
SCSI-Streamer:
  * Zurückspulen des Bandes, falls noch nicht erfolgt:
    bash> mt -f /dev/st0 rewind
  * Sichern des Verzeichnisses /etc auf den Streamer:
    bash> cd /; tar -cvf /dev/st0 etc/
    Da als Device /dev/st0 angegeben ist, wird das Band anschließend
    automatisch zurückgespult.
  * Vergleich der geschriebenen Daten:
    bash> tar -dvf /dev/st0

Die Option -dv bei tar bewirkt, dass die jeweils gerade überprüfte
Datei auf dem Bildschirm ausgegeben wird. Falls eine Abweichung
zwischen Band und Platte festgestellt wird, gibt tar eine
entsprechende Meldung aus.

2.19 In /var/log/messages erscheint regelmäßig der Eintrag -- MARK --.
Was hat das zu bedeuten?

Mit diesem Eintrag zeigt der Syslogd, welcher für das Protokollieren
von Systemereignissen zuständig ist, an, dass er noch läuft. Das
Zeitintervall zwischen den Einträgen lässt sich beim Aufruf des
Syslogd mittels des Parameters -m Intervall einstellen bzw. mit dem
Intervall 0 ganz abschalten.
Einige Syslogd-Versionen unterdrücken den Eintrag, wenn während des
Intervalls andere Ereignisse protokolliert wurden, so dass er nur
erscheint, wenn ansonsten keine Lebenszeichen des Syslogd sichtbar
wären.

2.20 Wie ist das mit den Locales?

Locales sind Konfigurationsdateien, die den Rechner an nationale
Gegebenheiten anpassen sollen. Dazu gibt es Dateien, die Informationen
über nationale oder regionale Besonderheiten enthalten, u.a. die
Sprache, das Zahlen-, das Datums- und das Zeitformat sowie den
verwendeten bzw. darstellbaren Zeichensatz. Sind die Locales
unvollständig oder nicht richtig konfiguriert, werden sehr restriktive
Defaults verwendet, die z.B. nur die Anzeige von 7 bit us-ascii
Zeichen erlauben. Die Konfiguration, welche Locale-Einstellungen
verwendet werden sollen, erfolgt durch folgende Environmentvariablen.
Umgebungsvariablen setzt man entweder mit export VARIABLE=WERT (bash)
oder setenv VARIABLE WERT (tcsh).
 1. $LC_ALL Diese Variable überschreibt alle weiter unten erläuterten.
    Deshalb sollte man sie tunlichst ungesetzt lassen, und die anderen
    Variablen verwenden.
 2. $LC_CTYPE Diese Variable gibt an, welche Zeichen / welcher
    Zeichensatz auf dem aktuellen Terminal verwendet werden kann. Wenn
    diese Variable nicht korrekt gesetzt ist, geben viele Programme
    z.B. statt Umlauten nur Fragezeichen aus.
 3. $LC_COLLATE Damit kann man die Sortierreihenfolge beeinflussen. Im
    Locale de_DE beispielsweise ist ä gleichwertig zu a zu behandeln.
    (ab,äb,ac)
 4. $LANG Der hier eingestellte Wert wird für die anderen LC-Variablen
    verwendet, sofern nicht diese selbst oder LC_ALL gesetzt sind.
    Einige wenige Programme wie man werten diese Variable auch direkt
    aus.
 5. $LC_TIME Diese Variable gibt an, in welchen Formaten Datum und
    Zeit ausgegeben werden sollen.
 6. $LC_NUMERIC Gibt an, wie Zahlen, die keine Geldbeträge sind,
    formatiert werden sollen. (z.B. '.' oder ',' als Dezimaltrenner)
 7. $LC_MONETARY Das selbe wie vorhin, diesmal allerdings für
    Geldbeträge.
 8. $LC_MESSAGES Gibt an, in welcher Sprache Programme ihre
    Nachrichten ausgeben sollen. Das hat nichts mit automatischer
    Übersetzung o.ä. zu tun, sondern ein Programm muss für jede
    Sprache die es unterstützen soll, entsprechend vorgesehen sein.
    Deshalb werden durch setzen dieser Variable längst nicht alle
    Nachrichten in Deutsch ausgegeben. Teilweise sind die
    Übersetzungen auch nicht sehr gelungen.

Ich persönlich setze nur LC_CTYPE, aber das ist eine Sache des pers.
Geschmacks.
Für deutsche Einstellungen müssen die Variablen auf "de_DE" gesetzt
werden.
Anmerkung: Bei manchen Distributionen müssen die Locales selbst
kompiliert werden. Bei Debian (ab woody) macht man das am einfachsten
mittels dpkg-reconfigure locales, alternativ kann man die gewünschten
locales auch direkt in /etc/locale.gen eintragen und danach als root
das Programm locale-gen ausführen.

2.21 Wie [lösche/verschiebe/bearbeite] ich Dateien, die mit -
beginnen?

Das hängt vom Programm ab. Oft zum Erfolg führt, nach dem letzten
echten Parameter -- und dann den Dateinamen anzugeben. Also etwa so:
$ touch -file
touch: invalid option -- i
Try touch --help' for more information.
$ touch -- -file
nikratio:~/foo$ ls
-file
$ rm -file
rm: invalid option -- l
Try rm --help' for more information.
$ rm -- -file
$ ls
Eine weitere Möglichkeit ist, vor dem Dateinamen das Verzeichnis
einzugeben, also z.B. rm ./-file oder rm /home/me/-file.

2.22 Ich benötige die Datei foo.bar, welches Paket muss ich
installieren?

Das kommt auf die Distribution an:
  * Debian: Auf den CDs und dem ftp-Server befindet sich im
    Verzeichnis dists/$Version/ die Datei Contents-$arch.gz, die
    einfach mittels zgrep durchsucht werden kann.
    zgrep foo.bar /cdrom/dists/potato/Contents-i386.gz
    Alternativ kann man auch die untere Suchmaske ("Search the
    contents of packages") im Formular <http://packages.debian.org/>
    auf Debians WWW-Site verwenden.
  * SuSE: YaST bietet die Funktion Paketauskunft.
  * RedHat: Installiert man das Paket rpmdb-redhat (ab RedHat Version
    6.2 enthalten), kann man mittels
    rpm -qf `rpm -qla --define '_dbpath
    /usr/lib/rpmdb/%{_arch}-%{_vendor}-%{_os}/redhat' |
    grep gesuchte.Datei` --define '_dbpath
    /usr/lib/rpmdb/%{_arch}-%{_vendor}-%{_os}/redhat'
    das entsprechende Paket finden.
  * Alternative für alle rpm-basierten Distributionen: Man erzeugt
    selbst eine Liste, indem man die Installations-CDs (DVD) der Reihe
    nach einlegt, mountet und anschließend
    find /mnt/cdrom -type f -name "*.rpm" -print |
    { while read paketdatei ; do
    paket=`basename $paketdatei`
    rpm -qpl "$paketdatei" | sed -e "s/$/ $paket/"
    done
    } >> ~/InhaltallerCDs
    aufruft. Jetzt kann man die Liste einfach mittels
    grep gesuchte.Datei ~/InhaltallerCDs durchsuchen.

2.23 Wie kann ich mit einem Kommandozeilenprogramm Mails mit
MIME-Attachment verschicken?
  * mutt -n -F /dev/null -s "Anhang" -a Datei email@adresse <
    /dev/null
  * mpack -s "Anhang" Datei email@adresse
  * nail -s "Anhang" -a Datei email@adresse < /dev/null
  * metasend -b -s "Anhang" -f Datei -t email@adresse -m
    application/octet-stream
  * uuenview -b -s "Anhang" -m email@adresse Datei

2.24 Manchmal fängt die Festplatte aus heiterem Himmel an zu rattern -
und erst nach einigen Minuten ist der Spuk wieder vorbei.

Dafür ist in aller Regel ein Cronjob verantwortlich. Es handelt sich
hierbei um regelmäßige Aufräumarbeiten (z.B. im Spool eines Proxies,
Newsservers oder in den Logfiles) und Aktualisierungen (so wird z.B.
für das Tool locate mit updatedb eine Datenbank erstellt). Mit top und
pstree lässt sich das genauer feststellen.
Sofern nicht anacron eingesetzt wird, wird die Festplatte immer zur
selben Uhrzeit aktiv werden. Anacron hingegen richtet sich nicht nach
Uhrzeiten, sondern verrichtet seinen Dienst täglich, wöchentlich, oder
wie auch immer gewünscht.

2.25 Wie kann ich Audio-CDs mounten?

Das ist normalerweise nicht nötig, da sowohl Programme zum Abspielen
der CD wie z.B. xmms <http://www.xmms.org/> als auch solche zum
digitalen Grabben (cdparanoia, cdrdao) direkt auf das Device
zugreifen.

Sollte diese Antwort nicht überzeugend genug sein, bietet sich cdfs
<http://www.elis.rug.ac.be/~ronsse/cdfs/> an.

2.26 Beim Versuch, ein rpm-Paket zu installieren, erhalte ich die
Fehlermeldung only packages with major numbers <= 3 are supported by
this version of RPM.

Das Paket wurde mit der neuen Version 4 von rpm gebaut, deine Version
kann mit dem geänderten Format aber nichts anfangen. Der Hersteller
deiner Distribution stellt dir vermutlich ein Update auf rpm Version
3.0.5 bereit, das auch mit dem rpm4-Format umgehen kann.
Siehe auch Red Hat, Inc. Product Enhancement Advisory RHEA-2000:051-01
<http://www.redhat.com/support/errata/RHEA-2000-051.html> "New version
of rpm required to install Red Hat updates" bzw.
http://sdb.suse.de/sdb/de/html/thallma_rpm_40.html.
RedHat empfiehlt inzwischen in RHSA-2001:016-03
<http://www.redhat.com/support/errata/RHSA-2001-016.html> für alle
Versionen von RedHat Linux das Update auf RPM4.
Vorsicht, obwohl RedHat und SuSE beide RPM-basiert sind, unterscheiden
sie sich in bestimmten Punkten, wie Paketnamen und Pfaden, so dass ein
RedHat-RPM auf einem SuSE-System (und vice versa) laufen kann, aber
nicht muss. Vor allem bei den Abhängigkeiten wird es aufgrund der
unterschiedlichen Paketnamen Probleme geben.
Wenn man sich nicht mit den entstehenden Problemen herumschlagen will,
so sollte man nur zur Distribution passende Pakete installieren.

2.27 Wie kann ich einem Netzwerkinterface mehrere IP-Adressen
zuweisen?

Sofern dein Kernel mit "IP Aliasing" unterstützt, genügt
beispielsweise
ifconfig eth0:0 127.0.8.15, um eth0 zusätzlich die IP-Adresse
127.0.8.15 zuzuweisen.
Genauer steht das in
Kernelquelltext/Documentation/networking/alias.txt.

2.28 Ich habe mein Root-Passwort vergessen, wie komme wieder in mein
System?

Du übergibst (wie BootPrompt-HOWTO beschrieben) am lilo-Bootprompt
zusätzlich den Parameter init=/bin/sh, gibst dann mit mount -n -o
remount,rw / das Rootfilesystem zum Schreiben frei und setzt das
Passwort mittels passwd wieder auf einen bekannten Wert. Mounte
anschließend mit mount -n -o remount,ro / das Rootfilesystem wieder
readonly und boote neu.
Das passwd-Kommando liegt üblicherweise in /usr/bin/, und daher
eventuell nicht auf der Rootpartition, in diesem Fall musst du auch
diese Partition händisch mittels mount -n -r /usr mounten.
Während der ganzen Prozedur hast du normalerweise keine deutsche
Tastaturbelegung, wähle daher ein Passwort ohne Sonderzeichen.
"/" liegt auf "-", "-" auf "ß" und "=" auf der Akzent-Taste, zwischen
Backspace und ß.

2.29 Wenn ich versuche, ein Programm auszuführen, bekomme ich immer
die Meldung PROGRAMMNAME: No such file or directory (obwohl das
angegebene Programm tatsächlich existiert), Backslash found where
operator expected at ... oder : command not found.

Es handelt sich bei dem Programm höchstwahrscheinlich um ein Script.
Ein Script liegt immer als Textdatei vor. Die Textdateien unter Unix
und DOS/Windows sind nun aber verschieden aufgebaut (sie verwenden
einen anderen Zeichensatz und andere Zeilenendezeichen). Da Entpacker
Textdateien oft an die Gegebenheiten des laufenden Betriebssystems
anpassen, sind diese dann unter einem anderen Betriebssystem nicht
mehr direkt lesbar.
Du kannst jetzt entweder alle Textdateien mit recode ibmpc..latin1
dateiname ins Linuxformat konvertieren, oder, wenn es sich um ein
Linuxarchiv (tar.gz, tgz, tar, tar.bz2) handelt, das Paket direkt
unter Linux entpacken beziehungsweise deinem Windowsentpacker das
konvertieren abgewöhnen.
Handelt es sich um ein Archiv für Windows, musst du einen
Linuxentpacker auftreiben, der ebenfalls automatisch konvertiert, oder
aber besser unter Windows entpacken und dann manuell konvertieren.

2.30 Ich habe ein Shell-Skript geschrieben, das als root laufen muss,
dazu habe ich mit chmod u+s script.sh das SUID-Bit gesetzt, es hat
aber anscheinend keine Wirkung.

Aus Sicherheitsgründen ignoriert Linux das SUID-Bit bei Skripts. Es
gibt eine Race-Condition, zuerst öffnet der Kernel die Datei, um
herauszufinden mit welchem Interpreter das Skript ausgeführt werden
soll (das steht hinter #! in der ersten Zeile), dann öffnet der nun
Set-ID laufende Interpreter das Skript. In der Zeit dazwischen kann
das Skript verändert worden sein.

Es gibt mehrere Lösungsansätze:
  * Du verwendest ein Programm wie super oder sudo, das es ermöglicht,
    bestimmte Kommandos zum Ausführen als root freizugeben. Folgender
    Eintrag in /etc/super.tab erlaubt beispielsweise mason und dixon
    den Rechner mit super apm in den Standbymodus zu schalten:
    apm "/usr/bin/apm -s" uid=root nargs=0\
    info="Suspend-mode" mason dixon
  * Du verwendest perl als Skriptsprache, siehe perlsec (1p).
  * Du schreibst ein Programm statt eines Skripts.

2.31 Ich suche ein Notfall-Linux, das möglichst auf eine Diskette
passen sollte.

Hier eine unvollständige Liste:
  * Floppix http://floppix.ccai.com/
  * muLinux http://sunsite.auc.dk/mulinux/
  * CClinux http://www.cclinux.org/
  * Trinux http://www.trinux.org/
  * Tomsrtb http://www.toms.net/rb/

Auf der letzten Seite gibt es noch mehr Links zu anderen
Linux-Systemen auf Floppy.

2.32 Wo kann ich ISO-Images von SuSE Linux herunterladen?

Nirgends, SuSE gibt nur CD-Images der Live-Eval-Version zum Download
frei, die direkt von CD läuft und nicht installiert wird. Die
Begründung ist unter ftp://ftp.suse.com/pub/README.iso-images.deutsch
nachzulesen.
Es besteht allerdings die Möglichkeit, SuSE ohne CD direkt per ftp zu
installieren, dies ist in
http://sdb.suse.de/sdb/de/html/lmuelle_suselinux_internet.html
<http://sdb.suse.de/sdb/de/html/lmuelle_suselinux_internet.html>
genauer erklärt.

2.33 Wie installiert man Programme aus dem Internet richtig? Alle
meine Versuche mit ./configure, make, make install sind bisher
gescheitert.

I.d.R. handelt es sich dabei um gepackte Archive im tar.gz- oder
tar.bz2-Format (sog. Tarballs), die zunächst entpackt werden müssen:
tar -xvzf archivname.tar.gz
tar -xv --bzip2 -f archivname.tar.bz2
Nun solltest Du nachsehen, was hierbei genau entpackt wurde. Denn:
Tarballs enthalten nicht zwangsläufig Sourcecode, der compiliert
werden will. Und nicht alle Programme werden auf die gleich Weise
installiert. Meist ist eine Datei INSTALL und/oder README vorhanden,
in der der Programmautor erklärt, was zu tun ist.
Oft bricht die Installation ab, da angeblich etwas fehlt - obwohl man
sich sicher ist, dass dies vorhanden ist:
  * Zu fast allen Libs existieren sog. "devel"-Pakete;
    Entwicklerpakete, die zum Compilieren anderer Software benötigt
    werden. Wer z.B. die GTK-Libs installiert, muß - um GTK-Programme
    nicht nur ausführen, sondern auch compilieren zu könnnen - das
    separat erhältliche GTK-Devel-Paket seiner Distribution
    installieren. Ein anderes Beispiel ist in der Frage über fehlende
    X11-Dateien zu finden. Der Punkt Ich benötige die Datei foo.bar,
    welches Paket muss ich installieren? in der FAQ hilft dir
    vielleicht, das nötige Paket selbst zu finden.
  * Wer Libs selber installiert (und kein fertiges Distributionspaket
    einsetzt), muß den Pfad zu diesen in der Datei /etc/ld.so.conf
    eintragen (mit Ausnahme von /lib und /usr/lib). Existieren
    verschiedene Versionen der gleichen Lib, so wird später jene
    zuerst gefunden, deren Pfad in dieser Datei zuerst eingetragen
    ist. Allerdings werden Libs nicht anhand den Einträgen in
    ld.so.conf gefunden - vielmehr wird /etc/ld.so.cache gefragt.
    Erstellt und aktualisiert wird diese Datei mittels dem Tool
    ldconfig anhand der ld.so.conf.
  * Ein weiterer Lauf von ./configure durchsucht nur dann wirklich das
    System auf Veränderungen, wenn zuvor die Datei config.cache
    gelöscht wurde.

Ein Blick in Wie werde ich selbst kompilierte Software wieder sauber
los vor dem Aufruf von make install ist empfehlenswert.

2.34 Wie werde ich selbst kompilierte, mit make install installierte
Software wieder sauber los.

Wenn du das Makefile des Programms noch hast, kannst du es mit make
uninstall probieren, sonst bleibt dir nur händisches Suchen, es sei
denn, du hast schlauerweise schon beim Installieren Vorkehrungen
getroffen, und z.B. einen der folgende Vorschläge befolgt.
  * Verwende Software wie stow <http://www.gnu.org/software/stow/>,
    graft <http://www.gormand.com.au/peters/tools/graft/graft.html>
    oder depot <http://andrew2.andrew.cmu.edu/depot/>, welche die
    Software in eigene separate Verzeichnisse ablegt.
  * Erzeuge Pakete im Paketformat deiner Distribution und installiere
    diese.
    Siehe RPM-HOWTO, Maximum RPM <http://www.rpm.org/max-rpm/>, Debian
    New Maintainers' Guide <http://www.de.debian.org/doc/maint-guide/>
    und Debian Policy Manual
    <http://www.de.debian.org/doc/debian-policy/>
    Ein kleiner Tipp noch: Erzeuge die RPM- oder DEB-Pakete nicht als
    root sondern als normaler User, so kannst feststellen, ob die
    entsprechenden Skripts den Fehler haben, die Dateien direkt ins
    root-Dateisystem zu kopieren, anstatt in das Verzeichnis, in dem
    das Paket gebaut wird. Bei Debian musst du dazu fakeroot verwenden
    und bei rpm folgende Zeile in ~/.rpmmacros aufnehmen
    %_topdir /ein/beliebiges/Verzeichnis
    und (zumindest) die Verzeichnisse BUILD, RPMS/i386, RPMS/noarch,
    SOURCES, SPECS und SRPMS unter /ein/beliebiges/Verzeichnis
    anlegen.
  * Installwatch <http://asic-linux.com.mx/~izto/installwatch.html>
    zeichnet auf, welche Dateien bei make install hinzugefügt werden.
  * CheckInstall <http://asic-linux.com.mx/~izto/checkinstall/>
    verwendet Installwatch, um automatisch rpm- oder Slackware-Pakete
    zu erstellen.

2.35 Wie kann ich verhindern, dass ich die Ausgabe bestimmter cronjobs
per Mail zugestellt bekomme.

Du kannst die Ausgabe des Kommandos nach /dev/null umleiten:
08 15 * * * /pfad/zu/blabla > /dev/null
Mit
08 15 * * * /pfad/zu/blabla > /dev/null 2>&1
leitest du zusätzlich auch eventuelle Fehlermeldungen um, die auf
Stderr ausgegeben würden. Dies lässt sich auch schöner mit gezieltem
(mehrfachen) Setzen von MAILTO erreichen:
MAILTO="ich@here.org"
47 11 * * * job/mit/interessanter/Ausgabe
#
MAILTO=""
* * * * * job/mit/laestigen/Meldungen

2.36 Ich erhalte die Fehlermeldung Argument list too long, wenn ich in
einem Verzeichnis mit sehr vielen Dateien mit rm * versuche, alle
Dateien zu löschen.

Im Linuxkernel gibt es eine Beschränkung für die Länge der
Kommandozeile, bei rm * ersetzt die shell den * durch die Dateinamen
und ruft rm mit dieser langen Liste als Argument auf.
Es gibt mehrere Lösungsmöglichkeiten dafür:
  * Eine Schleife: for i in *; do rm "$i"; done
    Hier wird der * von der Shell intern aufgelöst und rm für jede
    einzelne Datei separat aufgerufen (langsam!).
    Wichtig sind die doppelten Anführungszeichen um $i, sonst würde rm
    Dateinamen mit beispielsweise Leerzeichen für zwei kurze
    Dateinamen halten, probiere es mal aus:
    touch "mit Leerzeichen"; rm mit Leerzeichen
  * Die schnellste, bitte nicht erschrecken:
    find ./ -type f -maxdepth 1 -print0 | xargs -r0 rm
    find ./ -maxdepth 1 -mindepth 1 -name ".*" -or -print0 | xargs -r0
    rm
    find sucht im aktuellen Arbeitsverzeichnis (./), steigt nicht in
    Unterverzeichnisse ab, um dort weiterzusuchen (-maxdepth 1),
    ignoriert aber "./" selbst (-mindepth 1), versteckte Dateien, d.h.
    die welche einen Punkt als erstes Zeichen im Dateinamen haben,
    werden ignoriert -name ".*", die Namen der anderen werden auf
    Stdout ausgegeben, dabei werden die einzelnen Dateinamen durch ein
    "null character" getrennt (-or -print0).
    xargs liest diese Liste auf Stdin, teilt sie in gerade so große
    Teile, dass die Kommandozeile nicht zu lang wird, und ruft dann
    jedesmal rm mit diesen kurz genugen Teillisten als Argument auf.
    -r steht für --no-run-if-empty und erspart uns eine Fehlermeldung,
    wenn das Verzeichnis leer wäre und find keine Dateien fände. Sonst
    würde nämlich xargs rm einmal ohne Argumente aufrufen.
    -print0 und -0 sind wieder nötig, um auch Dateinamen mit
    Leerzeichen korrekt zu behandeln, sonst würde xargs auch bei
    Leerzeichen splitten. Diese Lösung ist nicht portabel, d.h. sie
    läuft praktisch nur mit GNU-find und -xargs, wie es bei
    Linuxsysteme üblicherweise Verwendung findet. Die Implementationen
    von find auf anderen unixartigen Systemen verstehen diese Optionen
    meist nicht, und man muss eine der anderen hier aufgeführten
    Lösungen verwenden.
  * find ... -or -exec rm '{}' ';' find findet wieder dieselben
    Dateien wie oben, anstatt aber deren Namen auszugeben, ruft es
    wieder für jede einzelne Datei einmal rm auf. ({} wird jeweils
    durch den Namen der Datei ersetzt, das Semikolon kennzeichnet für
    find das Ende des Kommandos. Beides sind auch für die Shell
    Zeichen mit besonderer Bedeutung und müssen daher mit
    Anführungszeichen oder Backslash vor dieser "geschützt" werden.)
  * find ... -or -exec rm '{}' + Nur der Vollständigkeit erwähnt,
    funktioniert nicht mit GNU find, ist so schnell wie find ... |
    xargs ..., d.h. es wird nicht für jede Datei ein neues rm
    gestartet. Diese Syntax ist im Standard Single UNIX Specification
    Version 3 <http://www.UNIX-systems.org/version3/> (bzw.
    IEEE-1003.1-200x) spezifiziert und schon sehr lange bei Solaris
    und UnixWare verfügbar.

Lesehinweise: Die Dokumentation zu find im info-Format, das BASH
Programming - Introduction HOWTO, die Newsgroup de.comp.os.unix.shell,
http://www.heise.de/ix/artikel/2001/07/164/
<http://www.heise.de/ix/artikel/2001/07/164/>.

2.37 Wie kann ich bestimmten Benutzern Schreibzugriff auf gemountete
Windowspartitionen gewähren?

Erstelle einen neue Gruppe und mache die entsprechenden User (im
folgenden Beispiel "ich" und "sonstwer") zu Mitgliedern dieser Gruppe
(mit groupadd, addgroup, adduser, usermod, YaST, linuxconf, etc.). -
Bei Debian geht das so:
groupadd winwrite
adduser ich winwrite
adduser sonstwer winwrite
Jetzt brauchst du die GID der neuen Gruppe.
grep winwrite /etc/group
winwrite:x:4711:ich,sonstwer
Die GID ist die Zahl in der Mitte, also 4711. Füge jetzt in /etc/fstab
die Mountoptionen gid=4711,umask=002 ein (direkt durch Editieren oder
mit dem Administrationsprogramm deiner Distribution (YaST, linuxconf,
etc.), um den Schreibzugriff zu ermöglichen,
/dev/hda1 /mnt/win vfat rw,gid=4711,umask=002 0 0
Das erlaubt den Usern in der Gruppe winwrite (und root) Schreib- und
Lesezugriff, allen anderen nur Lesezugriff. Mit mount -o remount
/mnt/win treten die Änderungen in Kraft.
Lesetipps: mount (8), umask (2) und fstab (5).

2.38 Wie kann ich den Speicherbedarf eines Verzeichnisses
einschließlich der Unterverzeichnisse abfragen? Wie viel freier Platz
ist auf der Festplatte noch verfügbar?

Mit dem Kommando du -sxh Verzeichnisname kannst du einfach die gesamte
Größe eines Verzeichnisbaums herausfinden. -s sorgt dafür, dass nur
der insgesamt verwendete Speicherplatz angeführt wird, anstatt alle
Unterverzeichnisse einzeln aufzuführen, -h fordert Angabe der Größe in
leichter lesbaren Einheiten (Megabyte oder Kilobyte statt Byte) an. -x
bewirkt, dass unter dem Verzeichnis gemountete andere Dateisysteme
nicht mitgezählt werden.

Das Kommando df liefert Informationen über belegten und freien Platz.

2.39 Mein Bildschirm wird auf Console nach einiger Zeit schwarz. Wie
schalte ich das ab?

Für die Console gibt es das Tool setterm. Ein Aufruf von setterm
-blank 0 verhindert, dass das Monitorbild deaktiviert wird. Um die
Energiespar-Funktionen des Monitors zu nutzen sind die Parameter
powersave und powerdown zu verwenden.

2.40 Ich habe ein Skript geschrieben, das direkt aufgerufen tadellos
funktioniert, aber nicht wenn ich es als cronjob starte.

Das liegt höchstwahrscheinlich daran, dass für cronjobs der
Standardsuchpfad (PATH) auf einen anderen Wert gesetzt ist, z.B. ist
/sbin/ nicht inkludiert. Rufe die Kommandos entweder mit vollem Pfad
auf oder setze am Beginn der crontab PATH richtig.

2.41 Was bedeutet es, wenn "ps" einen Prozess als "<defunct>" anzeigt?

Es handelt sich um einen sogenannten Zombie. Die Dokumentation der
meisten unix-ähnlichen Systeme bietet dazu als Erklärung an:
"dead, but parent is not waiting"
Um das schlüssig zu erklären, muss man wohl etwas weiter ausholen. Bei
der Prozess-Verwaltung gibt es für jeden Prozess einen Eintrag in der
Prozesstabelle, in dem bestimmte Daten zur Prozessverwaltung abgelegt
werden. Wird der Prozess beendet, werden diese Daten wieder frei
gegeben. Allerdings würden mit dem Freigeben des Eintrags in der
Prozesstabelle auch Informationen wie der "Exit-Status" des Prozesses
unwiderbringlich verlorengehen, und möglicherweise möchte der Parent-
Prozess genau diese Information ja noch weiter benutzen.

Um dieses Problem zu lösen, hat man sich folgendes ausgedacht: Der
Eintrag in der Prozesstabelle wird eben nicht sofort nach Beendigung
des Prozesses freigegeben, sondern erst, wenn der Parent sich diese
Informationen abgeholt hat. Dies tut er duch Aufruf der Systemfunktion
wait(). Solange also der Parent (Elternprozess) nicht wait()
aufgerufen hat, um den Exit-Code des Kindprozesses abzuholen, gibt das
System den Eintrag in der Prozesstabelle noch nicht frei. Prozesse in
diesem Zustand (sie laufen nicht mehr, sind aber noch in der
Prozesstabelle verzeichnet) nennt man Zombies, und diese Prozesse
werden in der Ausgabe von "ps" als "<defunct>" markiert.

Eine Schlussfolgerung aus dem bisher gesagten ist, dass jeder Prozess,
der sich beendet für kurze Zeit zum Zombie wird (genau so lange, bis
der Eltern-Prozess wait() aufgerufen hat). Normalerweise sollte ein
Prozess aber nur sehr kurz in diesem Status verbleiben. Bleibt ein
Prozess länger in diesem Zustand, liegt meistens ein Programmierfehler
vor (in aller Regel beim Eltern-Prozess).

2.42 Wie kille ich einen Zombie?

Die Antwort darauf kann nach der obigen Erklärung eigentlich nur
lauten "gar nicht, weil er schon tot ist". Die Frage zielt aber
meistens auf etwas anderes hin: Wie beseitigt man den Eintrag in der
Prozesstabelle? Dieses Problem würde sich von selbst erledigen, wenn
der Elternprozess einmal wait() aufrufen wuerde, um den Exit-Status
des Zombies abzuholen (und eigentlich ist nur der Elternprozess dazu
in der Lage). Wenn der Elternprozess aber diese Systemfunktion nicht
aufruft (Stichwort: "Rabeneltern, die sich nicht mehr um die Kinder
kümmern"), wird man diesen Prozess erst einmal nicht los ... ... bis
sich der Elternprozess beendet.

Damit "erbt" nun nämlich der Prozess "init" (der Prozess, der beim
Systemstart als erstes gestartet wird, mit der Prozess-ID 1) diesen
Prozess, und der hat kaum etwas anderes zu tun, als auf seine Kinder
zu warten, "init" wird dann also diesen Prozess abräumen. Damit hat
man nun bereits eine Methode gefunden, um Zombies los zu werden: Man
killt ihre Eltern.

2.43 Ich möchte das Dateisystem meiner Linuxpartition wechseln und
z.B. von ext2 auf ReiserFS umsteigen. Kann ich da irgendwie direkt
konvertieren?

Nein. Die gängigen Dateisysteme für Linux (ext2, xfs, ReiserFS, ...)
unterscheiden sich in ihrer internen Struktur so stark, dass ein
direktes Konvertieren nicht möglich ist. (Und wenn schon, würde man es
nicht ohne aktuelles, getestetes Backup probieren wollen.)

Es bleibt daher die klassische universelle Methode: Backup, neues
Dateisystem erstellen, Daten wieder aufspielen. Siehe Hard Disk
Upgrade Mini How-To
<http://www.tldp.org/HOWTO/mini/Hard-Disk-Upgrade/>

Nur zwischen ext2 und ext3 kann man mit tune2fs -j bzw. tune2fs -O
^has_journal hin und her konvertieren.

2.44 Wie kann ich verhindern, dass die Benutzer ihr Homeverzeichnis
verlassen können?

Beim Zugriff über ftp ist das ganz einfach, konsultiere die
Dokumentation deines ftp-Daemons und suche nach chroot.
chroot für lokales Login oder Anmeldung mit ssh erfordert, dass du
alle Programme, die der User verwenden können soll, sowie deren
Konfigurations- (/etc) und andere Daten (/usr/share) und zusätzlich
natürlich auch die benötigten dynamischen Bibliotheken(/lib, /usr/lib)
in sein Homeverzeichnis packen musst. Das ist so aufwendig, wie es
sich anhört, und sprengt daher den Umfang dieser FAQ. Dieser Aufwand
macht nur in Spezialfällen Sinn z.B., wenn man beim login über ssh nur
einen extrem reduzierten Kommandoumfang zur Verfügung stellen möchte.

2.45 Ich brauche ein Shellskript, das ...? Kennt jemand eine
Einführung in die Shell-Skriptprogrammierung?

Shell-Skripting ist nicht Linux-spezifisch, und es gibt sogar eine
eigene Newsgroup dafür, de.comp.os.unix.shell, stelle Detailfragen
bitte dort.

Im WWW finden sich eine ganze Reihe Einführungen in
Shellprogrammierung, die bekanntesten dürften wohl Kristian Koehntopps
UNIX Shellprogrammierung
<http://www.koehntopp.de/kris/artikel/unix/shellprogrammierung/> und
BASH Programming - Introduction HOW-TO
<http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html> sein. Eine
Suche nach "Shellprogrammierung Einführung" liefert weitere.

2.46 Ich möchte eine Datei, deren Namen mit ".bin" endet, entpacken
oder verwenden.

Es sind zwei grundsätzlich verschiedene Typen von bin-Dateien üblich:
  * Selbstentpackende Archive, z.B. Sun Java. file blah.bin wird die
    Datei als "Bourne shell script text executable" identifizieren.
    Die Datei wird einfach ausgeführt, d.h. chmod +x blah.bin ;
    ./blah.bin, wie auch der beiliegenden Dokumentation zu entnehmen
    wäre.
  * Der Datenteil eines bin/cue CD-Images. Wenn die zugehörige
    cue-Datei vorhanden ist, kann man das Image mit cdrecord oder
    cdrdao auf eine CD-ROM brennen oder mit bchunk wandeln. Sonst wird
    es schwieriger, bin2iso <http://users.andara.com/~doiron/bin2iso/>
    versucht ein passendes cue-Sheet zu generieren. Handelt es sich um
    ein (S)VCD-Image, kann man es mit MPlayer
    <http://www.mplayerhq.hu/> abspielen oder mit VCDGrab
    <http://vcdgrab.sourceforge.net/> dem MPEG-Teil extrahieren.
  _________________________________________________________________

Build: 23.05.2004
