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.pdfWenn 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 DATEIRelative Pfade beziehen sich auf das aktuelle Arbeitsverzeichnis:
file ./unbekanntEin absoluter Pfad beginnt beispielsweise mit /home:
file /home/alex/Downloads/unbekanntMehrere Dateien können in einem Aufruf angegeben werden:
file dokument.txt bilddatei programmNormalerweise 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\ DokumentWelche 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.
| Testgruppe | Worauf geprüft wird | Mögliche Ergebnisse |
|---|---|---|
| Dateisystemtests | Metadaten und besondere Dateisystemobjekte | directory, symbolic link, Gerätedatei oder empty |
| Magic-Signaturen | Charakteristische Bytefolgen, häufig am Anfang einer Binärdatei | PNG image data, PDF document oder gzip compressed data |
| Text- und Sprachtests | Lesbare Zeichen, Steuerzeichen und typische Muster von Text, Quelltext oder Skripten | ASCII 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üsselbegriff | Bedeutung | Typischer Anwendungsfall |
|---|---|---|
| ASCII text | Text mit ASCII-Zeichen | Einfache Konfigurations- oder Textdateien |
| UTF-8 Unicode text | Text, der als UTF-8 erkannt wurde | Mehrsprachige Textdateien und Quelltexte |
| ELF executable | Ausführbare Datei im ELF-Format | Linux-Programm prüfen |
| directory | Verzeichnis | Dateisystemobjekt statt regulärer Datei |
| symbolic link | Symbolischer Link | Link selbst untersuchen |
| empty | Datei ohne Inhalt | Leere Datei erkennen |
| gzip compressed data | gzip-komprimierte Daten | Komprimiertes Archiv oder Datenstrom |
| PNG image data | PNG-Bild anhand seiner Signatur erkannt | Bilddatei unabhängig von der Endung identifizieren |
Nützliche Optionen
| Option | Wirkung | Beispiel |
|---|---|---|
-b beziehungsweise --brief | Gibt nur die Typbeschreibung ohne Dateinamen aus. | file -b datei |
-L beziehungsweise --dereference | Folgt einem symbolischen Link und untersucht das Ziel. | file -L verweis |
-i beziehungsweise --mime | Gibt MIME-Typ und meist auch die erkannte Zeichenkodierung aus. | file -i datei |
--mime-type | Gibt nur den MIME-Typ aus. | file --mime-type datei |
-k beziehungsweise --keep-going | Zeigt weitere passende Erkennungen an, statt nach dem ersten Treffer zu enden. | file -k datei |
-z beziehungsweise --uncompress | Versucht, bei unterstützten komprimierten Dateien den Inhalt zusätzlich zu untersuchen. | file -z archiv.gz |
-m | Verwendet 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 dateiEin 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 unbekanntSo 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_dateiDie 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.pdfWeicht 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 programmDas 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 verweisMit -L wird das Zielobjekt untersucht:
file -L verweisPrü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
filenurdatameldet, 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 dateiKontrollieren 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 DATEIbestimmt 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
-Luntersuchen Sie das Ziel eines symbolischen Links. --mime-typeund--mimeliefern standardisierte Format- und Kodierungsangaben.- Eine Ausgabe wie
databedeutet nur, dass keine genauere Regel erfolgreich war. fileist ein Analysewerkzeug, aber keine vollständige Sicherheitsprüfung.