Zkusili jste někdy otevřít soubor v editoru, jen abyste zjistili, že obsahuje nečitelný binární obsah? Příkaz „strings“ systému Linux umožňuje zobrazit znaky čitelné člověkem v libovolném souboru. Hlavním účelem použití příkazu „strings“ je zjistit, na jaký typ souboru se díváte, ale můžete jej také použít k extrakci textu. Například pokud máte soubor z proprietárního programu, který ukládá soubory v podivném binárním formátu, můžete pomocí textových řetězců extrahovat text, který do souboru vložíte.
Příklad použití příkazu Strings
Skvělým způsobem, jak předvést sílu příkazu strings, je vytvořit dokument pomocí nástroje LibreOffice Writer. Otevřete LibreOffice Writer, zadejte nějaký text a poté jej uložte ve standardním formátu ODT. Nyní otevřete okno terminálu (stiskněte CTRL, ALT a T současně) a poté pomocí příkazu cat zobrazte soubor následujícím způsobem: cat yourfilename.odt | více
type = „code“> (Nahraďte „yourfilename.odt“ názvem souboru, který jste vytvořili.) Uvidíte celou zeď nečitelného textu.
Stisknutím mezerníku procházejte souborem. Sporadicky v celém souboru uvidíte část zadaného textu. Příkaz strings lze použít k zobrazení pouze částí, které jsou čitelné člověkem. V nejjednodušší podobě můžete spustit následující příkaz: strings yourfilename.odt | více
type = „code“> Stejně jako dříve se zobrazí textová zeď, ale pouze text, který si můžete přečíst jako člověk. Pokud budete mít štěstí, uvidíte svůj text. To, co uvidíte, to je klíčové, je však na prvním řádku: mimetypeapplication / vnd.oasis.opendocument.text
type = „code“> Víme, že typ souboru je soubor ODT LibreOffice Writer, a to ze dvou důvodů:
- Vytvořili jsme soubor
- Přípona je .ODT
Představte si, že jste soubor nevytvořili nebo že jste soubor našli na obnoveném disku a soubor neměl příponu. Obnova systému Windows by často obnovovala soubory s názvy jako 0001, 0002, 0003 atd. Skutečnost, že byly soubory obnoveny, je skvělá, ale pokusit se zjistit, jaké typy těchto souborů byly, byla noční můra. Použitím řetězců máte šanci vypracovat typ souboru. Vědět, že soubor je soubor opendocument.text, znamená, že jej můžete uložit s příponou ODT a otevřít v zapisovači LibreOffice. Pokud jste nevěděli, soubor ODT je v podstatě komprimovaný soubor. Pokud přejmenujete yourfilename.odt na yourfilename.zip, můžete jej otevřít v archivním nástroji a dokonce soubor rozbalit.
Alternativní chování
Ve výchozím nastavení příkaz strings vrací všechny řetězce v souboru, ale můžete přepnout chování tak, aby vracelo řetězce z inicializovaných načtených datových částí v souboru. Co to přesně znamená? Zdá se, že to nikdo neví. Má smysl předpokládat, že používáte řetězce, abyste se pokusili zjistit typ souboru nebo vyhledat konkrétní text v souboru. Pokud při spuštění příkazu strings pomocí výchozího chování nezískáte výstup, ve který jste doufali, zkuste spustit některý z následujících příkazů, abyste zjistili, zda to má rozdíl: strings -d yourfilename
type = „code“> nebo strings –data yourfilename
Ruční stránka uvádí, že výše uvedený příkaz může pomoci snížit množství odpadu vráceného z řetězců. Příkaz „strings“ lze nastavit tak, aby pracoval obráceně, takže výchozí nastavení je přepínač mínus d. Pokud tomu tak je ve vašem systému, můžete všechna data vrátit pomocí následujícího příkazu: strings -a yourfilename
zadejte = „kód“>
Formátovací výstup
Text můžete dostat do výstupu, aby se vedle každého řádku textu zobrazil název souboru. Chcete-li to provést, spusťte jeden z následujících příkazů: strings -f yourfilename
type = „code“> nebo strings –print-file-name yourfilename
Výstup bude nyní vypadat asi takto: yourfilename: kousek textu
nebo yourfilename: další část textu
Jako součást výstupu můžete také zobrazit posunutí místa, kde se tento text zobrazí v souboru. Chcete-li tak učinit, spusťte následující příkaz: strings -o yourfilename
type = „code“> Výstup bude vypadat přibližně takto: 16573 váš 17024 text
type = „code“> Posun je ve skutečnosti osmičkový posun, i když v závislosti na tom, jak byly řetězce zkompilovány pro váš systém, by to mohl být také hexadecimální nebo desítkový offset. Přesnější způsob, jak získat požadovaný posun, je použít následující příkazy: strings -td yourfilename
řetězce – na vaše jméno souboru
řetězce – vaše jméno souboru
Mínus t znamená vrátit offset a následující znak určuje typ offsetu (tj. D = desítkové, o = osmičkové, h = hex). Ve výchozím nastavení příkaz strings vytiskne každý nový řetězec na nový řádek, ale můžete nastavit oddělovač podle vašeho výběru. Chcete-li například jako oddělovač použít symbol kanálu („|“), spusťte následující příkaz: strings -s „|“ vaše jméno souboru
zadejte = „kód“>
Upravte limit řetězce
Příkaz strings ve výchozím nastavení hledá řetězec čtyř tisknutelných znaků v řadě. Výchozí nastavení můžete upravit tak, aby vracelo pouze řetězec s osmi tisknutelnými znaky nebo 12 tisknutelnými znaky. Úpravou tohoto limitu můžete přizpůsobit výstup, abyste dosáhli co nejlepšího výsledku. Hledáním příliš dlouhého řetězce riskujete, že vynecháte užitečný text, ale jeho zkrácením můžete skončit s mnohem více nevyžádanými reklamami. Chcete-li upravit limit řetězce, spusťte následující příkaz: strings -n 8 yourfilename
type = „code“> Ve výše uvedeném příkladu jsem změnil limit na 8. Můžete nahradit 8 číslem podle svého výběru. Můžete také použít následující příkaz k provedení stejné věci: strings –bytes = 8 yourfilename
zadejte = „kód“>
Zahrnout prázdné znaky
Ve výchozím nastavení obsahuje příkaz řetězce prázdné znaky, například tabulátor nebo mezeru, jako tisknutelný znak. Pokud tedy máte řetězec, který se čte jako „kočka seděla na podložce“, příkaz řetězce by vrátil celý text. Ve výchozím nastavení se nové řádkové znaky a konce řádku nepovažují za tisknutelné znaky. Chcete-li, aby řetězce rozpoznávaly nové znaky řádku a návraty vozíku jako tisknutelný znak, spusťte řetězce následujícím způsobem: strings -w yourfilename
zadejte = „kód“>
Změňte kódování
Pro použití s řetězci je k dispozici pět možností kódování:
- s = 7bitový bajt (používá se pro ASCII, ISO 8859)
- S = 8bitový bajt
- b = 16 bit bigendian
- l = 16 bitů malý
Výchozí hodnota je 7bitový bajt. Chcete-li změnit kódování, spusťte následující příkaz: strings -es yourfilename
strings –encoding = s vaše jméno souboru
Ve výše uvedeném příkazu jsem určil výchozí „s“, což znamená 7bitový bajt. Nahraďte písmeno „s“ kódovacím písmenem podle vašeho výběru.
Změňte název popisu binárního souboru
Chování řetězců můžete změnit tak, aby používalo jinou knihovnu deskriptorů binárních souborů, než je ta, která je k dispozici pro váš systém. Tento přepínač je určen pro odborníky. Pokud máte k dispozici jinou knihovnu, můžete to provést spuštěním následujícího příkazu strings: strings -T bfdname
zadejte = „kód“>
Možnosti čtení ze souboru
Pokud budete pokaždé používat stejné možnosti, pak nechcete zadávat všechny přepínače při každém spuštění příkazu, protože to nějakou dobu trvá. Co můžete udělat, je vytvořit textový soubor pomocí nano a určit možnosti v tomto souboru. Chcete-li to vyzkoušet v terminálu, spusťte následující příkaz: nano stringsopts
type = „code“> Do souboru zadejte následující text: -f -o -n 3 -s „|“
type = „code“> Uložte soubor stisknutím CTRL + O a ukončete stisknutím CTRL + X. Chcete-li spustit příkazy řetězců s těmito možnostmi, spusťte následující příkaz: strings @stringsopts yourfilename
type = „code“> Možnosti budou načteny ze souboru stringsopts a před každým řetězcem byste měli vidět název souboru s offsetem a znakem „|“ jako oddělovač.
Získání pomoci
Pokud si chcete přečíst více o řetězcích, spusťte následující příkaz a získejte nápovědu. struny – nápověda
type = „code“> Alternativně si přečtěte stránku manuálu: man strings
zadejte = „kód“>
Zjistěte, kterou verzi řetězců používáte
Chcete-li zjistit verzi spuštěných řetězců, spusťte jeden z následujících příkazů: strings -v
řetězce -V
řetězce – verze