Linux Deutsch

Dateitypen unter Linux mit dem Befehl file erkennen

Lernen Sie, wie Sie mit file unter Linux Dateitypen anhand ihres Inhalts, ihrer Signaturen und Dateisystemeigenschaften erkennen.

Der Linux-Befehl file klassifiziert Dateien anhand ihres Inhalts und bestimmter Dateisystemeigenschaften. Damit lässt sich prüfen, ob eine Datei tatsächlich ein Text, Bild, Archiv, Programm oder ein anderes Format ist.

Dieser Befehl ist besonders nützlich, wenn eine Datei keine Endung besitzt, falsch benannt wurde oder vor dem Öffnen beziehungsweise Ausführen untersucht werden soll.

Warum Dateiendungen nicht genügen

Unter Linux bestimmt die Dateiendung den Dateityp nicht. Ein Dateiname wie bericht.pdf ist zunächst nur ein Name. Die Datei kann trotz dieser Endung Text, ein Bild, ein Programm oder beliebige Binärdaten enthalten.

file liest dagegen ausgewählte Teile der Datei und untersucht ihre Struktur. Es zeigt also nicht bloß den Dateinamen an, sondern liefert eine inhaltliche Klassifikation:

file angebliches_dokument.pdf

Wenn der Inhalt beispielsweise ein PNG-Bild ist, kann file dies unabhängig von der Endung melden. Die Ausgabe beschreibt jedoch den erkannten Inhalt und nicht zwingend den beabsichtigten Einsatzzweck der Datei.

Grundsyntax

Die einfachste Form besteht aus dem Befehl und einem Dateipfad:

file DATEI

Relative Pfade beziehen sich auf das aktuelle Arbeitsverzeichnis:

file ./unbekannt

Ein absoluter Pfad beginnt beispielsweise mit /home:

file /home/alex/Downloads/unbekannt

Mehrere Dateien können in einem Aufruf angegeben werden:

file dokument.txt bilddatei programm

Normalerweise gibt file für jede Datei eine eigene Zeile aus. Dateinamen mit Leerzeichen oder Shell-Sonderzeichen müssen geschützt werden. Anführungszeichen behandeln den gesamten Namen als ein Argument:

file "Mein Dokument"
file 'Daten (alt).bin'

Alternativ kann ein Leerzeichen mit einem Backslash maskiert werden:

file Mein\ Dokument

Welche Dateitypen erkennt file?

Je nach Inhalt und verfügbarer Regelbasis erkennt file unter anderem folgende Kategorien:

  • Textdateien, etwa ASCII-Text oder UTF-8-kodierten Unicode-Text
  • Quelltexte und Skripte durch Text- und Sprachtests
  • ausführbare Programme, Objektdateien und Bibliotheken im ELF-Format
  • Bilder wie PNG, JPEG oder andere bekannte Bildformate
  • Audio- und Videodateien
  • Dokumentformate wie PDF
  • Archive und komprimierte Daten, etwa gzip-komprimierte Dateien
  • Verzeichnisse, symbolische Links, Gerätedateien und andere spezielle Dateisystemobjekte
  • leere Dateien

Ein symbolischer Link ist ein Dateisystemverweis auf einen anderen Pfad. Eine ELF-Datei ist ein unter Linux übliches Format für ausführbare Programme, Objektdateien und Bibliotheken.

Wie bestimmt file den Dateityp?

file verwendet mehrere Testgruppen. Welche Beschreibung ausgegeben wird, hängt davon ab, welcher Test zuerst erfolgreich eine passende Klassifikation liefert.

TestgruppeWorauf geprüft wirdMögliche Ergebnisse
DateisystemtestsMetadaten und besondere Dateisystemobjektedirectory, symbolic link, Gerätedatei oder empty
Magic-SignaturenCharakteristische Bytefolgen, häufig am Anfang einer BinärdateiPNG image data, PDF document oder gzip compressed data
Text- und SprachtestsLesbare Zeichen, Steuerzeichen und typische Muster von Text, Quelltext oder SkriptenASCII text, UTF-8 Unicode text oder Shell script

Dateisystemtests

Zuerst können Eigenschaften des Dateisystemobjekts ausschlaggebend sein. Ein Verzeichnis wird als directory erkannt, ein Link als symbolic link und eine Datei ohne Inhalt als empty. Dafür muss der eigentliche Dateiinhalt nicht wie bei einem Binärformat analysiert werden.

Magic Numbers und Magic-Datei

Eine Magic Number ist eine charakteristische Bytefolge, die bei vielen Formaten an einer bekannten Position steht. So beginnt ein PNG-Bild mit einer typischen Signatur, die von file erkannt werden kann.

Die Regeln dafür stehen in einer Magic-Datei. Sie enthält Signaturen, Positionen, Datentypen und Beschreibungen. file vergleicht die gelesenen Bytes mit dieser Regelbasis.

Text- und Sprachtests

Wenn keine passende Binärsignatur gefunden wird, kann file den Inhalt als Text untersuchen. Dabei werden unter anderem Zeichen und typische Strukturen betrachtet. Das ermöglicht Hinweise auf ASCII-Text, UTF-8-Text, Quellcode oder Skripte.

Die Erkennung einer Zeichenkodierung ist nicht immer eindeutig. Ein Texttest beschreibt daher eine wahrscheinliche Klassifikation, keine vollständige semantische Analyse.

Die Standardausgabe verstehen

Die normale Ausgabe besteht aus dem übergebenen Dateinamen, einem Doppelpunkt und der erkannten Beschreibung:

$ file notiz.txt bild.png archiv.gz programm
notiz.txt:  UTF-8 Unicode text
bild.png:   PNG image data
archiv.gz:  gzip compressed data
programm:   ELF 64-bit LSB executable
Ausgabe beziehungsweise SchlüsselbegriffBedeutungTypischer Anwendungsfall
ASCII textText mit ASCII-ZeichenEinfache Konfigurations- oder Textdateien
UTF-8 Unicode textText, der als UTF-8 erkannt wurdeMehrsprachige Textdateien und Quelltexte
ELF executableAusführbare Datei im ELF-FormatLinux-Programm prüfen
directoryVerzeichnisDateisystemobjekt statt regulärer Datei
symbolic linkSymbolischer LinkLink selbst untersuchen
emptyDatei ohne InhaltLeere Datei erkennen
gzip compressed datagzip-komprimierte DatenKomprimiertes Archiv oder Datenstrom
PNG image dataPNG-Bild anhand seiner Signatur erkanntBilddatei unabhängig von der Endung identifizieren

Nützliche Optionen

OptionWirkungBeispiel
-b beziehungsweise --briefGibt nur die Typbeschreibung ohne Dateinamen aus.file -b datei
-L beziehungsweise --dereferenceFolgt einem symbolischen Link und untersucht das Ziel.file -L verweis
-i beziehungsweise --mimeGibt MIME-Typ und meist auch die erkannte Zeichenkodierung aus.file -i datei
--mime-typeGibt nur den MIME-Typ aus.file --mime-type datei
-k beziehungsweise --keep-goingZeigt weitere passende Erkennungen an, statt nach dem ersten Treffer zu enden.file -k datei
-z beziehungsweise --uncompressVersucht, bei unterstützten komprimierten Dateien den Inhalt zusätzlich zu untersuchen.file -z archiv.gz
-mVerwendet eine alternative Magic-Datei beziehungsweise Regelbasis.file -m /pfad/zur/magic datei

Für MIME-Ausgaben sind insbesondere diese Varianten praktisch:

file --mime-type datei
file --mime datei

Ein MIME-Typ ist eine standardisierte Medienformatbezeichnung wie text/plain oder image/png. Die Zeichenkodierung beschreibt, wie Textzeichen als Bytes gespeichert sind, beispielsweise ASCII oder UTF-8.

Bei Stapelverarbeitung sollen oft nur reguläre Dateien untersucht werden. Mit find lässt sich die Auswahl auf das aktuelle Verzeichnis begrenzen:

find . -maxdepth 1 -type f -exec file {} +

Dieser Befehl verarbeitet reguläre Dateien im aktuellen Verzeichnis, aber keine Unterverzeichnisse. Weitere Hinweise zu find-ähnlichen Dateiarbeiten finden Sie im Bereich Arbeiten mit Dateien.

Praktische Einsatzfälle

Unbekannte Datei ohne Endung

file unbekannt

So lässt sich schnell feststellen, ob die Datei wahrscheinlich Text, ein Programm, ein Archiv oder ein anderes Format enthält.

Download vor dem Öffnen prüfen

file ~/Downloads/neue_datei

Die Ausgabe kann eine erste Einordnung liefern. Eine als Dokument bezeichnete Datei, die tatsächlich ein ausführbares Programm ist, sollte besonders vorsichtig behandelt werden.

Falsch benannte Datei erkennen

file angebliches_dokument.pdf

Weicht die erkannte Beschreibung von der Endung ab, wurde die Datei möglicherweise umbenannt, falsch gespeichert oder unvollständig übertragen.

Mehrere Dateien vergleichen

file dokument.txt bilddatei programm

Das ist praktisch, um Skripte, Binärdateien und Archive in einer Auswahl schnell voneinander zu unterscheiden.

Symbolischen Link untersuchen

Ohne besondere Option beschreibt file in der Regel den Link selbst:

file verweis

Mit -L wird das Zielobjekt untersucht:

file -L verweis

Prüfen Sie dabei auch, ob das Linkziel existiert und lesbar ist.

Grenzen der Erkennung

  • Endung und tatsächlicher Inhalt können voneinander abweichen.
  • Verschlüsselte, beschädigte oder proprietäre Dateien lassen sich möglicherweise nur als allgemeine Daten klassifizieren.
  • Wenn file nur data meldet, fehlt möglicherweise eine passende Regel oder die Datei besitzt keine eindeutige Signatur.
  • Komprimierte oder eingebettete Inhalte können zusätzliche Werkzeuge zur weiteren Analyse erfordern.
  • Die Ausgabe ist eine Erkennung, keine Garantie für Herkunft, Integrität oder Sicherheit.

Probleme beheben

file meldet nur data

Häufig ist das Format nicht in der verfügbaren Magic-Regelbasis enthalten. Weitere Ursachen sind Verschlüsselung, Beschädigung oder ein proprietäres Binärformat.

  • Prüfen Sie Dateigröße und erste Bytes mit geeigneten Analysewerkzeugen wie od.
  • Testen Sie bei Verdacht auf Komprimierung file -z datei.
  • Verwenden Sie gegebenenfalls eine aktuelle oder ergänzte Magic-Regelbasis.

Der Befehl od kann bei der Untersuchung von Bytefolgen hilfreich sein.

Die Ausgabe passt nicht zur Endung

Verlassen Sie sich für die weitere Prüfung auf den ermittelten Inhalt, nicht auf den Dateinamen. Öffnen oder starten Sie die Datei nicht allein wegen ihrer Endung. Bei wichtigen Dateien sollten Sie zusätzlich Herkunft und Integrität kontrollieren.

Eine Textdatei wird nicht als Text erkannt

Ungewöhnliche Kodierungen, Binärdaten, viele Steuerzeichen oder eine leere Datei können die Klassifikation beeinflussen. Verwenden Sie:

file --mime datei

Kontrollieren Sie außerdem die Dateigröße und betrachten Sie den Inhalt nur vorsichtig mit einem geeigneten Textanzeigewerkzeug wie less. Hinweise dazu bietet der Beitrag less Befehl.

Kein Zugriff auf die Datei

Bei einem Fehler prüfen Sie zunächst den Pfad, das gemountete Dateisystem und die Leseberechtigungen. Informationen zu Berechtigungen finden Sie unter Arten von Zugriffsrechten. Verwenden Sie nur Zugriffsrechte, zu denen Sie berechtigt sind.

Zusammenfassung

  • file DATEI bestimmt einen Dateityp anhand von Inhalt und Dateisystemeigenschaften.
  • Dateiendungen sind unter Linux nicht maßgeblich und können irreführend sein.
  • Dateisystemtests, Magic-Signaturen und Texttests liefern die Klassifikation.
  • Mit -L untersuchen Sie das Ziel eines symbolischen Links.
  • --mime-type und --mime liefern standardisierte Format- und Kodierungsangaben.
  • Eine Ausgabe wie data bedeutet nur, dass keine genauere Regel erfolgreich war.
  • file ist ein Analysewerkzeug, aber keine vollständige Sicherheitsprüfung.