Skip to content

Jak zobrazit tisknutelné znaky souboru pomocí příkazu Strings

19 de Červen de 2021
binary 2 56a6d2195f9b58b7d0e4f743

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ů:

  1. Vytvořili jsme soubor
  2. Přípona je .ODT

Linux strings příkaz odt soubor

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