Pages : 1
#1 Le 05/06/2018, à 10:28
- MikeSteinz
Utilisation de file
Bonjour à tous et merci de m'accueillir sur le forum.
Je cherche à créer un fichier magique formaté pour détecter les fichiers de type 42 file et constitués de la chaîne "42" à l’octet 42 (vous l'aurez compris c'est un des exercices du concours de l'école 42 dont je me sers pour apprendre le shell).
Après avoir consulté le man de file je pense avoir correctement créé le fichier demandé, mais j'aimerais être capable de le tester.
Comment créer un fichier de type 42 file constitué de la chaîne de mon choix à l’octet de mon choix (pour pouvoir tester plusieurs cas de figure et plusieurs commandes file).
Merci !
Hors ligne
#2 Le 05/06/2018, à 12:01
- pingouinux
Re : Utilisation de file
Bonjour,
Veux-tu que l'octet 42 contienne la valeur hexadécimale 42, ou bien que les octets 42 et 43 contiennent respectivement les caractères 4 et 2 ?
Hors ligne
#3 Le 05/06/2018, à 12:27
- MikeSteinz
Re : Utilisation de file
La consigne de l'exercice ne mentionne que l'octet 42 donc je suppose qu'il s'agit de la valeur hexadécimale 42 mais dans le doute autant savoir créer les deux
Hors ligne
#4 Le 05/06/2018, à 12:51
- pingouinux
Re : Utilisation de file
Pour remplacer l'octet n° 42 d'un fichier (je suppose que la numérotation part de 0) :
(head -c42; printf $'\x42'; tail -c +2) <fichier >fichier_modifie
head -c42 : Écriture des 42 premiers octets du fichier (numéros 0 à 41)
printf $'\x42' : Écriture de la valeur hexadécimale 42
tail -c +2 fichier : Écriture de la fin du fichier, à partir du 2ème octet de ce qu'on n'avait pas encore lu
Hors ligne
#5 Le 05/06/2018, à 13:07
- MikeSteinz
Re : Utilisation de file
Merci beaucoup Pingouinux!
Je peux donc utiliser mon fichier magique sur le fichier créé grace à vos commande en exécutant :
file -m [fichier_magique] [fichier]
Si mon fichier est correct et contient 42 à l'octet 42 la réponse du test est :
42 file
Sinon la réponse est :
data
Pensez vous que mes tests sont corrects ?
Merci encore
Dernière modification par MikeSteinz (Le 05/06/2018, à 13:08)
Hors ligne
#6 Le 05/06/2018, à 13:21
- pingouinux
Re : Utilisation de file
Pensez vous que mes tests sont corrects ?
Toi seul peux le dire, en faisant différents essais.
Une autre commande, équivalente à celle du #4 :
cp fichier fichier_modifie; dd conv=notrunc of=fichier_modifie bs=1 count=1 seek=42 <<<$'\x42'
Tu peux aussi utiliser la commande xxd, qui montre le codage en hexadécimal d'un fichier :
xxd -p fichier >fichier_hexa
Tu modifies ensuite fichier_hexa, en modifiant, insérant ou supprimant des caractères, puis :
xxd -p -r fichier_hexa >fichier_modifie
Correction : Ajout du paramètre count à dd, pour ne pas récupérer aussi le caractère '\n'.
Dernière modification par pingouinux (Le 05/06/2018, à 16:19)
Hors ligne
#7 Le 05/06/2018, à 13:30
- MikeSteinz
Re : Utilisation de file
Génial c'est encore plus simple avec
dd conv=notrunc of=fichier_modifie bs=1 seek=42 <<<$'\x42'
Par contre cette commande insère
B
(donc l'ASCII de hex42) et non pas
42
à l'octet 42
<<<$'42'
fonctionne avec mon fichier magique par contre donc je suppose qu'il ne s'agissait pas de la valeur hexa de 42
Merci pour ton aide !
Dernière modification par MikeSteinz (Le 05/06/2018, à 13:39)
Hors ligne
#8 Le 05/06/2018, à 16:24
- pingouinux
Re : Utilisation de file
J'ai corrigé la commande dd en #6 (il manquait le paramètre count).
Si tu veux remplacer les octets 42 et 43 par la chaîne "42", c'est :
cp fichier fichier_modifie; dd conv=notrunc of=fichier_modifie bs=1 count=2 seek=42 <<<"42"
Hors ligne
#9 Le 05/06/2018, à 16:50
- MikeSteinz
Re : Utilisation de file
C'est parfait merci !
Hors ligne
#10 Le 11/02/2020, à 08:20
- MicP
Re : Utilisation de file
Bonjour
Voir :
la page man de file :
man file
la page man de magic :
man magic
le retour de la commande :
cat /etc/magic
et https://wiki.debian.org/fr/MIME
Dernière modification par MicP (Le 11/02/2020, à 08:25)
Hors ligne
#11 Le 12/02/2020, à 04:07
- MicP
Re : Utilisation de file
Bonjour
C'est au 43ème octet du début du fichier, donc après un décalage (offset) de 42 octets,
que devra se trouver le premier octet de la chaîne recherchée
et qui est le chiffre "4" de la chaîne "42" (qui est composée de 2 octets)
Le contenu du fichier "magic" devra donc être :
42 string 42 nombre magique 42 trouvé
Dernière modification par MicP (Le 12/02/2020, à 04:09)
Hors ligne
Pages : 1