Slik bruker du strengkommandoen på Linux

Vil du se teksten i en binær eller datafil? Linux-strenger-kommandoen trekker ut disse tekstbitene – kalt «strenger» – for deg.

Linux er full av kommandoer som kan se ut som løsninger på jakt etter problemer. Stringskommandoen faller definitivt inn i den leiren. Akkurat hva er formålet? Er det et poeng med en kommando som viser de utskrivbare strengene fra en binær fil?

La oss ta et skritt tilbake. Binære filer – for eksempel programfiler – kan inneholde strenger med lesbar tekst. Men hvordan får du se dem? Hvis du bruker katt eller mindre, vil du sannsynligvis ende opp med et hengt terminalvindu. Programmer som er laget for å fungere med tekstfiler, takler det dårlig hvis ikke-utskrivbare tegn mates gjennom dem.

De fleste bytene i en binær fil er ikke lesbare for mennesker og kan ikke skrives ut til terminalvinduet på en måte som gir mening. Det er ingen tegn eller standardsymboler som representerer binære verdier som ikke samsvarer med alfanumeriske tegn, tegnsetting eller mellomrom. Til sammen er disse kjent som «utskrivbare» tegn. Resten er «ikke-utskrivbare» tegn.

Så det er et problem å prøve å se eller søke gjennom en binær eller datafil for tekststrenger. Og det er her strenger kommer inn. Det trekker ut strenger med utskrivbare tegn fra filer slik at andre kommandoer kan bruke strengene uten å måtte kjempe med tegn som ikke kan skrives ut.

Bruke strengkommandoen

Det er ikke noe komplisert med strengkommandoen, og dens grunnleggende bruk er veldig enkel. Vi oppgir navnet på filen vi ønsker at strenger skal søke gjennom på kommandolinjen.

  Hvordan bruke portbanking på Linux (og hvorfor du ikke bør)

Her skal vi bruke strenger på en binær fil – en kjørbar fil – kalt «jibber». Vi skriver inn strenger, et mellomrom, «jibber» og trykker deretter på Enter.

strings jibber

Strengene trekkes ut fra filen og vises i terminalvinduet.

Stille inn minimum strenglengde

Som standard vil strenger søke etter strenger som er på fire tegn eller lengre. For å angi en lengre eller kortere minimumslengde, bruk alternativet -n (minimumslengde).

Merk at jo kortere minimumslengden er, jo større er sjansen for at du ser mer søppel.

Noen binære verdier har samme numeriske verdi som verdien som representerer et utskrivbart tegn. Hvis to av disse numeriske verdiene tilfeldigvis er side ved side i filen og du angir en minimumslengde på to, vil disse bytene bli rapportert som om de var en streng.

For å be strenger om å bruke to som minimumslengde, bruk følgende kommando.

strings -n 2 jibber

Vi har nå to-bokstavsstrenger inkludert i resultatene. Merk at mellomrom regnes som et utskrivbart tegn.

Rørstrenger gjennom mindre

På grunn av lengden på utgangen fra strenger, kommer vi til å røre den gjennom mindre. Vi kan deretter bla gjennom filen og se etter tekst av interesse.

strings jibber | less

Oppføringen er nå presentert for oss på mindre, med toppen av oppføringen vist først.

Bruke strenger med objektfiler

Vanligvis blir programkildekodefiler kompilert til objektfiler. Disse er koblet til biblioteksfiler for å lage en binær kjørbar fil. Vi har jibber-objektfilen for hånden, så la oss ta en titt i den filen. Legg merke til filtypen «.o».

jibber.o | less

Det første settet med strenger pakkes i kolonne åtte hvis de er lengre enn åtte tegn. Hvis de har blitt pakket inn, er et «H»-tegn i kolonne ni. Du kan gjenkjenne disse strengene som SQL-setninger.

  Hvordan spille Galactic Civilizations III på Linux

Bla gjennom utdataene viser at denne formateringen ikke brukes i hele filen.

Det er interessant å se forskjellene i tekststrengene mellom objektfilen og den ferdige kjørbare filen.

Søke i bestemte områder i filen

Kompilerte programmer har forskjellige områder i seg selv som brukes til å lagre tekst. Som standard søker strenger i hele filen på jakt etter tekst. Dette er akkurat som om du hadde brukt alternativet -a (alle). For å få strenger til å søke kun i initialiserte, lastede dataseksjoner i filen, bruk alternativet -d (data).

strings -d jibber | less

Med mindre du har en god grunn til det, kan du like godt bruke standardinnstillingen og søke i hele filen.

Skrive ut strengoffset

Vi kan la strenger skrive ut offset fra starten av filen der hver streng er plassert. For å gjøre dette, bruk -o (offset) alternativet.

strings -o parse_phrases | less

Offset er gitt inn Oktal.

For å få forskyvningen vist i en annen numerisk base, for eksempel desimal eller heksadesimal, bruk alternativet -t (radix). Radix-alternativet må følges av d (desimal), x (heksadesimal), eller o (oktal). Å bruke -to er det samme som å bruke -o.

strings -t d parse_phrases | less

Forskyvningene er nå skrevet ut med desimaler.

strings -t x parse_phrases | less

Offsetene er nå skrevet ut i heksadesimal.

Inkludert mellomrom

strenger anser tabulator- og mellomromstegn som en del av strengene den finner. Andre mellomromstegn, som nylinjer og vognretur, behandles ikke som om de var en del av strengene. Alternativet -w (mellomrom) får strenger til å behandle alle mellomromstegn som om de er deler av strengen.

strings -w add_data | less

Vi kan se den tomme linjen i utdataene, som er et resultat av (usynlig) vognretur og nylinjetegn på slutten av den andre linjen.

  Hvordan spille Little Nightmares på Linux

Vi er ikke begrenset til filer

Vi kan bruke strenger med alt som er, eller kan produsere, en strøm av bytes.

Med denne kommandoen kan vi se gjennom tilfeldig tilgangsminne (RAM) på datamaskinen vår.

Vi må bruke sudo fordi vi har tilgang til /dev/mem. Dette er en tegnenhetsfil som inneholder et bilde av hovedminnet på datamaskinen din.

sudo strings /dev/mem | less

Oppføringen er ikke hele innholdet i RAM-en din. Det er bare strengene som kan trekkes ut av det.

Søker i mange filer samtidig

Jokertegn kan brukes til å velge grupper av filer som skal søkes i. *-tegnet representerer flere tegn, og ? tegn representerer et enkelt tegn. Du kan også velge å angi mange filnavn på kommandolinjen.

Vi skal bruke et jokertegn og søke gjennom alle de kjørbare filene i /bin-katalogen. Fordi oppføringen vil inneholde resultater fra mange filer, vil vi bruke alternativet -f (filnavn). Dette vil skrive ut filnavnet på begynnelsen av hver linje. Vi kan da se hvilken fil hver streng ble funnet i.

Vi fører resultatene gjennom grepog ser etter strenger som inneholder ordet «Copyright».

strings -f /bin/* | grep Copyright

Vi får en ryddig liste over opphavsrettserklæringene for hver fil i /bin-katalogen, med navnet på filen i starten av hver linje.

strenger løst opp

Det er ikke noe mysterium for strenger; det er en typisk Linux-kommando. Den gjør noe veldig spesifikt og gjør det veldig bra.

Det er en annen av Linuxs tannhjul, og kommer virkelig til live når den jobber med andre kommandoer. Når du ser hvordan det kan sitte mellom binære filer og andre verktøy som grep, begynner du å sette pris på funksjonaliteten til denne litt obskure kommandoen.