Commande équivalente aux fichiers binaires grep


24

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 -lirne fonctionne apparemment pas avec ces fichiers.

Existe-t-il une commande qui peut effectuer ce type de recherche depuis un terminal?

Réponses:


24

Avec GNU grep , vous pouvez utiliser l' option -a pour qu'il 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 l' -aoption, 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).


Suis-je en train ackde mal lire la description de moi-même? (dans le manuel) "ack 2.x recherchera à travers chaque fichier régulier, non binaire qui n'est pas explicitement ignoré [par bla bla]". binaire.
Peter Cordes

1
@PeterCordes: Cela s'est produit quand aucun fichier n'a été sélectionné. Essayez ack grep /bin/grepet vous obtiendrez le résultat. J'ai mis à jour ma réponse pour éviter toute confusion.
cuonglm

1
Essayez d'utiliser la commande strings pour obtenir les chaînes de votre binaire.
Uwe Burger

23

La commande stringsva extraire toutes les données ascii d'un fichier, si vous puis grepsa sortie, vous pouvez rechercher vos données:

strings <filename> | grep "search text"

Ce devrait être la réponse acceptée. Ce binaire convient parfaitement à cette tâche.
Vladislavs Dovgalecs

5
@xeon: Ce n'est pas toujours bon à utiliser strings, lisez ici pour plus de détails.
cuonglm

1
Puisque le but est de déterminer quels binaires contiennent la chaîne, ce strings -fserait plus approprié.
jamesdlin

C'est une meilleure réponse.
Xofo

9

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 aimerions peut-être obtenir les occurrences.

J'utilise souvent

grep -aPo '.{0,20}pattern.{0,20}'  binfile

pour obtenir un contexte environnant de 20 caractères.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.