Hoe de strings-opdracht op Linux te gebruiken

Linux-terminal op een laptop
Fatmawati Achmad Zaenuri / Shutterstock.com

Wilt u de tekst in een binair of gegevensbestand zien? Het Linux strings commando haalt die stukjes tekst – genaamd “strings” – voor je uit.

Linux zit vol met commando’s die eruit kunnen zien als oplossingen bij het zoeken naar problemen. De strings commando valt zeker in dat kamp. Wat is het doel ervan? Is er een punt naar een commando dat de afdrukbare strings weergeeft vanuit een binair bestand?

Laten we een stap achteruit doen. Binaire bestanden, zoals programmabestanden, kunnen reeksen tekst bevatten die door mensen kan worden gelezen. Maar hoe krijg je ze te zien? Als je gebruikt cat of less u zult waarschijnlijk eindigen met een vastgelopen terminalvenster. Programma’s die zijn ontworpen om met tekstbestanden te werken, werken niet goed als er niet-afdrukbare tekens doorheen worden gevoerd.

De meeste bytes in een binair bestand zijn niet leesbaar voor mensen en kunnen niet op een logische manier naar het terminalvenster worden afgedrukt. Er zijn geen tekens of standaardsymbolen die binaire waarden vertegenwoordigen die niet overeenkomen met alfanumerieke tekens, interpunctie of witruimte. Gezamenlijk staan ​​deze bekend als “afdrukbare” tekens. De rest zijn “niet-afdrukbare” tekens.

Het is dus een probleem om te proberen een binair bestand of gegevensbestand te bekijken of te zoeken naar tekstreeksen. En dat is waar strings komt binnen. Het extraheert strings van afdrukbare karakters uit bestanden, zodat andere commando’s de strings kunnen gebruiken zonder te kampen met niet-afdrukbare karakters.

Met behulp van de strings Command

Er is niets ingewikkelds aan de strings commando, en het basisgebruik ervan is heel eenvoudig. We geven de naam van het bestand dat we willen strings om door te zoeken op de opdrachtregel.

Hier gaan we strings gebruiken in een binair bestand – een uitvoerbaar bestand – genaamd “jibber”. We typen strings, een spatie, “jibber” en druk vervolgens op Enter.

strings jibber

strings jibber in een terminalvenster

De strings worden uit het bestand gehaald en weergegeven in het terminalvenster.

strings uitgevoerd in een terminalvenster

De minimale stringlengte instellen

Standaard zoeken strings naar strings die vier tekens of langer zijn. Gebruik de knop om een ​​langere of kortere minimumlengte in te stellen -n (minimum lengte) optie.

Merk op dat hoe korter de minimum lengte, hoe groter de kans dat je meer rotzooi ziet.

Sommige binaire waarden hebben dezelfde numerieke waarde als de waarde die een afdrukbaar teken vertegenwoordigt. Als twee van die numerieke waarden naast elkaar in het bestand staan ​​en u specificeert een minimumlengte van twee, dan worden die bytes gerapporteerd alsof ze een string zijn.

Vragen strings gebruik de volgende opdracht om twee als minimumlengte te gebruiken.

strings -n 2 jibber

strings -n 2 jibber in een terminalvenster

We hebben nu tekenreeksen van twee letters opgenomen in de resultaten. Merk op dat spaties worden geteld als een afdrukbaar teken.

strings uitgevoerd met twee letterstrings in een terminalvenster

Leidingsnaren door minder

Vanwege de lengte van de uitvoer van strings, we gaan het erdoorheen leiden less. We kunnen dan door het bestand scrollen op zoek naar interessante tekst.

strings jibber | less

snaren jibber |  minder in een terminalvenster

De lijst wordt nu voor ons gepresenteerd in less, waarbij de bovenkant van de lijst als eerste wordt weergegeven.

strings uitgevoerd in less in een terminalvenster

Tekenreeksen gebruiken met objectbestanden

Gewoonlijk worden broncodebestanden van programma’s gecompileerd tot objectbestanden. Deze zijn gekoppeld aan bibliotheekbestanden om een ​​binair uitvoerbaar bestand te maken. We hebben het jibber-objectbestand bij de hand, dus laten we eens in dat bestand kijken. Let op de bestandsextensie “.o”.

jibber.o | less

jibber.o |  minder in een terminalvenster

De eerste set tekenreeksen wordt allemaal verpakt in kolom acht als ze langer zijn dan acht tekens. Als ze zijn omwikkeld, staat een “H” -teken in kolom negen. Mogelijk herkent u deze strings als SQL-instructies.

strings uitgevoerd in less in een terminalvenster

Als u door de uitvoer bladert, blijkt dat deze opmaak niet in het hele bestand wordt gebruikt.

strings uitgevoerd in less in een terminalvenster

Het is interessant om de verschillen in de tekstreeksen te zien tussen het objectbestand en het voltooide uitvoerbare bestand.

Zoeken in specifieke gebieden in het bestand

Gecompileerde programma’s hebben verschillende gebieden op zichzelf die worden gebruikt om tekst op te slaan. Standaard, strings doorzoekt het hele bestand op zoek naar tekst. Dit is net alsof u de -a (alle) optie. Om strings alleen te laten zoeken in geïnitialiseerde, geladen gegevenssecties in het bestand, gebruikt u de -d (data) optie.

strings -d jibber | less

snaren -d jibber |  minder in een terminalvenster

Tenzij u daar een goede reden voor heeft, kunt u net zo goed de standaardinstelling gebruiken en het hele bestand doorzoeken.

De string-offset afdrukken

We kunnen hebben strings print de offset vanaf het begin van het bestand waarin elke string zich bevindt. Gebruik hiervoor de -o (offset) optie.

strings -o parse_phrases | less

strings -o parse_phrases |  minder

De offset wordt gegeven in octaal.

strings met de offset in octaal in een terminalvenster

Om de offset in een andere numerieke basis te laten weergeven, zoals decimaal of hexadecimaal, gebruikt u de -t (radix) optie. De radix-optie moet worden gevolgd door d (decimale), x (hexadecimaal), of o (Octaal). Gebruik makend van -t o is hetzelfde als gebruiken -o.

strings -t d parse_phrases | less

strings -td parse_phrases |  minder in een terminalvenster

De offsets worden nu in decimalen afgedrukt.

strings uitgevoerd met offsets in decimalen in een terminalvenster

strings -t x parse_phrases | less

strings -tx parse_phrases |  minder in een terminalvenster

De offsets worden nu in hexadecimaal afgedrukt.

strings uitgevoerd met offsets in hexadecimaal in een terminalvenster

Inclusief witruimte

strings beschouwt tab- en spatie-tekens als onderdeel van de gevonden tekenreeksen. Andere witruimtetekens, zoals nieuwe regels en regelterugloop, worden niet behandeld alsof ze deel uitmaken van de tekenreeksen. De -w (witruimte) optie zorgt ervoor dat tekenreeksen alle witruimtetekens behandelen alsof ze delen van de tekenreeks zijn.

strings -w add_data | less

strings -w add_data |  minder in een terminalvenster

We kunnen de lege regel in de uitvoer zien, die het resultaat is van de (onzichtbare) regelterugloop en nieuwe regel-tekens aan het einde van de tweede regel.

strings uitgevoerd in een terminalvenster

We zijn niet beperkt tot bestanden

We kunnen gebruiken strings met alles dat een stroom bytes is of kan produceren.

Met deze opdracht kunnen we door het RAM (Random Access Memory) van onze computer kijken.

We moeten gebruiken sudo omdat we toegang hebben tot / dev / mem. Dit is een karakterapparaatbestand dat een afbeelding van het hoofdgeheugen van uw computer bevat.

sudo strings /dev/mem | less

sudo strings / dev / mem |  minder in een terminalvenster

De lijst is niet de volledige inhoud van uw RAM. Het zijn alleen de snaren die eruit kunnen worden gehaald.

strings uitgevoerd in less in een terminalvenster

VERWANT: Wat betekent “Alles is een bestand” in Linux?

Veel bestanden tegelijk doorzoeken

Jokertekens kunnen worden gebruikt om groepen bestanden te selecteren die moeten worden doorzocht. De * karakter staat voor meerdere karakters, en de ? karakter staat voor een enkel karakter. U kunt er ook voor kiezen om veel bestandsnamen op de opdrachtregel op te geven.

We gaan een jokerteken gebruiken en door alle uitvoerbare bestanden in de directory / bin zoeken. Omdat de lijst resultaten van veel bestanden zal bevatten, zullen we de -f (bestandsnaam) optie. Hierdoor wordt de bestandsnaam aan het begin van elke regel afgedrukt. We kunnen dan zien in welk bestand elke string is gevonden.

We leiden de resultaten door grep en zoeken naar tekenreeksen die het woord ‘Copyright’ bevatten.

strings -f /bin/* | grep Copyright

strings -f / bin / * |  grep Copyright in een terminalvenster

We krijgen een nette lijst van de copyrightverklaringen voor elk bestand in de / bin directory, met de naam van het bestand aan het begin van elke regel.

strings-uitvoer die copyright-verklaringen in een terminalvenster toont

snaren ontrafeld

Snaren hebben geen mysterie; het is een typisch Linux-commando. Het doet iets heel specifieks en doet het heel goed.

Het is weer een van de tandwielen van Linux en komt echt tot leven wanneer het met andere commando’s werkt. Als je ziet hoe het kan zitten tussen binaire bestanden en andere tools zoals grep, begin je de functionaliteit van deze ietwat obscure opdracht te waarderen.

Nieuwste artikelen

Gerelateerde artikelen