Tutorium: Bash: Umgang mit Dateien und Verzeichnissen (Grundlagen: 2.Teil)


Nun ist es endlich auch mal wieder an der Zeit für mich, ein weiteres Tutorium zur Bash zu schreiben. Da das letzte nun schon eine Weile zurück liegt, hier noch einmal die Links zum erstem, zweitem und drittem Tutorium.
Im letztem Tutorium haben wir uns ja bereits mit den grundlegenden Befehlen im Umgang mit Dateien und Verzeichnissen befasst, was wir nun vertiefen wollen, indem wir uns u.a. den Umgang mit Jokerzeichen ansehen werden. Zuvor werden wir uns jedoch auch noch einige weitere Grundlagen im Hinblick auf Dateien und Verzeichnisse unter Linux und insbesondere auf der Bash aneigenen.
Zunächst ist hierbei nämlich einmal eindeutig festzuhalten, dass Linux, anders als z.B. Windows bei Datei- und Verzeichnisnamen Groß- und Kleinschreibung unterscheidet. Wenn wir uns also nun im Verzeichnis /home/Benutzer befinden, so können wir dort problemlos die Dateien Test, test, TEST und tESt haben. Für Linux sind dies alles unterschiedliche Dateien, da es wie gesagt Groß- und Kleinschreibung streng unterscheidet.
Dies bedeutet für uns natürlich auch, dass wir bei der Arbeit mit Dateien auf der Bash ganz genau auf die Groß- und Kleinschreibung achten müssen, da die Bash die Datei Test nicht findet, wenn wir stattdessen test geschrieben haben und wir insofern hier dann nur eine Fehlermeldung erhalten.
Davon abgesehen sollten wir es natürlich aus Gründen der Übersichtlichkeit vermeiden, Dateien wie im obigen Beispiel in dem selbem Verzeichnis zu haben.


Und wo wir gerade bei Dingen sind, die es zu vermeiden gilt bei der Wahl der Dateinamen. Auch auf Sonderzeichen jeglicher Art, insbesondere auf ß oder Umlaute (ä,ö,ü) sollte im Interesse einer einfacheren Arbeit und vor allem auch im Interesse einer Plattformunabhängigkeit verzichtet werden.
Darüber hinaus gilt es aber auch Leerzeichen in Datei- und Verzeichnisnamen zu vermeiden, da diese einem das Leben auf der Bash nur unnötig erschweren. Hierzu sollte man nun wissen, dass die Bash ein Leerzeichen normalerweise als einen Trenner zwischen zwei Argumenten betrachtet. Wenn wir also nun die Datei zweiter Test.odt haben und diese so auf der Bash eingeben, wird die Bash nicht nach dieser Datei suchen sondern vielmehr nach der Datei zweiter und nach der Datei Test.odt und uns insofern eine Fehlermeldung liefern. Dieses Problem lässt sich zwar lösen (dazu weiter unten mehr), besonders elegant ist es jedoch nicht. Insofern sollten wir es lieber gleich vermeiden, indem wir Binde- oder Unterstriche statt eines Leerzeichens verwenden.
Außerdem sollten wir es auch unbedingt vermeiden Zeichen in Dateinamen zu verwenden, die für die Bash eine besondere Bedeutung haben, wie z.B. Jokerzeichen, von denen wir nun gleich, zum Einstieg, zwei kennen lernen werden.


Ein Jokerzeichen der Bash ist z.B. das Fragezeichen ?. Es steht für genau ein beliebiges Zeichen. Ein rm -f /home/Benutzer/ros?.odt würde folglich z.B. die Dateien rose.odt, rosa.odt, rost.odt oder auch ros3.odt löschen. Eine eventuell vorhandene Datei ros?.odt würde davon natürlich auch erfasst werden.
Aber was wenn wir nun nur ros?.odt löschen wollen?
Nun dafür müssen wir das Jokerzeichen ? auskommentieren, so dass es von der Bash nicht aufgelöst wird sondern einfach ganz normal an den Befehl übergeben wird.
Um nun ein Jokerzeichen, oder aber auch jedes andere Zeichen, dass für die Shell eine besondere Bedeutung hat und nun dummerweise in unserem Dateinamen auftaucht auszukommentieren verwenden wir den Backslash \.
Wenn wir also nun nur die Datei ros?.odt mit dem rm-Befehl löschen wollen, müssen wir rm ./ros\?.odt schreiben.
Auf diese Weise lösen wir im Übrigen auch unser obriges Problem. Wir müssten dort also zweiter\ Test.odt schreiben. Hierbei gilt es jedoch zu beachten, dass der Backslash immer nur das jeweils nächste Zeichen auskommentiert und somit unverändert an die Bash übergibt. Wenn wir also nun die Datei ros? zwei.odt hätten, müssten wir hier folglich ros\?\ zwei.odt schreiben.
Zu allem Überfluß wird es noch komplexer, wenn der Backslash auch noch Bestandteil des Dateinamens ist. Denn dann muss der Backslash selbst auskommentiert werden, da er ja für die Bash eine besondere Bedeutung hat. Um also nun den Dateinamen Beispiel\Test.txt an die Bash zu übergeben müssen wir auf der Kommandozeile ein Beispiel\\Test.txt eingeben. Hierbei bewirkt der erste Backslash, dass die besondere Bedeutung des folgenden Backslash ignoriert wird und dieser vielmehr unverändert an den Befehl, z.B. rm übergeben wird.


Wie wir sehen können Datei- und Verzeichnisnamen mit Sonderzeichen auf der Kommandozeile sehr schnell doch recht komplex zu handhaben werden, weshalb wir wirklich alles tuen sollten, um diese zu vermeiden.
Doch nun wollen wir uns zunächst einmal noch einem anderem Sonderzeichen der Shell zuwenden, dem *. Dieses bedeutet eine beliebige Menge an beliebigen Zeichen.
Ein rm /home/Benutzer/Test/* würde insofern alle Dateien im Verzeichnis /home/Benutzer/Test löschen. Das Sternchen ist insofern also ein unheimlich mächtiges Sonderzeichen der Shell, mit dem man absolut vorsichtig umgehen sollte und das man niemals unbedarft verwenden sollte.
Insbesondere als Anfänger auf der Kommandozeile sollten wir also vom Sternchen lieber die Finger lassen. Es ist einfach gesünder für unser System.
Hier gilt es auch für erfahrenere PC-Benutzer zu berücksichtigen, dass Linux hier von der Syntax von MS DOS abweicht. Ein * auf der Kommandozeile unter Linux hat die selbe Bedeutung wie ein *.* unter MS DOS.

Dies soll für heute ersteinmal genügen. Es bleibt jedoch festzuhalten, dass wir uns mit den Sonderzeichen der Bash vertraut machen sollten, indem wir uns hierzu ein Testverzeichnis anlegen. Auch sollten wir die Verwendung von Sonderzeichen in Datei- und/oder Verzeichnisnamen unbedingt vermeiden.
Auch gilt es zunächst Sonderzeichen niemals als Root zu verwenden solange uns nicht absolut klar ist, was sie bewirken. Insbesondere sind Sonderzeichen der Shell bei einem rm -f zu vermeiden, da dieser Befehl ohne weitere Rückfrage das Löschen erzwingt. Und rm löscht wirklich! Hier wird also nichts in den Papierkorb verschoben. Vielmehr wird hier wirklich und direkt gelöscht.

Diese Warnungen sollten uns jedoch nicht abhalten. Wie immer heißt es interessiert hineinstürzen, Man-Pages lesen und Erfahrungen sammeln.
In meinem nächsten Tutorium zur Bash möchte ich mich dann dem SMART-System zuwenden und zeigen, wie man mit Bordmitteln erkennen kann, wann eine Festplatte auszufallen droht.

Ähnliche Artikel

No Comments

Leave a Reply

Your email is never shared.Required fields are marked *