Am o grămadă de binare și știu că în interiorul acestor binare există șiruri pe care vreau să le găsesc.
Vreau să fac un:
grep -lir "the string I am looking for"
și să obțin o listă a tuturor binarelor dintr-un anumit director care conține acel șir, dar grep -lir
se pare că nu funcționează cu aceste fișiere.
Există o comandă care poate face acest tip de căutare de la terminal?
Răspuns
Cu GNU grep , puteți utiliza opțiunea -a pentru a trata fișierele binare ca fișiere text:
grep -ali -- string file
Dacă versiunea dvs. grep nu acceptă -a
, puteți utiliza ack în schimb. Cu ack 1.x, trebuie să includeți opțiunea -a
, cu ack 2.x, nu faceți acest lucru, deoarece atunci când căutați include fișier non-text în mod implicit (doar ignorat fișier text când nu ați specificat niciun fișier).
Comentarii
Răspuns
Comanda strings
va fi extr acționați toate datele ascii dintr-un fișier, dacă grep
rezultatul acestuia, puteți căuta datele dvs.:
strings <filename> | grep "search text"
Comentarii
- Acesta ar trebui să fie răspunsul acceptat. Acest binar este potrivit pentru această sarcină.
- @xeon: ' nu este întotdeauna bine să folosiți
strings
, citiți aici pentru mai multe detalii. - Deoarece scopul este de a determina care binare conțin șirul,
strings -f
ar fi mai potrivit. - Acesta este un răspuns mai bun.
- cel mai bun răspuns. mulțumesc mult
Răspuns
Întrebarea dvs. este despre găsirea fișierelor binare care conțin un model (și deja avem răspunsuri foarte bune!). Complementar, ne-ar plăcea să obținem aparițiile.
Folosesc adesea
grep -aPo ".{0,20}pattern.{0,20}" binfile
pentru a obține un context înconjurător de 20 de caractere.
ack
' autodescrierea? (în manual) " ack 2.x va căuta în fiecare fișier obișnuit, non-binar, care nu este ignorat în mod explicit [de bla bla] " Deci, sună ca ack 2.x ar trebui să înceteze să citească mai devreme un fișier dacă conținutul pare binar.ack grep /bin/grep
și veți obține rezultatul. Mi-am actualizat răspunsul pentru a preveni confuzia.