A strings parancs használata Linuxon

Szeretné látni a szöveget egy bináris vagy adatfájlban? A Linux strings parancs kihúzza azokat a szövegrészeket, amelyeket „karakterláncoknak” neveznek.

A Linux tele van olyan parancsokkal, amelyek megoldásnak tűnhetnek a problémák keresésében. A húrok parancsa határozottan ebbe a táborba tartozik. Csak mi a célja? Van értelme egy parancsnak, amely felsorolja a nyomtatható karakterláncokat egy bináris fájlból?

Tegyünk egy lépést hátra. A bináris fájlok – például a programfájlok – ember által olvasható szöveget tartalmazhatnak. De hogyan láthatod őket? Ha macskát vagy kevesebbet használ, akkor valószínűleg egy felakasztott terminálablakot kap. A szöveges fájlokkal való együttműködésre tervezett programok nem működnek jól, ha nem nyomtatható karaktereket táplálnak át rajtuk.

A bináris fájlokon belüli bájtok többsége ember által nem olvasható, és nem nyomtatható ki a terminálablakba olyan módon, aminek értelme lenne. Nincsenek olyan karakterek vagy szabványos szimbólumok, amelyek olyan bináris értékeket jelölnének, amelyek nem felelnek meg az alfanumerikus karaktereknek, írásjeleknek vagy szóközöknek. Ezeket együttesen „nyomtatható” karaktereknek nevezzük. A többi „nem nyomtatható” karakter.

Tehát problémát okoz, ha egy bináris vagy adatfájlban próbálunk szöveges karakterláncokat keresni vagy keresni. És itt jönnek be a húrok. Kivonja fájlokból nyomtatható karakterláncok így más parancsok is használhatják a karakterláncokat anélkül, hogy nem nyomtatható karakterekkel kellene megküzdeniük.

A Command karakterláncok használata

A strings parancsban nincs semmi bonyolult, alapvető használata pedig nagyon egyszerű. A parancssorban megadjuk annak a fájlnak a nevét, amelyben keresni kívánjuk a karakterláncokat.

  A Google-táblázatok adatainak exportálása JSON-ba és XML-be

Itt karakterláncokat fogunk használni egy bináris fájlon – egy végrehajtható fájlon –, amelyet „jibbernek” neveznek. Beírunk stringeket, szóközt, „jibber”-t, majd megnyomjuk az Entert.

strings jibber

A karakterláncok kibontásra kerülnek a fájlból, és megjelennek a terminálablakban.

A minimális karakterlánchossz beállítása

Alapértelmezés szerint a karakterláncok négy vagy hosszabb karakterláncokat keresnek. Hosszabb vagy rövidebb minimális hossz beállításához használja a -n (minimális hossz) opciót.

Vegye figyelembe, hogy minél rövidebb a minimális hossz, annál nagyobb az esélye, hogy több szemetet fog látni.

Néhány bináris érték ugyanazzal a számértékkel rendelkezik, mint a nyomtatható karaktert képviselő érték. Ha ezek közül a számértékek közül kettő egymás mellett van a fájlban, és megadja a minimális hosszt kettőt, akkor ezek a bájtok úgy jelennek meg, mintha egy karakterlánc lennének.

Ha arra kéri a karakterláncokat, hogy kettőt használjanak minimális hosszúságként, használja a következő parancsot.

strings -n 2 jibber

Mostantól kétbetűs karakterláncok szerepelnek az eredmények között. Vegye figyelembe, hogy a szóközök nyomtatható karakternek számítanak.

Csővezetékek a Kevesebben keresztül

A karakterláncok kimenetének hossza miatt kevesebbet fogunk átvezetni. Ezután görgethetjük a fájlt, és megkereshetjük az érdekes szöveget.

strings jibber | less

A listát most kevesebbben mutatjuk be, először a lista teteje jelenik meg.

Stringek használata objektumfájlokkal

Általában a program forráskód fájljait objektumfájlokba fordítják. Ezek a könyvtári fájlokhoz kapcsolódnak, hogy bináris végrehajtható fájlt hozzanak létre. A jibber objektum fájl a kezünkben van, ezért nézzünk bele a fájlba. Vegye figyelembe a „.o” fájlkiterjesztést.

jibber.o | less

A karakterláncok első készlete a nyolcadik oszlopba kerül, ha nyolc karakternél hosszabb. Ha becsomagolták, a kilencedik oszlopban egy „H” karakter található. Ezeket a karakterláncokat SQL utasításként ismerheti fel.

  2020 márciusától minden jármű kompatibilis az Apple CarPlay szolgáltatással

A kimenet görgetése során kiderül, hogy ezt a formázást a fájl nem használja.

Érdekes látni a különbségeket az objektumfájl és a kész futtatható fájl szöveges karakterláncai között.

Keresés a fájl meghatározott területein

A lefordított programok különböző területeket tartalmaznak magukban, amelyeket szöveg tárolására használnak. Alapértelmezés szerint a strings a teljes fájlban keres szöveget. Ez olyan, mintha az -a (all) opciót használta volna. Ha azt szeretné, hogy a karakterláncok csak a fájl inicializált, betöltött adatrészeiben keressenek, használja a -d (adat) kapcsolót.

strings -d jibber | less

Hacsak nincs rá jó oka, használhatja az alapértelmezett beállítást, és kereshet a teljes fájlban.

A string ofszet nyomtatása

A karakterláncok kinyomtathatják az eltolást annak a fájlnak az elejétől, amelyben az egyes karakterláncok találhatók. Ehhez használja az -o (eltolás) opciót.

strings -o parse_phrases | less

Az eltolás megadva Octal.

Ha az eltolást más numerikus alapban, például decimális vagy hexadecimális formában szeretné megjeleníteni, használja a -t (radix) kapcsolót. A radix opciót d (decimális), x (hexadecimális), vagy o (oktális). A -to használata ugyanaz, mint az -o használata.

strings -t d parse_phrases | less

Az eltolások most decimálisan jelennek meg.

strings -t x parse_phrases | less

Az eltolások most hexadecimálisan jelennek meg.

Beleértve a szóközt

A strings a tabulátor és szóköz karaktereket a talált karakterláncok részének tekinti. A többi szóköz karaktert, például az újsorokat és a kocsivisszaadásokat a rendszer nem kezeli úgy, mintha a karakterlánc részei lennének. A -w (whitespace) kapcsoló hatására a karakterláncok minden szóköz karaktert úgy kezelnek, mintha a karakterlánc részei lennének.

strings -w add_data | less

A kimenetben láthatjuk az üres sort, ami a második sor végén található (láthatatlan) kocsivissza és újsor karakterek eredménye.

  Szövegdobozok zárolása a Wordben

Nem korlátozódunk a fájlokra

Használhatunk karakterláncokat bármivel, ami bájtfolyamot jelent, vagy elő tud állítani.

Ezzel a paranccsal átnézhetjük a véletlen hozzáférésű memória (RAM) a számítógépünkön.

Sudo-t kell használnunk, mert elérjük a /dev/mem fájlt. Ez egy karakteres eszközfájl, amely a számítógépe fő memóriájának képét tartalmazza.

sudo strings /dev/mem | less

A lista nem a RAM teljes tartalma. Csak a húrokat lehet kivonni belőle.

Sok fájl keresése egyszerre

Helyettesítő karakterek használhatók a keresendő fájlcsoportok kiválasztására. A * karakter több karaktert jelöl, a ? karakter bármely karaktert jelöl. Azt is megadhatja, hogy sok fájlnevet adjon meg a parancssorban.

Helyettesítő karaktert fogunk használni, és a /bin könyvtárban lévő összes végrehajtható fájl között keresni fogunk. Mivel a lista sok fájlból származó eredményeket fog tartalmazni, a -f (fájlnév) kapcsolót fogjuk használni. Ezzel minden sor elejére kiírja a fájlnevet. Ezután láthatjuk, hogy az egyes karakterláncok melyik fájlban találhatók.

Az eredményeket továbbítjuk grep, és olyan karakterláncokat keres, amelyek a „Copyright” szót tartalmazzák.

strings -f /bin/* | grep Copyright

A /bin könyvtárban található minden egyes fájl szerzői jogi nyilatkozatairól egy szép listát kapunk, minden sor elején a fájl nevével.

húrok Unraveled

A húroknak nincs rejtélye; ez egy tipikus Linux parancs. Valami nagyon konkrétat csinál, és nagyon jól csinálja.

Ez a Linux másik fogaskereke, és igazán életre kel, amikor más parancsokkal dolgozik. Amikor látja, hogyan tud ülni a bináris fájlok és más eszközök, például a grep között, elkezdi értékelni ennek a kissé homályos parancsnak a funkcionalitását.