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

2. Allgemeine Linux-Fragen

  1. Ich bekomme beim Compilieren die Meldung, es sei ein Signal 11 aufgetreten. Was bedeutet das?
  2. Ich habe mir ein kleines Testprogramm compiliert, aber wenn ich es aufrufe, passiert gar nichts. Warum?
  3. Warum kann ich ein Programm als normaler User starten, aber nicht als root?
  4. Welche Libc-Version ist neuer: 5.4.4 oder 5.4.38?
  5. Warum kann ich mich nicht als root über telnet einloggen?
  6. Warum kann ich meine CD nicht mehr aus meinem CD-Laufwerk nehmen?
  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.
  8. Was bedeutet die Meldung /dev/hdaX has reached maximal mount count; check forced beim Booten?
  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.
  10. Wie kann ich ein ext2-Dateisystem defragmentieren?
  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?
  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.
  13. Wie kann ich auf der Kommandozeile (d.h. ohne X-basierte Programme verwenden zu müssen) ftp über einen Proxy benutzen?
  14. Bei Anleitungen zur Netzwerkkonfiguration findet man häufig Angaben wie 192.168.1.0/24. Was bedeutet das /24?
  15. Warum werden Textdateien im Querformat (jeweils 2 Seiten auf einem A4-Blatt) gedruckt und wie kann man das ändern?
  16. Wie kann ich auf meine DOS-formatierten Disketten zugreifen?
  17. Wie kann ich LILO wieder aus dem MBR entfernen?
  18. Wie kann ich auf meinen Streamer zugreifen?
  19. In /var/log/messages erscheint regelmäßig der Eintrag -- MARK --. Was hat das zu bedeuten?
  20. Wie ist das mit den Locales?
  21. Wie [lösche/verschiebe/bearbeite] ich Dateien, die mit - beginnen?
  22. Ich benötige die Datei foo.bar, welches Paket muss ich installieren?
  23. Wie kann ich mit einem Kommandozeilenprogramm Mails mit MIME-Attachment verschicken?
  24. Manchmal fängt die Festplatte aus heiterem Himmel an zu rattern - und erst nach einigen Minuten ist der Spuk wieder vorbei.
  25. Wie kann ich Audio-CDs mounten?
  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.
  27. Wie kann ich einem Netzwerkinterface mehrere IP-Adressen zuweisen?
  28. Ich habe mein Root-Passwort vergessen, wie komme wieder in mein System?
  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.
  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.
  31. Ich suche ein Notfall-Linux, das möglichst auf eine Diskette passen sollte.
  32. Wo kann ich ISO-Images von SuSE Linux herunterladen?
  33. Wie installiert man Programme aus dem Internet richtig? Alle meine Versuche mit ./configure, make, make install sind bisher gescheitert.
  34. Wie werde ich selbst kompilierte, mit make install installierte Software wieder sauber los.
  35. Wie kann ich verhindern, dass ich die Ausgabe bestimmter cronjobs per Mail zugestellt bekomme.
  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.
  37. Wie kann ich bestimmten Benutzern Schreibzugriff auf gemountete Windowspartitionen gewähren?
  38. Wie kann ich den Speicherbedarf eines Verzeichnisses einschließlich der Unterverzeichnisse abfragen? Wie viel freier Platz ist auf der Festplatte noch verfügbar?
  39. Mein Bildschirm wird auf Console nach einiger Zeit schwarz. Wie schalte ich das ab?
  40. Ich habe ein Skript geschrieben, das direkt aufgerufen tadellos funktioniert, aber nicht wenn ich es als cronjob starte.
  41. Was bedeutet es, wenn "ps" einen Prozess als "<defunct>" anzeigt?
  42. Wie kille ich einen Zombie?
  43. Ich möchte das Dateisystem meiner Linuxpartition wechseln und z.B. von ext2 auf ReiserFS umsteigen. Kann ich da irgendwie direkt konvertieren?
  44. Wie kann ich verhindern, dass die Benutzer ihr Homeverzeichnis verlassen können?
  45. Ich brauche ein Shellskript, das ...? Kennt jemand eine Einführung in die Shell-Skriptprogrammierung?
  46. Ich möchte eine Datei, deren Namen mit ".bin" endet, entpacken oder verwenden.
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 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 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 als auch solche zum digitalen Grabben (cdparanoia, cdrdao) direkt auf das Device zugreifen.

Sollte diese Antwort nicht überzeugend genug sein, bietet sich 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 "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 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: 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 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, graft oder depot, welche die Software in eigene separate Verzeichnisse ablegt.
  • Erzeuge Pakete im Paketformat deiner Distribution und installiere diese.
    Siehe RPM-HOWTO, Maximum RPM, Debian New Maintainers' Guide und Debian Policy Manual
    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 zeichnet auf, welche Dateien bei make install hinzugefügt werden.
  • 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 (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/.
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

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 und BASH Programming - Introduction HOW-TO 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 versucht ein passendes cue-Sheet zu generieren. Handelt es sich um ein (S)VCD-Image, kann man es mit MPlayer abspielen oder mit VCDGrab dem MPEG-Teil extrahieren.