Vis en fils utskrivbare tegn med strenger
Har du noen gang prøvd å åpne en fil i et redigeringsprogram bare for å finne ut at den inneholder uleselig binær innhold?
De Linux "strings"-kommandoen gjør det mulig å se de menneskelig lesbare tegnene i en hvilken som helst fil.
Hovedformålet med å bruke "strings"-kommandoen er å finne ut hvilken type fil du ser på, men du kan også bruke den til å trekke ut tekst. For eksempel, hvis du har en fil fra et proprietært program som lagrer filer i et merkelig binært format, kan du bruke "strenger" for å trekke ut teksten du legger inn i filen.
Eksempel på bruk av Strings-kommandoen
En flott måte å demonstrere kraften til strengkommandoen er å lage et dokument ved hjelp av LibreOffice Writer.
Åpen LibreOffice Writer, skriv inn litt tekst og lagre den istandard ODT-format.
Nå åpne et terminalvindu (trykk CTRL, ALT og T samtidig) og bruk deretter kattekommandoen for å vise filen som følger:
cat dittfilnavn.odt | mer.
(Erstatt "dittfilnavn.odt" med navnet på filen du opprettet)
Det du vil se er en hel vegg med uleselig tekst.

Trykk på mellomromstasten for å bla gjennom filen. Sporadisk gjennom hele filen vil du se noe av teksten du har skrevet inn.
Strings-kommandoen kan brukes til å vise bare delene som er lesbare for mennesker.
I sin enkleste form kan du kjøre følgende kommando:
strenger ditt filnavn.odt | mer.
Som før vil det dukke opp en vegg med tekst, men kun tekst som du kan lese som menneske. Hvis du er heldig, vil du kunne se teksten din.
Det du vil kunne se som er nøkkelen, er imidlertid på den første linjen:
mimetypeapplication/vnd.oasis.opendocument.text.
Vi vet at filtypen er en LibreOffice Writer ODT-fil av to grunner:
- Vi opprettet filen
- Utvidelsen er .ODT

Tenk deg at du ikke opprettet filen, eller du fant filen på en gjenopprettet disk, og filen hadde ikke en utvidelse.
Windows gjenoppretting vil ofte gjenopprette filer med navn som 0001, 0002, 0003, etc. Det faktum at filene ble gjenopprettet er flott, men å prøve å finne ut hvilke typer av disse filene var et mareritt.
Ved å bruke strenger har du en kjempesjanse for å finne ut filtypen. Å vite at en fil er en opendocument.text-fil betyr at du kan lagre den med ODT-utvidelsen og åpne den i LibreOffice writer.
I tilfelle du ikke var klar over det, er en ODT-fil i utgangspunktet en komprimert fil. Hvis du gir nytt navn til filnavn.odt til filnavn.zip, kan du åpne det i et arkiveringsverktøy og til og med pakke ut filen.
Alternativ atferd
Som standard returnerer kommandoen strenger alle strenger i en fil, men du kan endre virkemåten slik at den returnerer strenger fra initialiserte, lastede dataseksjoner i en fil.
Hva betyr dette egentlig? Ingen ser ut til å vite det.
Det er fornuftig å anta at du bruker strenger for å prøve å finne ut filtypen eller lete etter spesifikk tekst i en fil.
Hvis du ikke får utdataene du håpet på når du kjører strengkommandoen med standardoppførselen, kan du prøve å kjøre en av følgende kommandoer for å se om det gjør en forskjell:
strenger -d filnavnet ditt.
eller.
strenger --data filnavnet ditt.
Håndboksiden sier at kommandoen ovenfor kan bidra til å redusere mengden søppel som returneres fra strenger.
Kommandoen "strenger" kan settes opp til å virke i revers slik at minus d-bryteren er standard oppførsel. Hvis dette er tilfellet på systemet ditt, kan du returnere alle dataene ved å bruke følgende kommando:
strenger -a filnavnet ditt.
Formatering av utdata
Du kan få teksten i utdataene til å vise navnet på filen ved siden av hver tekstlinje.
For å gjøre dette, kjør en av følgende kommandoer:
strenger -f filnavnet ditt.
eller.
strenger --print-filnavn ditt filnavn.
Utgangen vil nå se omtrent slik ut:
ditt filnavn: et stykke tekst.
eller.
ditt filnavn: et annet stykke tekst.
Som en del av utdataene kan du også vise forskyvningen av hvor teksten vises i en fil. For å gjøre det, kjør følgende kommando:
strenger -o filnavnet ditt.
Utgangen vil se omtrent slik ut:
16573 din17024 tekst.
Forskyvningen er faktisk den oktale forskyvningen, men avhengig av hvordan strenger har blitt kompilert for systemet ditt, kan det lett også være hex- eller desimalforskyvningen.
En mer nøyaktig måte å få den forskyvningen du ønsker på er å bruke følgende kommandoer:
strenger -t d ditt filnavn
strenger -t til filnavnet ditt
strenger -t h filnavnet ditt.
Minus t betyr å returnere offset, og tegnet som følger bestemmer offset-typen (dvs. d = desimal, o = oktal, h = heks).
Som standard skriver strenger-kommandoen ut hver nye streng på en ny linje, men du kan angi avgrensningstegn etter eget valg. For å bruke et rørsymbol ("|") som skilletegnet, kjør følgende kommando:
strenger -s "|" ditt filnavn.
Juster strenggrensen
Strings-kommandoen ser som standard etter en streng med fire utskrivbare tegn på rad. Du kan justere standarden slik at den bare returnerer en streng med åtte utskrivbare tegn eller 12 utskrivbare tegn.
Ved å justere denne grensen kan du skreddersy produksjonen for å få best mulig resultat. Ved å se etter en streng som er for lang, risikerer du å utelate nyttig tekst, men ved å gjøre den for kort kan du ende opp med langt mer søppel returnert.
For å justere strenggrensen, kjør følgende kommando:
strenger -n 8 filnavnet ditt.
I eksemplet ovenfor har jeg endret grensen til 8. Du kan erstatte 8 med nummeret du ønsker.
Du kan også bruke følgende kommando for å gjøre det samme:
strenger --bytes=8 filnavnet ditt.
Inkluder mellomrom
Som standard inkluderer strengkommandoen mellomrom, for eksempel en tabulator eller et mellomrom, som et utskrivbart tegn. Derfor hvis du har en streng som leser som "katten satt på matten," så vil strengkommandoen returnere hele teksten.
Nye linjetegn og vognretur regnes som standard ikke som utskrivbare tegn.
For å få strenger til å gjenkjenne nye linjetegn og vognretur som et utskrivbart tegn, kjør strenger på følgende måte:
strenger -w filnavnet ditt.
Endre kodingen
Det er fem tilgjengelige kodingsalternativer for bruk med strenger:
- s = 7-bits byte (brukt for ASCII, ISO 8859)
- S = 8-bits byte
- b = 16 bit bigendian
- l = 16 bit littleendian
Standard er en 7-bits byte.
For å endre kodingen, kjør følgende kommando:
strenger -e er ditt filnavn
strenger --encoding=s ditt filnavn.
I kommandoen ovenfor har jeg spesifisert standard "s" som betyr 7-bit byte. Erstatt "s" med kodebokstaven du ønsker.
Endre navnet på den binære filbeskrivelsen
Du kan endre virkemåten til strenger slik at den bruker et annet binært filbeskrivelsesbibliotek enn det som er gitt for systemet ditt.
Denne bryteren er en for ekspertene. Hvis du har et annet bibliotek å bruke, kan du gjøre det ved å kjøre følgende strengkommando:
strenger -T bfdname.
Lesealternativer fra en fil
Hvis du skal bruke de samme alternativene hver gang, så ønsker du ikke å måtte spesifisere alle bryterne hver gang du kjører kommandoen, fordi det tar tid.
Det du kan gjøre er å lage en tekstfil ved hjelp av nano og spesifisere alternativene i den filen.
For å prøve dette i en terminal, kjør følgende kommando:
nano stringsopts.
Skriv inn følgende tekst i filen:
-f -o -n 3 -s "|"
Lagre filen ved å trykke CTRL + O og gå ut ved å trykke CTRL + X.
For å kjøre strengkommandoer med disse alternativene, kjør følgende kommando:
strenger @stringsopts filnavnet ditt.
Alternativene vil bli lest fra filen stringsopts, og du bør se filnavnet før hver streng, med offset og "|" som en separator.
Får hjelp
Hvis du vil lese mer om strenger, kjør følgende kommando for å få hjelp.
strenger --hjelp.
Alternativt kan du lese manualsiden:
mann strenger.
Finn ut hvilken versjon av strenger du kjører
For å finne versjonen av strenger du kjører, kjør en av følgende kommandoer:
strenger -v
strenger -V
strenger --versjon.