J'ai un tas de binaires et je sais qu'à l'intérieur de ces binaires il y a des chaînes que je veux trouver.
Je veux faire un:
grep -lir "the string I am looking for"
et obtenir une liste de tous les fichiers binaires dans un répertoire particulier qui contiennent cette chaîne, mais grep -lir
ne fonctionne apparemment pas avec ces fichiers.
Existe-t-il une commande qui peut effectuer ce type de recherche à partir du terminal?
Avec GNU grep , vous pouvez utiliser l'option - a pour qu'elle traite les fichiers binaires comme des fichiers texte:
grep -ALi -- string file
Si votre version grep ne prend pas en charge -a
, vous pouvez utiliser ack à la place. Avec ack 1.x, vous devez inclure -a
option, avec ack 2.x, vous ne le faites pas, car lors de la recherche, inclure un fichier non texte par défaut (ignoré uniquement le fichier non texte lorsque vous n'avez spécifié aucun fichier).
La commande strings
va extraire toutes les données ascii d'un fichier, si vous grep
sa sortie, vous pouvez rechercher vos données:
strings <filename> | grep "search text"
Votre question concerne la recherche de fichiers binaires contenant un motif (et nous avons déjà de très bonnes réponses!). Complémentaire, nous pouvons aimer obtenir les occurrences.
J'utilise souvent
grep -aPo '.{0,20}pattern.{0,20}' binfile
pour obtenir un contexte environnant de 20 caractères.