Finden!
Meine Textbestände sind eher chaotisch sortiert. Kann ich unter Linux große Textbestände nach bestimmten Dateien durchsuchen? Und wie lassen sich Textstellen in Dateien anzeigen?
Dr. Linux: Das Kommando find kann nach bestimmten Dateien suchen. Je nach Pfadangabe durchsucht es Verzeichnisse einschließlich der Unterverzeichnisse. find ist sehr mächtig; es gibt Optionen, die beinahe Alles und Jedes abdecken. Dementsprechend umfangreich ist auch die Manpage. Zum Glück braucht man nicht ständig alles, sondern kommt schon mit ein paar Optionen gut um die Runden. Wenn der Name der gesuchten Datei bekannt ist, kann das Kommando find -name eingesetzt werden.
user$ find -name Leuchtkeks
findet die Datei Leuchtkeks im aktuellen Verzeichnis und in dessen Unterverzeichnissen. Dies bedeutet, dass Sie zunächst in das Verzeichnis wechseln müssen, in dem die Datei gesucht werden soll.
user$ find / -name Leuchtkeks
durchsucht alle Verzeichnisse und Unterverzeichnisse nach Leuchtkeks. / steht für das Wurzelverzeichnis. In Verbindung mit dieser Angabe wird find sämtliche Verzeichnisse und Unterverzeichnisse nach der Datei durchsuchen. Das Kommando find / sollte deshalb nicht in Netzwerken eingesetzt werden, da es ein System zu stark belasten kann.
user$ find ~ -name ´*zip´
listet alle Dateien im Homeverzeichnis und untergeordneten Verzeichnissen auf, an deren Namensende sich die Buchstaben zip befinden. Mit dem Jokerzeichen ~ können Sie sich die Pfadangabe für Ihr Home-Directory ersparen, es wird geradewegs durch /home/Ihr_Name
(oder wie Ihr Heimatverzeichnis auch immer heißt) ersetzt.
user$ find ~ -name ´*zip*´
zeigt alle Dateien im Homeverzeichnis auf, in deren Namen das Suchmuster zip vorkommt. Dieser Befehl listet als Ergebnis sowohl .zip-Archive auf, als auch Dateien wie beispielsweise bzip2recover, ziptool oder zipfelmütze. Sollten Sie ein DOS- oder Windowsverzeichnis in ihrem System gemountet haben, können Sie gezielt Dateien in diesen Verzeichnissen finden, wenn sie -fstype vfat bzw. -fstype msdos als Option mit find verwenden.
user$ find / -fstype msdos -name *.zip
listet beispielsweise nur .zip-Dateien auf, die sich auf einer MS-DOS-Partition befinden.
user$ find / -fstype vfat -name *.txt
hingegen führt nur .txt-Dateien von einer Windows-Partition auf.
Die Eingabe man find liefert auf mehr als zehn Seiten einen Blick über weitere Möglichkeiten von find. Wenn Ihnen die Kommandozeile noch nicht ganz geheuer ist und Sie mit KDE arbeiten, können Sie für Ihre Sucherei auch das Programm kfind benutzen. Es befindet sich in der Menüleiste und lässt sich mit dem Eintrag Dateien suchen aufrufen.
Um Textstellen oder Stichworte im aktuellen Verzeichnis zu finden, bietet sich das Kommando grep (engl.: "get regular expression pattern") an.
user$ grep Gartenzwerg *.tex
listet beispielsweise alle Zeilen aus .tex-Dateien im aktuellen Verzeichnis auf, die das Suchmuster Gartenzwerg enthalten.
user$ grep -l Gartenzwerg *.txt
spuckt hingegen die Namen aller .txt-Dateien im aktuellen Verzeichnis aus, die das Wort Gartenzwerg enthalten. Es muss aber nicht immer gleich ein ganzes Bündel Dateien sein:
user$ grep "Overkill" Gartenzwerg.txt
führt alle Zeilen mit dem Suchmuster Overkill in der Datei Gartenzwerg.txt auf. man grep gibt einen Überblick, welche Optionen wie mit grep eingesetzt werden können.
Kill and go!
Wenn ein Programm oder die Konsole hängen bleibt, muss ich dann einen Neustart des Systems durchführen?
Dr. Linux: Nein, mit dem Betriebssystem Linux ist ein Reset nicht nötig. Ganz im Gegenteil sollte ein Drücken der Reset-Taste immer vermieden werden, denn es kann zu Datenverlusten führen. Erste Hilfe in einem solchen Fall ist das Drücken der Tastenkombination Ctrl-C alias Strg-C: Die meisten Befehle/Kommandos lassen sich damit abbrechen. Eine ganze Reihe Programme fangen diese Tastenkombination allerdings ab, insbesondere, wenn sie selbst etwas anderes mit diesem Shortcut vorhaben. In diesem Fall hilft der Befehl kill. Er wird zusammen mit einer Prozess-ID (PID) eingesetzt. Eine solche wird an jeden Prozess vergeben.
Falls nötig, ist zunächst ein Wechsel der Konsole mit Alt-F1(F2...F6) angebracht. Benutzer des X-Window-Systems können ihre grafische Oberfläche durch die Tastenkombination Strg-Alt-F1 (F2...F6) ebenfalls verlassen. Auf der unblockierten Konsole setzen Sie das Kommando ps ("Prozess-Status") ab. Diese Eingabe erzeugt eine Tabelle:
user$ ps PID TTY STAT TIME COMMAND 170 4 S 0:00 login -- userinnen 479 1 S 0:00 grep Leuchtkeks 480 4 R 0:00 ps
Der Befehl, der zum Stillstand des Terminals geführt hat, wird leicht an seinem Eingabekommando in der Spalte COMMAND erkannt, es handelt sich in diesem Beispiel um eine unvollständige grep-Eingabe. Er befindet sich auf Konsole 1 (TTY) und hat die Prozess-ID (PID) 479. Die Eingabe
user$ kill 479
terminiert den Prozess, und nachdem Sie mit Alt-F1 (F2...F6) auf die Konsole (resp. TTY – "Teletype Terminal", ein Begriff aus der Großrechnerzeit) zurückgeschaltet haben, ist das Terminal wieder voll einsatzfähig. Sollte die Eingabe von kill PID
nichts bewirkt haben (nachzuprüfen mit einem neuen ps in der Spalte STAT), so ist die Eingabe von kill -9 PID
tödlich für alle Prozesse. STAT zeigt den Prozessstatus an:
- S = schlafend
- R = running (laufend)
- T = terminiert
- Z = Zombie
ps kann mit verschiedenen Optionen eingesetzt werden:
ps alistet alle aktiven Prozesse auf.ps xweitet die Auflistung auf Prozesse aus, die mit keinem Terminal verbunden sind.ps uerweitert die Ausgabe um den Benutzernamen und die Startzeit.- Wenn Sie diese Optionen spannend finden, probieren Sie doch auch noch
ps f, das die Prozessfamilien als Bäume darstellt.
Die Optionen können auch alle gleichzeitig eingegeben werden. Allerdings wirkt ps aux auf Einsteiger zunächst recht unübersichtlich. Wer mit einer grafischen Oberfläche arbeitet, kann sich zum "Abschießen" eines hartnäckigen Programms auch des Kommandos xkill, eingegeben in einer Befehlszeile, bedienen. Der Cursor wandelt sich in ein Zielkreuz, mit dem das bockige Fenster "um die Ecke gebracht" werden kann. Allerdings ist xkill mit Vorsicht anzuwenden; es besteht bei unvorsichtigem Einsatz die Gefahr des Verlusts ungesicherter Daten.



