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

Publicat: 2022-01-29
Terminal Linux pe un laptop
Fatmawati Achmad Zaenuri/Shutterstock.com

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 strings 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 less , este posibil să ajungeți cu o fereastră terminală suspendată. 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 intervine strings de caractere. Extrage șiruri de caractere imprimabile din fișiere, astfel încât alte comenzi să poată utiliza ș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 strings de caractere să caute pe linia de comandă.

Publicitate

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

 corzi 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.

Publicitate

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

 coarde -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 strings de caractere, o vom trece prin less . Apoi putem parcurge fișierul căutând text de interes.

 corzi jibber | Mai puțin 

Lista este acum prezentată pentru noi în less , 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 | Mai puțin 

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.

Publicitate

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).

 coarde -d jibber | Mai puțin 

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 strings să imprime offset-ul de la începutul fișierului în care se află fiecare șir. Pentru a face acest lucru, utilizați -o (offset).

 șiruri de caractere -o fraze_parse | Mai puțin 

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 .

 șiruri de caractere -td fraze_parse | Mai puțin 

Offseturile sunt acum tipărite în zecimale.

 șiruri de caractere -tx fraze_parse | Mai puțin 

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 întoarcerile 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.

 șiruri de caractere -w adăugați_date | Mai puțin 

Publicitate

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 strings de caractere cu orice este sau poate produce un flux de octeți.

Cu această comandă, putem căuta prin memoria cu acces aleatoriu (RAM) a 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 șiruri /dev/mem | Mai puțin 

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

LEGATE: Ce înseamnă „Totul este un fișier” în Linux?

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ă.

Publicitate

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 prin grep și căutăm șiruri care conțin cuvântul „Copyright”.

 șiruri de caractere -f /bin/* | grep Drepturi de autor 

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.

LEGATE: Cele mai bune laptopuri Linux pentru dezvoltatori și entuziaști