Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Ubuntu 18.04 LTS
Ubuntu-fr propose des clés USB de Ubuntu et toutes ses « saveurs » ainsi qu'un magnifique t-shirt pour cette toute nouvelle version d'Ubuntu !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/06/2018, à 11: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, à 13: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, à 13: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, à 13: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, à 14: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, à 14:08)

Hors ligne

#6 Le 05/06/2018, à 14: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, à 17:19)

Hors ligne

#7 Le 05/06/2018, à 14: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, à 14:39)

Hors ligne

#8 Le 05/06/2018, à 17: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, à 17:50

MikeSteinz

Re : Utilisation de file

C'est parfait merci !

Hors ligne