file-Befehl unter Linux

Datei-Typen abfragen

Hast du dich schon mal gefragt: Mit welchem Programm kann ich diese Datei öffnen? Oder womit habe ich das irgendwann mal erstellt?

Natürlich kannst du zu diesem Zweck eine Suchmaschine befragen und dir werden (hoffentlich brauchbare) Ergebnisse ausgegeben.

Aber wusstest du schon, das du diese Frage unter Linux auch lokal im Terminal beantworten kannst? Dafür gibt es den Befehl file.

Dieser Artikel zeigt dir die Funktionsweise, wichtige Optionen und praktische Beispiele, die dir helfen werden file effektiv zu nutzen.

Einfacher Aufruf

Starten wir mit dem einfachsten Aufruf. Damit kannst du herausfinden, was für eine Datei du vor dir hast:

1
file dokument.odt

Bei mir produziert das zum Beispiel folgendes Ergebnis:

1
dokument.odt: OpenDocument Text

Wenn ich es also nicht mehr wüsste, dann hätte ich jetzt die Antwort: Ich kann dokument.odt mit LibreOffice Writer öffnen.

Funktionsweise von file

Hinter den Kulissen ist es aber noch viel spannender: Der Befehl file führt zur Ermittlung vom Dateityp verschiedene Tests aus.

Begonnen wird mit Dateisystem-Tests, gefolgt von Magic-Tests und zum Schluss erfolgen Sprach-Tests.

Magie? 🔮 Naja, nicht ganz. Für den Magic-Part werden Dateien hergenommen in denen viele Muster von bekannten Formaten gespeichert sind. Diese findest du lokal meist in der Datei /usr/share/misc/magic.mgc oder im Ordner /usr/share/misc/magic.

Wichtige Optionen von file

Bevor wir uns gleich der praktischen Nutzung zuwenden, schauen wir zunächst einige Flags an, die du zusammen mit file einsetzen kannst:

Option Bedeutung
-l / --list zeigt unterstützte Datei-Typen an
-b / --brief erzeugt eine knappe Ausgabe
-k / --keep-going sucht mehrere mögliche Treffer für eine Datei
-z / --umcompress dekomprimiert und analysiert Archive, wie .gz
-i / --mime zeigt den Mime-Typ an
-s / --special-files lässt die Analyse von Spezial-Files zu, wie Devices
-f / --files-from liest die Datei aus einer Datei

Daran erkennst du bereits, wo dir file noch nützlich sein kann.

Praktische Beispiele

Sehen wir uns jetzt den echten Einsatz an, um dich nicht weiter mit der trockenen Theorie 📚 zu langweilen.

alle Typen auflisten und durchsuchen

Eher informativ, aber trotzdem lesenswert ist die Ausgabe welchen Arten von Dateien du mit file ermitteln kannst.

Das geht einfach so:

1
file -l

Da die Ausgabe umfangreich ist, kannst du sie seitenweise lesen:

1
file -l | less

Oder du filterst das Ergebnis nach Begriffen, die für dich relevant sind:

1
file -l | grep -i 'microsoft'

kurze Ausgabe

Wenn du nur an der Angabe vom Typ interessiert bist, dann wird dir diese Variante schon zu viel sein:

1
file dokument.odt

Das Weglassen vom Dateinamen kannst du erzwingen mit -b oder --brief:

1
file -b dokument.odt

Dann sieht die Ausgabe nur noch so aus:

1
OpenDocument Text

mehrere Treffer anzeigen

Häufig kommt es auch vor, dass eine Datei in einer anderen eingebettet ist. So etwas kannst du mit -k oder --keep-going gut herausfinden.

Zuerst habe ich ein kombiniertes File erstellt:

1
cat IceCold.png nicht_sichtbar.zip > kombiniert.png

Ein einfacher Aufruf zeigt nichts Ungewöhnliches:

1
2
3
file kombiniert.png
# Ausgabe:
kombiniert.png: PNG image data, 5120 x 2880, 8-bit/color RGB, non-interlaced

Die Anweisung zur weiteren Suche mit -k bringt jedoch interessante Ergebnisse:

1
2
3
file -k kombiniert.png
# Ausgabe:
kombiniert.png: PNG image data, 5120 x 2880, 8-bit/color RGB, non-interlaced\012-  Zip archive, with extra data prepended\012- data

In diesem Fall zeigt es mir zum Beispiel auch an, dass es sich ausserdem um ein ZIP-Archiv handelt.

Und falls du dich gefragt hast: Was bedeutet dieses \012- in der Ausgabe? Das ist die Standard-Text-Sequenz, die in diesem Fall von file verwendet wird.

Du kannst stattdessen auch ein anderes Trennzeichen angeben, um die Ausgabe übersichtlicher zu gestalten:

1
2
3
4
5
file -k kombiniert.png -r
# Ausgabe:
kombiniert.png: PNG image data, 5120 x 2880, 8-bit/color RGB, non-interlaced
-  Zip archive, with extra data prepended
- data

Dekomprimierung zur Analyse

Etwas offensichtlicher als bei eingebetteten Dateien ist die Betrachtung von Inhalten eines Archivs. Dabei kannst du Formate .gz, .xz oder .bz2 betrachten.

Hier ein Beispiel:

1
2
3
4
5
6
file -z ein.tgz -k
# Ausgabe:
ein.tgz: POSIX tar archive (GNU)
- POSIX tar archive (GNU), file nicht_sichtbar.txt, mode 0000644, uid 0001750, gid 0001750, size 00000000055, seconds 15041633541, user sal, group sal
- data (gzip compressed data, from Unix
- data)

Mime-Types anzeigen

Auch sehr praktisch kann es sein den Mime-Typ herauszufinden.

Ich hier zum Beispiel ein PDF betrachtet:

1
2
3
file -i mein.pdf
# Ausgabe:
mein.pdf: application/pdf; charset=binary

Das wird dir helfen, die Formate zuzuordnen, wie sie oft im E-Mail- und Web-Bereich verwendet werden.

Spezial-Files analysieren

Mit file lassen sich auch besondere Dateien betrachten. Dazu gehören Elemente unter dem virtuellen Filesystem /dev, die zum Beispiel Character-Devices oder Block-Devices sein können.

Dafür wirst du meist sudo-Rechte benötigen:

1
2
3
sudo file -s /dev/sda1
# gekürzte Ausgabe:
/dev/sda1: LUKS encrypted file, ver 2, ...

Noch ein Beispiel dazu:

1
2
3
sudo file -s /dev/nvme0n1
# gekürzte Ausgabe:
/dev/nvme0n1: DOS/MBR boot sector; partition 1 ...

Daten aus Datei analysieren

Und zum Abschluss noch ein letzter, praktischer Tipp für die Nutzung von file: Du kannst die zu analysierenden Elemente auch aus einer Datei lesen.

So habe ich meine Datei erstellt:

1
ls -1 ~ > dateien.txt

Du kannst das natürlich in jedem Ordner oder mit anderem Dateinamen nutzen.

Danach habe ich alles mit file betrachtet:

1
2
3
4
5
file -f dateien.txt
# gekürzte Ausgabe:
code:               directory
dateien.txt:        ASCII text
...

Hier wird natürlich angenommen, dass es die in der Datei vorkommenden Elemente auch im selben Ordner gibt. Andernfalls wirst du mit Fehlern dieser Art konfrontiert:

1
dateien.txt:       cannot open dateien.txt (No such file or directory)

Resümee

Der Befehl file ist ein einfaches, aber sehr leistungsfähiges Werkzeug zur Analyse von Dateien unter Linux.

Er zeigt dir nicht nur, um welchen Typ es sich bei einer Datei handelt, sondern liefert auch bei komprimierten oder verschachtelten Inhalten hilfreiche Informationen.

Damit kann file bei der Fehlersuche, Dateiverwaltung oder Systemadministration nützlich sein - direkt im Terminal, ohne zusätzliche Software.

Verwandte Befehle

Vertiefen kannst du dein Wissen mit diesen Befehlen, die du oft zusammen mit stat einsetzen wirst:

Hilfe zu file

Mehr zu file findest du unter man file und tldr file.

Details zum tldr wiederum findest du hier.

Erstellt mit Hugo
Theme Stack gestaltet von Jimmy