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

원하는 작업 :

grep -lir "the string I am looking for" 

그리고 해당 문자열을 포함하지만 는 분명히 이러한 파일에서 작동하지 않습니다.

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

답변

GNU grep , -a 옵션을 사용하여 바이너리 파일을 텍스트 파일로 취급하도록 할 수 있습니다.

grep -ali -- string file 

Grep 버전이 -a를 지원하지 않는 경우 ack . ack 1.x에서는 -a 옵션을 포함해야합니다. ack 2.x에서는 검색 할 때 기본적으로 텍스트가 아닌 파일을 포함하므로 (비 텍스트 파일을 지정하지 않은 경우).

댓글

  • ack ' s self-description? (매뉴얼에 있음) " ack 2.x는 그렇지 않은 모든 일반 비 바이너리 파일을 검색합니다. 명시 적으로 무시 됨 [by blah blah] " 따라서 내용이 바이너리로 보이면 ack 2.x가 파일 읽기를 중지해야하는 것처럼 들립니다.
  • @PeterCordes : '는 파일을 선택하지 않았을 때 발생했습니다. ack grep /bin/grep를 시도하면 결과를 얻을 수 있습니다. 혼동을 방지하기 위해 답변을 업데이트했습니다.
  • 문자열 명령을 사용하여 바이너리에서 문자열을 가져옵니다.

답변

strings 명령은 파일의 모든 ASCII 데이터를 작동합니다. 그런 다음 grep 출력을 수행하면 데이터를 검색 할 수 있습니다.

strings <filename> | grep "search text" 

댓글

  • 이것은 허용되는 답변이어야합니다. 이 바이너리는이 작업에 적합합니다.
  • @xeon : ' strings를 사용하는 것이 항상 좋은 것은 아닙니다. 자세한 내용은 여기 를 참조하세요.
  • 목표는 어떤 바이너리에 문자열이 포함되어 있는지 확인하는 것이므로 strings -f가 더 적절합니다.
  • 더 나은 답변입니다.
  • 가장 좋은 답변입니다. 감사합니다.

답변

귀하의 질문은 패턴이 포함 된 바이너리 파일을 찾는 것입니다 (이미 아주 좋은 답변!). 보완 적으로 우리는 발생을 얻고 싶을 수 있습니다.

저는 종종

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

를 사용하여 20 자 주위의 컨텍스트를 얻습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다