Fatmawati Achmad Zaenuri/Shutterstock.com

Chcete vidět text v binárním nebo datovém souboru? Linux strings příkaz vytáhne tyto kousky textu – nazývané „řetězce“ – za vás.

Linux je plný příkazů, které mohou vypadat jako řešení při hledání problémů. The strings velení definitivně spadá do toho tábora. Jaký je jen jeho účel? Existuje nějaký bod k příkazu, který uvádí tisknutelné řetězce z binárního souboru?

Udělejme krok zpět. Binární soubory – jako jsou soubory programů – mohou obsahovat řetězce textu čitelného pro člověka. Jak je ale můžete vidět? Pokud použijete cat nebo less pravděpodobně skončíte se zavěšeným oknem terminálu. Programy, které jsou navrženy pro práci s textovými soubory, si dobře neporadí, pokud se do nich vkládají netisknutelné znaky.

Většina bajtů v binárním souboru není čitelná pro člověka a nelze je vytisknout do okna terminálu způsobem, který dává smysl. Neexistují žádné znaky nebo standardní symboly reprezentující binární hodnoty, které neodpovídají alfanumerickým znakům, interpunkci nebo mezerám. Souhrnně jsou tyto znaky známé jako „tisknutelné“ znaky. Zbytek jsou „netisknutelné“ znaky.

Takže pokus o zobrazení nebo vyhledání textových řetězců v binárním nebo datovém souboru je problém. A tam je to strings Extrahuje řetězce tisknutelných znaků ze souborů, takže jiné příkazy mohou řetězce používat, aniž by se musely potýkat s netisknutelnými znaky.

Použití příkazu strings

Na tom není nic složitého strings a jeho základní použití je velmi jednoduché. Poskytujeme název souboru, který si přejeme strings pro vyhledávání na příkazovém řádku.

reklama

Zde budeme používat řetězce v binárním souboru – spustitelném souboru – nazvaném „jibber“. Typujeme strings, mezeru, „jibber“ a poté stiskněte Enter.

strings jibber

Řetězce jsou extrahovány ze souboru a uvedeny v okně terminálu.

Nastavení minimální délky řetězce

Ve výchozím nastavení budou řetězce hledat řetězce, které mají čtyři znaky nebo delší. Chcete-li nastavit delší nebo kratší minimální délku, použijte -n možnost (minimální délka).

Všimněte si, že čím kratší je minimální délka, tím vyšší je šance, že uvidíte více odpadu.

Některé binární hodnoty mají stejnou číselnou hodnotu jako hodnota, která představuje tisknutelný znak. Pokud jsou dvě z těchto číselných hodnot náhodou v souboru vedle sebe a zadáte minimální délku dvě, budou tyto bajty hlášeny, jako by to byly řetězce.

reklama

Zeptat se strings chcete-li použít dvě jako minimální délku, použijte následující příkaz.

strings -n 2 jibber

Nyní máme ve výsledcích zahrnuty dvoupísmenné řetězce. Pamatujte, že mezery se počítají jako tisknutelné znaky.

Potrubní řetězce Přes méně

Vzhledem k délce výstupu z strings, protáhneme to potrubím less. Poté můžeme procházet souborem a hledat text, který nás zajímá.

strings jibber | less

Výpis je nyní pro nás prezentován v less, přičemž horní část seznamu je zobrazena jako první.

Použití řetězců s objektovými soubory

Soubory zdrojového kódu programu jsou obvykle kompilovány do objektových souborů. Ty jsou propojeny se soubory knihovny, aby se vytvořil binární spustitelný soubor. Máme po ruce soubor jibber object file, tak se pojďme podívat dovnitř tohoto souboru. Všimněte si přípony souboru „.o“.

jibber.o | less

První sada řetězců jsou všechny zalomeny ve sloupci osm, pokud jsou delší než osm znaků. Pokud byly zalomeny, je ve sloupci devět znak „H“. Tyto řetězce můžete rozpoznat jako příkazy SQL.

reklama

Procházením výstupu zjistíte, že toto formátování není použito v celém souboru.

Je zajímavé vidět rozdíly v textových řetězcích mezi objektovým souborem a hotovým spustitelným souborem.

Vyhledávání v konkrétních oblastech v souboru

Kompilované programy mají v sobě různé oblasti, které se používají k ukládání textu. Ve výchozím stavu, strings prohledá celý soubor a hledá text. Je to stejné, jako byste použili -a (vše) možnost. Chcete-li, aby řetězce prohledávaly pouze v inicializovaných, načtených datových sekcích v souboru, použijte -d (data) možnost.

strings -d jibber | less

Pokud k tomu nemáte dobrý důvod, můžete také použít výchozí nastavení a prohledat celý soubor.

Tisk řetězcového offsetu

Můžeme mít strings vytisknout posun od začátku souboru, ve kterém je každý řetězec umístěn. Chcete-li to provést, použijte -o možnost (offset).

strings -o parse_phrases | less

Posun je uveden v osmičkovém řádu.

Chcete-li zobrazit posun v jiném číselném základu, například v desítkové nebo šestnáctkové soustavě, použijte -t (radix) možnost. Musí následovat volba radix d (desetinný), x (hexadecimální), popř o (osmičková). Použitím -t o je stejné jako použití -o.

strings -t d parse_phrases | less

Ofsety se nyní tisknou v desítkové soustavě.

strings -t x parse_phrases | less

Ofsety jsou nyní vytištěny v šestnáctkové soustavě.

Včetně mezer

strings považuje znaky tabulátoru a mezery za součást nalezených řetězců. S ostatními mezerami, jako jsou nové řádky a návraty na začátek řádku, se nezachází, jako by byly součástí řetězců. The -w(whitespace) způsobí, že řetězce budou se všemi mezerami zacházet, jako by byly součástí řetězce.

strings -w add_data | less

reklama

Ve výstupu vidíme prázdný řádek, který je výsledkem (neviditelného) návratu vozíku a znaků nového řádku na konci druhého řádku.

Nejsme omezeni pouze na soubory

Můžeme použít stringss čímkoli, co je nebo může vytvořit proud bajtů.

Pomocí tohoto příkazu se můžeme podívat do paměti RAM (random access memory) našeho počítače.

Musíme použít sudo protože přistupujeme k /dev/mem. Toto je soubor znakového zařízení, který obsahuje obraz hlavní paměti vašeho počítače.

sudo strings /dev/mem | less

Výpis není celý obsah vaší RAM. Jsou to jen struny, které se z něj dají vytáhnout.

PŘÍBUZNÝ: Co v Linuxu znamená „Všechno je soubor“?

Prohledávání mnoha souborů najednou

Zástupné znaky lze použít k výběru skupin souborů, které se mají prohledávat. The*znak představuje více znaků a?znak představuje libovolný jednotlivý znak. Na příkazovém řádku si také můžete vybrat, zda chcete poskytnout mnoho názvů souborů.

reklama

Použijeme zástupný znak a prohledáme všechny spustitelné soubory v adresáři /bin. Protože výpis bude obsahovat výsledky z mnoha souborů, použijeme -f možnost (název souboru). To vytiskne název souboru na začátku každého řádku. Poté můžeme vidět, ve kterém souboru byl každý řetězec nalezen.

Výsledky zpracováváme pomocí grep a hledáme řetězce obsahující slovo „Copyright“.

strings -f /bin/* | grep Copyright

Získáme úhledný seznam prohlášení o autorských právech pro každý soubor v adresáři /bin s názvem souboru na začátku každého řádku.

struny Rozpletené

Struny nemají žádné tajemství; je to typický příkaz Linuxu. Dělá něco velmi specifického a dělá to velmi dobře.

Je to další z linuxových koleček a skutečně ožívá, když pracuje s jinými příkazy. Když vidíte, jak to může sedět mezi binárními soubory a dalšími nástroji, jako je grep, začnete oceňovat funkčnost tohoto mírně obskurního příkazu.

ČTĚTE DALŠÍ

  • › Jak používat Google Maps Music Controls pro Spotify, Apple Music nebo YouTube Music
  • › Jak rychle začít s poznámkami ke schůzce v Dokumentech Google
  • › Jaké jsou rychlosti čtení/zápisu a proč na nich záleží?
  • › Co je to trhání obrazovky?
  • › Co je to Bid Sniping na eBay a jak ho porazím?