Tengo un montón de binarios y sé que dentro de estos binarios hay cadenas que quiero encontrar.

Quiero hacer un:

grep -lir "the string I am looking for" 

y obtener una lista de todos los binarios dentro de un directorio en particular que contienen esa cadena pero grep -lir aparentemente no funciona con estos archivos.

¿Existe algún comando que pueda hacer este tipo de búsqueda desde la terminal?

Responder

Con GNU grep , puede usar la opción -a para que trate los archivos binarios como archivos de texto:

grep -ali -- string file 

Si su versión grep no es compatible con -a, puede usar ack en su lugar. Con ack 1.x, debe incluir la opción -a, con ack 2.x, no lo hace, ya que al buscar incluir archivos que no son de texto de forma predeterminada (solo se ignoran los que no son archivo de texto cuando no especificó ningún archivo).

Comentarios

  • ¿Estoy malinterpretando ack ' s autodescripción? (en el manual) " ack 2.x buscará en todos los archivos no binarios normales que no sean explícitamente ignorado [por blah blah] " Así que parece que ack 2.x debería dejar de leer un archivo antes de tiempo si el contenido parece binario.
  • @PeterCordes: Ese ' s ocurrió cuando no se seleccionaron archivos. Pruebe ack grep /bin/grep y obtendrá el resultado. Actualicé mi respuesta para evitar confusiones.
  • Intente usar el comando strings para obtener las cadenas de su binario.

Responder

El comando strings extraerá actuar todos los datos ascii de un archivo, si luego grep su salida, puede buscar sus datos:

strings <filename> | grep "search text" 

Comentarios

  • Esta debe ser la respuesta aceptada. Este binario es adecuado para esta tarea.
  • @xeon: ' no siempre es bueno usar strings , lea aquí para obtener más detalles.
  • Dado que el objetivo es determinar qué binarios contienen la cadena, strings -f sería más apropiado.
  • Esta es una mejor respuesta.
  • la mejor respuesta. muchas gracias

Responder

Su pregunta es acerca de buscar archivos binarios que contengan un patrón (y ya hemos muy buenas respuestas!). De forma complementaria, nos gustaría obtener las ocurrencias.

A menudo uso

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

para obtener un contexto circundante de 20 caracteres.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *