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.
1 | Einführung |
---|---|
2 | Der bash Prompt |
3 | key bindings |
4 | Der Startvorgang |
5 | Environment Variablen |
6 | builtin commands |
7 | Arbeiten mit Dateien |
8 | nano |
9 | bash Scripting |
10 | Variablen |
11 | Verzweigungen (if) |
12 | Schleifen |
13 | Kommandozeilenparameter |
14 | exit Codes bash Tutorial Teil 14 |
15 | von der Idee zum Script |
16 | grep |
17 | Piping und Redirection |
18 | tee |
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.
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
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.
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.
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.
Anzahl Hardlinks
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.
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.
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.
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
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.
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.