Kapitel Dateien aufgeteilt
parent
15de623843
commit
b4ac7cd4f1
|
@ -0,0 +1,38 @@
|
|||
### Absolute und relative Pfadnamen
|
||||
|
||||
__absolute Pfadnamen__
|
||||
|
||||
Jede Datei in einem Linux-System wird durch einen Namen beschrieben, der sich ergibt, indem man ausgehend vom Wurzelverzeichnis jedes Verzeichnis nennt bis zu dem, in dem die Datei steht, gefolgt vom Namen der Datei selbst. Beispielsweise benennt `/home/hugo/brief.txt` die Datei `brief.txt`, die im Verzeichnis `hugo` steht, das wiederum im Verzeichnis `home` zu finden ist. Das Verzeichnis `home` steht direkt im `Wurzelverzeichnis`. Solche Namen, die vom Wurzelverzeichnis ausgehen, heißen `absolute Pfadnamen«` (engl. absolute path names) – wir sprechen von `Pfadnamen`, weil der Name einen `Pfad` durch den Verzeichnisbaum beschreibt, in dem die Namen von Verzeichnissen und Dateien vorkommen können (es handelt sich also um einen Sammelbegriff).
|
||||
|
||||
|
||||
__aktuelles Verzeichnis und relative Pfadnamen__
|
||||
|
||||
Jeder Prozess in einem Linux-System hat ein `aktuelles Verzeichnis` (engl. current directory, auch working directory, »Arbeitsverzeichnis«). Dateinamen werden in diesem Verzeichnis gesucht; brief.txt ist also eine bequeme Abkürzung für »die
|
||||
Datei brief.txt im aktuellen Verzeichnis«, und susi/brief.txt « steht für »die Datei brief.txt im Verzeichnis susi , das im aktuellen Verzeichnis steht«. Solche Namen, die vom aktuellen Verzeichnis ausgehen, nennen wir »relative Pfadnamen« (engl. relative path names).
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Sie können ganz einfach absolute von relativen Pfadnamen unterscheiden:
|
||||
|
||||
Ein Pfadname, der mit » / « anfängt, ist absolut; alle anderen Pfadnamen sind relativ.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Das aktuelle Verzeichnis _vererbt_ sich vom Elterprozess auf den Kindprozess. Wenn Sie also aus einer Shell heraus eine neue Shell (oder ein anderes Programm) starten, dann hat diese neue Shell dasselbe aktuelle Verzeichnis wie die Shell, aus der Sie sie gestartet haben. Sie können innerhalb der neuen Shell mit `cd` in ein anderes Verzeichnis wechseln, aber das aktuelle Verzeichnis der alten Shell ändert sich dadurch nicht – wenn Sie die neue Shell verlassen, dann sind Sie wieder im (unveränderten) aktuellen Verzeichnis
|
||||
der alten Shell.
|
||||
|
||||
__Abkürzungen__
|
||||
|
||||
In relativen (oder auch absoluten) Pfadnamen gibt es zwei bequeme Abkürzungen: Der Name `..` steht für das dem jeweiligen Verzeichnis im Verzeichnisbaum __übergeordnete__ Verzeichnis – im Falle von `/home/hugo` also beispielsweise `/home`. Das erlaubt Ihnen oftmals, bequemer als über absolute Pfadnamen auf Dateien Bezug zu nehmen, die aus der Sicht des aktuellen Verzeichnisses in einem _Seitenast_ des Verzeichnisbaums zu finden sind. Nehmen wir an, `/home/hugo` hätte die Unterverzeichnisse `briefe` und `romane` . Mit `briefe` als aktuellem Verzeichnis könnten Sie sich über den relativen Pfadnamen `../romane/werther.txt` auf die Datei `werther.txt` im Verzeichnis `romane` beziehen, ohne den umständlichen absoluten Namen `/home/hugo/romane/werther.txt` angeben zu müssen.
|
||||
|
||||
Die zweite Abkürzung ergibt keinen ganz so offensichtlichen Sinn: Der Name `.` in einem Verzeichnis steht immer für das Verzeichnis selbst. Es leuchtet nicht unmittelbar ein, wofür man eine Methode braucht, auf ein Verzeichnis zu verweisen, in dem man sich bereits befindet, aber es gibt Situationen, wo das sehr nützlich ist. Zum Beispiel wissen Sie vielleicht schon (oder können in Kapitel 8 nachschauen), dass die Shell die Programmdateien für externe Kommandos in den Verzeichnissen sucht, die in der Umgebungsvariablen `PATH` aufgelistet sind. Wenn Sie als Softwareentwickler ein Programm, nennen wir es mal `prog`, aufrufen wollen, das (a) in einer Datei im aktuellen Verzeichnis steht und (b) dieses aktuelle Verzeichnis nicht in `PATH` zu finden ist (aus Sicherheitsgründen immer eine gute Idee), dann können Sie mit
|
||||
|
||||
```
|
||||
./prog
|
||||
```
|
||||
|
||||
die Shell trotzdem dazu bringen, Ihre Datei als Programm zu starten, ohne dass Sie einen absoluten Pfadnamen angeben müssen.
|
||||
|
||||
__Hinweise__
|
||||
|
||||
Als Linux-Benutzer haben Sie ein `Heimatverzeichnis`, in dem Sie direkt nach dem Anmelden am System landen. Welches das ist, bestimmt der Systemadministrator beim Anlegen Ihres Benutzerkontos, aber es heißt normalerweise so wie Ihr Benutzername und ist unterhalb von `/home` zu finden – etwas wie `/home/hugo` für den Benutzer `hugo`.
|
932
Dateien.md
932
Dateien.md
|
@ -16,16 +16,15 @@ __Vorkenntnisse__
|
|||
|
||||
## Datei- und Pfadnamen
|
||||
|
||||
__Welche Besonderheiten haben Dateinamen in einem Linuxsystem?__
|
||||
### Welche Besonderheiten haben Dateinamen in einem Linuxsystem?
|
||||
|
||||
Dateinamen in einem Linuxsystem haben einige Besonderheiten im Vergleich zu anderen Betriebssystemen. Hier sind einige der Merkmale:
|
||||
[Dateinamen](Dateinamen) in einem Linuxsystem haben einige Besonderheiten im Vergleich zu anderen Betriebssystemen. Hier sind einige der Merkmale:
|
||||
|
||||
1. Groß- und Kleinschreibung: Linux-Dateisysteme sind in der Regel case-sensitive, das bedeutet, dass "datei.txt" und "Datei.txt" als zwei verschiedene Dateien betrachtet werden.
|
||||
|
||||
2. Erlaubte Zeichen: In Linux-Dateinamen sind die meisten Zeichen erlaubt, außer "/", "\0" (Nullbyte) und "-". Einige spezielle Zeichen sollten jedoch vermieden werden, da sie eine bes
|
||||
ondere Bedeutung im Dateisystem haben können. Dazu gehören Leerzeichen, Sonderzeichen und reservierte Zeichen wie "*", "?", "|", ":" usw.
|
||||
2. Erlaubte Zeichen: In Linux-Dateinamen sind die meisten Zeichen erlaubt, außer "/" und "\0" (Nullbyte). Einige spezielle Zeichen sollten jedoch vermieden werden, da sie eine besondere Bedeutung im Dateisystem haben können. Dazu gehören Leerzeichen, Sonderzeichen und reservierte Zeichen wie "*", "?", "|", ":", "-" usw.
|
||||
|
||||
3. Länge des Dateinamens: In den meisten Linux-Dateisystemen liegt die maximale Länge eines Dateinamens bei etwa 255 Zeichen. Es kann jedoch von Dateisystem zu Dateisystem variieren.
|
||||
3. Länge des Dateinamens: In den meisten Linux-Dateisystemen liegt die maximale Länge eines Dateinamens bei etwa 255 Zeichen (bzw. 4096). Es kann jedoch von Dateisystem zu Dateisystem variieren.
|
||||
|
||||
4. Verzeichnistrennzeichen: In Linux wird "/" als Trennzeichen für Verzeichnisse verwendet. Ein vollständiger Pfad zu einer Datei würde also so aussehen: "/verzeichnis1/verzeichnis2/date
|
||||
iname.txt".
|
||||
|
@ -38,33 +37,27 @@ iname.txt".
|
|||
|
||||
Diese sind nur einige der Besonderheiten von Dateinamen in einem Linuxsystem. Es gibt noch viele weitere, aber diese sind die wichtigsten.
|
||||
|
||||
__Welche Besonderheiten haben Verzeichnisse in einem Linuxsystem__
|
||||
### Welche Besonderheiten haben Verzeichnisse in einem Linuxsystem
|
||||
|
||||
Verzeichnisse in einem Linuxsystem haben mehrere Besonderheiten:
|
||||
[Verzeichnisse](Verzeichnisse) in einem Linuxsystem haben mehrere Besonderheiten:
|
||||
|
||||
1. Hierarchische Struktur: Das Dateisystem in Linux ist hierarchisch aufgebaut, wobei das Wurzelverzeichnis (/) das oberste Verzeichnis ist. Alle anderen Verzeichnisse sind Unterverzeichn
|
||||
isse des Wurzelverzeichnisses und können wiederum weitere Unterverzeichnisse enthalten.
|
||||
1. Hierarchische Struktur: Das Dateisystem in Linux ist hierarchisch aufgebaut, wobei das Wurzelverzeichnis (/) das oberste Verzeichnis ist. Alle anderen Verzeichnisse sind Unterverzeichnisse des Wurzelverzeichnisses und können wiederum weitere Unterverzeichnisse enthalten.
|
||||
|
||||
2. Mount Points: In Linux können verschiedene Laufwerke oder Partitionen in das Dateisystem eingebunden werden. Diese werden als Mount Points bezeichnet und als Verzeichnisse im Dateisystem
|
||||
dargestellt. Dadurch kann auf die Inhalte der Laufwerke über das entsprechende Verzeichnis zugegriffen werden.
|
||||
2. Mount Points: In Linux können verschiedene Laufwerke oder Partitionen in das Dateisystem eingebunden werden. Diese werden als Mount Points bezeichnet und als Verzeichnisse im Dateisystem dargestellt. Dadurch kann auf die Inhalte der Laufwerke über das entsprechende Verzeichnis zugegriffen werden.
|
||||
|
||||
3. Verzeichnisstrukturkonventionen: In Linux gibt es bestimmte Konventionen für Verzeichnisnamen und deren Verwendung. Zum Beispiel werden Systemdateien und -verzeichnisse in /etc/ oder /
|
||||
usr/share abgelegt, während Benutzerdateien in /home/username/ zu finden sind.
|
||||
3. Verzeichnisstrukturkonventionen: In Linux gibt es bestimmte Konventionen für Verzeichnisnamen und deren Verwendung. Zum Beispiel werden Systemdateien und -verzeichnisse in /etc/ oder /usr/share abgelegt, während Benutzerdateien in /home/username/ zu finden sind.
|
||||
|
||||
4. Symbolische Links: Linux ermöglicht die Verwendung von symbolischen Links, die auf andere Verzeichnisse oder Dateien verweisen. Diese können verwendet werden, um Verknüpfungen zu erst
|
||||
ellen oder den Zugriff auf bestimmte Dateien oder Verzeichnisse zu erleichtern.
|
||||
4. Symbolische Links: Linux ermöglicht die Verwendung von symbolischen Links, die auf andere Verzeichnisse oder Dateien verweisen. Diese können verwendet werden, um Verknüpfungen zu erstellen oder den Zugriff auf bestimmte Dateien oder Verzeichnisse zu erleichtern.
|
||||
|
||||
5. Berechtigungen: Verzeichnisse haben eigene Berechtigungen, die steuern, wer auf sie zugreifen, Verzeichnisinhalte anzeigen, Dateien erstellen oder diese bearbeiten kann. Die Berechtig
|
||||
ungen können für den Besitzer, die Gruppe und andere Benutzer unterschiedlich festgelegt werden.
|
||||
5. Berechtigungen: Verzeichnisse haben eigene Berechtigungen, die steuern, wer auf sie zugreifen, Verzeichnisinhalte anzeigen, Dateien erstellen oder diese bearbeiten kann. Die Berechtigungen können für den Besitzer, die Gruppe und andere Benutzer unterschiedlich festgelegt werden.
|
||||
|
||||
6. Sonderverzeichnisse: Es gibt einige spezielle Verzeichnisse in Linux, die bestimmte Funktionen haben. Dazu gehören das Wurzelverzeichnis (/), das Startverzeichnis (~ oder /home/username/
|
||||
), das temporäre Verzeichnis (/tmp/) und das aktuelle Verzeichnis (.), um nur einige Beispiele zu nennen.
|
||||
6. Sonderverzeichnisse: Es gibt einige spezielle Verzeichnisse in Linux, die bestimmte Funktionen haben. Dazu gehören das Wurzelverzeichnis (/), das Startverzeichnis (~ oder /home/username/), das temporäre Verzeichnis (/tmp/) und das aktuelle Verzeichnis (.), um nur einige Beispiele zu nennen.
|
||||
|
||||
Diese Besonderheiten machen die Verzeichnisse in einem Linuxsystem vielseitig und ermöglichen eine flexible Organisation und Verwaltung von Dateien und Ordnern.
|
||||
|
||||
__Was sind relative und absolute Pfadangaben in Linux__
|
||||
### Was sind relative und absolute Pfadangaben in Linux
|
||||
|
||||
In Linux beziehen sich relative und absolute Pfadangaben darauf, wie der Datei- oder Verzeichnisstandort in Bezug auf das aktuelle Arbeitsverzeichnis angegeben wird.
|
||||
In Linux beziehen sich [relative und absolute Pfadangaben](Absolute_und_relative_Pfadnamen) darauf, wie der Datei- oder Verzeichnisstandort in Bezug auf das aktuelle Arbeitsverzeichnis angegeben wird.
|
||||
|
||||
- Absolute Pfadangaben beginnen immer mit einem Schrägstrich (/) und geben den vollständigen Pfad vom Root-Verzeichnis aus an. Zum Beispiel: /home/benutzer/dokumente/text.txt.
|
||||
- Relative Pfadangaben geben den Pfad relativ zum aktuellen Arbeitsverzeichnis an. Zum Beispiel: wenn sich das aktuelle Verzeichnis in /home/benutzer befindet und das Zielverzeichnis
|
||||
|
@ -73,7 +66,7 @@ In Linux beziehen sich relative und absolute Pfadangaben darauf, wie der Datei-
|
|||
Um absolute oder relative Pfadangaben zu verwenden, kann der Befehl "cd" (Change Directory) verwendet werden, um das aktuelle Arbeitsverzeichnis zu ändern, und der Befehl "ls" (List
|
||||
Directory Contents), um Dateien und Verzeichnisse in einem bestimmten Pfad anzuzeigen.
|
||||
|
||||
__Nenne die wichtigsten Linux Kommandos für Daeinamen und Verzeichnisse__
|
||||
## Nenne die wichtigsten Linux Kommandos für Dateinamen und Verzeichnisse
|
||||
|
||||
- ls: Zeigt den Inhalt eines Verzeichnisses an
|
||||
- cd: Wechselt das aktuelle Verzeichnis
|
||||
|
@ -95,899 +88,6 @@ __Nenne die wichtigsten Linux Kommandos für Daeinamen und Verzeichnisse__
|
|||
- head: Zeigt die ersten Zeilen einer Datei an
|
||||
- tail: Zeigt die letzten Zeilen einer Datei an
|
||||
|
||||
### Dateinamen
|
||||
|
||||
Eine der wesentlichen Dienste eines Betriebssystems wie Linux besteht darin, Daten auf dauerhaften Speichermedien wie Festplatten oder USB-Sticks speichern und später wiederfinden zu können. Um das für Menschen erträglich zu gestalten, werden zusammengehörende Daten normalerweise zu `Dateien` zusammengefasst, die auf dem Speichermedium unter einem Namen gespeichert werden.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Auch wenn Ihnen das trivial vorkommen mag: Selbstverständlich ist das nicht. Betriebssysteme in früheren Zeiten machten es mitunter nötig, dass man Gräuel wie die passenden Spurnummern auf Platten kennen musste, wenn man seine Daten wieder finden wollte.
|
||||
|
||||
__Erlaubte Zeichen__
|
||||
|
||||
Bevor wir Ihnen erklären können, wie Sie mit Dateien umgehen, müssen wir Ihnen also erklären, wie Linux Dateien benennt.
|
||||
|
||||
In Linux-Dateinamen sind grundsätzlich __alle Zeichen__ zugelassen, die der Computer darstellen kann (und noch ein paar mehr). Da einige dieser Zeichen aber eine besondere Bedeutung haben, raten wir von deren Verwendung in Dateinamen aber ab. __Komplett verboten__ innerhalb von Dateinamen sind nur __zwei Zeichen__, der __Schrägstrich__ und das __Nullbyte__ (das Zeichen mit dem ASCII-Wert 0). Andere Zeichen wie _Leerzeichen_, _Umlaute_ oder _Dollarzeichen_ können verwendet werden, müssen dann aber auf der Kommandozeile meist durch einen _Rückstrich oder Anführungszeichen maskiert_ werden, um Fehlinterpretationen durch die Shell zu vermeiden.
|
||||
|
||||
__Achtung: Groß- und Kleinschreibung__
|
||||
|
||||
Eine Stolperfalle für Umsteiger ist, dass Linux in Dateinamen zwischen Groß- und Kleinschreibung unterscheidet. Im Gegensatz zu Windows, wo Groß- und Kleinbuchstaben in Dateinamen zwar dargestellt, aber identisch behandelt werden, interpretiert Linux x- files und X- Files tatsächlich als zwei verschiedene Dateinamen.
|
||||
|
||||
Dateinamen dürfen unter Linux _ziemlich lang_ sein – eine feste allgemeinverbindliche Grenze gibt es nicht, da das __Maximum__ vom __Dateisystem__ abhängt, also der Methode, wie genau die Bytes auf der Platte arrangiert sind (davon gibt es unter Linux mehrere). Eine typische Obergrenze sind aber 255 Zeichen – und da so ein Name auf einem normalen Textterminal gut drei Zeilen einnehmen würde,
|
||||
sollte das Ihren Stil nicht übermäßig einschränken.
|
||||
|
||||
__Endungen__
|
||||
|
||||
Eine weitere Abweichung zu DOS- bzw. Windows-Rechnern besteht darin, Endungen dass bei Linux Dateien nicht durch entsprechende Endungen charakterisiert werden __müssen__. _Der Punkt ist in einem Dateinamen also ein ganz gewöhnliches Zeichen_. Ein Text kann daher als `blabla.txt` abgespeichert werden, aber einfach `blabla` wäre grundsätzlich ebenso zulässig. Was nicht heißt, dass Sie keine _Dateiendungen_ benutzen sollten – immerhin erleichtern solche Kennzeichnungen die Identifizierung des Dateiinhaltes.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Manche Programme bestehen darauf, dass ihre Eingabedateien bestimmte Endungen haben. Der C-Übersetzer `gcc` zum Beispiel betrachtet Dateien mit Namen, die auf `.c` enden, als C-Quelltext, solche mit Namen auf `.s` als Assemblerquelltext und solche mit Namen auf `.o` als vorübersetzte Objektdateien.
|
||||
|
||||
__Sonderzeichen__
|
||||
|
||||
Umlaute und andere Sonderzeichen können Sie in Dateinamen grundsätzlich ungeniert verwenden. Sollen aber Dateien gleichermaßen auf anderen Systemen benutzt werden, ist es besser, auf Sonderzeichen in Dateinamen zu verzichten, da nicht garantiert ist, dass sie auf anderen Systemen als dieselben Zeichen erscheinen.
|
||||
|
||||
__Ortseinstellung__
|
||||
|
||||
Was mit Sonderzeichen passiert, hängt auch von der Ortseinstellung ab, da es keinen allgemein üblichen Standard dafür gibt, Zeichen darzustellen, die den Zeichenvorrat des ASCII (128 Zeichen, die im wesentlichen die englische Sprache, Ziffern und die gängigsten Sonderzeichen abdecken) überschreiten. In weitem Gebrauch sind zum Beispiel die Zeichentabellen `ISO 8859-1` und `ISO 8859-15` (vulgo `ISO-Latin-1` und `ISO-Latin-9` ... fragen Sie nicht) sowie `ISO 10646`, gerne salopp und nicht ganz korrekt als `Unicode` bezeichnet und in der Regel als `UTF-8` codiert. Dateinamen mit Sonderzeichen, die Sie anlegen, während Zeichentabelle X aktiv ist, können völlig anders aussehen, wenn Sie sich das Verzeichnis gemäß Zeichentabelle Y anschauen. Das ganze Thema ist nichts, worüber man beim Essen nachdenken möchte.
|
||||
|
||||
__`convmv`__
|
||||
|
||||
Sollten Sie jemals in die Verlegenheit kommen, einen Berg Dateien vor sich zu haben, deren Namen allesamt gemäß einer verkehrten Zeichentabelle codiert sind, kann Ihnen vielleicht das Programm `convmv` helfen, das Dateinamen zwischen verschiedenen Zeichentabellen konvertieren kann. (Sie werden es vermutlich selber installieren müssen, da es sich normalerweise nicht im Standardumfang gängiger Distributionen befindet.) Allerdings sollten Sie sich damit erst befassen, wenn Sie den Rest dieses Kapitels durchgearbeitet haben, denn wir haben Ihnen noch nicht einmal das reguläre `mv` erklärt ...
|
||||
|
||||
__Portable Dateinamen__
|
||||
|
||||
Ohne Bedenken lassen sich alle Zeichen aus
|
||||
|
||||
```
|
||||
ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
abcdefghijklmnopqrstuvwxyz
|
||||
0123456789+-._
|
||||
```
|
||||
|
||||
in Dateinamen benutzen. Allerdings sollten Sie die folgenden Tipps berücksichtigen:
|
||||
|
||||
* Um den Datenaustausch mit älteren Unix-Systemen zu ermöglichen, sollte die Länge eines Dateinamens gegebenenfalls maximal 14 Zeichen betragen.
|
||||
|
||||
* Dateinamen sollten stets mit einem der genannten Buchstaben oder einer Ziffer beginnen, die vier anderen Zeichen sind nur innerhalb eines Dateinamens problemlos verwendbar.
|
||||
|
||||
Diese Konventionen lassen sich am leichtesten mit ein paar Beispielen verstehen. Zulässige Dateinamen wären etwa:
|
||||
|
||||
```
|
||||
X-files
|
||||
bla.txt.bak
|
||||
17.Juni
|
||||
7_of_9
|
||||
```
|
||||
|
||||
Schwierigkeiten wären dagegen möglich (wenn nicht gar wahrscheinlich oder sogar sicher) mit:
|
||||
|
||||
```
|
||||
-20°C Beginnt mit » - «, Sonderzeichen
|
||||
.profile Wird versteckt
|
||||
3/4-Takt Enthält verbotenes Zeichen
|
||||
Müll Enthält Umlaut
|
||||
```
|
||||
|
||||
__Versteckte Dateien__
|
||||
|
||||
Als weitere Besonderheit werden Dateinamen, die mit einem Punkt (`.`) anfangen, an einigen Stellen (etwa beim Auflisten von Verzeichnisinhalten) übersprungen – Dateien mit solchen Namen gelten als »versteckt«. Diese Eigenschaft verwendet man unter anderem gerne für Dateien, die Voreinstellungen für Programme enthalten und die in Dateinamenslisten nicht von wichtigeren Dateien
|
||||
ablenken sollen.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Für DOS- und Windows-Experten: Diese Systeme erlauben »versteckte« Dateien über ein unabhängig vom Namen zu setzendes »Dateiattribut«. Unter Linux bzw. Unix gibt es so etwas nicht.
|
||||
|
||||
### Verzeichnisse
|
||||
|
||||
Da auf demselben Linux-System potentiell viele Benutzer arbeiten können, wäre es ein Problem, wenn es jeden Dateinamen nur einmal geben dürfte. Dem Benutzer `Hugo` wäre wohl nur schwer klar zu machen, dass er keine Datei namens `brief.txt` anlegen kann, weil die Benutzerin `Susi` schon eine Datei hat, die so heißt. Außerdem muss irgendwie (bequem) geregelt werden können, dass `Hugo` nicht
|
||||
alle Dateien von `Susi` lesen kann und umgekehrt.
|
||||
|
||||
Aus diesem Grund unterstützt Linux das Konzept __hierarchischer Verzeichnisse__, die zum Gruppieren von Dateien dienen. Dateinamen müssen nicht über das __ganze System__ hinweg __eindeutig__ sein, sondern nur im __selben Verzeichnis__. Das bedeutet insbesondere, dass `Hugo` und `Susi` vom System verschiedene Verzeichnisse zugeordnet bekommen können und darin dann jeweils ihre Dateien so nennen
|
||||
dürfen, wie sie mögen, ohne aufeinander Rücksicht nehmen zu müssen. Ferner kann man `Hugo` den Zugriff auf `Susis` Verzeichnis verbieten (und umgekehrt) und muss sich dann nicht mehr um die einzelnen Dateien kümmern, die dort jeweils stehen.
|
||||
|
||||
__Schrägstrich__
|
||||
|
||||
Verzeichnisse sind bei Linux auch nur Dateien, wenn auch Dateien, die Sie nicht mit denselben Mitteln bearbeiten können wie _gewöhnliche_ Dateien. Das bedeutet aber, dass für die Namen von Verzeichnissen dieselben Regeln gelten wie für die Namen von Dateien (siehe voriger Abschnitt). Sie müssen nur noch lernen, dass der Schrägstrich (`/`) dazu dient, Dateinamen von Verzeichnisnamen und Verzeichnisnamen voneinander zu trennen. `hugo/brief.txt` wäre also die Datei `brief.txt` im Verzeichnis `hugo`.
|
||||
|
||||
__Verzeichnisbaum__
|
||||
|
||||
Verzeichnisse können andere Verzeichnisse enthalten (das ist das _hierarchisch_ von weiter vorne), wodurch sich eine baumartige Struktur ergibt (naheliegenderweise gerne `Verzeichnisbaum` genannt). Ein Linux-System hat ein spezielles Verzeichnis, das die Wurzel des Baums bildet und deswegen `Wurzelverzeichnis` oder neudeutsch `root directory` genannt wird. Es hat nach Konvention den Namen `/` (Schrägstrich).
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Trotz seiner englischen Bezeichnung hat das Wurzelverzeichnis __nichts mit dem Systemverwalter root zu tun__. Die beiden heißen einfach nur so ähnlich.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Der Schrägstrich spielt hier eine Doppelrolle – er dient sowohl als Name des Wurzelverzeichnisses als auch als Trennzeichen zwischen anderen Verzeichnissen. Hierzu gleich mehr.
|
||||
|
||||
Die Grundinstallation gängiger Linux-Distributionen enthält normalerweise Zehntausende von Dateien in einer größtenteils durch gewisse Konventionen vorstrukturierten Verzeichnishierarchie. Über diese Verzeichnishierarchie erfahren Sie mehr in Kapitel 9
|
||||
|
||||
### Absolute und relative Pfadnamen
|
||||
|
||||
__absolute Pfadnamen__
|
||||
|
||||
Jede Datei in einem Linux-System wird durch einen Namen beschrieben, der sich ergibt, indem man ausgehend vom Wurzelverzeichnis jedes Verzeichnis nennt bis zu dem, in dem die Datei steht, gefolgt vom Namen der Datei selbst. Beispielsweise benennt `/home/hugo/brief.txt` die Datei `brief.txt`, die im Verzeichnis `hugo` steht, das wiederum im Verzeichnis `home` zu finden ist. Das Verzeichnis `home` steht direkt im `Wurzelverzeichnis`. Solche Namen, die vom Wurzelverzeichnis ausgehen, heißen `absolute Pfadnamen«` (engl. absolute path names) – wir sprechen von `Pfadnamen`, weil der Name einen `Pfad` durch den Verzeichnisbaum beschreibt, in dem die Namen von Verzeichnissen und Dateien vorkommen können (es handelt sich also um einen Sammelbegriff).
|
||||
|
||||
|
||||
__aktuelles Verzeichnis und relative Pfadnamen__
|
||||
|
||||
Jeder Prozess in einem Linux-System hat ein `aktuelles Verzeichnis` (engl. current directory, auch working directory, »Arbeitsverzeichnis«). Dateinamen werden in diesem Verzeichnis gesucht; brief.txt ist also eine bequeme Abkürzung für »die
|
||||
Datei brief.txt im aktuellen Verzeichnis«, und susi/brief.txt « steht für »die Datei brief.txt im Verzeichnis susi , das im aktuellen Verzeichnis steht«. Solche Namen, die vom aktuellen Verzeichnis ausgehen, nennen wir »relative Pfadnamen« (engl. relative path names).
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Sie können ganz einfach absolute von relativen Pfadnamen unterscheiden:
|
||||
|
||||
Ein Pfadname, der mit » / « anfängt, ist absolut; alle anderen Pfadnamen sind relativ.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Das aktuelle Verzeichnis _vererbt_ sich vom Elterprozess auf den Kindprozess. Wenn Sie also aus einer Shell heraus eine neue Shell (oder ein anderes Programm) starten, dann hat diese neue Shell dasselbe aktuelle Verzeichnis wie die Shell, aus der Sie sie gestartet haben. Sie können innerhalb der neuen Shell mit `cd` in ein anderes Verzeichnis wechseln, aber das aktuelle Verzeichnis der alten Shell ändert sich dadurch nicht – wenn Sie die neue Shell verlassen, dann sind Sie wieder im (unveränderten) aktuellen Verzeichnis
|
||||
der alten Shell.
|
||||
|
||||
__Abkürzungen__
|
||||
|
||||
In relativen (oder auch absoluten) Pfadnamen gibt es zwei bequeme Abkürzungen: Der Name `..` steht für das dem jeweiligen Verzeichnis im Verzeichnisbaum __übergeordnete__ Verzeichnis – im Falle von `/home/hugo` also beispielsweise `/home`. Das erlaubt Ihnen oftmals, bequemer als über absolute Pfadnamen auf Dateien Bezug zu nehmen, die aus der Sicht des aktuellen Verzeichnisses in einem _Seitenast_ des Verzeichnisbaums zu finden sind. Nehmen wir an, `/home/hugo` hätte die Unterverzeichnisse `briefe` und `romane` . Mit `briefe` als aktuellem Verzeichnis könnten Sie sich über den relativen Pfadnamen `../romane/werther.txt` auf die Datei `werther.txt` im Verzeichnis `romane` beziehen, ohne den umständlichen absoluten Namen `/home/hugo/romane/werther.txt` angeben zu müssen.
|
||||
|
||||
Die zweite Abkürzung ergibt keinen ganz so offensichtlichen Sinn: Der Name `.` in einem Verzeichnis steht immer für das Verzeichnis selbst. Es leuchtet nicht unmittelbar ein, wofür man eine Methode braucht, auf ein Verzeichnis zu verweisen, in dem man sich bereits befindet, aber es gibt Situationen, wo das sehr nützlich ist. Zum Beispiel wissen Sie vielleicht schon (oder können in Kapitel 8 nachschauen), dass die Shell die Programmdateien für externe Kommandos in den Verzeichnissen sucht, die in der Umgebungsvariablen `PATH` aufgelistet sind. Wenn Sie als Softwareentwickler ein Programm, nennen wir es mal `prog`, aufrufen wollen, das (a) in einer Datei im aktuellen Verzeichnis steht und (b) dieses aktuelle Verzeichnis nicht in `PATH` zu finden ist (aus Sicherheitsgründen immer eine gute Idee), dann können Sie mit
|
||||
|
||||
```
|
||||
./prog
|
||||
```
|
||||
|
||||
die Shell trotzdem dazu bringen, Ihre Datei als Programm zu starten, ohne dass Sie einen absoluten Pfadnamen angeben müssen.
|
||||
|
||||
__Hinweise__
|
||||
|
||||
Als Linux-Benutzer haben Sie ein `Heimatverzeichnis`, in dem Sie direkt nach dem Anmelden am System landen. Welches das ist, bestimmt der Systemadministrator beim Anlegen Ihres Benutzerkontos, aber es heißt normalerweise so wie Ihr Benutzername und ist unterhalb von `/home` zu finden – etwas wie `/home/hugo` für den Benutzer `hugo`.
|
||||
|
||||
## Kommandos für Verzeichnisse
|
||||
|
||||
### Das aktuelle Verzeichnis: cd & Co.
|
||||
|
||||
1. Wir gehen in unser `Benutzerverzeichnis` `~`.
|
||||
2. Wechseln ins Verzeichenis `data` und
|
||||
3. falls das Verzeichnis `briefe` existiert, wird dieses gelöscht. Sie können ganz einfach absolute von relativen Pfadnamen unterscheiden:
|
||||
Ein Pfadname, der mit `/` anfängt, ist absolut; alle anderen Pfadnamen sind
|
||||
relativ.
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
cd data
|
||||
pwd
|
||||
if [ -d briefe ]; then rm -rf briefe; fi;
|
||||
ls -l
|
||||
```
|
||||
|
||||
/home/vagrant/data
|
||||
insgesamt 16
|
||||
-rw-rw-r-- 1 vagrant vagrant 0 Mär 21 2020 datei.txt
|
||||
drwxrwxr-x 2 vagrant vagrant 4096 Mär 21 2020 geschweifte
|
||||
drwxrwxr-x 3 vagrant vagrant 4096 Mär 21 2020 kopieren
|
||||
drwxrwxr-x 2 vagrant vagrant 4096 Mär 21 2020 regulaere_Ausdruecke_-_Filter
|
||||
drwxrwxr-x 2 vagrant vagrant 4096 Mär 21 2020 suchmuster
|
||||
|
||||
|
||||
Wenn Sie `cd` keinen Parameter angeben, landen Sie in Ihrem Heimatverzeichnis.
|
||||
|
||||
Erstellen von Verzeichnissen und hineinwechseln
|
||||
|
||||
|
||||
```bash
|
||||
mkdir briefe
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -ld briefe
|
||||
```
|
||||
|
||||
drwxr-xr-x 2 vagrant vagrant 4096 Dez 22 10:44 briefe
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd briefe
|
||||
```
|
||||
|
||||
__Aktuellen Verzeichnisnamen ausgeben__
|
||||
|
||||
Mit dem Kommando `pwd` (engl. print working directory) können Sie, wie im Beispiel zu sehen, den absoluten Pfadnamen des aktuellen Verzeichnisses ausgeben.
|
||||
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
/home/vagrant/data/briefe
|
||||
|
||||
|
||||
Dabei ist `~/briefe` eine Abkürzung für `/home/hugo/briefe`; die Tilde (`~`) steht für das Heimatverzeichnis des aktuellen Benutzers.
|
||||
|
||||
Übergeordnetes Verzeichnis
|
||||
|
||||
|
||||
```bash
|
||||
cd ..
|
||||
pwd
|
||||
```
|
||||
|
||||
/home/vagrant/data
|
||||
|
||||
|
||||
Zurück ins Homeverzeichnis
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
pwd
|
||||
```
|
||||
|
||||
/home/vagrant
|
||||
|
||||
|
||||
__Zurück ins vorheriges Verzeichnis__
|
||||
|
||||
Das Kommando `cd -` wechselt in das Verzeichnis, das vor dem letzten `cd`-Kommando aktuell war. Damit können Sie bequem zwischen zwei Verzeichnissen hin und her wechseln.
|
||||
|
||||
|
||||
```bash
|
||||
cd -
|
||||
```
|
||||
|
||||
/home/vagrant/data
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd /var/www
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
/var/www
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls -l
|
||||
```
|
||||
|
||||
insgesamt 4
|
||||
drwxr-xr-x 3 root root 4096 Sep 11 22:56 html
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd html
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
/var/www/html
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
/home/vagrant
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd -
|
||||
```
|
||||
|
||||
/var/www/html
|
||||
|
||||
|
||||
__Übungen__
|
||||
|
||||
* C 6.1 [2] Ist `cd` ein externes Kommando oder als internes Kommando in die Shell eingebaut? Warum?
|
||||
|
||||
* C 6.2 [3] Lesen Sie in der Handbuchseite der `bash` über die Kommandos `pushd`, `popd` und `dirs` nach. Überzeugen Sie sich, dass diese Kommandos funktionieren.
|
||||
|
||||
C 6.1 [2] Ist cd ein externes Kommando oder als internes Kommando in die Shell eingebaut? Warum?
|
||||
|
||||
### Dateien und Verzeichnisse auflisten – ls
|
||||
|
||||
| Dateityp | Farbe | Zeichen ( ls -F ) | Kennung ( ls -l ) |
|
||||
|----------|-------|-------------------|-------------------|
|
||||
|gewöhnliche Datei|schwarz| keins | - |
|
||||
|ausführbare Datei|grün| * | - |
|
||||
|Verzeichnis|blau | / | d |
|
||||
|Link |cyan | @ | l |
|
||||
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
cd data/briefe
|
||||
touch datei.txt datei2.txt
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l
|
||||
```
|
||||
|
||||
insgesamt 0
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 10:59 datei2.txt
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 10:59 datei.txt
|
||||
|
||||
|
||||
## Übungen
|
||||
|
||||
C 6.1 [2] Ist cd ein externes Kommando oder als internes Kommando in die Shell eingebaut? Warum?
|
||||
|
||||
C 6.2 [3] Lesen Sie in der Handbuchseite der bash über die Kommandos pushd,
|
||||
popd und dirs nach. Überzeugen Sie sich, dass diese Kommandos funktionieren.
|
||||
|
||||
### Dateien und Verzeichnisse auflisten – ls
|
||||
|
||||
|
||||
```bash
|
||||
ls
|
||||
```
|
||||
|
||||
datei2.txt datei.txt
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls -l
|
||||
```
|
||||
|
||||
insgesamt 0
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 10:59 datei2.txt
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 10:59 datei.txt
|
||||
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.3 [1] Welche Dateien stehen im Verzeichnis /boot ? Hat das Verzeichnis Unerverzeichnisse und, wenn ja, welche?
|
||||
|
||||
* C 6.4 [2] Erklären Sie den Unterschied zwischen ls mit einem Dateinamen als Argument und ls mit einem Verzeichnisnamen als Argument.
|
||||
|
||||
* C 6.5 [2] Wie können Sie ls dazu bringen, bei einem Verzeichnisnamen als Argument Informationen über das benannte Verzeichnis selbst anstatt über die darin enthaltenen Dateien zu liefern?
|
||||
|
||||
### Verzeichnisse anlegen und löschen: mkdir und rmdir
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/data
|
||||
if [ -d bilder ]; then rm -rf bilder; fi;
|
||||
#ohne if
|
||||
# rm -rf bilder
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mkdir bilder/urlaub
|
||||
```
|
||||
|
||||
mkdir: das Verzeichnis »bilder/urlaub“ kann nicht angelegt werden: Datei oder Verzeichnis nicht gefunden
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
mkdir --parent bilder/urlaub
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cd bilder
|
||||
ls -F
|
||||
```
|
||||
|
||||
murlaub
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/data
|
||||
rmdir bilder/urlaub
|
||||
ls -F
|
||||
```
|
||||
|
||||
bilder datei.txt kopieren/ suchmuster/
|
||||
briefe/ geschweifte/ regulaere_Ausdruecke_-_Filter/
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
mkdir -p bilder/urlaub/sommer
|
||||
rmdir bilder/urlaub/sommer
|
||||
ls -F bilder
|
||||
```
|
||||
|
||||
urlaub/
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
rmdir -p bilder/urlaub
|
||||
ls -F bilder
|
||||
```
|
||||
|
||||
ls: Zugriff auf 'bilder' nicht möglich: Datei oder Verzeichnis nicht gefunden
|
||||
|
||||
|
||||
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.6 [!2] Legen Sie in Ihrem Heimatverzeichnis ein Verzeichnis `grd1-test` mit den Unterverzeichnissen `dir1`, `dir2` und `dir3` an. Wechseln Sie ins Verzeichnis `grd1-test/dir1` und legen Sie (etwa mit einem Texteditor) eine Datei namens hallo mit dem Inhalt _hallo_ an. Legen Sie in `grd1-test/dir2` eine Datei namens `huhu` mit dem Inhalt _huhu_ an. Vergewissern Sie sich, dass diese Dateien angelegt wurden. Löschen Sie das Unterverzeichnis `dir3` mit `rmdir`.
|
||||
|
||||
Versuchen Sie anschließend, das Unterverzeichnis `dir2` mit `rmdir` zu löschen.
|
||||
|
||||
Was passiert und warum?
|
||||
|
||||
## Suchmuster für Dateien
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/data
|
||||
ls suchmuster
|
||||
```
|
||||
|
||||
a1.txt c1.txt p22.dat p-.c prog1.c prog-.c rot.txt
|
||||
a2.txt c2.txt p22.txt p..c prog2.c prog.c untitled.txt
|
||||
a3.txt c3.txt p2.c p.c prog3.c prog:.c
|
||||
b1.txt gelb.txt p3.c pop-rock.c prog4.c prog_.c
|
||||
b2.txt p1.c p4.c prog prog5.c progQ.c
|
||||
b3.txt p1.txt pa.c prog12.c progabc.c progx.c
|
||||
blau.txt p21.txt paulchen.c prog13.c prog+.c p.txt
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/p*.c
|
||||
```
|
||||
|
||||
suchmuster/p1.c suchmuster/pop-rock.c suchmuster/prog+.c
|
||||
suchmuster/p2.c suchmuster/prog12.c suchmuster/prog-.c
|
||||
suchmuster/p3.c suchmuster/prog13.c suchmuster/prog.c
|
||||
suchmuster/p4.c suchmuster/prog1.c suchmuster/prog:.c
|
||||
suchmuster/pa.c suchmuster/prog2.c suchmuster/prog_.c
|
||||
suchmuster/paulchen.c suchmuster/prog3.c suchmuster/progQ.c
|
||||
suchmuster/p-.c suchmuster/prog4.c suchmuster/progx.c
|
||||
suchmuster/p..c suchmuster/prog5.c
|
||||
suchmuster/p.c suchmuster/progabc.c
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/p?.c
|
||||
```
|
||||
|
||||
suchmuster/p1.c suchmuster/p3.c suchmuster/pa.c suchmuster/p..c
|
||||
suchmuster/p2.c suchmuster/p4.c suchmuster/p-.c
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/prog[123].c
|
||||
```
|
||||
|
||||
suchmuster/prog1.c suchmuster/prog2.c suchmuster/prog3.c
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/prog[1-9].c
|
||||
```
|
||||
|
||||
suchmuster/prog1.c suchmuster/prog3.c suchmuster/prog5.c
|
||||
suchmuster/prog2.c suchmuster/prog4.c
|
||||
|
||||
|
||||
Achtung dies funktioniert anders als im Buch
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/prog[A-z].c
|
||||
```
|
||||
|
||||
suchmuster/prog_.c suchmuster/progQ.c suchmuster/progx.c
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/prog[!A-z].c
|
||||
```
|
||||
|
||||
suchmuster/prog1.c suchmuster/prog3.c suchmuster/prog5.c suchmuster/prog-.c
|
||||
suchmuster/prog2.c suchmuster/prog4.c suchmuster/prog+.c suchmuster/prog:.c
|
||||
|
||||
|
||||
### Geschweifte Klammern
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/data
|
||||
if [ -d geschweifte ]; then rm -rf geschweifte; fi;
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mkdir geschweifte
|
||||
ls -d geschweifte
|
||||
cd geschweifte
|
||||
```
|
||||
|
||||
geschweifte
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
touch {rot,blau,gelb}.txt
|
||||
ls -l *.txt
|
||||
```
|
||||
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:22 blau.txt
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:22 gelb.txt
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:22 rot.txt
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
touch {a,b,c}{1,2,3}.dat
|
||||
ls -l *.dat
|
||||
```
|
||||
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 a1.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 a2.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 a3.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 b1.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 b2.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 b3.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 c1.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 c2.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 c3.dat
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
mkdir -p umsatz/201{6,7}/q{1,2,3,4}
|
||||
tree umsatz
|
||||
```
|
||||
|
||||
umsatz
|
||||
├── 2016
|
||||
│ ├── q1
|
||||
│ ├── q2
|
||||
│ ├── q3
|
||||
│ └── q4
|
||||
└── 2017
|
||||
├── q1
|
||||
├── q2
|
||||
├── q3
|
||||
└── q4
|
||||
|
||||
10 directories, 0 files
|
||||
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.7 [!1] Im aktuellen Verzeichnis stehen die Dateien
|
||||
|
||||
* prog.c
|
||||
* p.txt
|
||||
* prog1.c
|
||||
* p1.txt
|
||||
* prog2.c
|
||||
* p21.txt
|
||||
* progabc.c
|
||||
* p22.txt
|
||||
* prog
|
||||
* p22.dat
|
||||
|
||||
Auf welche dieser Dateinamen passen die Suchmuster
|
||||
|
||||
(a) prog*.c,
|
||||
(b) prog?.c,
|
||||
(c) p?*.txt,
|
||||
(d) p[12]*,
|
||||
(e) p*,
|
||||
(f) *.*
|
||||
|
||||
* C 6.8 [!2] Was ist der Unterschied zwischen » ls « und » ls * «? (Tipp: Probieren Sie beides in einem Verzeichnis aus, das Unterverzeichnisse enthält.)
|
||||
|
||||
* C 6.9 [2] Erklären Sie, warum das folgende Kommando zur angezeigten Ausgabe führt:
|
||||
|
||||
$ ls
|
||||
-l datei1 datei2 datei3
|
||||
$ ls *
|
||||
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei1
|
||||
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei2
|
||||
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei3
|
||||
|
||||
* C 6.10 [2] Warum ist es sinnvoll, dass » * « nicht auf Dateinamen mit Punkt am Anfang passt?
|
||||
|
||||
### Kopieren, Verschieben und Löschen – cp und Verwandte
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/data
|
||||
if [ -d kopieren ]; then rm -rf kopieren; fi;
|
||||
mkdir kopieren
|
||||
ls -lisa >> kopieren/liste
|
||||
cd kopieren
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
md5sum liste
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cp liste liste2
|
||||
md5sum liste2
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l /etc/passwd
|
||||
md5sum /etc/passwd
|
||||
cp /etc/passwd .
|
||||
ls -l
|
||||
md5sum passwd
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mv passwd liste2
|
||||
ls -l
|
||||
md5sum *
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
rm lis*
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l
|
||||
```
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.11 [!2] Legen Sie in Ihrem Heimatverzeichnis eine Kopie der Datei /etc/services unter dem Namen myservices an. Benennen Sie sie um in srv.dat und kopieren Sie sie unter demselben Namen ins Verzeichnis /tmp. Löschen Sie anschließend beide Kopien der Datei.
|
||||
|
||||
* C 6.12 [1] Warum hat mv keine -R -Option wie cp?
|
||||
|
||||
* C 6.13 [!2] Angenommen, in einem Ihrer Verzeichnisse steht eine Datei namens »- file« (mit einem Minuszeichen am Anfang des Namens). Wie würden Sie diese Datei entfernen?
|
||||
|
||||
* C 6.14 [2] Wenn Sie ein Verzeichnis haben, in dem Sie nicht versehentlich einem »rm *« zum Opfer fallen wollen, können Sie dort eine Datei namens »- i« anlegen, etwa mit $ > -i (wird in Kapitel 7 genauer erklärt). Was passiert, wenn Sie jetzt das Kommando » rm * « ausführen, und warum?
|
||||
|
||||
## Dateien verknüpfen – ln und ln -s
|
||||
|
||||
Eine harte Verknüpfung in einem "shared Folder" geht nicht. Daher im Ornder /tmp
|
||||
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
if [ -d links ]; then rm -rf links; fi;
|
||||
mkdir links
|
||||
ls -lisa >> links/liste
|
||||
cd links
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ln liste liste2
|
||||
ls -li
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
rm liste
|
||||
ls -li
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
cp -r ~/data/suchmuster .
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mkdir suchmuster2
|
||||
cp -l suchmuster/* suchmuster2
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -li suchmuster*
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ln -s /var/log kurz
|
||||
ls -l
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cd kurz
|
||||
pwd
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
pwd -P
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
ls kurz
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l kurz
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -ld kurz
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
rm kurz
|
||||
ls -l
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mkdir dir
|
||||
echo XXXXXXXXX > dir/datei
|
||||
ln -s datei dir/symlink
|
||||
ls -l dir
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -lL dir
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -lH dir
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l dir/symlink
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -lH dir/symlink
|
||||
```
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.15 [!2] Erzeugen Sie eine Datei mit beliebigem Inhalt in Ihrem Heimatverzeichnis (etwa mit » echo Hallo >~/hallo « oder einem Texteditor). Legen Sie unter dem Namen link ein hartes Link auf die Datei an. Überzeugen Sie sich, dass nun zwei Namen für die Datei existieren. Versuchen Sie den Dateiinhalt mit einem Editor zu ändern. Was passiert?
|
||||
|
||||
* C 6.16 [!2] Legen Sie unter dem Namen ~/symlink ein symbolisches Link auf die Datei aus der vorigen Aufgabe an. Prüfen Sie, ob der Zugriff funktioniert. Was passiert, wenn Sie die Zieldatei des Links löschen?
|
||||
|
||||
* C 6.17 [!2] Auf welches Verzeichnis zeigt das ..-Link im Verzeichnis »/«?
|
||||
|
||||
* C 6.18 [3] Betrachten Sie das folgende Kommando und seine Ausgabe:
|
||||
|
||||
$ ls -ai /
|
||||
2 . 330211 etc 1 proc 4303 var
|
||||
2 .. 2 home 65153 root
|
||||
4833 bin 244322 lib 313777 sbin
|
||||
228033 boot 460935 mnt 244321 tmp
|
||||
330625 dev 460940 opt 390938 usr
|
||||
|
||||
Offensichtlich haben die Verzeichnisse / und /home dieselbe Inodenummer. Da es sich dabei offensichtlich nicht wirklich um dasselbe Verzeichnis handeln kann – können Sie dieses Phänomen erklären?
|
||||
|
||||
* C 6.19 [2] Betrachten Sie die Inode-Nummern der Links » . « und » .. « im Wurzelverzeichnis ( / ) und in einigen beliebigen anderen Verzeichnissen. Was fällt Ihnen auf?
|
||||
|
||||
* C 6.20 [3] Wir haben gesagt, dass harte Links auf Verzeichnisse nicht erlaubt sind. Welchen Grund könnte es dafür geben?
|
||||
|
||||
* C 6.21 [3] Woran erkennt man in der Ausgabe von » ls -l ~ «, dass ein Unterverzeichnis von ~ keine weiteren Unterverzeichnisse hat?
|
||||
|
||||
* C 6.22 [2] Wie verhalten sich » ls -lH « und » ls -lL «, wenn ein symbolisches Link auf ein anderes symbolisches Link zeigt?
|
||||
|
||||
### Dateien suchen - find
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
sudo touch root_was_here
|
||||
ls -l
|
||||
find . -user root -print
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
find . -user root -exec ls -l '{}' \;
|
||||
```
|
||||
|
||||
Testkriterien von find in Tabelle 6.6 S. 88
|
||||
|
||||
|
||||
```bash
|
||||
find . -atime +2 -exec ls -l '{}' \;
|
||||
```
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.25 [!2] Finden Sie alle Dateien in Ihrem System, die größer als 1 MiB sind, und lassen Sie deren Namen ausgeben.
|
||||
|
||||
* C 6.26 [2] Wie können Sie find benutzen, um eine Datei zu löschen, die einen merkwürdigen Namen hat (etwa mit unsichtbaren Kontrollzeichen oder mit Umlauten, die von älteren Shells nicht verstanden werden)?
|
||||
|
||||
* C 6.27 [3] (Beim zweiten Durcharbeiten.) Wie würden Sie beim Abmelden dafür sorgen, dass etwaige Dateien in /tmp , die Ihnen gehören, automatisch gelöscht werden?
|
||||
|
||||
### Datei schnell finden - locate un slocate
|
||||
|
||||
|
||||
```bash
|
||||
locate prog
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
sudo apt update && sudo apt install --yes mlocate
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
locate prog
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
sudo updatedb
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
locate prog
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
locate "*/prog*.c"
|
||||
```
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.28 [!1] README ist ein sehr populärer Dateiname. Geben Sie die absoluten Pfadnamen aller Dateien auf Ihrem System an, die README heißen.
|
||||
|
||||
* C 6.29 [2] Legen Sie eine neue Datei in Ihrem Heimatverzeichnis an und überzeugen Sie sich durch einen locate -Aufruf, dass diese Datei nicht gefunden wird (wählen Sie gegebenenfalls einen hinreichend ausgefallenen Dateinamen). Rufen Sie dann (mit Administratorrechten) das Programm updatedb auf. Wird Ihre neue Datei danach mit locate gefunden? Löschen Sie die Datei wieder und wiederholen Sie die vorigen Schritte.
|
||||
|
||||
* C 6.30 [1] Überzeugen Sie sich, dass slocate funktioniert, indem Sie als gewöhnlicher Benutzer nach Dateien wie /etc/shadow suchen.
|
||||
|
||||
## Kommandos in diesem Kapitel
|
||||
|
||||
|
@ -1027,7 +127,7 @@ xargs Konstruiert Kommandozeilen aus seiner Standardeingabe xargs (1), Info: f
|
|||
|
||||
* Die Kommandos `cp`, `mv` und `rm` kopieren, verschieben und löschen Dateien und Verzeichnisse.
|
||||
|
||||
* Mit `ln` können Sie »harte« und »symbolische« Links anlegen.
|
||||
* Mit `ln` können Sie ["harte" und "symbolische" Links anlegen](Dateien_verknüpfen).
|
||||
|
||||
* `more` und `less` dienen zum seitenweisen Anzeigen von Dateien auf dem Terminal.
|
||||
|
||||
|
|
|
@ -0,0 +1,205 @@
|
|||
## Dateien verknüpfen – ln und ln -s
|
||||
|
||||
Eine harte Verknüpfung in einem "shared Folder" geht nicht. Daher im Ornder /tmp
|
||||
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
if [ -d links ]; then rm -rf links; fi;
|
||||
mkdir links
|
||||
ls -lisa >> links/liste
|
||||
cd links
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ln liste liste2
|
||||
ls -li
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
rm liste
|
||||
ls -li
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
cp -r ~/dateien/suchmuster .
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mkdir suchmuster2
|
||||
cp -l suchmuster/* suchmuster2
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -li suchmuster*
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ln -s /var/log kurz
|
||||
ls -l
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cd kurz
|
||||
pwd
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
pwd -P
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
ls kurz
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l kurz
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -ld kurz
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
rm kurz
|
||||
ls -l
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mkdir dir
|
||||
echo XXXXXXXXX > dir/datei
|
||||
ln -s datei dir/symlink
|
||||
ls -l dir
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -lL dir
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -lH dir
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l dir/symlink
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -lH dir/symlink
|
||||
```
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.15 [!2] Erzeugen Sie eine Datei mit beliebigem Inhalt in Ihrem Heimatverzeichnis (etwa mit » echo Hallo >~/hallo « oder einem Texteditor). Legen Sie unter dem Namen link ein hartes Link auf die Datei an. Überzeugen Sie sich, dass nun zwei Namen für die Datei existieren. Versuchen Sie den Dateiinhalt mit einem Editor zu ändern. Was passiert?
|
||||
|
||||
* C 6.16 [!2] Legen Sie unter dem Namen ~/symlink ein symbolisches Link auf die Datei aus der vorigen Aufgabe an. Prüfen Sie, ob der Zugriff funktioniert. Was passiert, wenn Sie die Zieldatei des Links löschen?
|
||||
|
||||
* C 6.17 [!2] Auf welches Verzeichnis zeigt das ..-Link im Verzeichnis »/«?
|
||||
|
||||
* C 6.18 [3] Betrachten Sie das folgende Kommando und seine Ausgabe:
|
||||
|
||||
$ ls -ai /
|
||||
2 . 330211 etc 1 proc 4303 var
|
||||
2 .. 2 home 65153 root
|
||||
4833 bin 244322 lib 313777 sbin
|
||||
228033 boot 460935 mnt 244321 tmp
|
||||
330625 dev 460940 opt 390938 usr
|
||||
|
||||
Offensichtlich haben die Verzeichnisse / und /home dieselbe Inodenummer. Da es sich dabei offensichtlich nicht wirklich um dasselbe Verzeichnis handeln kann – können Sie dieses Phänomen erklären?
|
||||
|
||||
* C 6.19 [2] Betrachten Sie die Inode-Nummern der Links » . « und » .. « im Wurzelverzeichnis ( / ) und in einigen beliebigen anderen Verzeichnissen. Was fällt Ihnen auf?
|
||||
|
||||
* C 6.20 [3] Wir haben gesagt, dass harte Links auf Verzeichnisse nicht erlaubt sind. Welchen Grund könnte es dafür geben?
|
||||
|
||||
* C 6.21 [3] Woran erkennt man in der Ausgabe von » ls -l ~ «, dass ein Unterverzeichnis von ~ keine weiteren Unterverzeichnisse hat?
|
||||
|
||||
* C 6.22 [2] Wie verhalten sich » ls -lH « und » ls -lL «, wenn ein symbolisches Link auf ein anderes symbolisches Link zeigt?
|
||||
|
||||
### Dateien suchen - find
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
sudo touch root_was_here
|
||||
ls -l
|
||||
find . -user root -print
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
find . -user root -exec ls -l '{}' \;
|
||||
```
|
||||
|
||||
Testkriterien von find in Tabelle 6.6 S. 88
|
||||
|
||||
|
||||
```bash
|
||||
find . -atime +2 -exec ls -l '{}' \;
|
||||
```
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.25 [!2] Finden Sie alle Dateien in Ihrem System, die größer als 1 MiB sind, und lassen Sie deren Namen ausgeben.
|
||||
|
||||
* C 6.26 [2] Wie können Sie find benutzen, um eine Datei zu löschen, die einen merkwürdigen Namen hat (etwa mit unsichtbaren Kontrollzeichen oder mit Umlauten, die von älteren Shells nicht verstanden werden)?
|
||||
|
||||
* C 6.27 [3] (Beim zweiten Durcharbeiten.) Wie würden Sie beim Abmelden dafür sorgen, dass etwaige Dateien in /tmp , die Ihnen gehören, automatisch gelöscht werden?
|
||||
|
||||
### Datei schnell finden - locate un slocate
|
||||
|
||||
|
||||
```bash
|
||||
locate prog
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
sudo apt update && sudo apt install --yes mlocate
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
locate prog
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
sudo updatedb
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
locate prog
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
locate "*/prog*.c"
|
||||
```
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.28 [!1] README ist ein sehr populärer Dateiname. Geben Sie die absoluten Pfadnamen aller Dateien auf Ihrem System an, die README heißen.
|
||||
|
||||
* C 6.29 [2] Legen Sie eine neue Datei in Ihrem Heimatverzeichnis an und überzeugen Sie sich durch einen locate -Aufruf, dass diese Datei nicht gefunden wird (wählen Sie gegebenenfalls einen hinreichend ausgefallenen Dateinamen). Rufen Sie dann (mit Administratorrechten) das Programm updatedb auf. Wird Ihre neue Datei danach mit locate gefunden? Löschen Sie die Datei wieder und wiederholen Sie die vorigen Schritte.
|
||||
|
||||
* C 6.30 [1] Überzeugen Sie sich, dass slocate funktioniert, indem Sie als gewöhnlicher Benutzer nach Dateien wie /etc/shadow suchen.
|
|
@ -0,0 +1,83 @@
|
|||
### Dateinamen
|
||||
|
||||
Eine der wesentlichen Dienste eines Betriebssystems wie Linux besteht darin, Daten auf dauerhaften Speichermedien wie Festplatten oder USB-Sticks speichern und später wiederfinden zu können. Um das für Menschen erträglich zu gestalten, werden zusammengehörende Daten normalerweise zu `Dateien` zusammengefasst, die auf dem Speichermedium unter einem Namen gespeichert werden.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Auch wenn Ihnen das trivial vorkommen mag: Selbstverständlich ist das nicht. Betriebssysteme in früheren Zeiten machten es mitunter nötig, dass man Gräuel wie die passenden Spurnummern auf Platten kennen musste, wenn man seine Daten wieder finden wollte.
|
||||
|
||||
__Erlaubte Zeichen__
|
||||
|
||||
Bevor wir Ihnen erklären können, wie Sie mit Dateien umgehen, müssen wir Ihnen also erklären, wie Linux Dateien benennt.
|
||||
|
||||
In Linux-Dateinamen sind grundsätzlich __alle Zeichen__ zugelassen, die der Computer darstellen kann (und noch ein paar mehr). Da einige dieser Zeichen aber eine besondere Bedeutung haben, raten wir von deren Verwendung in Dateinamen aber ab. __Komplett verboten__ innerhalb von Dateinamen sind nur __zwei Zeichen__, der __Schrägstrich__ und das __Nullbyte__ (das Zeichen mit dem ASCII-Wert 0). Andere Zeichen wie _Leerzeichen_, _Umlaute_ oder _Dollarzeichen_ können verwendet werden, müssen dann aber auf der Kommandozeile meist durch einen _Rückstrich oder Anführungszeichen maskiert_ werden, um Fehlinterpretationen durch die Shell zu vermeiden.
|
||||
|
||||
__Achtung: Groß- und Kleinschreibung__
|
||||
|
||||
Eine Stolperfalle für Umsteiger ist, dass Linux in Dateinamen zwischen Groß- und Kleinschreibung unterscheidet. Im Gegensatz zu Windows, wo Groß- und Kleinbuchstaben in Dateinamen zwar dargestellt, aber identisch behandelt werden, interpretiert Linux x- files und X- Files tatsächlich als zwei verschiedene Dateinamen.
|
||||
|
||||
Dateinamen dürfen unter Linux _ziemlich lang_ sein – eine feste allgemeinverbindliche Grenze gibt es nicht, da das __Maximum__ vom __Dateisystem__ abhängt, also der Methode, wie genau die Bytes auf der Platte arrangiert sind (davon gibt es unter Linux mehrere). Eine typische Obergrenze sind aber 255 Zeichen – und da so ein Name auf einem normalen Textterminal gut drei Zeilen einnehmen würde,
|
||||
sollte das Ihren Stil nicht übermäßig einschränken.
|
||||
|
||||
__Endungen__
|
||||
|
||||
Eine weitere Abweichung zu DOS- bzw. Windows-Rechnern besteht darin, Endungen dass bei Linux Dateien nicht durch entsprechende Endungen charakterisiert werden __müssen__. _Der Punkt ist in einem Dateinamen also ein ganz gewöhnliches Zeichen_. Ein Text kann daher als `blabla.txt` abgespeichert werden, aber einfach `blabla` wäre grundsätzlich ebenso zulässig. Was nicht heißt, dass Sie keine _Dateiendungen_ benutzen sollten – immerhin erleichtern solche Kennzeichnungen die Identifizierung des Dateiinhaltes.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Manche Programme bestehen darauf, dass ihre Eingabedateien bestimmte Endungen haben. Der C-Übersetzer `gcc` zum Beispiel betrachtet Dateien mit Namen, die auf `.c` enden, als C-Quelltext, solche mit Namen auf `.s` als Assemblerquelltext und solche mit Namen auf `.o` als vorübersetzte Objektdateien.
|
||||
|
||||
__Sonderzeichen__
|
||||
|
||||
Umlaute und andere Sonderzeichen können Sie in Dateinamen grundsätzlich ungeniert verwenden. Sollen aber Dateien gleichermaßen auf anderen Systemen benutzt werden, ist es besser, auf Sonderzeichen in Dateinamen zu verzichten, da nicht garantiert ist, dass sie auf anderen Systemen als dieselben Zeichen erscheinen.
|
||||
|
||||
__Ortseinstellung__
|
||||
|
||||
Was mit Sonderzeichen passiert, hängt auch von der Ortseinstellung ab, da es keinen allgemein üblichen Standard dafür gibt, Zeichen darzustellen, die den Zeichenvorrat des ASCII (128 Zeichen, die im wesentlichen die englische Sprache, Ziffern und die gängigsten Sonderzeichen abdecken) überschreiten. In weitem Gebrauch sind zum Beispiel die Zeichentabellen `ISO 8859-1` und `ISO 8859-15` (vulgo `ISO-Latin-1` und `ISO-Latin-9` ... fragen Sie nicht) sowie `ISO 10646`, gerne salopp und nicht ganz korrekt als `Unicode` bezeichnet und in der Regel als `UTF-8` codiert. Dateinamen mit Sonderzeichen, die Sie anlegen, während Zeichentabelle X aktiv ist, können völlig anders aussehen, wenn Sie sich das Verzeichnis gemäß Zeichentabelle Y anschauen. Das ganze Thema ist nichts, worüber man beim Essen nachdenken möchte.
|
||||
|
||||
__`convmv`__
|
||||
|
||||
Sollten Sie jemals in die Verlegenheit kommen, einen Berg Dateien vor sich zu haben, deren Namen allesamt gemäß einer verkehrten Zeichentabelle codiert sind, kann Ihnen vielleicht das Programm `convmv` helfen, das Dateinamen zwischen verschiedenen Zeichentabellen konvertieren kann. (Sie werden es vermutlich selber installieren müssen, da es sich normalerweise nicht im Standardumfang gängiger Distributionen befindet.) Allerdings sollten Sie sich damit erst befassen, wenn Sie den Rest dieses Kapitels durchgearbeitet haben, denn wir haben Ihnen noch nicht einmal das reguläre `mv` erklärt ...
|
||||
|
||||
__Portable Dateinamen__
|
||||
|
||||
Ohne Bedenken lassen sich alle Zeichen aus
|
||||
|
||||
```
|
||||
ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
abcdefghijklmnopqrstuvwxyz
|
||||
0123456789+-._
|
||||
```
|
||||
|
||||
in Dateinamen benutzen. Allerdings sollten Sie die folgenden Tipps berücksichtigen:
|
||||
|
||||
* Um den Datenaustausch mit älteren Unix-Systemen zu ermöglichen, sollte die Länge eines Dateinamens gegebenenfalls maximal 14 Zeichen betragen.
|
||||
|
||||
* Dateinamen sollten stets mit einem der genannten Buchstaben oder einer Ziffer beginnen, die vier anderen Zeichen sind nur innerhalb eines Dateinamens problemlos verwendbar.
|
||||
|
||||
Diese Konventionen lassen sich am leichtesten mit ein paar Beispielen verstehen. Zulässige Dateinamen wären etwa:
|
||||
|
||||
```
|
||||
X-files
|
||||
bla.txt.bak
|
||||
17.Juni
|
||||
7_of_9
|
||||
```
|
||||
|
||||
Schwierigkeiten wären dagegen möglich (wenn nicht gar wahrscheinlich oder sogar sicher) mit:
|
||||
|
||||
```
|
||||
-20°C Beginnt mit » - «, Sonderzeichen
|
||||
.profile Wird versteckt
|
||||
3/4-Takt Enthält verbotenes Zeichen
|
||||
Müll Enthält Umlaut
|
||||
```
|
||||
|
||||
__Versteckte Dateien__
|
||||
|
||||
Als weitere Besonderheit werden Dateinamen, die mit einem Punkt (`.`) anfangen, an einigen Stellen (etwa beim Auflisten von Verzeichnisinhalten) übersprungen – Dateien mit solchen Namen gelten als »versteckt«. Diese Eigenschaft verwendet man unter anderem gerne für Dateien, die Voreinstellungen für Programme enthalten und die in Dateinamenslisten nicht von wichtigeren Dateien
|
||||
ablenken sollen.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Für DOS- und Windows-Experten: Diese Systeme erlauben »versteckte« Dateien über ein unabhängig vom Namen zu setzendes »Dateiattribut«. Unter Linux bzw. Unix gibt es so etwas nicht.
|
|
@ -0,0 +1,298 @@
|
|||
## Kommandos für Verzeichnisse
|
||||
|
||||
### Das aktuelle Verzeichnis: cd & Co.
|
||||
|
||||
1. Wir gehen in unser `Benutzerverzeichnis` `~`.
|
||||
2. Wechseln ins Verzeichenis `dateien` und
|
||||
3. falls das Verzeichnis `briefe` existiert, wird dieses gelöscht. Sie können ganz einfach absolute von relativen Pfadnamen unterscheiden:
|
||||
Ein Pfadname, der mit `/` anfängt, ist absolut; alle anderen Pfadnamen sind
|
||||
relativ.
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
cd dateien
|
||||
pwd
|
||||
if [ -d briefe ]; then rm -rf briefe; fi;
|
||||
ls -l
|
||||
```
|
||||
|
||||
/home/vagrant/dateien
|
||||
insgesamt 16
|
||||
-rw-rw-r-- 1 vagrant vagrant 0 Mär 21 2020 datei.txt
|
||||
drwxrwxr-x 2 vagrant vagrant 4096 Mär 21 2020 geschweifte
|
||||
drwxrwxr-x 3 vagrant vagrant 4096 Mär 21 2020 kopieren
|
||||
drwxrwxr-x 2 vagrant vagrant 4096 Mär 21 2020 regulaere_Ausdruecke_-_Filter
|
||||
drwxrwxr-x 2 vagrant vagrant 4096 Mär 21 2020 suchmuster
|
||||
|
||||
|
||||
Wenn Sie `cd` keinen Parameter angeben, landen Sie in Ihrem Heimatverzeichnis.
|
||||
|
||||
Erstellen von Verzeichnissen und hineinwechseln
|
||||
|
||||
|
||||
```bash
|
||||
mkdir briefe
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -ld briefe
|
||||
```
|
||||
|
||||
drwxr-xr-x 2 vagrant vagrant 4096 Dez 22 10:44 briefe
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd briefe
|
||||
```
|
||||
|
||||
__Aktuellen Verzeichnisnamen ausgeben__
|
||||
|
||||
Mit dem Kommando `pwd` (engl. print working directory) können Sie, wie im Beispiel zu sehen, den absoluten Pfadnamen des aktuellen Verzeichnisses ausgeben.
|
||||
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
/home/vagrant/dateien/briefe
|
||||
|
||||
|
||||
Dabei ist `~/briefe` eine Abkürzung für `/home/hugo/briefe`; die Tilde (`~`) steht für das Heimatverzeichnis des aktuellen Benutzers.
|
||||
|
||||
Übergeordnetes Verzeichnis
|
||||
|
||||
|
||||
```bash
|
||||
cd ..
|
||||
pwd
|
||||
```
|
||||
|
||||
/home/vagrant/dateien
|
||||
|
||||
|
||||
Zurück ins Homeverzeichnis
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
pwd
|
||||
```
|
||||
|
||||
/home/vagrant
|
||||
|
||||
|
||||
__Zurück ins vorheriges Verzeichnis__
|
||||
|
||||
Das Kommando `cd -` wechselt in das Verzeichnis, das vor dem letzten `cd`-Kommando aktuell war. Damit können Sie bequem zwischen zwei Verzeichnissen hin und her wechseln.
|
||||
|
||||
|
||||
```bash
|
||||
cd -
|
||||
```
|
||||
|
||||
/home/vagrant/dateien
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd /var/www
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
/var/www
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls -l
|
||||
```
|
||||
|
||||
insgesamt 4
|
||||
drwxr-xr-x 3 root root 4096 Sep 11 22:56 html
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd html
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
/var/www/html
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
pwd
|
||||
```
|
||||
|
||||
/home/vagrant
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd -
|
||||
```
|
||||
|
||||
/var/www/html
|
||||
|
||||
|
||||
__Übungen__
|
||||
|
||||
* C 6.1 [2] Ist `cd` ein externes Kommando oder als internes Kommando in die Shell eingebaut? Warum?
|
||||
|
||||
* C 6.2 [3] Lesen Sie in der Handbuchseite der `bash` über die Kommandos `pushd`, `popd` und `dirs` nach. Überzeugen Sie sich, dass diese Kommandos funktionieren.
|
||||
|
||||
C 6.1 [2] Ist cd ein externes Kommando oder als internes Kommando in die Shell eingebaut? Warum?
|
||||
|
||||
### Dateien und Verzeichnisse auflisten – ls
|
||||
|
||||
| Dateityp | Farbe | Zeichen ( ls -F ) | Kennung ( ls -l ) |
|
||||
|----------|-------|-------------------|-------------------|
|
||||
|gewöhnliche Datei|schwarz| keins | - |
|
||||
|ausführbare Datei|grün| * | - |
|
||||
|Verzeichnis|blau | / | d |
|
||||
|Link |cyan | @ | l |
|
||||
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd
|
||||
cd dateien/briefe
|
||||
touch datei.txt datei2.txt
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l
|
||||
```
|
||||
|
||||
insgesamt 0
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 10:59 datei2.txt
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 10:59 datei.txt
|
||||
|
||||
|
||||
## Übungen
|
||||
|
||||
C 6.1 [2] Ist cd ein externes Kommando oder als internes Kommando in die Shell eingebaut? Warum?
|
||||
|
||||
C 6.2 [3] Lesen Sie in der Handbuchseite der bash über die Kommandos pushd,
|
||||
popd und dirs nach. Überzeugen Sie sich, dass diese Kommandos funktionieren.
|
||||
|
||||
### Dateien und Verzeichnisse auflisten – ls
|
||||
|
||||
|
||||
```bash
|
||||
ls
|
||||
```
|
||||
|
||||
datei2.txt datei.txt
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls -l
|
||||
```
|
||||
|
||||
insgesamt 0
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 10:59 datei2.txt
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 10:59 datei.txt
|
||||
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.3 [1] Welche Dateien stehen im Verzeichnis /boot ? Hat das Verzeichnis Unerverzeichnisse und, wenn ja, welche?
|
||||
|
||||
* C 6.4 [2] Erklären Sie den Unterschied zwischen ls mit einem Dateinamen als Argument und ls mit einem Verzeichnisnamen als Argument.
|
||||
|
||||
* C 6.5 [2] Wie können Sie ls dazu bringen, bei einem Verzeichnisnamen als Argument Informationen über das benannte Verzeichnis selbst anstatt über die darin enthaltenen Dateien zu liefern?
|
||||
|
||||
### Verzeichnisse anlegen und löschen: mkdir und rmdir
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/dateien
|
||||
if [ -d bilder ]; then rm -rf bilder; fi;
|
||||
#ohne if
|
||||
# rm -rf bilder
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mkdir bilder/urlaub
|
||||
```
|
||||
|
||||
mkdir: das Verzeichnis »bilder/urlaub“ kann nicht angelegt werden: Datei oder Verzeichnis nicht gefunden
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
mkdir --parent bilder/urlaub
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cd bilder
|
||||
ls -F
|
||||
```
|
||||
|
||||
murlaub
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/dateien
|
||||
rmdir bilder/urlaub
|
||||
ls -F
|
||||
```
|
||||
|
||||
bilder datei.txt kopieren/ suchmuster/
|
||||
briefe/ geschweifte/ regulaere_Ausdruecke_-_Filter/
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
mkdir -p bilder/urlaub/sommer
|
||||
rmdir bilder/urlaub/sommer
|
||||
ls -F bilder
|
||||
```
|
||||
|
||||
urlaub/
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
rmdir -p bilder/urlaub
|
||||
ls -F bilder
|
||||
```
|
||||
|
||||
ls: Zugriff auf 'bilder' nicht möglich: Datei oder Verzeichnis nicht gefunden
|
||||
|
||||
|
||||
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.6 [!2] Legen Sie in Ihrem Heimatverzeichnis ein Verzeichnis `grd1-test` mit den Unterverzeichnissen `dir1`, `dir2` und `dir3` an. Wechseln Sie ins Verzeichnis `grd1-test/dir1` und legen Sie (etwa mit einem Texteditor) eine Datei namens hallo mit dem Inhalt _hallo_ an. Legen Sie in `grd1-test/dir2` eine Datei namens `huhu` mit dem Inhalt _huhu_ an. Vergewissern Sie sich, dass diese Dateien angelegt wurden. Löschen Sie das Unterverzeichnis `dir3` mit `rmdir`.
|
||||
|
||||
Versuchen Sie anschließend, das Unterverzeichnis `dir2` mit `rmdir` zu löschen.
|
||||
|
||||
Was passiert und warum?
|
|
@ -0,0 +1,239 @@
|
|||
## Suchmuster für Dateien
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/dateien
|
||||
ls suchmuster
|
||||
```
|
||||
|
||||
a1.txt c1.txt p22.dat p-.c prog1.c prog-.c rot.txt
|
||||
a2.txt c2.txt p22.txt p..c prog2.c prog.c untitled.txt
|
||||
a3.txt c3.txt p2.c p.c prog3.c prog:.c
|
||||
b1.txt gelb.txt p3.c pop-rock.c prog4.c prog_.c
|
||||
b2.txt p1.c p4.c prog prog5.c progQ.c
|
||||
b3.txt p1.txt pa.c prog12.c progabc.c progx.c
|
||||
blau.txt p21.txt paulchen.c prog13.c prog+.c p.txt
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/p*.c
|
||||
```
|
||||
|
||||
suchmuster/p1.c suchmuster/pop-rock.c suchmuster/prog+.c
|
||||
suchmuster/p2.c suchmuster/prog12.c suchmuster/prog-.c
|
||||
suchmuster/p3.c suchmuster/prog13.c suchmuster/prog.c
|
||||
suchmuster/p4.c suchmuster/prog1.c suchmuster/prog:.c
|
||||
suchmuster/pa.c suchmuster/prog2.c suchmuster/prog_.c
|
||||
suchmuster/paulchen.c suchmuster/prog3.c suchmuster/progQ.c
|
||||
suchmuster/p-.c suchmuster/prog4.c suchmuster/progx.c
|
||||
suchmuster/p..c suchmuster/prog5.c
|
||||
suchmuster/p.c suchmuster/progabc.c
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/p?.c
|
||||
```
|
||||
|
||||
suchmuster/p1.c suchmuster/p3.c suchmuster/pa.c suchmuster/p..c
|
||||
suchmuster/p2.c suchmuster/p4.c suchmuster/p-.c
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/prog[123].c
|
||||
```
|
||||
|
||||
suchmuster/prog1.c suchmuster/prog2.c suchmuster/prog3.c
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/prog[1-9].c
|
||||
```
|
||||
|
||||
suchmuster/prog1.c suchmuster/prog3.c suchmuster/prog5.c
|
||||
suchmuster/prog2.c suchmuster/prog4.c
|
||||
|
||||
|
||||
Achtung dies funktioniert anders als im Buch
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/prog[A-z].c
|
||||
```
|
||||
|
||||
suchmuster/prog_.c suchmuster/progQ.c suchmuster/progx.c
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
ls suchmuster/prog[!A-z].c
|
||||
```
|
||||
|
||||
suchmuster/prog1.c suchmuster/prog3.c suchmuster/prog5.c suchmuster/prog-.c
|
||||
suchmuster/prog2.c suchmuster/prog4.c suchmuster/prog+.c suchmuster/prog:.c
|
||||
|
||||
|
||||
### Geschweifte Klammern
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/dateien
|
||||
if [ -d geschweifte ]; then rm -rf geschweifte; fi;
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mkdir geschweifte
|
||||
ls -d geschweifte
|
||||
cd geschweifte
|
||||
```
|
||||
|
||||
geschweifte
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
touch {rot,blau,gelb}.txt
|
||||
ls -l *.txt
|
||||
```
|
||||
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:22 blau.txt
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:22 gelb.txt
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:22 rot.txt
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
touch {a,b,c}{1,2,3}.dat
|
||||
ls -l *.dat
|
||||
```
|
||||
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 a1.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 a2.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 a3.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 b1.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 b2.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 b3.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 c1.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 c2.dat
|
||||
-rw-r--r-- 1 vagrant vagrant 0 Dez 22 12:25 c3.dat
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
mkdir -p umsatz/201{6,7}/q{1,2,3,4}
|
||||
tree umsatz
|
||||
```
|
||||
|
||||
umsatz
|
||||
├── 2016
|
||||
│ ├── q1
|
||||
│ ├── q2
|
||||
│ ├── q3
|
||||
│ └── q4
|
||||
└── 2017
|
||||
├── q1
|
||||
├── q2
|
||||
├── q3
|
||||
└── q4
|
||||
|
||||
10 directories, 0 files
|
||||
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.7 [!1] Im aktuellen Verzeichnis stehen die Dateien
|
||||
|
||||
* prog.c
|
||||
* p.txt
|
||||
* prog1.c
|
||||
* p1.txt
|
||||
* prog2.c
|
||||
* p21.txt
|
||||
* progabc.c
|
||||
* p22.txt
|
||||
* prog
|
||||
* p22.dat
|
||||
|
||||
Auf welche dieser Dateinamen passen die Suchmuster
|
||||
|
||||
(a) prog*.c,
|
||||
(b) prog?.c,
|
||||
(c) p?*.txt,
|
||||
(d) p[12]*,
|
||||
(e) p*,
|
||||
(f) *.*
|
||||
|
||||
* C 6.8 [!2] Was ist der Unterschied zwischen » ls « und » ls * «? (Tipp: Probieren Sie beides in einem Verzeichnis aus, das Unterverzeichnisse enthält.)
|
||||
|
||||
* C 6.9 [2] Erklären Sie, warum das folgende Kommando zur angezeigten Ausgabe führt:
|
||||
|
||||
$ ls
|
||||
-l datei1 datei2 datei3
|
||||
$ ls *
|
||||
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei1
|
||||
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei2
|
||||
-rw-r--r-- 1 hugo users 0 Dec 19 11:24 datei3
|
||||
|
||||
* C 6.10 [2] Warum ist es sinnvoll, dass » * « nicht auf Dateinamen mit Punkt am Anfang passt?
|
||||
|
||||
### Kopieren, Verschieben und Löschen – cp und Verwandte
|
||||
|
||||
|
||||
```bash
|
||||
cd ~/dateien
|
||||
if [ -d kopieren ]; then rm -rf kopieren; fi;
|
||||
mkdir kopieren
|
||||
ls -lisa >> kopieren/liste
|
||||
cd kopieren
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
md5sum liste
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
cp liste liste2
|
||||
md5sum liste2
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l /etc/passwd
|
||||
md5sum /etc/passwd
|
||||
cp /etc/passwd .
|
||||
ls -l
|
||||
md5sum passwd
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
mv passwd liste2
|
||||
ls -l
|
||||
md5sum *
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
rm lis*
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
ls -l
|
||||
```
|
||||
|
||||
## Übungen
|
||||
|
||||
* C 6.11 [!2] Legen Sie in Ihrem Heimatverzeichnis eine Kopie der Datei /etc/services unter dem Namen myservices an. Benennen Sie sie um in srv.dat und kopieren Sie sie unter demselben Namen ins Verzeichnis /tmp. Löschen Sie anschließend beide Kopien der Datei.
|
||||
|
||||
* C 6.12 [1] Warum hat mv keine -R -Option wie cp?
|
||||
|
||||
* C 6.13 [!2] Angenommen, in einem Ihrer Verzeichnisse steht eine Datei namens »- file« (mit einem Minuszeichen am Anfang des Namens). Wie würden Sie diese Datei entfernen?
|
||||
|
||||
* C 6.14 [2] Wenn Sie ein Verzeichnis haben, in dem Sie nicht versehentlich einem »rm *« zum Opfer fallen wollen, können Sie dort eine Datei namens »- i« anlegen, etwa mit $ > -i (wird in Kapitel 7 genauer erklärt). Was passiert, wenn Sie jetzt das Kommando » rm * « ausführen, und warum?
|
|
@ -0,0 +1,25 @@
|
|||
### Verzeichnisse
|
||||
|
||||
Da auf demselben Linux-System potentiell viele Benutzer arbeiten können, wäre es ein Problem, wenn es jeden Dateinamen nur einmal geben dürfte. Dem Benutzer `Hugo` wäre wohl nur schwer klar zu machen, dass er keine Datei namens `brief.txt` anlegen kann, weil die Benutzerin `Susi` schon eine Datei hat, die so heißt. Außerdem muss irgendwie (bequem) geregelt werden können, dass `Hugo` nicht
|
||||
alle Dateien von `Susi` lesen kann und umgekehrt.
|
||||
|
||||
Aus diesem Grund unterstützt Linux das Konzept __hierarchischer Verzeichnisse__, die zum Gruppieren von Dateien dienen. Dateinamen müssen nicht über das __ganze System__ hinweg __eindeutig__ sein, sondern nur im __selben Verzeichnis__. Das bedeutet insbesondere, dass `Hugo` und `Susi` vom System verschiedene Verzeichnisse zugeordnet bekommen können und darin dann jeweils ihre Dateien so nennen
|
||||
dürfen, wie sie mögen, ohne aufeinander Rücksicht nehmen zu müssen. Ferner kann man `Hugo` den Zugriff auf `Susis` Verzeichnis verbieten (und umgekehrt) und muss sich dann nicht mehr um die einzelnen Dateien kümmern, die dort jeweils stehen.
|
||||
|
||||
__Schrägstrich__
|
||||
|
||||
Verzeichnisse sind bei Linux auch nur Dateien, wenn auch Dateien, die Sie nicht mit denselben Mitteln bearbeiten können wie _gewöhnliche_ Dateien. Das bedeutet aber, dass für die Namen von Verzeichnissen dieselben Regeln gelten wie für die Namen von Dateien (siehe voriger Abschnitt). Sie müssen nur noch lernen, dass der Schrägstrich (`/`) dazu dient, Dateinamen von Verzeichnisnamen und Verzeichnisnamen voneinander zu trennen. `hugo/brief.txt` wäre also die Datei `brief.txt` im Verzeichnis `hugo`.
|
||||
|
||||
__Verzeichnisbaum__
|
||||
|
||||
Verzeichnisse können andere Verzeichnisse enthalten (das ist das _hierarchisch_ von weiter vorne), wodurch sich eine baumartige Struktur ergibt (naheliegenderweise gerne `Verzeichnisbaum` genannt). Ein Linux-System hat ein spezielles Verzeichnis, das die Wurzel des Baums bildet und deswegen `Wurzelverzeichnis` oder neudeutsch `root directory` genannt wird. Es hat nach Konvention den Namen `/` (Schrägstrich).
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Trotz seiner englischen Bezeichnung hat das Wurzelverzeichnis __nichts mit dem Systemverwalter root zu tun__. Die beiden heißen einfach nur so ähnlich.
|
||||
|
||||
__Hinweis__
|
||||
|
||||
Der Schrägstrich spielt hier eine Doppelrolle – er dient sowohl als Name des Wurzelverzeichnisses als auch als Trennzeichen zwischen anderen Verzeichnissen. Hierzu gleich mehr.
|
||||
|
||||
Die Grundinstallation gängiger Linux-Distributionen enthält normalerweise Zehntausende von Dateien in einer größtenteils durch gewisse Konventionen vorstrukturierten Verzeichnishierarchie. Über diese Verzeichnishierarchie erfahren Sie mehr in Kapitel 9
|
|
@ -0,0 +1,8 @@
|
|||
# Was ist ein Linux Kernel
|
||||
|
||||
Der Linux-Kernel ist ein Open-Source-Betriebssystemkernel, der die grundlegenden Funktionen und Dienste des Betriebssystems bereitstellt. Es ist das Herzstück des Linux-Betriebssystems und fungiert als eine Schnittstelle zwischen der Hardware und der Software eines Computersystems.
|
||||
|
||||
Der Linux-Kernel verwaltet Ressourcen wie Speicher, Prozesse, Dateisysteme, Ein-/Ausgabegeräte und Netzwerke. Er bietet Funktionen zur Unterstützung von Mehrbenutzerbetrieb, Dateisystemverwaltung, Gerätetreibern, Netzwerkprotokollen und anderen wesentlichen Betriebssystemdiensten.
|
||||
|
||||
Der Linux-Kernel wird von einer großen Entwicklercommunity weltweit gepflegt und weiterentwickelt. Es handelt sich um freie Software und wird unter der GNU General Public License (GPL) veröffentlicht. Dementsprechend kann der Linux-Kernel von jedem gen
|
||||
utzt, modifiziert und verbreitet werden. Es gibt viele verschiedene Distributionen von Linux, die den Linux-Kernel mit zusätzlicher Software und Tools kombinieren, um ein vollständiges Betriebssystem zu bilden.
|
|
@ -108,3 +108,22 @@ localhost ansible_connection=local
|
|||
ansible -i inventory -m ping notme
|
||||
ansible -i inventory -m ping all
|
||||
```
|
||||
|
||||
```bash
|
||||
vi ansible.cfg
|
||||
cat ansible.cfg
|
||||
```
|
||||
```
|
||||
[defaults]
|
||||
inventory = ./inventory
|
||||
```
|
||||
|
||||
```bash
|
||||
ansible -m ping all
|
||||
ansible --version
|
||||
```
|
||||
```
|
||||
ansible [core 2.12.4]
|
||||
config file = /home/vagrant/ansible_lxc_bsa2/ansible.cfg
|
||||
...
|
||||
```
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
# Wie funktioniert lxc
|
||||
|
||||
LXC steht für "LinuX Containers" und ist eine Betriebssystem-Level-Virtualisierungstechnologie. Es ermöglicht die Erstellung und Verwaltung von isolierten Containern auf einem Linux-Hostsystem.
|
||||
|
||||
Der LXC-Ansatz basiert auf dem cgroups- und namespaces-Feature des Linux-Kernels. Diese Features bieten die Möglichkeit, Ressourcen wie CPU, Speicher und Netzwerk isoliert auf Container-Ebene zu zuweisen. Darüber hinaus sorgen die namespaces dafür,
|
||||
dass Container ihre eigenen Sichtbarkeiten innerhalb des Systems haben, sodass sie voneinander isoliert sind.
|
||||
|
||||
Um LXC zu nutzen, müssen zunächst die entsprechenden Kernel-Module auf dem Hostsystem geladen sein. Dies kann über den Linux-Kernel-Konfigurationsmanager oder durch das Laden der entsprechenden Kernel-Module erfolgen.
|
||||
|
||||
Anschließend können mit Tools wie "lxc-create" und "lxc-start" Container erstellt und gestartet werden. LXC verwendet einen Template-basierten Ansatz, um die Erstellung von Containern zu vereinfachen. Es stehen verschiedene Vorlagen zur Verfügung, wie z.B. "ubuntu" oder "centos", die als Basis für die Container verwendet werden können.
|
||||
|
||||
Einmal gestartet, können Container mit dem Befehl "lxc-attach" verwaltet werden. Dies ermöglicht das Ausführen von Befehlen innerhalb des Containers und das Anzeigen seines Status.
|
||||
|
||||
Es ist zu beachten, dass LXC keine volle Virtualisierungstechnologie ist, sondern eine leichtgewichtige Form der Isolation von Betriebssystemressourcen bietet. Dies macht es effizienter als traditionelle Virtualisierungslösungen wie z.B. VirtualBox oder VMware, da es weniger Overhead und eine geringere Startzeit für Container hat.
|
||||
|
||||
LXC kann vielseitig eingesetzt werden, z.B. für die Bereitstellung von isolierten Entwicklungs- oder Testumgebungen, das Partitionieren eines Hostsystems in mehrere logische Einheiten oder die Bereitstellung von sicheren Containern für Webanwendungen.
|
||||
|
||||
Insgesamt bietet LXC eine flexible und effiziente Möglichkeit, Container auf Linux-Hostsystemen bereitzustellen und zu verwalten. Es ist eine beliebte Wahl für Entwickler und Systemadministratoren, die isolierte und skalierbare Umgebungen benötigen.
|
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
Loading…
Reference in New Issue