Comando equivalente para grep arquivos binários

24

Eu tenho um monte de binários e sei que dentro desses binários existem strings que quero encontrar.

Eu quero fazer um:

grep -lir "the string I am looking for"

e obtenha uma lista de todos os binários dentro de um diretório específico que contém essa sequência, mas grep -liraparentemente não está funcionando com esses arquivos.

Existe um comando que pode fazer esse tipo de pesquisa no terminal?

Cao espacial
fonte

Respostas:

24

Com o GNU grep , você pode usar a opção -a para tratar os arquivos binários como arquivos de texto:

grep -ali -- string file

Se a sua versão grep não suportar -a, você poderá usar o ack . Com o ack 1.x, você precisa incluir a -aopção, com o ack 2.x, não é necessário, pois ao pesquisar incluir arquivo não-texto por padrão (somente arquivo não-texto ignorado quando você não especificou nenhum arquivo).

cuonglm
fonte
Estou interpretando mal acka auto-descrição? (no manual) "o ack 2.x pesquisará todos os arquivos regulares e não binários que não são explicitamente ignorados [por blah blah]" Portanto, parece que o ack 2.x ainda deve parar de ler um arquivo mais cedo se o conteúdo parecer binário.
Peter Cordes
1
@ PeterCordes: Isso ocorreu quando nenhum arquivo foi selecionado. Tente ack grep /bin/grepe você obterá o resultado. Atualizei minha resposta para evitar confusões.
cuonglm
1
Tente usar o comando strings para obter as strings do seu binário.
Uwe Burger
23

O comando stringsextrairá todos os dados ascii de um arquivo; se você grepproduzir o resultado, poderá procurar seus dados:

strings <filename> | grep "search text"
NZD
fonte
Essa deve ser a resposta aceita. Esse binário é adequado para esta tarefa.
Vladislavs Dovgalecs
5
@xeon: nem sempre é bom de usar strings, leia aqui para mais detalhes.
cuonglm
1
Como o objetivo é determinar quais binários contêm a sequência, strings -fseria mais apropriado.
21415 jamesdlin
Esta é uma resposta melhor.
Xofo
9

Sua pergunta é sobre encontrar arquivos binários que contêm um padrão (e já temos respostas muito boas!). Complementar, podemos gostar das ocorrências.

Eu costumo usar

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

para obter um contexto envolvente de 20 caracteres.

JJoao
fonte