Cum să utilizați comanda șiruri de caractere pe Linux

Doriți să vedeți textul într-un fișier binar sau de date? Comanda Linux strings scoate acele fragmente de text – numite „șiruri” – pentru tine.

Linux este plin de comenzi care pot arăta ca soluții în căutarea problemelor. Comanda stringurilor se încadrează cu siguranță în tabăra aceea. Care este scopul lui? Există un punct pentru o comandă care listează șirurile imprimabile dintr-un fișier binar?

Să facem un pas înapoi. Fișierele binare, cum ar fi fișierele de program, pot conține șiruri de text care poate fi citit de om. Dar cum poti sa-i vezi? Dacă utilizați cat sau mai puțin, este posibil să ajungeți cu o fereastră terminală blocată. Programele care sunt concepute să funcționeze cu fișiere text nu se descurcă bine dacă prin ele sunt introduse caractere care nu pot fi imprimate.

Majoritatea octeților dintr-un fișier binar nu sunt citibili de om și nu pot fi imprimați în fereastra terminalului într-un mod care să aibă sens. Nu există caractere sau simboluri standard care să reprezinte valori binare care să nu corespundă cu caractere alfanumerice, semne de punctuație sau spații albe. În mod colectiv, acestea sunt cunoscute ca caractere „printabile”. Restul sunt caractere „neprintabile”.

Deci, încercarea de a vizualiza sau de a căuta într-un fișier binar sau de date șiruri de text este o problemă. Și aici intervin șirurile. Extrage șiruri de caractere imprimabile din fișiere astfel încât alte comenzi să poată folosi șirurile fără a fi nevoite să se lupte cu caractere care nu pot fi imprimate.

Folosind strings Command

Nu este nimic complicat la comanda strings, iar utilizarea sa de bază este foarte simplă. Furnizăm numele fișierului prin care dorim ca șirurile de caractere să caute pe linia de comandă.

Aici, vom folosi șiruri de caractere într-un fișier binar – un fișier executabil – numit „jibber”. Introducem șiruri de caractere, un spațiu, „jibber” și apoi apăsăm Enter.

strings jibber

Șirurile sunt extrase din fișier și listate în fereastra terminalului.

Setarea lungimii minime a șirului

În mod implicit, șirurile vor căuta șiruri care au patru caractere sau mai mult. Pentru a seta o lungime minimă mai lungă sau mai scurtă, utilizați opțiunea -n (lungime minimă).

Rețineți că, cu cât lungimea minimă este mai mică, cu atât sunt mai mari șansele să vedeți mai multe vechituri.

Unele valori binare au aceeași valoare numerică ca și valoarea care reprezintă un caracter imprimabil. Dacă două dintre aceste valori numerice se întâmplă să fie una lângă alta în fișier și specificați o lungime minimă de doi, acești octeți vor fi raportați ca și cum ar fi un șir.

Pentru a cere șirurilor de caractere să folosească două ca lungime minimă, utilizați următoarea comandă.

strings -n 2 jibber

Acum avem șiruri de două litere incluse în rezultate. Rețineți că spațiile sunt numărate ca un caracter imprimabil.

Corzi de conducte prin mai puțin

Din cauza lungimii ieșirii din șiruri, o vom trece prin mai puțin. Apoi putem parcurge fișierul căutând text de interes.

strings jibber | less

Lista este acum prezentată pentru noi în mai puțin, cu partea de sus a listei afișată mai întâi.

Utilizarea șirurilor de caractere cu fișiere obiect

De obicei, fișierele de cod sursă ale programului sunt compilate în fișiere obiect. Acestea sunt legate de fișiere de bibliotecă pentru a crea un fișier executabil binar. Avem fișierul obiect jibber la îndemână, așa că haideți să aruncăm o privire în interiorul acelui fișier. Rețineți extensia de fișier „.o”.

jibber.o | less

Primul set de șiruri de caractere sunt împachetate în coloana opt dacă sunt mai lungi de opt caractere. Dacă au fost împachetate, un caracter „H” este în coloana nouă. Puteți recunoaște aceste șiruri ca instrucțiuni SQL.

Derularea prin rezultat arată că această formatare nu este utilizată în întregul fișier.

Este interesant de observat diferențele dintre șirurile de text dintre fișierul obiect și executabilul final.

Căutarea în zone specifice din fișier

Programele compilate au diferite zone în interiorul lor care sunt folosite pentru a stoca text. În mod implicit, strings caută în întregul fișier căutând text. Este ca și cum ați fi folosit opțiunea -a (toate). Pentru a căuta șiruri de caractere numai în secțiunile de date inițializate, încărcate din fișier, utilizați opțiunea -d (date).

strings -d jibber | less

Dacă nu aveți un motiv întemeiat, ați putea la fel de bine să utilizați setarea implicită și să căutați în întregul fișier.

Imprimarea offsetului șirurilor

Putem avea șirurile să imprime offset-ul de la începutul fișierului în care se află fiecare șir. Pentru a face acest lucru, utilizați opțiunea -o (offset).

strings -o parse_phrases | less

Offset-ul este dat în Octal.

Pentru a afișa offset-ul într-o bază numerică diferită, cum ar fi zecimală sau hexazecimală, utilizați opțiunea -t (radix). Opțiunea radix trebuie să fie urmată de d (zecimal), X (hexazecimal), sau o (Octal). Utilizarea -to este aceeași cu utilizarea -o.

strings -t d parse_phrases | less

Offset-urile sunt acum tipărite în zecimale.

strings -t x parse_phrases | less

Offseturile sunt acum tipărite în hexazecimal.

Inclusiv spații albe

strings consideră caracterele tabulatoare și spațiu ca fiind parte din șirurile pe care le găsește. Alte caractere cu spații albe, cum ar fi liniile noi și returnările de transport, nu sunt tratate ca și cum ar fi parte din șiruri. Opțiunea -w (spații albe) face ca șirurile de caractere să trateze toate caracterele spațiilor albe ca și cum ar fi părți ale șirului.

strings -w add_data | less

Putem vedea linia goală în ieșire, care este un rezultat al întoarcerii de cărucior (invizibile) și al caracterelor newline la sfârșitul celei de-a doua rânduri.

Nu ne limităm la fișiere

Putem folosi șiruri de caractere cu orice este sau poate produce un flux de octeți.

Cu această comandă, ne putem uita prin memorie cu acces aleator (RAM) al computerului nostru.

Trebuie să folosim sudo pentru că accesăm /dev/mem. Acesta este un fișier de dispozitiv cu caractere care conține o imagine a memoriei principale a computerului dvs.

sudo strings /dev/mem | less

Lista nu este întregul conținut al memoriei RAM. Sunt doar șirurile care pot fi extrase din el.

Căutarea mai multor fișiere deodată

Wildcardurile pot fi folosite pentru a selecta grupuri de fișiere care urmează să fie căutate. Caracterul * reprezintă mai multe caractere, iar ? caracterul reprezintă orice caracter individual. De asemenea, puteți alege să furnizați multe nume de fișiere pe linia de comandă.

Vom folosi un wildcard și vom căuta prin toate fișierele executabile din directorul /bin. Deoarece lista va conține rezultate din multe fișiere, vom folosi opțiunea -f (nume fișier). Aceasta va tipări numele fișierului la începutul fiecărei linii. Apoi putem vedea în ce fișier a fost găsit fiecare șir.

Transmitem rezultatele grepși căutăm șiruri care conțin cuvântul „Drepturi de autor”.

strings -f /bin/* | grep Copyright

Obținem o listă ordonată a declarațiilor de copyright pentru fiecare fișier din directorul /bin, cu numele fișierului la începutul fiecărei linii.

șiruri Desfăcute

Nu există niciun mister pentru șiruri; este o comandă tipică Linux. Face ceva foarte specific și o face foarte bine.

Este un alt roți de roți ai Linuxului și prinde viață atunci când lucrează cu alte comenzi. Când vezi cum se poate așeza între fișierele binare și alte instrumente precum grep, începi să apreciezi funcționalitatea acestei comenzi ușor obscure.