bash – Arbeiten mit Dateien Tutorial Teil 7

Das Arbeiten mit Dateien ist eine der Hauptaufgaben innerhalb der bash. Die hier benutzen Kommandos liegen zwar im Dateisystem, sind für mich aber so elementar, dass sie eigentlich die eingebauten Kommandos erweitern.

bash Logo - Arbeiten mit Dateien
Dr. Dirk Colbry, Michigan State
Gnu-bash-logoCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
bash Logo, CC-BY-NC 4.0 Dr. Dirk Colbry, Michigan State University
1Einführung
2Der bash Prompt
3key bindings
4Der Startvorgang
5Environment Variablen
6builtin commands
7Arbeiten mit Dateien
8nano
9bash Scripting
10Variablen

Arbeiten mit Dateien und Verzeichnissen

Auch, wenn ich von Dateien und Verzeichnissen rede, ist für Linux alles eine Datei, egal, ob Datei, Verzeichnis oder Device „Everything is a file

Ich gehe im Weiteren davon aus, dass du auf dem Raspberry Pi als User pi eingeloggt bist und das aktuelle Verzeichnis /home/pi ist.

Verzeichnis anlegen

In deinen Homeverzeichnis gibst du

mkdir test

ein. Damit wird das Verzeichnis /home/pi/test angelegt. Das Verzeichnis test ist jetzt in deinem home Verzeichnis angelegt. Um dort hinein zu wechseln dient folgender Befehl

cd test

Mit pwd kannst du jederzeit überprüfen, in welchem Verzeichnis du dich aktuell befindest.

mkdir & cd
Olli Graf - raspithek.de
mkdirCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
mkdir und cd

Verzeichnis löschen

Ein leeres Verzeichnis (also eins, in dem sich keine weiteren Files befinden), benutzt du

rmdir test

Um ein komplettes Verzeichnis mit all seinem Inhalt zu löschen, ist

rm -r test

Durch den Parameter -r wird rekursiv der gesamte Inhalt von test mit gelöscht. Dabei solltest du dir aber immer bewusst sein, was du da tust! Gelöscht ist in der bash gelöscht!

Datei anlegen

Jetzt werden wir eine Datei mit Inhalt anlegen. Falls du das test Verzeichnis gelöscht haben solltest, legst du es wider an und benutzt es als Arbeitsverzeichnis.

mkdir test
cd test
echo "Textdatei" > test.txt

Das echo Kommando gibt normalerweise den Text auf der Console aus. mit > test.txt wird die Ausgabe in die Datei test.txt umgeleitet. Zum Thema Umleitungen erzähle ich dir später mehr.

Du hast jetzt die Datei test.txt angelegt. Den Inhalt kannst du dir wieder anzeigen lassen.

cat test.txt

Dateirechte

Eine Datei besteht nicht nur aus Name und Inhalt sondern auch aus Zugriffsrechten, mit denen du steuern kannst, weder wie mit einer Datei umgehen darf. Um diese anzuzeigen, musst du das ausführliche Listing des Verzeichnis abrufen.

ls -al
Inhalt des test Verzeichnisses mit der angelegten Datei test.txt
Olli Graf - raspithek.de
create-txt-fileCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Inhalt des test Verzeichnisses mit der angelegten Datei test.txt

Du siehst, die Datei test.txt existiert jetzt. Außerdem werden noch zwei Verzeichnisse . und .. aufgelistet. Diese stehen symbolisch für das aktuelle Verzeichnis (ein Punkt) und das überordnete oder Parent-Verzeichnis (zwei Punkte). Diese sind in einem einfach ls versteckt, da sie mit einem Punkt beginnen und sind in jedem Verzeichnis vorhanden. Mit ihnen kannst dadurch die Verzeichnishierarchie navigieren. Ein ls .. listet dir den Inhalt des übergeordneten Verzeichnis von test auf.

Ausgabe von ls .. - Inhalt des übergeordneten Verzeichnis von test
Olli Graf - raspithek.de
lsCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ausgabe von ls .. – Inhalt des übergeordneten Verzeichnis von test

Jetzt schauen wir uns die Ausgabe von ls -al mal etwas genauer an. In jeder Zeile werden mehrere Informationen zu einer Datei gegeben, die du verstehen solltest.

Aufschlüsselung der Dateiattribute bei ls -al
Olli Graf - raspithek.de
file-attributesCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Aufschlüsselung der Dateiattribute bei ls -al

Gehen wir die einzelnen Angaben mal durch.

Zugriffsrechte

Du kannst bei jeder Datei steuern, was andere User des Systems mit ihnen machen dürfen. Genaueres dazu findest du unten bei Zugriffsrechte ändern.

Die Dateien im Filesystem sind durch Links miteinander verknüpft. Auf jede Datei können mehrere solcher Links zeigen. Unsere neue Datei hat einen Zähler von 1, da sie nur auf sich selbst verlinkt ist. Das aktuelle Verzeichnis kommt auf 2, da sie zusätzlich vom übergeordneten Verzeichnis verlinkt ist. Letzteres hat einen Linkcounter von 18, weil die dort liegenden Verzeichnisse damit verlinkt sind.

In der Praxis habe ich diese Angabe noch nie wirklich benutzt oder beachtet.

User und Gruppe

Jede Datei gehört einem User und ist einer Gruppe zugeordnet.

Unsere test.txt Datei gehört hier natürlich dem User pi, da ich als User des gleichen Namens angelegt habe. Die Gruppe wird automatisch dem User entnommen, der die Datei anlegt. Diese Werte sind relevant für die Zugriffsrechte und können auch nachträglich geändert werden, wie, zeig ich die etwas weiter unten.

Dateigröße

Die Größe der Datei wird in Bytes angegeben. User Datei wird hier mit 10 Bytes ausgewiesen, obwohl das Wort „Testdatei“ nur 9 Zeichen hat. Das liegt daran, dass das echo noch einen Zeilenumbruch an der Ende gesetzt hat. Dieser wird dann mitgezählt.

Wenn du die Datei löscht und mit

echo -n "Textdatei" > test.txt

neu anlegst, wird der Zeilenumbruch unterdrückt und die Datei hat dann eine Größe von 9 Bytes.

Modifikationsdatum

Hier wird Datum und Zeit der letzten Änderung einer Datei angegeben. Standardmäßig ist dies meist der Zeitpunkt, an dem die Datei zuletzt geändert wurde.

Linux speichert zu jeder Datei drei Zeitstempel (Anlage, Änderung, Zugriff). Diese kannst du dir mit

stat test.txt

auch alle anzeigen lassen.

Ausgabe von stat test.txt mit den drei Zeitstempeln
Olli Graf - raspithek.de
stat-test-txtCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ausgabe von stat test.txt mit den drei Zeitstempeln

Das Anlagedatum mit „Geburt“ zu übersetzen, find ich niedlich. 🙂

Dateiname

Am Ende der Zeile steht der Dateiname, den du meistens selbst vergeben kannst. Dieser besteht meistens aus dem Namen und einer durch Punkt abgetrennten Endung. Diese Endung soll im Listing den Dateityp beschreiben, muss aber nicht zwingend mit dem Typ übereinstimmen. Nur Windows User denken, es gibt sowas wie eine HTML-Datei. Genaugenommen sind dies auch nur Textdateien mit dem MIME Typ „text/html“. Mit dem file Kommando kannst du dir den korrekten Dateityp anzeigen lassen.

Anzeige des Dateityps mit file
Olli Graf - raspithek.de
file-htmlCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Anzeige des Dateityps mit file

Zugriffsrechte ändern

Zum Arbeiten mit Dateien ist es häufig notwendig, die Zugriffsrechte zu ändern. Die Nutzer des Systems sind in drei Kategorien unterteilt

  • „User“ – dies bist du selbst
  • „Gruppe“ – alle User die, in deiner Gruppe sind
  • „Andere“ – alle anderen, die nicht in die ersten beiden Kategorien fallen.

Für jede Kategorie gibt es pro Datei drei Zugriffsrechte

  • Lesen – Datei darf angezeigt werden
  • Schreiben – Datei darf verändert werden
  • Ausführen – Programmdatei darf ausgeführt werden oder Verzeichnis darf angezeigt werden.

Diese werden von ls -l mit „r“, „w“ und „x“ (engl. für read,write und execute), angezeigt.

Unsere Testdatei hat die Zugriffsrechte „-rw-r--r--„. Von links nach rechts gelesen heißt das: Der Benutzer darf nicht ausführen, aber Lesen und Ändern „-rw„, Gruppenmitglieder dürfen nicht Ausführen und nicht Ändern, aber Lesen „-r-„, Alle anderen dürfen nur lesen “ -r-„.

Mit dem chmod Kommando (change modification) kannst du die Zugriffsrechte verändern. Um, der Kategorie „Andere“ den Lesezugriff zu entziehen, benutzt du

chmod o-r

Dazu kannst du mit

chmod g+w

den Gruppenmitgliedern den Schreibzugriff auf die Datei erlauben.

Auswirkung von chmod
Olli Graf - raspithek.de
chmodCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Auswirkung von chmod

User und Gruppe ändern

Um User und Gruppe einer Datei zu ändern benutzt du chown (change owner)bzw. chgrp (change group)

chown olli test.txt
chgroup olli test.txt

Dies lässt sich auch mit einem Kommando abkürzen (was ich meistens mache)

chown olli:olli test.txt

Bei Verzeichnissen würdest nur das Eigentum des Verzeichnisses selbst übertragen, nicht aber der darin liegenden Dateien. dazu müsstest du den -R Parameter übergeben, der rekursive die gesamte Unterverzeichnisstruktur ändert.

chown -R olli:olli ~/test

Beachte weiterhin, wenn du eine Datei an root:root überträgst, kann auch nur dieser dir diese wieder zurückgeben.

Datei umbenennen

Den Dateinamen kannst auch umbenennen,dazu gibt es das mv Kommando (move).

mv test.txt testneu.txt

Warum heißt das Kommando mv? Weil es eine Datei auch in ein anderes Verzeichnis verschieben kann:

mkdir test2
mv testneu.txt test2
Verzeichnis test2 anlegen und testneu.txt dorthin verschieben
Olli Graf - raspithek.de
mvCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Verzeichnis test2 anlegen und testneu.txt dorthin verschieben

Warnung: Beim arbeiten mit Systemdateien kannst du mit mv (sowie mit rm) großen Schaden anrichten. Benennst du z.B. /etc/passwd um, kannst du dich nicht mehr ins System einloggen!

Dateien verlinken

Ein Link ist eine Möglichkeit, eine Datei unter einem anderen Namen anzusprechen. Dazu dient das Kommando ln (link). Eben haben wir testneu.txt nach test2 verschoben. Dies ist vielleicht unbedingt notwendig, aber nicht kompatibel, wenn sich Programme auf diese Datei verlassen. Deshalb setzen wir jetzt einen Link am ursprünglichen Ort.

ln -s test2/testneu.txt test.txt

Damit erstellst einen symbolischen Link von test2/testneu.txt nach test.txt. Dieser Verweis wird dir von ls auch angezeigt.

Den Unterschied zwischen symbolischen (oder soft) Links und Hardlinks erkläre ich dir ein andermal.

Verlinkung von testneu.txt nach test.txt
Olli Graf - raspithek.de
ln-sCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Verlinkung von testneu.txt nach test.txt

Du kennst jetzt die Basiskommandos zur Arbeit mit Dateien. Der Post ist mal wieder umfangreicher geworden, als ich dachte.

Bevor es demnächst an das Scripting geht, machen wir zunächst einen kleinen Exkurs, um den nano Editor benutzen zu können.

Schreibe einen Kommentar

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Olli Graf - raspithek.de
WordPress Cookie Hinweis von Real Cookie Banner