Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, wo es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
Weg mit dem Datenmüll – in dieser Folge geht es um die Befehle rm (für englisch remove: etwas wegnehmen, entfernen) und rmdir (für remove directory: ein Verzeichnis entfernen). Um den Frühjahrsputz, der in der letzten “Zu Befehl”-Folge angekündigt wurde, komplett zu machen, lernen Sie heute einige Tricks und Kniffe zum Löschen von Dateien und Verzeichnissen.
Sind Sie sich sicher…?
Normalerweise führt der Aufruf rm datei prompt zum gewünschten Ergebnis. Ohne den Benutzer wieder und wieder zu fragen, ob er die Datei wirklich löschen will, tut Linux das, was man ihm sagt. Unix-typisch gilt: Weg ist weg – einmal gelöschte Daten sind futsch. Möchte man daher doch lieber die Frage rm: remove `datei'? haben, hängt man an das rm einfach die Option -i dran. Wiederholung aus der letzten Folge: Statt -i kann man die lange Form --interactive verwenden und sich überlegen, ob man das Kommando in dieser Art als Alias aufnimmt (alias rm="rm -i"). Und auch hier gilt wieder: Vorsicht, wenn Sie an einem fremden System ohne die Neudefinitionen von Standardkommandos arbeiten!
Und wann fragt das System von selbst nach? Wenn es sich um als read only gekennzeichnete Dateien handelt.
huhn@huehnerstall ~ > rm datei rm: remove `datei', overriding mode 0400?
Wenn alle diese “lästigen” Abfragen aber einmal nicht gewünscht sein sollten, kann man sie mit der Erweiterung rm -f (--force) umgehen. Diese Option hebt die Wirkung des --interactive-Flags und des Schreibschutzes für Dateien auf und ist mit Vorsicht zu genießen.
Das große Reinemachen
Falls es einmal um ganze Verzeichnisse geht, die verschwinden sollen, kommt die Option -r für --recursive ins Spiel. Mit diesem Kommando putzen Sie rekursiv bis in den letzten Winkel das Verzeichnis samt aller Unterverzeichnisse leer. Ein rm -rf / von root ausgeführt heißt also nicht “read mail really fast”, sondern entsorgt kurzerhand und sehr sorgfältig das komplette System.
Wem dies zu riskant ist, verwendet statt rm -r das Kommando rmdir (remove directory). Dieser Befehl löscht nur leere Verzeichnisse. Sollten sich also einmal Dateien versteckt halten, wird man gewarnt: rmdir: verzeichnis: Directory not empty.
Sonderzeichen? – Kein Problem!
Einmal im Editor nicht aufgepasst, und schon ist es passiert: Man hat eine Datei mit einem falschen Namen angelegt, die jetzt statt recht.txt z. B. -recht.txt heißt. Dieser kleine Bindestrich kann für echte Verwirrung sorgen, wenn man das File wieder loswerden möchte. Sowohl rm als auch rm -f können mit dem Dateinamen scheinbar nichts anfangen:
huhn@huehnerstall ~ > rm -recht.txt rm: invalid option -- e Try `rm --help' for more information.
Das rm-Kommando interpretiert das -r und kann mit dem Rest (echt.txt) nichts anfangen, denn es ist durchaus möglich, mehrere sinnvolle Parameter miteinander zu kombinieren (also z. B. rm -rf verzeichnis als Kurzform von rm -r -f verzeichnis) – das e ist keiner davon. Kein Grund zu verzweifeln, es gibt zwei Möglichkeiten, eine solche Datei zu löschen. Ein rm ./-recht.txt (also eine Angabe relativ zum aktuellen Verzeichnis “.”) sorgt dafür, dass der Dateiname nicht als Optionsliste interpretiert wird.
Eine elegantere Lösung ist eine spezielle Option für die GNU-Utilities mit dem doppelten Bindestrich: -- sorgt dafür, dass alles nach diesen zwei Bindestrichen nicht mehr als Parameter, sondern als Argument (also Gegenstand der Operation) aufgefasst wird. In diesem Fall tippt man also rm -- -recht.txt. Beide Möglichkeiten beschränken sich natürlich nicht auf den Befehl rm, sondern sind auch mit anderen Kommandos, z. B. mv und cp, anwendbar.
Der Bindestrich am Anfang von Dateinamen ist aber nicht der einzige Stolperstein. Versuchen Sie mal, eine Datei namens file with space zu löschen:
huhn@huehnerstall ~ > rm file with space rm: file: No such file or directory rm: with: No such file or directory rm: space: No such file or directory
Die Leerzeichen im Dateinamen kann man umgehen, indem man den Namen in “Anführungszeichen” setzt oder einen Backslash \ vor jeden Space setzt, also entweder rm "file with space" oder rm file\ with\ space.
Wo ist denn der Schlusssatz hin? Habe ich den vielleicht gelöscht? Wie man nach Dateien oder Zeichenketten sucht, wird in der nächsten Folge gezeigt: Es geht um grep und find! (hge)
Glossar
-
read only
-
Über Rechte von Dateien wurde schon einmal berichtet: r steht für read (lesen), w für write (schreiben) und x für execute (ausführen). Eine Datei versieht man mit einem Schreibschutz, wenn man sie vor unbeabsichtigtem Überschreiben oder Löschen schützen möchte, also chmod a-w datei. Dieser Aufruf entfernt alle eventuell vorhandenen Schreibrechte der Datei – das a steht hier für all (also user, group und other). Alles, was mit Dateirechten und -besitzern, also den Befehlen chmod und chown, zu tun hat, wird noch einmal Gegenstand einer eigenen Folge sein.
-
GNU-Utilities
-
Das GNU-Projekt setzte sich zum Ziel, ein freies Unix-artiges Betriebssystem zu schaffen und begann damit, all die Kommandozeilenbefehle zu implementieren, die man zum sinnvollen Arbeiten braucht. Zusammen mit dem Linux-Betriebssystemkern (dem “Kernel”) bilden diese GNU-Utilities die Grundlage aller Linux-Distributionen, man setzt sie aber auch gern mit anderen Betriebssystemen ein. Das rekursive (“selbstbezügliche”) Akronym GNU steht übrigens für “GNU is Not UNIX” und distanziert sich damit vom Ur-UNIX von AT&T.





