Datei (Befehl)

Datei
File-example-command-gimp.gif
Beispiel Verwendung von file
Entwickler (en) AT & T Bell Laboratories
Erstveröffentlichung 1973 als Teil von UNIX Research Version 4; 1986 Open-Source-Neuauflagen
Repository Github.com/Datei/Datei
Geschrieben in C
Betriebssystem Unix, Unix-artig, Plan 9, Ibm i
Plattform Plattformübergreifend
Typ Dateityp Detektor
Lizenz BSD -Lizenz, CDDL
Plan 9: MIT -Lizenz
Webseite Darwinsys.com/Datei/

Das Datei Befehl ist ein Standard Programm von Unix und Unix-artig Betriebssysteme zum Erkennen der Art der in a enthaltenen Daten Computerdatei.

Geschichte

Die Originalversion von Datei kommt ursprünglich aus UNIX Research Version 4[1] 1973. System v brachte ein großes Update mit mehreren wichtigen Änderungen ein, insbesondere die Dateitypinformationen in eine externe Textdatei, anstatt sie in die Binärdatei selbst zu kompilieren.

Am wichtigsten BSD und Linux Verteilungen verwenden a frei, Open Source Neuauflagen, die 1986–87 von Ian Darwin geschrieben wurde[2] von Grund auf neu. Es wurde von erweitert von Geoff Collyer 1989 und seitdem hatte viele andere Beiträge, darunter Guy Harris, Chris Lowth und Eric Fischer; Ab Ende 1993 wurde seine Aufrechterhaltung von Christos Zoulas organisiert. Das OpenBSD System verfügt über eine eigene Untergruppe, die von Grund auf neu geschrieben wurde, verwendet jedoch die Ersammlung von Darwin/Zoulas von Informationen mit magischen Dateien.

Das file Der Befehl wurde auch auf die portiert Ibm i Betriebssystem.[3]

Spezifikation

Das Einzel -Unix -Spezifikation (SUS) Gibt an, dass eine Reihe von Tests in der in der Befehlszeile angegebenen Datei durchgeführt wird:

  1. Wenn die Datei nicht gelesen werden kann oder deren UNIX -Dateityp ist unbestimmt, die Datei Das Programm zeigt an, dass die Datei verarbeitet wurde, ihr Typ jedoch unbestimmt war.
  2. Datei Muss in der Lage sein, die Typen zu bestimmen Verzeichnis, FIFO, Steckdose, Block Sonderdatei, und Charakter -Sonderdatei
  3. Dateien null Länge werden als solche identifiziert
  4. Ein ursprünglicher Teil der Datei wird berücksichtigt und Datei ist die Verwendung von positionsensitiven Tests
  5. Die gesamte Datei wird berücksichtigt und Datei ist, kontextsensitive Tests zu verwenden
  6. Die Datei wird als identifiziert Daten Datei

DateiDie positionsensitiven Tests werden normalerweise implementiert, indem verschiedene Positionen innerhalb der Datei mit einer Textdatenbank von angepasst werden Magische Zahlen (Siehe Nutzungsabschnitt). Dies unterscheidet sich von anderen einfacheren Methoden wie z. Dateierweiterungen und Schemata mögen MIME.

In den meisten Implementierungen die Datei Der Befehl verwendet eine Datenbank, um die Untersuchung der Lead -Bytes voranzutreiben. Diese Datenbank ist in einer Datei mit dem Titel implementiert Magie, deren Standort normalerweise in ist /etc/Magic, /usr/share/Datei/Magie oder ein ähnlicher Ort.

Verwendungszweck

Die Sus[4] Mandatiert die folgenden Optionen:

-M DateiGeben Sie eine speziell formatierte Datei an, die positionsensitive Tests enthält. Standard-positionsensitive Tests und kontextsensitive Tests werden nicht durchgeführt.
-m Datei, wie für -MEs werden jedoch Standardtests durchgeführt, nachdem die Tests in eingegeben wurden Datei.
-dFühren Sie Standardpositionsens- und Kontext-sensitive Tests in der angegebenen Datei durch; Dies ist das Standardverhalten, es sei denn -M oder -m angegeben.
-h, nicht Symbolische Links Dies weisen auf eine vorhandene Datei oder eine vorhandene Verzeichnis.
-LDie symbolische Link, die auf eine vorhandene Datei oder ein Verzeichnis hinweist.
-ichklassifizieren Sie die Datei nicht weiter als auch als entweder als entweder zu identifizieren: nicht vorhanden, eine Block -Sonderdatei, eine Zeichenspezialendatei, ein Verzeichnis, a FIFO, eine Steckdose, ein symbolischer Link oder eine reguläre Datei. Linux[5] und BSD[6] Systeme verhalten sich anders mit dieser Option und geben stattdessen eine aus Internet -Medientyp (""MIME Geben Sie ") das erkannte Dateiformat identifizieren.

Sonstiges Unix und Unix-artig Betriebssysteme können zusätzliche Optionen als diese hinzufügen, wie z. -s "Spezialdateien", -k 'weiterhin' oder -r 'RAW' (Beispiele unten).

Der Befehl sagt nur, was die Datei sieht aus wie, nicht was es ist (für den Fall wo Datei schaut sich den Inhalt an). Es ist einfach, das Programm zu täuschen, indem es eine magische Nummer in eine Datei einbringt, deren Inhalt nicht übereinstimmt. Somit ist der Befehl als Sicherheitsinstrument als in bestimmten Situationen nicht nutzbar.

Beispiele

$ Datei file.c Datei.c: C Programmtext 
$ Dateiprogramm Programm: ELF 32-Bit LSB ausführbar, Intel 80386, Version 1 (Sysv), dynamisch verknüpft     (Verwendet gemeinsame Bibliotheken), abgestreift 
$ Datei /dev/hda1 /dev /hda1: Special Block (0/0)
$ file -s/dev/hda1/dev/hda1: linux/i386 ext2 Dateisystem 

Beachten Sie, dass -S eine nicht standardmäßige Option ist, die nur auf einigen Plattformen erhältlich ist, was sagt Datei Lesen Sie Gerätedateien und versuchen Sie, deren Inhalt zu identifizieren, anstatt sie nur als Gerätedateien zu identifizieren. Normalerweise Datei Versucht nicht, Gerätedateien zu lesen, da das Lesen einer solchen Datei unerwünschte Nebenwirkungen haben kann.

$ file -k -r libmagic-dev_5.35-4_armhf.deb # (auf Linux) libmagic-dev_5.35-4_Armhf.Deb: Debian Binärpaket (Format 2.0) - Strom ar Archiv - Daten

Durch die nicht standardmäßige Option -k Das Programm hört nicht nach dem ersten Hit gefunden, sondern sucht nach anderen passenden Mustern. Das -r Die Option, die in einigen Versionen erhältlich ist, verursacht das Undruckbare Neue Zeile Charakter, der in seiner rohen Form und nicht in seiner Oktaldarstellung angezeigt wird.

$ Datei komprimiert.gz komprimiert.gz: gzip komprimiert Daten, entleert, Original Dateiname, "komprimiert", zuletzt geändert: Do 26. Januar 14:08:23 2006, OS: Unix
$ file -i komprimiert.gz # (auf Linux) compressed.gz: Anwendung/X-GZIP; Charset=binär 
$ Datei data.ppm data.ppm: Netpbm ppm "Rawbits" -Filddaten
$ Datei /bin /cat /bin /cat: Macho universeller binär mit 2 Architekturen /bin/kat (für Architektur PPC7400): Mach-o ausführbarer PPC /bin /cat (für Architektur i386): Mach-O ausführbar i386
$ Datei/usr/bin/vi/usr/bin/vi: symbolischer Link zu VIM

Identifizierung Symbolische Links ist auf allen Plattformen nicht verfügbar und wird derenferenziert, wenn -L wird bestanden oder Posixly_correct ist eingestellt.

Bibliothek Libmagic

Ab Version 4.00 der Ian Darwin/Christos Zoulas -Version von Dateidie Funktionalität von Datei ist in a integriert libmagic Bibliothek das ist über über C (und c-kompatible) Verknüpfung;[7][8] Datei wird mit dieser Bibliothek implementiert.[9][10]

Verweise

  1. ^ "Quelle der UNIX V4" Datei "Man Page". Archiviert vom Original am 2019-12-10. Abgerufen 2022-03-13.
  2. ^ Die frühe Geschichte dieses Programms wird in seinem privaten Lebenslauf -Repository aufgezeichnet. sehen [1] Archiviert 2017-04-01 bei der Wayback -Maschine das Protokoll des Hauptprogramms
  3. ^ IBM. "IBM System I Version 7.2 Programmierung Qshell" (PDF). Archiviert (PDF) vom Original am 2021-03-05. Abgerufen 2020-09-05.
  4. ^ "Die offenen Gruppenbasisspezifikationen Ausgabe 7 - Datei Befehl". Archiviert vom Original am 2018-10-12. Abgerufen 2014-08-20.
  5. ^ Datei (1)- -Linux Benutzer Handbuch - Benutzerbefehle
  6. ^ Datei (1)- -Netbsd Allgemeine Befehle Handbuch
  7. ^ libmagic (3)- -Linux Programmierer Handbuch - Bibliotheksfunktionen
  8. ^ libmagic (3)- -Netbsd Bibliotheksfunktionen Handbuch
  9. ^ Zoulas, Christos (27. Februar 2003). "Datei-3.41 ist jetzt verfügbar". Datei (Mailingliste). Archiviert Aus dem Original am 4. März 2016. Abgerufen 1. Januar, 2013.
  10. ^ Zoulas, Christos (24. März 2003). "Datei-4.00 ist jetzt verfügbar". Datei (Mailingliste). Archiviert Aus dem Original am 28. Dezember 2016. Abgerufen 1. Januar, 2013.

Externe Links

Handbuchseiten

Sonstiges