J'ai besoin de reconnaître le type de données contenues dans des fichiers aléatoires. Je suis nouveau sur Linux.
Je prévois d'utiliser la file
commande pour comprendre quel type de données contient un fichier. J'ai essayé cette commande et obtenu la sortie ci-dessous.
Quelqu'un m'a suggéré que la file
commande examine les octets initiaux d'un fichier pour déterminer le type de données. La file
commande ne regarde pas du tout une extension de fichier. Est-ce exact? J'ai regardé la page de manuel mais j'ai trouvé que c'était trop technique. J'apprécierais que quelqu'un puisse fournir un lien qui a une explication beaucoup plus simple concernant le fonctionnement de la file
commande.
Quelles sont les différentes réponses possibles que je pourrais obtenir après avoir exécuté la file
commande? Par exemple, dans la transcription ci-dessous, j'obtiens JPEG, support ISO, ASCII, etc.:
La sortie d'écran est la suivante
m7% file date-file.csv
date-file.csv: ASCII text, with CRLF line terminators
m7% file image-file.JPG
image-file.JPG: JPEG image data, EXIF standard
m7% file music-file.m4a
music-file.m4a: ISO Media, MPEG v4 system, iTunes AAC-LC
m7% file numbers-file.txt
numbers-file.txt: ASCII text
m7% file pdf-file.pdf
pdf-file.pdf: PDF document, version 1.4
m7% file text-file.txt
text-file.txt: ASCII text
m7% file video-file.MOV
video-file.MOV: data
Mise à jour 1
Merci pour les réponses et ils ont clarifié certaines choses pour moi.
Donc, si je comprends bien, le dossier / usr / share / mime / magic a une base de données qui me donnera quels sont les formats de fichiers actuels possibles (sorties que je peux obtenir lorsque je tape la commande file et la suit par un fichier). Est-ce exact? Est-il vrai que chaque fois que la sortie de la commande "Fichier" contient le mot "texte", cela fait référence à quelque chose que vous pouvez lire avec une visionneuse de texte, et tout ce qui sans "texte" est une sorte de binaire?
la source
Réponses:
file
utilise plusieurs types de tests :Ce sera sorti comme
cannot open file: No such file or directory
.Ce sera produit comme
.: directory
et/dev/sda: block special
. Une grande partie du format pour cela et le point précédent est partiellement défini par POSIX - vous pouvez compter sur certaines chaînes dans la sortie.C'est ça
foo: empty
.Ces deux utilisent l' identification par numéro magique et sont la partie la plus intéressante de la commande. Un nombre magique est une séquence spéciale d'octets qui se trouve à un endroit connu dans un fichier qui identifie son type. Traditionnellement, cet endroit est les deux premiers octets, mais le terme a été étendu pour inclure des chaînes plus longues et d'autres emplacements. Voir cette autre question pour plus de détails sur les nombres magiques dans la
file
commande.La
file
commande a une base de données de ces numéros et à quel type ils correspondent; cette base de données se trouve généralement dans/usr/share/mime/magic
et mappe le contenu du fichier aux types MIME . La sortie là-bas (souventfile -i
si vous ne l'obtenez pas par défaut) sera un type de média défini ou une extension. Les "tests contextuels" utilisent le même type d'approche, mais sont un peu plus flous. Rien de tout cela n'est garanti, mais ils sont censés être de bonnes suppositions.file
possède également une base de données mappant ces types à des noms, par laquelle il saura qu'un fichier qu'il a identifié commeapplication/pdf
pouvant être décrit comme unPDF document
. Ces noms lisibles par l'homme peuvent également être localisés dans une autre langue. Ce sera toujours une description de haut niveau du type de fichier d'une manière qu'une personne comprendra, plutôt qu'une machine.La majorité des sorties différentes que vous pouvez obtenir proviendront de ces étapes. Vous pouvez consulter le
magic
fichier pour une liste des types pris en charge et comment ils sont identifiés - mon système connaît 376 types différents. Les noms donnés et les types pris en charge sont déterminés par la configuration et la configuration de votre système. Par conséquent, votre système peut prendre en charge plus ou moins que le mien, mais il y en a généralement beaucoup.libmagic
contient également des tests codés en dur supplémentaires.C'est
foo: data
quand il n'a pas réussi à comprendre quoi que ce soit sur le fichier.Il existe également d'autres petites balises qui peuvent apparaître. Un fichier exécutable (
+x
) inclura "executable
" dans la sortie, généralement séparé par des virgules. L'file
implémentation peut également connaître des choses supplémentaires sur certains formats de fichiers pour pouvoir décrire des points supplémentaires à leur sujet, comme dans votre "PDF document, version 1.4
".la source
Les pages de manuel sont généralement des références laconiques, pas des introductions. Commencez avec la page Wikipedia .
file
ne regarde que le contenu du fichier, pas le nom du fichier. (Il examine également certaines métadonnées de fichier telles que le type de fichier: répertoire, lien symbolique, canal nommé, etc. Mais dans les cas qui vous intéressent, c'est le contenu qui compte.)file
devine généralement le format d'un fichier en regardant les premiers octets et en les comparant avec une table intégrée de nombres magiques . Par exemple, si le fichier commence par%PDF
, puisfile
signale «document PDF» (et va plus loin pour rapporter la version minimale). Pour les types de fichiers qui ne commencent pas par des nombres magiques, il contient des heuristiques, par exemple, rapportez du «texte ASCII» si les premiers octets sont tous dans la plage ASCII imprimable.La sortie de
file
est fragile: elle peut varier d'une variante unix à une variante unix et d'une version à l'autre. Sous Linux, Cygwin et * BSD, lafile
commande prend en charge une option-i
qui produit une sortie prévisible sous la forme d'un type de média MIME (l'IANA gère la liste des types de média standard ). Il n'y a pas autant de détails et la sortie est moins conviviale pour l'homme, mais la sortie est prévisible et conviviale pour l'ordinateur.À utiliser
file --mime-type
si vous souhaitez uniquement le type MIME lui-même sans coder les informations, par exempleapplication/pdf
. Passez l'option-b
si vous ne souhaitez pas afficher le nom du fichier au début de la ligne.la source
J'aimerais que vous lisiez la réponse d' ici . Certains extraits de la réponse sont:
À partir de la page de manuel de
file
commande,file
La commande effectue en fait 3 tests pour déterminer le type de fichier.Premier test
Deuxième test
Troisième test
La sortie du
file
commande est généralement basée sur le résultat de l'un des tests qui réussit.Maintenant, en supposant que le programme C ++ démarre comme ceci et que le troisième test réussit,
Selon le troisième test, le mot clé
#include
spécifie en particulier qu'il s'agit d' un programme de type C bien que nous ayons un programme CPP en main. Maintenant, quand je vérifie,Maintenant, les concepts orientés objet sont spécifiques au C ++. Créons un fichier spécifique à C ++ .
Je démarre mon programme C ++ comme,
Maintenant, quand j'émets
La sortie est,
Cela explique essentiellement le fonctionnement de la
file
commande sur des fichiers similaires (dans cet exemple, le programme C et le programme C ++ sont traités de la même manière à moins que nous n'utilisions les fonctionnalités orientées objet spécifiques à C ++).la source
Gilles et Michael Homer ont fourni d'excellentes réponses. auquel je vous réfère. Pour voir les types de fichiers reconnus sur votre système, essayez d'exécuter
Si cela donne des problèmes d'autorisation, ou n'existe pas, alors peut-être
(peut nécessiter des ajustements selon votre système) qui devrait vous montrer une liste des types de fichiers sur votre système. Cette commande peut prendre un certain temps à s'exécuter en fonction de la taille de votre système de fichiers racine.
la source