FILE(1) | General Commands Manual | FILE(1) |
file
— Bestimmt
den Dateityp
file
[-bcdEhiklLNnprsSvzZ0
]
[--apple
] [--exclude-quiet
]
[--extension
]
[--mime-encoding
]
[--mime-type
]
[-e
Testname]
[-F
Trenner]
[-f
Namensdatei]
[-m
Magic-Dateien]
[-P
Name=Wert] file
... file
-C
[-m
Magic-Dateien]
file
[--help
]
Diese Handbuchseite dokumentiert Version 5.44 des Befehls
file
.
file
überprüft
jedes Argument, um es einzusortieren. Es gibt drei Arten von Tests, die in
dieser Reihenfolge ausgeführt werden: Dateisystemtests, magische
Tests und Sprachtests. Der
erste erfolgreiche
Test führt zur Ausgabe des Dateityps.
Der ausgegebene Typ wird normalerweise eines der Worte
text (die Datei
enthält nur darstellbare Zeichen und ein paar typische Steuerzeichen
und kann wahrscheinlich problemlos auf einem ASCII
-Terminal gelesen werden),
executable
(die Datei enthält das Ergebnis einer Kompilierung eines Programms in
eine Form, die von einem UNIX -Kernel oder einem anderen verstanden werden
kann) oder
data, das
alles andere bedeutet (Daten sind normalerweise »binär«
oder nicht darstellbar), enthalten. Ausnahmen sind gut bekannte Dateiformate
(Core-Dateien, TAR-Archive), die bekanntermaßen binäre Daten
enthalten. Wenn Sie magische Dateien oder das Programm selbst
verändern, stellen Sie sicher, dass Sie »diese
Schlüsselwörter erhalten«. Benutzer verlassen sich
darauf, dass für alle im Verzeichnis lesbaren Dateien das Wort
»text« ausgegeben wird. Machen Sie es nicht wie Berkeley, die
»shell commands text« in »shell script«
änderten.
Die Dateisystemtests basieren auf der Untersuchung der
Rückgabe des Systemaufrufs stat(2). Das Programm
prüft, ob die Datei leer ist oder ob sie eine Art von besonderer
Datei ist. Sämtliche bekannten und für Ihr betriebenes System
geeignete Dateien (Sockets, symbolische Links oder benannte Pipes (FIFOs),
auf den Systemen, auf denen diese implementiert sind) werden intuitiv
erfasst, falls Sie in der System-Header-Datei
<sys/stat.h>
definiert
sind.
Die magischen Tests werden verwandt, um auf Dateien zu
prüfen, deren Daten in einem bestimmten, festen Format vorliegen. Das
kanonische Beispiel hierfür ist das ausführbare Programm
(kompiliertes Programm) in einer a.out
-Datei,
dessen Format in <elf.h>
,
<a.out.h>
und
möglicherweise
<exec.h>
im
Standard-Einbindeverzeichnis definiert ist. Diese Dateien haben eine
»magische Zahl«, die an einem bestimmten Ort nahe des Anfangs
der Datei gespeichert ist und die dem UNIX -Betriebssystem mitteilt, dass
die Datei ein ausführbares Programm ist und welches der mehreren
Typen davon es ist. Das Konzept der »magischen Zahlen« wurde
auf Erweiterungen zu Datendateien angewandt. Jede Datei mit einem
invarianten Kennzeichner bei einem kleinen, festen Versatz in die Datei kann
normalerweise auf diese Art beschrieben werden. Die Information, die diese
Dateien identifiziert, wird aus /etc/magic und der kompilierten magischen
Datei /usr/share/misc/magic.mgc oder aus den Dateien
im Verzeichnis /usr/share/misc/magic, falls die
kompilierte Datei nicht existiert, gelesen. Zusätzlich werden die
Dateien $HOME/.magic.mgc oder
$HOME/.magic gelesen, falls sie existieren, und
haben Vorrang vor der magischen Datei des Systems.
Falls eine Datei auf keine der Einträge in der magischen
Datei passt, dann wird die Datei untersucht, ob sie eine Textdatei zu sein
scheint. ASCII, ISO-8859-x, nicht-ISO 8-Bit erweiterte
ASCII-Zeichensätze (wie diese auf Macintosh und IBM-PC-Systemen
verwandt werden), UTF-8-kodiertes Unicode, UTF-16-kodiertes Unicode und
EBCDIC-Zeichensätze können durch verschiedene Bereiche und
Sequenzen von Bytes, die darstellbaren Text in jedem Satz formen,
unterschieden werden. Falls eine Datei einen dieser Tests besteht, wird ihr
Zeichensatz berichtet. ASCII, ISO-8859-x, UTF-8 und erweiterte ASCII-Dateien
werden als »text« identifiziert, da sie
größtenteils auf fast jedem Terminal lesbar sein werden;
UTF-16 und EBCDIC sind nur »character data«, da der Text einer
Übersetzung bedarf, bevor er lesbar ist. Zusätzlich wird
file
versuchen, weitere Eigenschaften von
textartigen Dateien zu bestimmen. Falls die Zeilen durch
Wagenrücklauf (CR), Zeilenumbruch und Wagenrücklauf (CRLF)
oder NEL anstatt des UNIX-Standards Zeilenumbruch (LF) beendet werden, wird
dies gemeldet. Dateien, die eingebettete Maskiersequenzen oder
Durchstreichungen enthalten, werden auch identifiziert.
Sobald file
den in der
textartigen Datei verwandten Zeichensatz ermittelt hat, wird es versuchen,
die Sprache, in der die Datei geschrieben ist, zu ermitteln. Der Sprachtest
sucht nach bestimmten Zeichenketten (z.B.
<names.h>
) die irgendwo in
den ersten Blöcken einer Datei auftauchen können.
Beispielsweise deutet das Schlüsselwort
.br an, dass die
Datei höchstwahrscheinlich eine troff(1)
-Eingabedatei ist, sowie das Schlüsselwort
struct
auf ein C-Programm hinweist. Diese Tests sind weniger zuverlässig als
die vorherigen zwei Gruppen, daher werden sie als letztes
durchgeführt. Die Sprachtestroutinen prüfen auf einiges
Vermischtes (wie tar(1) -Archive, JSON-Dateien).
Jede Datei, bei der keine der oben aufgeführten Zeichensätze identifiziert werden kann, wird einfach als »data« gemeldet.
--apple
file
den
Dateityp und das Erstellerkürzel ausgibt, wie dies von
früheren MacOS-Versionen verwandt wurde. Das Kürzel besteht
aus acht Buchstaben, wobei der erste den Dateityp, die nachfolgenden den
Ersteller beschreiben. Diese Option wirkt nur für Dateiformate
korrekt, für die eine Apple-artige Ausgabe definiert ist.-b
,
--brief
-C
,
--compile
-c
,
--checking-printout
-m
verwandt, um Fehler in einer neuen
Magic-Datei zu finden, bevor diese installiert wird.-d
-E
-e
,
--exclude
TestnameEMX
-Anwendungstyp (nur unter EMX).--exclude-quiet
--exclude
, ignoriert aber Tests, die
file
nicht kennt. Dies ist zur
Kompatibilität mit älteren Versionen von
file
gedacht.--extension
-F
,
--separator
Trenner-f
,
--files-from
Namensdateifile
zu verarbeiten. Wenn Sie daher den Trenner
setzen wollen, müssen Sie dies tun, bevor Sie die Dateiliste
angeben, also “-F
@
-f
Namensdatei” statt
“-f
Namensdatei
-F
@”.-h
,
--no-dereference
POSIXLY_CORRECT
nicht
definiert ist.-i
,
--mime
file
den
MIME-Typ statt der traditionellen und menschenlesbaren Zeichenketten
ausgibt. Daher könnte die Ausgabe »text/plain;
charset=us-ascii« statt »ASCII text« lauten.--mime-type
,
--mime-encoding
-i
, gibt aber nur das/die angegebene(n)
Element(e) aus.-k
,
--keep-going
-r
.) Das magische Muster mit der
höchsten Stärke (siehe die Option
-l
) kommt zuerst.-l
,
--list
-k
).-L
,
--dereference
POSIXLY_CORRECT
definiert
ist.-m
,
--magic-file
magische_Dateien-N
,
--no-pad
-n
,
--no-buffer
-p
,
--preserve-date
file
sie niemals eingelesen hat.-P
,
--parameter
Name=WertName | Vorgabe | Erklärung |
bytes |
1048576 | maximale Anzahl an Byte, die aus einer Datei gelesen werden sollen |
elf_notes |
256 | maximal zu verarbeitende ELF-Anmerkungen |
elf_phnum |
2048 | maximal zu verarbeitende ELF-Programmabschnitte |
elf_shnum |
32768 | maximal zu verarbeitende ELF-Abschnitte |
encoding |
65536 | maximale Anzahl an Byte, die für die Kodierungsauswertung verarbeitet werden sollen |
indir |
50 | Rekursionsbegrenzung für indirekte Magie |
name |
50 | verwendet die Zählbegrenzung für Name/Verwendung-Magie |
regex |
8192 | Längenbegrenzung für Suchen mit regulären Ausdrücken |
-r
,
--raw
file
nicht darstellbare Zeichen
in ihre oktale Darstellung.-s
,
--special-files
file
, nur Dateien aus den
Argumenten zu lesen und deren Typ zu bestimmen, für die
stat(2) meldet, dass sie gewöhnliche Dateien
seien. Dies verhindert Probleme, da das Lesen von besonderen Dateien zu
merkwürdigen Konsequenzen führen kann. Durch Angabe der
Option -s
wird file
auch
Dateien aus den Argumenten lesen, die besondere Dateien (block- oder
zeichenorientierte) sind. Dies ist nützlich, um den Dateisystemtyp
von Daten in rohen Plattenpartitionen, die besondere blockorientierte
Dateien sind, zu bestimmen. Diese Option führt auch dazu, dass
file
die durch stat(2)
berichtete Dateigröße ignoriert, da es auf einigen Systemen
die Größe Null für rohe Plattenpartitionen
meldet.-S
,
--no-sandbox
-S
das standardmäßig aktivierte Sandboxing. Diese Option wird
benötigt, damit file
externe
Entpackprogramme ausführen kann, d.h. wenn die Option
-z
angegeben und die eingebauten Entpackprogramme
nicht verfügbar sind. Auf Systemen, auf denen Sandboxing nicht
verfügbar ist, hat dieser Schalter keine Auswirkung.
Beachten Sie: Diese Debian-Version von file wurde ohne Unterstützung für Seccomp gebaut. Daher hat diese Option keine Auswirkung.
-v
,
--version
-z
,
--uncompress
-Z
,
--uncompress-noreport
-0
,
--print0
Falls diese Option mehr als einmal angegeben wird, dann gibt
file
für jeden Eintrag nur den
Dateinamen, gefolgt von einem Nullbyte, gefolgt von einer Beschreibung
(oder ERROR:-Text), gefolgt von einem zweiten Nullbyte aus.
--help
Die Umgebungsvariable MAGIC
kann zum
Setzen des Standard-Namens der magischen Datei verwandt werden. Falls diese
Variable gesetzt ist, dann wird file
nicht
versuchen, $HOME/.magic zu öffnen.
file
fügt
“.mgc” zu dem Wert dieser Variablen
hinzu, wo es sinnvoll ist. Die Umgebungsvariable
POSIXLY_CORRECT
steuert (auf Systemen, die
symbolische Links unterstützen), ob file
versuchen wird, symbolischen Links zu folgen oder nicht. Falls gesetzt,
folgt file
symbolischen Links, andernfalls nicht.
Dies wird auch durch die Optionen -L
und
-h
gesteuert.
file
wird sich mit
0
beenden, falls die Aktion erfolgreich war oder
>0
, falls ein Fehler angetroffen wurde. Die
folgenden Fehler führen zu Diagnosemeldungen, betreffen aber nicht
den Exit-Code des Programms (wie von POSIX verlangt), außer
-E
wurde angegeben:
$ file Datei.c file /dev/{wd0a,hda} file.c: C program text file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped /dev/wd0a: block special (0/0) /dev/hda: block special (3/0) $ file -s /dev/wd0{b,d} /dev/wd0b: data /dev/wd0d: x86 boot sector $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10} /dev/hda: x86 boot sector /dev/hda1: Linux/i386 ext2 filesystem /dev/hda2: x86 boot sector /dev/hda3: x86 boot sector, extended partition table /dev/hda4: Linux/i386 ext2 filesystem /dev/hda5: Linux/i386 swap file /dev/hda6: Linux/i386 swap file /dev/hda7: Linux/i386 swap file /dev/hda8: Linux/i386 swap file /dev/hda9: empty /dev/hda10: empty $ file -i Datei.c file /dev/{wd0a,hda} file.c: text/x-c file: application/x-executable /dev/hda: application/x-not-regular-file /dev/wd0a: application/x-not-regular-file
Es wird davon ausgegangen, dass dieses Programm die System-V-Schnittstellendefinition von FILE(CMD) übererfüllt, soweit das aus der ungenauen Sprache dieser Definition überhaupt erschlossen werden kann. Das Verhalten ist größtenteils kompatibel zu dem des Programms gleichen Namens aus System V. Diese Version kennt allerdings mehr Magie, daher wird es in vielen Fällen andere (allerdings genauere) Ausgabe erstellen.
Der einzige deutliche Unterschied zwischen dieser Version und System V ist, dass diese Version jeden Leerraum als Trenner betrachtet, so dass Leerzeichen in Musterzeichenketten maskiert werden müssen. So würde zum Beispiel
>10 string language impress (imPRESS data)
in einer bestehenden Magie-Datei wie folgt geändert werden müssen:
>10 string language\ impress (imPRESS data)
Falls eine Musterzeichenkette einen Rückwärtsschrägstrich enthält, muss dieser zusätzlich maskiert werden. So würde zum Beispiel
0 string \begindata Andrew Toolkit document
in einer bestehenden Magie-Datei wie folgt geändert werden müssen:
0 string \\begindata Andrew Toolkit document
SunOS von Sun Microsystems ab Version 3.2 enthält einen
Befehl file
, der von dem aus System V abgeleitet
ist, aber Erweiterungen enthält. Diese Version unterscheidet sich
geringfügig von dem von Sun. Sie enthält die Erweiterung des
Operators »&«, der beispielsweise wie folgt verwandt
wird:
>16 long&0x7fffffff >0 not stripped
Auf Systemen, auf denen Libseccomp
(https://github.com/seccomp/libseccomp)
verfügbar ist, wird file
die Systemaufrufe
auf nur die für die Aktion des Programms notwendigen
einschränken. Diese Durchsetzung stellt keinen Sicherheitsvorteil
dar, wenn file
gebeten wird, Eingabedateien durch
Aufruf von externen Programmen mit der Option -z
zu
dekomprimieren. Um die Ausführung externer Dekomprimierer zu
aktivieren, müssen Sie Sandboxing mittels der Option
-S
deaktivieren.
Die magischen Einträge für File wurden aus verschiedenen Quellen gesammelt, hauptsächlich USENET, und verschiedene Autoren haben beigetragen. Christos Zoulas (Adresse siehe unten) sammelt zusätzliche oder korrigiert Einträge für File. Periodisch werden zusammengeführte magische Einträge für File verteilt.
Die Reihenfolge der Einträge in der magischen Datei ist relevant. Abhängig von dem von Ihnen verwandten System kann die Reihenfolge, in der sie zusammengestellt wurde, inkorrekt sein.
Es gab einen Befehl file
in jedem
UNIX seit mindestens Research Version 4
(Datum der
Handbuchseite: November 1973). Die System-V-Version führte eine
deutliche Änderung ein: die externe Liste von magischen Typen. Dies
verlangsamte das Programm etwas, machte es aber viel flexibler.
Dieses Programm, basierend auf der System-V-Version, wurde von Ian Darwin ⟨ian@darwinsys.com⟩ geschrieben, ohne den Quelltext von irgendjemanden anzuschauen.
John Gilmore überarbeitete den Code umfangreich, er wurde dadurch besser als in der ersten Version. Geoff Collyer fand eine Reihe von Unzulänglichkeiten und stellte ein paar magische Einträge für File bereit. Beiträge des »&«-Betreibers Rob McMahon, ⟨cudcv@warwick.ac.uk⟩, 1989.
Guy Harris, ⟨guy@netapp.com⟩, nahm seit 1993 bis heute viele Änderungen vor.
Hauptsächliche Entwicklung und Betreuung seit 1990 bis heute erfolgt durch Christos Zoulas ⟨christos@astron.com⟩.
Verändert durch Chris Lowth
⟨chris@lowth.com⟩, 2000: die Option -i
gibt MIME-artige Zeichenketten aus, verwendet eine alternative magische
Datei und interne Logik.
Verändert durch Eric Fischer ⟨enf@pobox.com⟩, Juli 2000, um Zeichencodes zu erkennen und zu versuchen, die Sprache von nicht-ASCII-Dateien zu bestimmen.
Verändert durch Reuben Thomas ⟨rrt@sc3d.org⟩, 2007-2011, um MIME-Unterstützung zu verbessern, MIME- und nicht-MIME-Magie zusammenzuführen, für Magie sowohl Verzeichnisse als auch Dateien zu unterstützen, viele Fehlerkorrekturen anzuwenden, zu aktualisieren und eine Menge an Magie zu korrigieren, das Bausystem zu verbessern, die Dokumentation zu verbessern und die Python-Anbindung in reinem Python neu zu schreiben.
Die Liste an Beitragenden für das Verzeichnis »magic« (die magischen Dateien) ist zu lang, um sie hier aufzunehmen. Sie wissen, wer sie sind, vielen Dank! Viele Beitragende sind in den Quelldateien aufgeführt.
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Abgedeckt vom normalen Berkeley Software Distribution-Copyright; siehe die Datei COPYING in der Quell-Distribution.
Die Dateien tar.h und is_tar.c stammen aus dem gemeinfreien tar(1) -Programm von John Gilmore und unterliegen nicht der obigen Lizenz.
Bitte senden Sie Fehlerberichte und -korrekturen (auf Englisch) an die Fehlerdatenbank unter https://bugs.astron.com/ oder die Mailingliste unter ⟨file@astron.com⟩ (besuchen Sie zum Abonnieren https://mailman.astron.com/mailman/listinfo/file).
Korrektur der Ausgabe, so dass nicht an allen Stellen Überprüfungen auf die Schalter MIME und APPLE erfolgen müssen und die eigentliche Ausgabe nur an einer Stelle erfolgt. Dafür wird ein Design benötigt. Vorschlag: mögliche Ausgaben in eine Liste schieben, dann den zuletzt geschobenen (hoffentlich den konkretesten) Wert am Ende herausnehmen oder die Vorgabe nehmen, falls die Liste leer ist. Dies sollte die Ausgabe nicht verlangsamen.
Die Handhabung von MAGIC_CONTINUE
und die
Ausgabe von \012- zwischen Einträgen ist plump und kompliziert;
umschreiben und zentralisieren.
Ein Teil der Kodierungslogik ist in encoding.c hartkodiert und könnte in die magischen Dateien verschoben werden, wenn wir eine !:charset-Notierung hätten.
Weiter alle magischen Fehler beheben. Die Fehlerdatenbank von Debian ist eine gute Quelle.
Speichern von beliebig langen Zeichenketten, beispielsweise für %s-Muster, so dass sie ausgegeben werden können. Debian-Fehler #271672 korrigieren. Dies kann durch Zuweisung von Zeichenketten in eine Zeichenkettensammlung am Ende der magischen Datei erfolgen und anschließender Umwandlung aller Zeichenkettenzeiger in relative Versätze aus der Zeichenkettensammlung.
Eine Sytax für relative Versätze nach der aktuellen Stufe hinzfügen (Debian-Fehler #466037).
»file -ki« zum Laufen bringen, d.h. mehrere MIME-Typen zu übergeben.
Eine ZIP-Bibliothek zu übergeben, so dass in Office2007-Dokumente geschaut werden kann, um weitere Details über ihren Inhalt auszugeben.
Eine Option hinzuzufügen, um URLs für die Quellen der Dateibeschreibungen auszugeben.
Skript-Suchen kombinieren und eine Möglichkeit hinzufügen, ausführbare Namen auf MIME-Typen abzubilden (z.B. einen magischen Wert für !:mime zu haben, der dazu führt, dass die enstehende Zeichenkette aus einer Tabelle nachgeschlagen wird). Dies würde vermeiden, die gleiche Magie mehrfach für jeden neuen Skript-Interpreter hinzuzufügen.
Wenn ein Datei-Deskriptor verfügbar ist, kann der Puffer übersprungen und angepasst werden, statt der momentan eingesetzten, zusammengebastelten Pufferverwaltung.
»name« und »use« korrigieren, so dass sie bei der Kompilierung auf Konsistenz prüfen (doppelte »name«, »use«, die auf nicht definierte »name« zeigen). »name« / »use« effizienter machen, indem eine sortierte Liste von Namen erhalten wird. ^ besonders behandeln, um die Bytereihenfolge im Auswerteteil umzustellen, so dass er nicht maskiert werden muss und dies dokumentieren.
Falls der intern in der Datei angegebene Versatz die
Puffergröße überschreitet (Variable
HOWMANY
in file.h), dann wird nicht zu dem Versatz
gesprungen, sondern aufgegeben. Es wäre besser, wenn die
Pufferverwaltung greifen würde, sobald der Dateideskriptor
verfügbar ist, so dass ein Suchen innerhalb der Datei möglich
ist. Es muss allerdings Vorsicht walten gelassen werden, da dies Leistungs-
und daher Sicherheits-Auswirkungen hat, da dadurch alles mögliches
durch wiederholtes Suchen verlangsamt werden kann.
Es gibt jetzt Unterstützung für das Vorhalten getrennter Puffer und dem Einsatz von Versätzen vom Ende der Datei, allerdings benötigt die interne Pufferverwaltung weiterhin eine Überarbeitung.
Sie können die neuste Version des ursprünglichen Autors mittels anonymen FTP im Verzeichnis /pub/file/file-X.YZ.tar.gz auf ftp.astron.com erhalten.
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org
26. Oktober 2022 | Debian |