Jak zobrazit tiskové znaky souboru s příkazem Strings

Pokusili jste se někdy otevřít soubor v editoru, jen aby zjistili, že obsahuje nečitelný binární obsah?

Příkaz "řetězce" Linuxu umožňuje zobrazit znaky, které lze číst v každém souboru.

Hlavním účelem použití příkazu "řetězce" je zjistit, jaký typ souboru se díváte, ale můžete jej také použít k extrahování textu. Například pokud máte soubor z vlastního programu, který ukládá soubory v podivném binárním formátu, můžete použít "řetězce" k extrahování textu, který jste vložili do souboru.

Příklad použití příkazu řetězců

Skvělý způsob, jak demonstrovat sílu příkazu řetězců, je vytvořit dokument pomocí programu LibreOffice Writer.

Jednoduše otevřete LibreOffice Writer a vložte nějaký text a uložte jej ve standardním formátu ODT .

Nyní otevřete okno terminálu (stiskněte současně klávesy CTRL, ALT a T) a poté pomocí příkazu cat zobrazte soubor následujícím způsobem:

cat yourfilename.odt | více

(Nahraďte název_souboru.odt názvem souboru, který jste vytvořili)

Co uvidíte, je celá stěna nečitelného textu.

Stisknutím mezerníku procházejte soubor. Sporadicky v celém souboru uvidíte část textu, který jste zadali.

Příkaz řetězce lze použít k zobrazení pouze částí, které jsou čitelné pro člověka.

Ve své nejjednodušší formě můžete spustit následující příkaz:

řetězce yourfilename.odt | více

Stejně jako dříve se objeví stěna textu, ale pouze text, který si můžete přečíst jako člověka. Pokud máte štěstí, budete moci vidět váš text.

To, co budete mít možnost vidět, je klíčové, nicméně je na prvním řádku:

mimetypeapplication / vnd.oasis.opendocument.text

Víme, že typ souboru je soubor ODT LibreOffice Writer ze 2 důvodů:

  1. Vytvořili jsme soubor
  2. Rozšíření je .ODT

Představte si, že jste soubor nevytvořili, nebo jste nalezli soubor 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 snaží se zjistit, jaké typy těchto souborů byly noční můry.

Použitím řetězců máte možnost bojovat s vyřešením typu souboru. Vědomí, že soubor je soubor opendocument.text znamená, že jej můžete uložit s příponou ODT a otevřít ji v libreOffice spisovateli.

Pokud jste nevěděli, že soubor ODT je ​​v podstatě komprimovaný soubor. Pokud přejmenujete název_souboru.odt na název_souboru.zip, můžete ho otevřít v archivačním nástroji a dokonce i rozbalit soubor.

Alternativní chování

Ve výchozím nastavení příkaz řetězce vrací všechny řetězce v souboru, ale můžete změnit chování tak, aby vrátily řetězce z inicializovaných načtených datových úseků v souboru.

Co to přesně znamená? Zdá se, že to nikdo nezná.

Má smysl předpokládat, že používáte řetězce, abyste se pokusili zjistit typ souboru nebo hledat konkrétní text v souboru.

Pokud při spouštění příkazu řetězců pomocí výchozího chování nedostáváte výstup, o který jste doufali, zkuste spustit jeden z následujících příkazů, abyste zjistili, zda je rozdíl:

řetězce -d váš název_souboru

řetězce - data vašeho souboru

Manuální stránka uvádí, že výše uvedený příkaz může pomoci snížit množství odpadků vrácených z řetězců.

Příkaz "řetězce" lze nastavit tak, aby fungoval v opačném směru, takže přepínač mínus d je výchozí chování. Pokud tomu tak je ve vašem systému, můžete vrátit všechna data pomocí následujícího příkazu:

řetězce - vaše jméno souboru

Formátování výstupu

Text v rámci výstupu můžete zobrazit, aby se zobrazil název souboru vedle každého řádku textu.

Chcete-li to provést, spusťte jeden z následujících příkazů:

řetězce -f váš název_souboru

řetězce --print-file-name váš název_souboru

Výstup bude nyní vypadat takto:

yourfilename: text

yourfilename: jiný text

Jako součást výstupu můžete také zobrazit posun místa, kde se daný text zobrazí v souboru. Postupujte takto:

řetězce - jméno vašeho souboru

Výstup bude vypadat takto:

16573 vaše

17024 text

Posun je vlastně osmičkový posun, ačkoli v závislosti na tom, jak byly pro váš systém sestaveny řetězce, mohlo by to být také hexadecimální nebo dekadentní offset.

Přesnější způsob získání posunu, který chcete, je použít následující příkazy:

řetězce -td yourfilename

řetězce - do vašeho souboru

řetězce - vaše jméno_souboru

Mínus t znamená vrátit posun a znak, který následuje, určuje typ ofsetu. (tj. d = desetinná, o = osmičková, h = hex).

Ve výchozím nastavení příkazy řetězců vytiskne každý nový řetězec na nové řádce, ale můžete nastavit oddělovač podle vašeho výběru. Například použít jako symbol odbočky ("|") jako oddělovač spustit následující příkaz:

řetězce -s "|" " yourfilename

Upravte omezení řetězce

Příkaz řetězec ve výchozím nastavení vyhledává řetězec čtyřtisknutelných znaků v řadě. Výchozí nastavení můžete upravit tak, že vrátí pouze řetězec s 8 tiskovými znaky nebo 12 tisknutelnými znaky.

Upravením tohoto limitu můžete přizpůsobit výstup, abyste dosáhli co nejlepšího výsledku. Při hledání řetězce, která je příliš dlouhá, riskujete vynechání užitečného textu, ale tím, že je příliš krátká, můžete skončit s mnohem více nevyžádaným vrácením.

Chcete-li nastavit omezení řetězce, spusťte následující příkaz:

řetězce -n 8 vaše jméno_souboru

Ve výše uvedeném příkladu jsem limit změnil na 8.

8 můžete nahradit číslem, které si zvolíte.

Můžete také použít následující příkaz, abyste provedli totéž:

řetězce - bytes = 8 váš název_souboru

Zahrnout bílé světlo

Ve výchozím nastavení příkaz řetězce obsahuje znaky jako je tabulka nebo mezera jako znak, který lze vytisknout. Proto pokud máte řetězec, který přečte jako "kočka seděla na podložce", pak příkaz strun vrátil celý text.

Nové znaky řádků a výnosy z vozu nejsou ve výchozím nastavení považovány za znaky, které lze tisknout.

Chcete-li, aby řetězce rozpoznaly nové řádkové znaky a vozík se vrací jako znak pro tisk, spusťte řetězce následujícím způsobem:

strings -w yourfilename

Změna kódování

Pro použití řetězců je k dispozici 5 možností kódování:

Výchozí hodnota je 7 bitový byte.

Chcete-li změnit kódování, spusťte následující příkaz:

řetězce - vaše jméno souboru

řetězce --encoding = s vaše jméno_souboru

Ve výše uvedeném příkazu jsem zadal výchozí "s", což znamená 7 bitový byte. Jednoduše nahraďte písmeno "s" kódovým písmenem podle vašeho výběru.

Změna názvu popisu binárního souboru

Chování řetězců můžete měnit tak, že používá jinou knihovnu deskriptorů binárních souborů než ta, která je k dispozici pro váš systém.

Tento přepínač je určen odborníkům. Pokud máte k dispozici jinou knihovnu, můžete tak provést spuštěním následujícího řetězce:

řetězce -T bfdname

Možnosti čtení ze souboru

Pokud budete chtít používat stejné možnosti pokaždé, pak nechcete, abyste museli zadávat všechny přepínače při každém spuštění příkazu, protože to trvá déle.

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 rámci terminálu, spusťte následující příkaz:

nano stringsopts

V souboru zadejte následující text:

-f -o -n 3 -s "|" "

Soubor uložte stisknutím kláves CTRL a O a ukončete stisknutím kláves CTRL a X.

Chcete-li spustit příkazy řetězce s těmito možnostmi, spusťte následující příkaz:

strings @ struny vypisuje jméno vašeho souboru

Možnosti budou přečteny ze souboru stringsopts a před každým řetězcem, posunem a "|" jako oddělovač.

Získání nápovědy

Chcete-li se dozvědět více o řetězcích, můžete spustit následující příkaz a získat pomoc.

řetězce --help

Případně si můžete také přečíst manuálovou stránku:

mužské řetězce

Zjistěte, kterou verzi řetězců používáte

Chcete-li najít verzi spuštěných řetězců, spusťte jeden z následujících příkazů:

řetězce -v

řetězce -V

řetězce - verze