Skip to main content

Toon de afdrukbare karakters van een bestand met strings

Our Miss Brooks: Conklin the Bachelor / Christmas Gift Mix-up / Writes About a Hobo / Hobbies (April 2025)

Our Miss Brooks: Conklin the Bachelor / Christmas Gift Mix-up / Writes About a Hobo / Hobbies (April 2025)
Anonim

Heb je ooit geprobeerd een bestand in een editor te openen om erachter te komen dat het onleesbare binaire inhoud bevat?

De Linux "strings" -opdracht maakt het mogelijk om de menselijk leesbare karakters binnen elk bestand te bekijken.

Het belangrijkste doel van het gebruik van de opdracht "strings" is om uit te zoeken naar welk type bestand u kijkt, maar u kunt het ook gebruiken om tekst te extraheren. Als u bijvoorbeeld een bestand van een eigen programma hebt dat bestanden opslaat in een vreemd binair formaat, kunt u "strings" gebruiken om de tekst die u in het bestand hebt geplaatst, uit te pakken.

Voorbeeld Gebruik van het Strings-commando

Een geweldige manier om de kracht van de tekenreeksopdracht aan te tonen, is om een ​​document te maken met LibreOffice Writer.

Open gewoon LibreOffice Writer en voer wat tekst in en sla het op in de standaard ODT-indeling.

Open nu een terminalvenster (druk tegelijkertijd op CTRL, ALT en T) en gebruik vervolgens het cat-commando om het bestand als volgt weer te geven:

cat yourfilename.odt | meer

(Vervang de yourfilename.odt door de naam van het bestand dat u hebt gemaakt)

Wat je zult zien is een hele muur van onleesbare tekst.

Druk op de spatiebalk om door het bestand te bladeren. Sporadisch door het hele bestand zie je een deel van de tekst die je hebt ingevoerd.

Het teken strings kan worden gebruikt om alleen de onderdelen weer te geven die leesbaar zijn voor mensen.

In de eenvoudigste vorm kunt u de volgende opdracht uitvoeren:

strings yourfilename.odt | meer

Zoals eerder zal een muur van tekst verschijnen, maar alleen tekst die je als een mens kunt lezen. Als je geluk hebt, kun je je tekst zien.

Wat u echter wel kunt zien, staat centraal, namelijk:

mimetypeapplication / vnd.oasis.opendocument.text

We weten dat het bestandstype een LibreOffice Writer ODT-bestand is om 2 redenen:

  1. We hebben het bestand gemaakt
  2. De extensie is .ODT

Stel u voor dat u het bestand niet hebt gemaakt of dat u het bestand op een herstelde schijf hebt gevonden en dat het bestand geen extensie had.

Windows herstel herstelde vaak bestanden met namen als 0001, 0002, 0003 etc. Het feit dat de bestanden hersteld waren is geweldig, maar proberen uit te vinden wat de typen van die bestanden waren was een nachtmerrie.

Door strings te gebruiken heb je een vechtkans om het bestandstype uit te werken. Als u weet dat een bestand een opendocument.text-bestand is, kunt u dit opslaan met de ODT-extensie en openen in de LibreOffice-schrijver.

In het geval dat u niet wist dat een ODT-bestand in feite een gecomprimeerd bestand is. Als u uw bestandsnaam.odt hernoemt in uw bestandsnaam.zip, kunt u deze openen in een archiveringsprogramma en zelfs het bestand uitpakken.

Alternatief gedrag

Standaard retourneert de tekenreeksopdracht alle tekenreeksen in een bestand, maar u kunt het gedrag zodanig wijzigen dat het tekenreeksen uit geïnitialiseerde, geladen gegevenssecties in een bestand retourneert.

Wat betekent dit precies? Niemand lijkt het te weten.

Het is logisch om aan te nemen dat u strings gebruikt om te proberen het bestandstype te achterhalen of om naar specifieke tekst in een bestand te zoeken.

Als u bij het uitvoeren van de tekenreeksopdracht het standaardgedrag gebruikt, niet de uitvoer krijgt waar u op hoopte, probeer dan een van de volgende opdrachten uit te voeren om te zien of het een verschil maakt:

strings -d uw bestandsnaamstrings - data yourfilename

De handmatige pagina geeft aan dat de bovenstaande opdracht kan helpen om de hoeveelheid afval die van tekenreeksen wordt teruggebracht te verminderen.

De opdracht "strings" kan worden ingesteld om in omgekeerde volgorde te werken, zodat de minus-d-schakelaar het standaardgedrag is. Als dit het geval is op uw systeem, kunt u alle gegevens retourneren met behulp van de volgende opdracht:

strings -een uwbestandsnaam

Uitvoer formatteren

U kunt de tekst binnen de uitvoer krijgen om de naam van het bestand naast elke regel tekst weer te geven.

Om dit te doen, voert u een van de volgende opdrachten uit:

strings -f uwbestandsnaamstrings --print-file-name yourfilename

De uitvoer ziet er nu ongeveer zo uit:

uw bestandsnaam: een stuk tekstjouw bestandsnaam: nog een stuk tekst

Als onderdeel van de uitvoer kunt u ook de offset weergeven van waar die tekst in een bestand wordt weergegeven. Hiertoe voert u de volgende opdracht uit:

strings -o uwbestandsnaam

De uitvoer ziet er ongeveer zo uit:

16573 jouw

17024 tekst

De offset is eigenlijk de octale offset, hoewel afhankelijk van hoe de strings voor uw systeem zijn gecompileerd, dit ook gemakkelijk de hexadecimale of de decimale offset kan zijn.

Een meer accurate manier om de gewenste offset te krijgen is om de volgende opdrachten te gebruiken:

strings -t d uwbestandsnaamstrings -t o uwbestandsnaamstrings -t h uwbestandsnaam

De minus t betekent de offset retourneren en het teken dat volgt, bepaalt het type offset. (d.w.z. d = decimaal, o = octaal, h = hex).

Standaard voert de tekenreeksopdracht elke nieuwe tekenreeks op een nieuwe regel af, maar u kunt het scheidingsteken van uw keuze instellen. Als u bijvoorbeeld een pijpsymbool ("|") wilt gebruiken als scheidingsteken, voert u de volgende opdracht uit:

strings -s "|" yourfilename

Pas de reekslimiet aan

De opdracht strings zoekt standaard naar een reeks van 4 afdrukbare tekens in een rij. U kunt de standaard zo aanpassen dat deze alleen een tekenreeks retourneert met 8 afdrukbare tekens of 12 afdrukbare tekens.

Door deze limiet aan te passen, kunt u de uitvoer aanpassen om het best mogelijke resultaat te krijgen. Door naar een te lange reeks te zoeken riskeer je het weglaten van bruikbare tekst, maar door deze te kort te maken, kun je eindigen met veel meer geretourneerde rommel.

Voer de volgende opdracht uit om de reekslimiet aan te passen:

strings -n 8 uwbestandsnaam

In het bovenstaande voorbeeld heb ik de limiet gewijzigd in 8.U kunt 8 vervangen door het nummer van uw keuze.

U kunt ook het volgende commando gebruiken om hetzelfde te doen:

strings --bytes = 8 uw bestandsnaam

Inclusief witruimte

Standaard bevat de tekenreeks de spatie zoals een tab of spatie als een afdrukbaar teken. Dus als je een string hebt die luidt als "de kat zat op de mat", dan zou de string-opdracht de hele tekst retourneren.

Nieuwe regel karakters en carriage returns worden standaard niet beschouwd als printbare karakters.

Als u wilt dat tekenreeksen nieuwe lijntekens herkennen en carriage returns als een afdrukbaar teken, voert u tekenreeksen als volgt uit:

strings -w uwbestandsnaam

Wijzig de codering

Er zijn 5 coderingsopties beschikbaar voor gebruik met strings:

  • s = 7 bit byte (gebruikt voor ASCII, ISO 8859)
  • S = 8 bit byte
  • b = 16 bit bigendian
  • l = 16 bit littleendian

De standaard is 7-bytes.

Voer de volgende opdracht uit om de codering te wijzigen:

strings -e is je bestandsnaamstrings --encoding = s uwbestandsnaam

In de bovenstaande opdracht heb ik de standaard "s" opgegeven, wat 7-bits byte betekent. Vervang gewoon de "s" door de coderingsletter van uw keuze.

Wijzig de naam van het binaire bestandsomschrijving

U kunt het gedrag van tekenreeksen wijzigen zodat het een andere binaire bestandsdescriptorbibliotheek gebruikt dan die voor uw systeem.

Deze schakelaar is er een voor de experts. Als u een andere bibliotheek wilt gebruiken, kunt u dit doen door de volgende tekenreeksopdracht uit te voeren:

strings -T bfdname

Opties uit een bestand lezen

Als u dezelfde opties elke keer opnieuw gebruikt, wilt u niet elke keer dat u de opdracht uitvoert alle schakelaars opgeven, omdat dit tijd kost.

Wat u kunt doen is een tekstbestand maken met behulp van nano en de opties in dat bestand opgeven.

Om dit uit te proberen binnen een terminal voer je de volgende opdracht uit:

nano stringsopts

Voer in het bestand de volgende tekst in:

-f -o -n 3 -s "|"

Sla het bestand op door op CTRL en O te drukken en sluit af door op CTRL en X te drukken.

Voer de volgende opdracht uit om de tekenreeksen met deze opties uit te voeren:

strings @stringsopts yourfilename

De opties worden gelezen uit de bestandsstringsopts en u zou de bestandsnaam voor elke string, de offset en de "|" moeten zien als een scheidingsteken.

Hulp krijgen

Als u meer wilt lezen over tekenreeksen, kunt u de volgende opdracht uitvoeren om hulp te krijgen.

strings --help

Als alternatief kunt u ook de handleidingpagina lezen:

man snaren

Ontdek welke versie van snaren u gebruikt

Om de versie van strings die u draait te vinden, voert u een van de volgende opdrachten uit:

strings -vstrings -Vstrings --version