이진 파일을 grep하는 해당 명령


24

바이너리가 많이 있는데이 바이너리 안에 찾고 싶은 문자열이 있다는 것을 알고 있습니다.

나는하고 싶다 :

grep -lir "the string I am looking for"

해당 문자열을 포함하지만 특정 grep -lir파일에서 작동하지 않는 특정 디렉토리 내의 모든 바이너리 목록을 가져옵니다 .

터미널에서 이런 종류의 검색을 수행 할 수있는 명령이 있습니까?

답변:


24

함께 GNU의 GREP , 당신이 사용할 수있는 -a 는 텍스트 파일 등의 바이너리 파일을 처리하기 위해 옵션 :

grep -ali -- string file

grep 버전 이을 지원하지 않으면 대신 ack-a사용할 수 있습니다 . ack 1.x에서는 ack 2.x와 함께 옵션 을 포함해야합니다. ack 2.x에서는 기본적으로 텍스트가 아닌 파일 포함을 검색 할 때 (파일을 지정하지 않은 경우 텍스트가 아닌 파일 만 무시) 때문에 포함하지 않아도됩니다.-a


내가 ack자기 설명을 잘못 읽고 있습니까? (매뉴얼에서) "ack 2.x는 명시 적으로 무시되지 않는 모든 바이너리 파일이 아닌 이진 파일을 검색합니다. [blah blah]] 내용이 보이면 ack 2.x가 여전히 파일 읽기를 중지해야하는 것처럼 들립니다. 이진.
Peter Cordes

1
@PeterCordes : 선택된 파일이 없을 때 발생합니다. 시도 ack grep /bin/grep하고 결과를 얻을 수 있습니다. 혼란을 피하기 위해 답변을 업데이트했습니다.
cuonglm

1
문자열 명령을 사용하여 바이너리에서 문자열을 가져옵니다.
Uwe Burger

23

이 명령 strings은 파일에서 모든 ASCII 데이터를 추출한 다음 grep출력하면 데이터를 검색 할 수 있습니다.

strings <filename> | grep "search text"

이것이 정답입니다. 이 바이너리는이 작업에 적합합니다.
Vladislavs Dovgalecs

5
@ xeon : 사용하는 것이 항상 좋은 것은 아닙니다 . 자세한 내용은 여기strings읽으 십시오 .
cuonglm

1
문자열을 포함 하는 바이너리 를 결정 하는 것이 목표이므로 strings -f더 적합합니다.
jamesdlin

이것이 더 나은 대답입니다.
Xofo December

9

귀하의 질문은 패턴을 포함하는 이진 파일을 찾는 것입니다 (우리는 이미 매우 좋은 답변을 얻었습니다!). 보완 우리는 발생을 얻을 수 있습니다.

나는 자주 사용한다

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

20 문자의 주변 컨텍스트를 얻습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.