Sådan bruger du strengkommandoen på Linux

Vil du se teksten i en binær eller datafil? Linux-strenge-kommandoen trækker disse tekststykker – kaldet “strenge” – ud for dig.

Linux er fuld af kommandoer, der kan ligne løsninger på jagt efter problemer. Strengekommandoen falder bestemt ind i den lejr. Hvad er dens formål? Er der en mening med en kommando, der viser de udskrivbare strenge fra en binær fil?

Lad os tage et skridt tilbage. Binære filer – såsom programfiler – kan indeholde strenge af menneskelig læsbar tekst. Men hvordan får du dem at se? Hvis du bruger kat eller mindre, vil du sandsynligvis ende med et hængt terminalvindue. Programmer, der er designet til at arbejde med tekstfiler, klarer sig dårligt, hvis ikke-udskrivbare tegn føres gennem dem.

De fleste bytes i en binær fil kan ikke læses af mennesker og kan ikke udskrives til terminalvinduet på en måde, der giver nogen mening. Der er ingen tegn eller standardsymboler til at repræsentere binære værdier, der ikke svarer til alfanumeriske tegn, tegnsætning eller mellemrum. Tilsammen er disse kendt som “printbare” tegn. Resten er “ikke-udskrivbare” tegn.

Så det er et problem at prøve at se eller søge gennem en binær eller datafil efter tekststrenge. Og det er her strenge kommer ind. Det trækker ud strenge af printbare tegn fra filer så andre kommandoer kan bruge strengene uden at skulle kæmpe med ikke-udskrivbare tegn.

Brug af strengekommandoen

Der er ikke noget kompliceret ved kommandoen strenge, og dens grundlæggende brug er meget enkel. Vi angiver navnet på den fil, vi ønsker, at strenge skal søge igennem på kommandolinjen.

  De 5 bedste Linux-distributioner til spil

Her vil vi bruge strenge på en binær fil – en eksekverbar fil – kaldet “jibber”. Vi skriver strenge, et mellemrum, “jibber” og trykker derefter på Enter.

strings jibber

Strengene udtrækkes fra filen og vises i terminalvinduet.

Indstilling af minimum strenglængde

Som standard vil strenge søge efter strenge på fire tegn eller længere. For at indstille en længere eller kortere minimumlængde skal du bruge indstillingen -n (minimumlængde).

Bemærk, at jo kortere minimumslængden er, jo større er chancerne for, at du vil se mere skrammel.

Nogle binære værdier har den samme numeriske værdi som den værdi, der repræsenterer et udskrivbart tegn. Hvis to af disse numeriske værdier tilfældigvis er side om side i filen, og du angiver en minimumslængde på to, vil disse bytes blive rapporteret, som om de var en streng.

For at bede strenge om at bruge to som minimumslængde skal du bruge følgende kommando.

strings -n 2 jibber

Vi har nu to-bogstavs strenge inkluderet i resultaterne. Bemærk, at mellemrum tælles som et udskrivbart tegn.

Rørstrenge Gennem Mindre

På grund af længden af ​​output fra strenge, vil vi røre det igennem mindre. Vi kan derefter rulle gennem filen på udkig efter tekst af interesse.

strings jibber | less

Listen er nu præsenteret for os på mindre, med toppen af ​​listen vist først.

Brug af strenge med objektfiler

Typisk kompileres programkildekodefiler til objektfiler. Disse er forbundet med biblioteksfiler for at skabe en binær eksekverbar fil. Vi har jibber-objektfilen ved hånden, så lad os tage et kig inde i den fil. Bemærk filtypenavnet “.o”.

jibber.o | less

Det første sæt strenge ombrydes alle i kolonne otte, hvis de er længere end otte tegn. Hvis de er blevet ombrudt, er et “H”-tegn i kolonne ni. Du kan genkende disse strenge som SQL-sætninger.

  Sådan installeres Openbox-temaer på Linux

Rulning gennem outputtet afslører, at denne formatering ikke bruges i hele filen.

Det er interessant at se forskellene i tekststrengene mellem objektfilen og den færdige eksekverbare.

Søgning i specifikke områder i filen

Kompilerede programmer har forskellige områder i sig selv, der bruges til at gemme tekst. Som standard søger strenge i hele filen på udkig efter tekst. Dette er lige som om du havde brugt -a (alle) muligheden. For at få strenge til kun at søge i initialiserede, indlæste datasektioner i filen, skal du bruge muligheden -d (data).

strings -d jibber | less

Medmindre du har en god grund til det, kan du lige så godt bruge standardindstillingen og søge i hele filen.

Udskrivning af strengoffset

Vi kan få strenge til at udskrive offset fra starten af ​​filen, hvor hver streng er placeret. For at gøre dette skal du bruge -o (offset) mulighed.

strings -o parse_phrases | less

Offset er givet i Oktal.

For at få forskydningen vist i en anden numerisk basis, såsom decimal eller hexadecimal, skal du bruge indstillingen -t (radix). Radix-indstillingen skal efterfølges af d (decimal), x (hexadecimal), eller o (oktal). At bruge -to er det samme som at bruge -o.

strings -t d parse_phrases | less

Forskydningerne udskrives nu med decimaler.

strings -t x parse_phrases | less

Offsetene udskrives nu i hexadecimal.

Inklusiv Whitespace

strenge betragter tabulator- og mellemrumstegn for at være en del af de strenge, den finder. Andre blanktegn, såsom linjeskift og vognretur, behandles ikke, som om de var en del af strengene. Indstillingen -w (hvidmellemrum) får strenge til at behandle alle mellemrumstegn, som om de er dele af strengen.

strings -w add_data | less

Vi kan se den tomme linje i outputtet, som er et resultat af de (usynlige) vognretur og nylinjetegn i slutningen af ​​anden linje.

  Sådan ændres din standardskal på Linux med chsh

Vi er ikke begrænset til filer

Vi kan bruge strenge med alt, der er eller kan producere en strøm af bytes.

Med denne kommando kan vi se gennem Random Access Memory (RAM) på vores computer.

Vi skal bruge sudo, fordi vi har adgang til /dev/mem. Dette er en tegnenhedsfil, som indeholder et billede af din computers hovedhukommelse.

sudo strings /dev/mem | less

Listen er ikke hele indholdet af din RAM. Det er kun strengene, der kan trækkes ud af det.

Søger mange filer på én gang

Jokertegn kan bruges til at vælge grupper af filer, der skal søges i. Tegnet * repræsenterer flere tegn, og ? tegn repræsenterer ethvert enkelt tegn. Du kan også vælge at angive mange filnavne på kommandolinjen.

Vi vil bruge et jokertegn og søge gennem alle de eksekverbare filer i mappen /bin. Fordi listen vil indeholde resultater fra mange filer, vil vi bruge -f (filnavn) mulighed. Dette vil udskrive filnavnet i starten af ​​hver linje. Vi kan så se, hvilken fil hver streng blev fundet i.

Vi piber resultaterne igennem grep, og leder efter strenge, der indeholder ordet “Copyright”.

strings -f /bin/* | grep Copyright

Vi får en pæn liste over copyright-erklæringerne for hver fil i /bin-mappen, med navnet på filen i starten af ​​hver linje.

strenge optrevlet

Der er intet mysterium til strenge; det er en typisk Linux-kommando. Den gør noget meget specifikt og gør det meget godt.

Det er et andet af Linuxs tandhjul, og det kommer virkelig til live, når det arbejder med andre kommandoer. Når du ser, hvordan det kan sidde mellem binære filer og andre værktøjer som grep, begynder du at sætte pris på funktionaliteten af ​​denne lidt obskure kommando.