Welche Beziehung besteht zwischen MIME-Typen und Dateierweiterungen?

19

Ich kann die falsche Idee hier haben, aber ich dachte, dass:

MIME-Typen identifizieren Codes, die in eine Datei eingebettet sind .
Datei .extensions sind idenifying Codes, suffixed auf die Dateinamen .

Ich dachte, nach etwas, was ich in den dunklen Zeiten gehört habe, dass Linux .extension-agnostisch ist ... (Vielleicht war es in den frühen Tagen, und die Dinge haben sich seitdem geändert ...?)

Ich komme kürzlich aus der Windows-Welt, in der auf Betriebssystemebene eine Dateierweiterung die einzige Möglichkeit ist (soweit ich weiß), sie mit dem entsprechenden Anwendungsprogramm zu verknüpfen.

Da ich nicht weiß warum , finde ich es ein bisschen beunruhigend, dass eine Datei mit dem Namen "fred" und eine Datei mit dem Namen "fred.txt" beide in einem Texteditor geöffnet werden.

Gibt es hier eine klare Hierarchie?

Peter.O
quelle

Antworten:

16

MIME-Typen sind nur eine Möglichkeit, Typen zu benennen. Sie haben nichts damit zu tun, wie der Dateityp bestimmt wird.

Es gibt zwei Möglichkeiten, den Dateityp zu bestimmen: a) Sehen Sie sich die Dateierweiterung an und hoffen Sie, dass sie korrekt ist, oder b) schauen Sie sich den Inhalt an und raten Sie danach. Wenn eine Datei keine Erweiterung hat, ist b die einzige Option.

Viele (binäre) Dateiformate haben einen bestimmten Header, anhand dessen Sie den Typ bestimmen können. Dies macht Option b für diese Typen recht zuverlässig.

Nur-Text-Dateiformate können häufig durch ihre Struktur bestimmt werden (wenn eine Datei viele HTML-Tags enthält, handelt es sich wahrscheinlich um eine HTML-Datei).

Auf Unix- und Linux-Systemen können Sie das fileBefehlszeilendienstprogramm verwenden, um den Dateityp anhand seines Inhalts zu ermitteln.

Der Dateimanager verwendet häufig eine Kombination aus Option a und b (z. B. zuerst die Dateierweiterung überprüfen, wenn diese nicht bekannt ist (oder wenn die Datei keine Erweiterung hat), dann den Inhalt überprüfen).

Der Dateityp wird auf gängigen Linux-Dateisystemen nicht als Metadaten gespeichert.

sepp2k
quelle
14

Unter Linux ist die Dateierweiterung Teil des Dateinamens und bedeutet für das Betriebssystem eigentlich nichts. Ein MIME-Typ ist eine Beschreibung des Inhalts der Datei. fredund fred.txtbeide hätten einen MIME-Typ von text/plain.

Dateimanager wie Nautilus verwenden diesen MIME-Typ, um zu ermitteln, mit welchem ​​Programm die Datei geöffnet werden soll. In einem Terminal macht der xdg-openBefehl dasselbe. Dies ist jedoch die Benutzerspeicherebene und nicht die Betriebssystemebene.

Dateien enthalten diesen MIME-Typ eigentlich nicht, aber die Programme, die sie öffnen, verwenden verschiedene Methoden, um herauszufinden, um welchen MIME-Typ es sich handelt. Einige basieren nur auf der Dateierweiterung, die meisten verwenden jedoch eine Mischung aus Techniken, einschließlich des Betrachtens der Daten am Anfang der Datei.

Wenn der Anfang der Datei nur Bytes enthält, die als ASCII-Zeichen dargestellt werden können, ist davon auszugehen, dass es sich um eine Textdatei handelt. Wenn die Erweiterung dann so etwas wie .html ist, geht das Programm davon aus, dass es sich um eine HTML-Seite handelt, und öffnet sie daher mit einem Webbrowser. Dasselbe gilt für Binärdateiformate. Ich weiß zum Beispiel, dass das Bitmap-Dateiformat mit 'BMP' in ASCII beginnt, gefolgt von Binärdaten, die das Bild darstellen.

Einfach gesagt, machen Linux-Programme eine fundierte Vermutung basierend auf den Daten in einer Datei und ihrer Dateierweiterung. Dies mag nicht sehr zuverlässig klingen, aber die verwendeten Algorithmen sind komplizierter als die von mir angegebenen Beispiele und tatsächlich sehr genau.

dv3500ea
quelle
5

In der Linux-Welt sind Dateierweiterungen nur ein Indikator für den Dateityp. Es gibt ein Befehlszeilentool namens "file", das den Typ einer Datei errät.

Um diesen Typ zu erhalten, gibt es hauptsächlich 3 Indikatoren:

  • Die Erweiterung
  • Spezielle Attribute im Dateisystem (zB für Sym- oder Hardlinks, Ordner, Eingabegerät etc.)
  • Der Inhalt
    • Binär (wie ELF-Informationen in ausführbaren Dateien)
    • Textual (wie <html>, #!/bin/bash)

Die Beziehung zwischen dem Dateityp und dem MIME-Typ besteht darin, dass MIME nur ein Standard ist, um den Dateityp (ähnlich text/css) darzustellen .

Linux "errät" den Dateityp und öffnet ein zugehöriges Programm für diesen Typ.

Lincoln
quelle