claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 03/2008   »   Ausgabe bestellen

Dateiformate erkennen

Was ist es?

Hans-Georg Eßer


Dateitypen erkennen die meisten Anwendungen an den Endungen der Datei -- gehen die einmal verloren, ist guter Rat teuer. Einige Linux-Tools helfen bei der Recherche.

Der Umgang mit verschiedenen Dateitypen ist meist unproblematisch: Dateimanager wie der Konqueror erkennen anhand der Dateiendung (etwa: .pdf), um welche Art Dokument es sich handelt, und starten nach einem Klick auf die Datei eine passende Anwendung, die diese Datei darstellen und/oder bearbeiten kann: So lesen Sie PDF-Dateien im Acrobat Reader und Word-Dokumente in OpenOffice Writer, während Bilder in Gimp oder einem Bildbetrachter erscheinen.

Das klappt aber nur bei Dateitypen, für die mindestens ein passendes Programm installiert ist, welches zudem dafür gesorgt hat, dass der Konqueror davon Kenntnis hat. Ist das nicht der Fall oder hat die Datei ihre Endung verloren (etwa durch Umbenennen oder nach einem Download mit fehlerhafter Auswahl des Dateinamens), stellt sich die Frage, wie diese Datei zu öffnen ist.

Universaltool "file"

Die erste Anlaufstelle auf der Konsole, um den Typ einer Datei zu bestimmen, ist das kleine Hilfsprogramm file, das über eine umfangreiche Datenbank mit Informationen zu allen möglichen Dateiformaten verfügt. Sie rufen es mit Angabe des Dateinamens auf:

$ file 127-guru-file.indd
127-guru-file.indd: Adobe InDesign Document

In diesem Beispiel hat file ein InDesign-Dokument erkannt; InDesign ist das Layout-Programm, mit dem die EasyLinux-Redaktion ihre Artikel setzt. Ein Linux-Programm, das solche Dateien lesen könnte, gibt es nicht, aber das Beispiel zeigt, dass file auch Aussagen über Dateien machen kann, die nicht Linux-typisch sind.

Das Ganze funktioniert auch dann, wenn die Dateiendung fehlt:

$ cp 127-guru-file.indd /tmp/xyz
$ file /tmp/xyz
/tmp/xyz: Adobe InDesign Document

Im Kasten Bildformate mit "file" erkennen sehen Sie ein Beispiel dafür, wie file auf mehrere Dokumente angewendet wird -- in diesem Verzeichnis gibt es einige Bilddateien in den Formaten .png und .jpg, und file gibt hier (bei .png-Dateien) neben dem jeweiligen Typ auch gleich die Bildgröße in Pixeln aus.

In einigen Fällen erkennt file auch die Versionsnummer des Programms, mit dem ein Dokument erstellt wurde, bzw. die Version eines Dateiformats wie etwa PDF:

$ file *.pdf
windows-verzicht.pdf: PDF document, version 1.4
linux-nachschl.pdf:   PDF document, version 1.2
Testdokument.pdf:     PDF document, version 1.3
ppp.pdf:              PDF document, version 1.2

Eine solche Auskunft kann wichtig sein, um zu entscheiden, mit welcher Anwendung Sie ein Dokument weiterbearbeiten wollen -- im Falle des PDF-Formats unterstützen manche Programme etwa nur bestimmte Versionen.

Bildformate mit "file" erkennen
$ file *
drucker.png:         PNG image data, 1059 x 589, 8-bit/color RGB, non-interlaced
drucker_s.jpg:       JPEG image data, JFIF standard 1.01
knoppix-kde4.png:    PNG image data, 1024 x 768, 8-bit/color RGB, non-interlaced
knoppix-kde4_s.jpg:  JPEG image data, JFIF standard 1.01
konqueror.png:       PNG image data, 808 x 389, 16-bit/color RGB, non-interlaced
konqueror_s.jpg:     JPEG image data, JFIF standard 1.01
sprache.png:         PNG image data, 617 x 494, 8-bit/color RGB, non-interlaced
sprache_s.jpg:       JPEG image data, JFIF standard 1.01
systemupdate.png:    PNG image data, 796 x 769, 8-bit/color RGBA, non-interlaced
systemupdate_s.jpg:  JPEG image data, JFIF standard 1.01
ubuntu.html:         exported SGML document text
ubuntu.mac.txt:      Non-ISO extended-ASCII text, with very long lines, 
                     with CR, NEL line terminators
ubuntu.txt:          ISO-8859 text
updatemanager.png:   PNG image data, 660 x 429, 8-bit/color RGBA, non-interlaced
updatemanager_s.jpg: JPEG image data, JFIF standard 1.01

Bildformate mit "identify"

Ein nützliches Tool, das auf Bildformate spezialisiert ist, ist das Programm identify, das zum ImageMagick-Paket gehört; letzteres enthält auch den Bildkonvertierer convert [1]. Wenn über die Datei zumindest bekannt ist, dass es sich um ein Bild handelt, gibt identify auch dann ausführliche Auskunft, wenn file nur den reinen Typ nennt -- zum Beispiel bei Bildern im Windows-typischen .bmp-Format:

$ file easy-2008-02.bmp
easy-2008-02.bmp: PC bitmap data
$ identify /tmp/easy-2008-02.bmp
easy-2008-02.bmp BMP 613x847 613x847+0+0 DirectClass 8-bit 1.4864mb
[esser:Daten]$

Manche (seltene) Formate kennt nur identify, nicht aber file:

$ file /tmp/easy-2008-02.wbmp
/tmp/easy-2008-02.wbmp: data
$ identify /tmp/easy-2008-02.wbmp
/tmp/easy-2008-02.wbmp WBMP 613x847 613x847+0+0 PseudoClass 2c 16-bit 63.6953kb

Was tut ein Programm?

In den Verzeichnissen /bin/, /usr/bin/ und eventuell /usr/local/bin/ sowie in diversen Unterverzeichnissen von /opt/ finden sich Programmdateien. Über diese verrät file nur, dass es sich um Programme handelt, nicht aber, welchem Zweck sie dienen:

$ file /usr/bin/metapixel
/usr/bin/metapixel: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
for GNU/Linux 2.6.4, dynamically linked (uses shared libs), not stripped

So ausführlich die Ausgabe auch ist und beispielsweise verrät, dass das Programm für 32-Bit-CPUs gedacht ist (bei 64-Bit-CPU-Progammen erscheint hier ELF 64-bit LSB executable, x86-64), so wenig sagt Ihnen dies darüber, worum es geht. Wenn Sie das Programm nicht einfach aufrufen wollen, um etwa über die Option --help Hinweise zum Programmzweck zu erhalten, dann können Sie den Paketmanager Ihrer Distribution einsetzen, um die gewünschte Auskunft zu erhalten.

Bei RPM-basierten Distributionen (wie OpenSuse und Mandriva Linux) verwenden Sie dazu das Tool rpm, bei Ubuntu benutzen Sie dpkg. Die Optionen dieser beiden Programme unterscheiden sich, weswegen wir für beide die Aufrufe zeigen.

Um zu /usr/bin/metapixel Informationen aus dem RPM-System zu erhalten, verwenden Sie den Befehl

rpm -qif /usr/bin/metapixel

Abbildung 1 zeigt die Ausgabe des Programms, die alle wichtigen Daten zum Programmpaket gleichen Namens enthält. Das funktioniert auch dann, wenn das Programmpaket anders als das Programm heißt (zum Beispiel beim Programm identify aus dem Paket ImageMagick), denn die Optionen -qif sorgen dafür, dass rpm seine Paketdatenbank durchsucht.

Abb. 1: "rpm" gibt neben einer Beschreibung des Pakets auch weitere Informationen aus, etwa zur Projektwebseite, die aktuelle Programmversionen bietet.

Unter Debian-basierten Distributionen (u. a. Ubuntu, Knoppix und Debian selbst) benötigen Sie zwei Kommandos: Zunächst prüfen Sie mit dpkg -S, zu welchem Paket eine Datei gehört, und im zweiten Schritt gibt dpkg -s (jetzt mit kleinem "s") Informationen zum Paket aus:

$ dpkg -S /usr/bin/metapixel
metapixel: /usr/bin/metapixel
$ dpkg -s metapixel
Package: metapixel
Status: install ok installed
[...]
Description: generator for photomosaics
 Metapixel is a program for generating [...]

Ob Ihr Linux-System RPM- oder Debian-basiert ist, finden Sie übrigens leicht heraus, indem Sie die Tools rpm und dpkg ohne Argument aufrufen; nur eines der beiden sollte gefunden werden, während für das zweite eine Fehlermeldung erscheint.

Kennen Sie nur den Namen eines Programms (im Beispiel wieder metapixel), aber nicht den Pfad zur ausführbaren Datei, hilft which weiter: Dieses kleine Tool gibt den vollen Pfad des Programms aus -- beim Befehl which metapixel erhalten Sie also die Rückmeldung /usr/bin/metapixel oder (wahrscheinlicher) eine Fehlermeldung, weil dieses Tool gar nicht installiert ist. (hge)

Infos
[1] Artikel zum Bildkonvertierer convert, Heike Jurzik: "Zauberhafte Bildbearbeitung", EasyLinux 06/2006, S. 89 f., http://www.easylinux.de/2006/06/089-guru-convert/

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.

Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2019 COMPUTEC MEDIA GmbH | Last modified: 2008-06-27 18:16

Nutzungsbasierte Onlinewerbung

[Linux-Magazin] [LinuxUser] [Linux-Community] [Admin-Magazin] [Ubuntu User] [Smart Developer] [Linux Events] [Linux Magazine] [Ubuntu User] [Admin Magazine] [Smart Developer] [Linux Magazine Poland] [Linux Community Poland] [Linux Magazine Brasil] [Linux Magazine Spain] [Linux Technical Review]