Afișați caracterele imprimabile ale unui fișier cu șiruri

Ați încercat vreodată să deschideți un fișier într-un editor doar pentru a afla că acesta conține conținut binar ilizibil? 

Comanda Linux „șiruri” face posibilă vizualizarea caracterelor lizibile de om în orice fișier. 

Scopul principal al utilizării comenzii „șiruri” este de a afla ce tip de fișier căutați, dar îl puteți folosi și pentru a extrage text. De exemplu, dacă aveți un fișier dintr-un program proprietar care salvează fișiere într-un format binar ciudat, puteți utiliza „șiruri” pentru a extrage textul pe care l-ați pus în fișier.


Exemplu de utilizare a comenzii Strings

O modalitate excelentă de a demonstra puterea comenzii șirurilor este de a crea un document folosind LibreOffice Writer.

Pur și simplu deschideți LibreOffice Writer și introduceți un text și apoi salvați-l în formatul ODT standard.

Acum deschideți o fereastră de terminal (apăsați CTRL, ALT și T în același timp) și apoi utilizați comanda cat pentru a afișa fișierul după cum urmează:

pisica tafi

(Înlocuiți yourfilename.odt cu numele fișierului pe care l-ați creat)

Ceea ce veți vedea este un întreg perete de text ilizibil.

Apăsați bara de spațiu pentru a derula fișierul. Sporadic în tot fișierul veți vedea o parte din textul pe care l-ați introdus.

Comanda șiruri poate fi utilizată pentru a afișa doar părțile care pot fi citite de om.

În forma sa cea mai simplă, puteți rula următoarea comandă:

strings yourfi

Ca și înainte, va apărea un perete de text, dar numai textul pe care îl puteți citi ca om. Dacă ești norocos, vei putea să-ți vezi textul.

Ceea ce veți putea vedea este esențial, totuși, este pe prima linie:

mimetypeapplication / vnd.oasis.

Știm că tipul de fișier este un fișier ODT LibreOffice Writer din 2 motive:

  1. Am creat fișierul
  2. Extensia este .ODT

Imaginați-vă că nu ați creat fișierul sau că ați găsit fișierul pe un disc recuperat și că fișierul nu avea o extensie.

Recuperarea Windows ar recupera adesea fișiere cu nume precum 0001, 0002, 0003 etc. Faptul că fișierele au fost recuperate este minunat, dar încercarea de a afla care erau tipurile acestor fișiere a fost un coșmar.

Utilizând șiruri aveți șanse de luptă de a afla tipul de fișier. Știind că un fișier este un fișier opendocument.text înseamnă că îl puteți salva cu extensia ODT și îl puteți deschide în LibreOffice writer.

În cazul în care nu știați, un fișier ODT este practic un fișier comprimat. Dacă redenumiți yourfilename.odt în yourfilename.zip îl puteți deschide într-un instrument de arhivare și chiar dezarhivați fișierul.


Comportamente alternative

În mod implicit, comanda șiruri returnează toate șirurile dintr-un fișier, dar puteți schimba comportamentul astfel încât să returneze șirurile din secțiunile de date încărcate inițializate într-un fișier.

Ce înseamnă exact acest lucru? Nimeni nu pare să știe. 

Este logic să presupunem că utilizați șiruri pentru a încerca să aflați tipul de fișier sau să căutați text specific într-un fișier.

Dacă atunci când executați comanda șiruri folosind comportamentul implicit nu obțineți rezultatul pe care îl sperați, încercați să rulați una dintre următoarele comenzi pentru a vedea dacă face diferența:

şir

or

șiruri --data numele fișierului

Pagina manualului afirmă că comanda de mai sus poate ajuta la reducerea cantității de gunoi returnată din șiruri. 

Comanda „șiruri” poate fi configurată să funcționeze invers, astfel încât comutatorul minus d să fie comportamentul implicit. Dacă acesta este cazul sistemului dvs., puteți returna toate datele folosind următoarea comandă:

şir


Formatarea ieșirii

Puteți obține textul din ieșire pentru a afișa numele fișierului alături de fiecare linie de text.

Pentru aceasta, executați una dintre următoarele comenzi:

şir

or

strings --print-file-name yourfilename

Ieșirea va arăta acum așa:

yourfilename: o bucată de text

or

numele dvs. de fișier: o altă bucată de text

Ca parte a rezultatului, puteți afișa, de asemenea, compensarea locului în care textul respectiv apare într-un fișier. Pentru aceasta, executați următoarea comandă:

şir

Ieșirea va arăta cam așa:

Decalajul este de fapt decalajul octal, deși în funcție de modul în care au fost compilate șirurile pentru sistemul dvs., acesta ar putea fi cu ușurință și decalajul hex.

Un mod mai precis de a obține offsetul dorit este să utilizați următoarele comenzi:

strings -td numele fișierului
șiruri de caractere - către numele dvs. de fișier
șiruri - al tău nume de fișier

Minus t înseamnă returnează offset-ul și caracterul care urmează determină tipul de offset. (adică d = zecimal, o = octal, h = hex).

În mod implicit, comanda șiruri tipărește fiecare șir nou pe o nouă linie, dar puteți seta delimitatorul la alegere. De exemplu, pentru a utiliza un simbol de țeavă ("|") ca delimitator executați următoarea comandă:

șiruri -s "| &


Reglați limita șirului

Comanda șiruri implicit caută un șir de 4 caractere imprimabile la rând. Puteți ajusta valoarea implicită astfel încât să returneze doar un șir cu 8 caractere tipărite sau 12 caractere tipărite.

Reglând această limită puteți adapta rezultatul pentru a obține cel mai bun rezultat posibil. Căutând un șir care este prea lung, riscați să omiteți textul util, dar făcându-l prea scurt s-ar putea să ajungeți cu mult mai multe resturi returnate.

Pentru a ajusta limita șirului executați următoarea comandă:

siruri

În exemplul de mai sus, am schimbat limita la 8. Puteți înlocui 8 cu numărul dorit.

De asemenea, puteți utiliza următoarea comandă pentru a face același lucru:

șiruri - octeți & #


Includeți spațiul alb

În mod implicit, comanda șirurilor include spații albe, cum ar fi o filă sau un spațiu ca caracter imprimabil. Prin urmare, dacă aveți un șir care citește „pisica așezată pe saltea”, atunci comanda șiruri va returna întregul text.

Noile caractere de linie și returnările de căruțe nu sunt considerate caracterele tipărite în mod implicit.

Pentru a obține șiruri pentru a recunoaște noile caractere de linie și întoarcerea căruței ca un caracter imprimabil, rulează șiruri în modul următor:

şir

Schimbați codarea

Există 5 opțiuni de codificare disponibile pentru utilizare cu șiruri:

  • s = octet de 7 biți (utilizat pentru ASCII, ISO 8859)
  • S = octeți pe 8 biți 
  • b = 16 biți bigendian
  • l = 16 bit littleendian

Implicit este un octet de 7 biți.

Pentru a schimba codarea, executați următoarea comandă:

strings -es yourfilename
strings --encoding = este numele dvs. de fișier

În comanda de mai sus, am specificat „s” implicit, ceea ce înseamnă octeți pe 7 biți. Pur și simplu înlocuiți „s” cu litera de codificare la alegere.

Modificați numele descrierii fișierului binar

Puteți schimba comportamentul șirurilor astfel încât să utilizeze o altă bibliotecă de descriptor de fișiere binare, alta decât cea furnizată pentru sistemul dvs.

Acest comutator este unul pentru experți. Dacă aveți o altă bibliotecă de utilizat, puteți face acest lucru executând următoarea comandă șiruri:

st

Opțiuni de citire dintr-un fișier

Dacă veți utiliza aceleași opțiuni de fiecare dată, atunci nu doriți să specificați toate comutatoarele de fiecare dată când executați comanda, deoarece este nevoie de timp.

Ce puteți face este să creați un fișier text folosind nano și să specificați opțiunile din acel fișier.

Pentru a încerca acest lucru într-un terminal executați următoarea comandă:

În fișier introduceți următorul text:

-f -o -n

Salvați fișierul apăsând CTRL și O și ieșiți apăsând CTRL și X.

Pentru a rula comenzile șiruri cu aceste opțiuni rulați următoarea comandă:

strings @strings

Opțiunile vor fi citite din fișierele șiruri de caractere și ar trebui să vedeți numele fișierului înainte de fiecare șir, offset-ul și "|" ca separator.

Obținerea de ajutor

Dacă doriți să citiți mai multe despre șiruri, puteți rula următoarea comandă pentru a obține ajutor.

Alternativ, puteți citi și pagina manualului:

Aflați ce versiune de șiruri executați

Pentru a găsi versiunea de șiruri, executați una dintre următoarele comenzi:

corzi -v
corzi -V
șiruri - versiune