wie ist eine Datei aufgebaut?
Ich würde gerne wissen welche bestandteile eine Datei alles hat (also Inhalt, Eigenschaften,header,....) und was wo entahlten ist...
6 Antworten
![](https://images.gutefrage.net/media/user/guenterhalt/1444744799_nmmslarge.jpg?v=1444744799000)
Dateien sind erst einmal ein "langer Faden" von Bytes oder auch Bits. Auf einem Magnetband sind die anders angeordnet als auf einer CD oder auf einer Festplatte.
Zu einer Datei gehören je nach Betriebssystem noch Daten, sogenannte Metadaten, die Informationen über die Datei enthalten. Je höher ein Betriebssystem entwickelt, um so mehr solcher "Zusatzdaten" sind notwendig.
Unix, VMS, Linux .. benötigen neben den Informationen über Erstellungsdatum, Änderungsdatum auch Einträge über den Besitzer, eine Gruppe, die Zugriffsrechte ...
Einfache Betriebssysteme, wie DOS und Windows, die über keine Userdaten verfügen müssen, benötigen weniger Metadaten.
Die Dateien selbst verfügen je nach Typ über Header, die den Programmen, mit denen sie verarbeitet (geöffnet) werden sollen, spezielle Informationen.
Unix/Linux kann daran den Typ erkennen und benötigt daher keine Dateinamen-Erweiterungen wie .doc oder .pdf ....
![](https://images.gutefrage.net/media/user/guenterhalt/1444744799_nmmslarge.jpg?v=1444744799000)
Seit ca. 30 Jahren benutze ich fast nur noch tcl als Programmiersprache.
Mit der Standard-Funktion file komme ich an die meisten Daten heran. Mit stat an den Rest.
In anderen Sprachen wird es ähnliche Funktionen/Proceduren geben.
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
Wie genau würde das aussehen?
Ich habe mir mit:
sudo apt-get install tcl tk
tcl installiert und es mit:
tclsh
gestartet.
Wenn ich aber z.B.:
% file stat test.png f
% puts $f
Mache. Bekomme ich folgenden Fehler:
can't read "file": variable is array
Ich kenne mich mit tcl leider nicht wirklich aus und weiß deshalb nicht wie ich dieses array ausgeben kann.
Kannst du mir helfen?
![](https://images.gutefrage.net/media/user/guenterhalt/1444744799_nmmslarge.jpg?v=1444744799000)
So aus dem Hut kann ich das nicht sagen. Bin noch 2 Wochen im Urlaub und komme nicht an meinen PC
Mit tcl wurden aber auch die manuals installiert
man file
Und dann lesen.
Die Daten werden in ein Array geschrieben, die dann über einen Namen ausgelesen werden können.
Helfen kann ich so in 2 Wochen.
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/guenterhalt/1444744799_nmmslarge.jpg?v=1444744799000)
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
So wie es aussieht hat $f keinen inhalt:
can't read "f(owner)": no such element in array
![](https://images.gutefrage.net/media/user/guenterhalt/1444744799_nmmslarge.jpg?v=1444744799000)
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
Da kommt der gleicher Fehler.
So wie ich das verstanden habe ist das Arry leer.
mit $f(owner) oder $f(OWNER) sollte ich normaler weise den Owner also den Besitzer der Datei aus dem array auslesen können.
also ist die Klammer dazu da ein Element aus dem array zu laden...
Korrigiere mich bitte wenn ich Falsch liege.
![](https://images.gutefrage.net/media/user/guenterhalt/1444744799_nmmslarge.jpg?v=1444744799000)
Genau so ist es . Tcl kennt nur String als Datentyp. Damit wird auch in Arrays eine Zeichenkette zur Kennzeichnung eines Elements benutzt. Die kann auch 0 sein, ist aber doch "0" und kein int-Wert.
Es ist damit auch nicht möglich auf z.B. auf ein Element mit Index 1 zuzugreifen. Man muss den Namen kennen. Auch wenn ich das schon oft benutzt habe, ich will es mit einfach nicht merken. Merke mir aber wo es steht und das ist in
man n file
( n ist für tcl/tk als Sektor vorgesehen)
![](https://images.gutefrage.net/media/user/guenterhalt/1444744799_nmmslarge.jpg?v=1444744799000)
Hab im Netz ein Manual gefunden,
Owner gehört in keiner Schreibweise dazu. Aber z.B mtime
puts [file attributes -owner <filename>]
sollte den Besitzer anzeigen.
Warum man da einige Parameter anders behandelt? Keine Ahnung.
![](https://images.gutefrage.net/media/user/daCypher/1444744777_nmmslarge.jpg?v=1444744777000)
Wahrscheinlich meinst du sowas, wie den Aufbau eines TCP-Pakets, nur eben bei Dateien, oder? Da gibt es nichts. In der FAT steht drin, bei welchem Cluster die Datei anfängt und wieviele Byte sie lang ist. Die Festplatte wird dann einfach angewiesen, die Bytes, die in dem Bereich stehen, in den Lesepuffer zu schreiben.
Eine Textdatei besteht also z.B. einfach nur aus dem Text, der in der Datei steht. Andere Dateitypen, wie z.B. Bilder oder Dokumente haben in der Regel zusätzlich zur Dateiendung noch am Anfang der Datei eine "magic number", die dem jeweiligen Programm dazu dient, die Datei eindeutig zu identifizieren.
Ansonsten ist aber jede Datei anders aufgebaut.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Eine Datei hat keine Struktur in dem Sinne.
Es gibt einen Dateieintrag im Dateisystem. Dieser enthält den Namen, Erstelldatum/Zeit, letzten Zugriff oder auch Zugriffsrechte und wo genau auf der Festplatte die Datei liegt. Aber das ist je Dateisystem verschieden und normalerweise auch nicht direkt sichtbar. Das zeigt der Dateibrowser dir eben aufgearbeitet an!
![](https://images.gutefrage.net/media/user/guenterhalt/1444744799_nmmslarge.jpg?v=1444744799000)
Nicht direkt sichtbar?
Was ist dann der Report von ls -lai ?
Es gibt eben mehr als nur Fenster mit Informationen für "Hausfrauen".
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Das ist mir klar. Aber dort sind die Informationen bereits aufgearbeitet! Du siehst keine Startsektoren, keine Inodes auch die Clusterchain ist versteckt.
![](https://images.gutefrage.net/media/default/user/14_nmmslarge.png?v=1551279448000)
Genau. Dazu müsste man schon wissen, was für eine Datei, denn unterschiedliche Dateitypen haben unterschiedliche Formate.
![](https://images.gutefrage.net/media/default/user/13_nmmslarge.png?v=1551279448000)
Gibt es keinen strukturierten Aufbau?
Also etwas das jede Datei haben muss um zu funktionieren?
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Nein. Es ist Aufgabe der Software, diese neutrale Folge von Bytes zu interpretieren. Eine Png-Datei fängt z.B. so an:
https://de.wikipedia.org/wiki/Portable_Network_Graphics#Dateikopf
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Kommt auf das Datei-Format an. Einfache Text-Datei, PDF, Video.... In jedem Fall viele 0er und 1er.
Wie kann ich diese Metaten auslesen und gegebenenfalls auch verändern(z.B. wenn ich selbst ein Programm schreibe welches Metadaten benötigt)?