Pokaż drukowalne znaki pliku za pomocą ciągów

Czy kiedykolwiek próbowałeś otworzyć plik w edytorze tylko po to, aby dowiedzieć się, że zawiera on nieczytelną zawartość binarną?

Polecenie „ciągi” Linuksa umożliwia przeglądanie czytelnych dla człowieka znaków w dowolnym pliku.

Głównym celem używania polecenia „stringi” jest ustalenie, jakiego typu plik jest oglądany, ale można go również użyć do wyodrębnienia tekstu. Na przykład, jeśli masz plik z zastrzeżonego programu, który zapisuje pliki w dziwnym formacie binarnym, możesz użyć „ciągów znaków” do wyodrębnienia tekstu, który umieściłeś w pliku.


Przykładowe użycie polecenia Strings

Świetnym sposobem na zademonstrowanie mocy polecenia ciągów jest utworzenie dokumentu za pomocą programu LibreOffice Writer.

Po prostu otwórz LibreOffice Writer i wprowadź tekst, a następnie zapisz go w standardowym formacie ODT.

Teraz otwórz okno terminala (naciśnij CTRL, ALT i T w tym samym czasie), a następnie użyj polecenia cat, aby wyświetlić plik w następujący sposób:

cat yourfi

(Zastąp plik yourfilename.odt nazwą utworzonego pliku)

To, co zobaczysz, to cała ściana nieczytelnego tekstu.

Naciśnij spację, aby przewijać plik. Sporadycznie w całym pliku widać część wpisanego tekstu.

Polecenie ciągi może służyć do wyświetlania tylko tych części, które są czytelne dla człowieka.

W najprostszej formie możesz uruchomić następujące polecenie:

stringi yourfi

Jak poprzednio, pojawi się ściana tekstu, ale tylko tekst, który możesz odczytać jako człowiek. Jeśli masz szczęście, będziesz mógł zobaczyć swój tekst.

Jednak to, co zobaczysz, jest kluczowe, znajduje się w pierwszej linii:

mimetypeapplication / vnd.oasis.

Wiemy, że typ pliku to LibreOffice Writer ODT z 2 powodów:

  1. Stworzyliśmy plik
  2. Rozszerzenie to .ODT

Wyobraź sobie, że nie utworzyłeś pliku lub znalazłeś go na odzyskanym dysku, a plik nie miał rozszerzenia.

Odzyskiwanie systemu Windows często przywracało pliki o nazwach takich jak 0001, 0002, 0003 itd. Fakt, że pliki zostały odzyskane, jest świetny, ale próba ustalenia, jakiego typu były te pliki, była koszmarem.

Używając łańcuchów, masz szansę na wypracowanie typu pliku. Wiedza, że ​​plik jest plikiem opendocument.text, oznacza, że ​​można go zapisać z rozszerzeniem ODT i otworzyć w programie LibreOffice Writer.

Jeśli nie zdawałeś sobie sprawy, plik ODT jest w zasadzie plikiem skompresowanym. Jeśli zmienisz nazwę yourfilename.odt na yourfilename.zip, możesz go otworzyć w narzędziu do archiwizacji, a nawet rozpakować plik.

Alternatywne zachowania

Domyślnie polecenie strings zwraca wszystkie ciągi w pliku, ale można zmienić zachowanie, aby zwracało ciągi z zainicjowanych, załadowanych sekcji danych w pliku.

Co to dokładnie oznacza? Wydaje się, że nikt nie wie.

Rozsądnie jest założyć, że używasz ciągów znaków, aby spróbować znaleźć typ pliku lub wyszukać określony tekst w pliku.

Jeśli po uruchomieniu polecenia ciągów przy użyciu domyślnego zachowania nie otrzymujesz wyników, na które liczyłeś, spróbuj uruchomić jedno z następujących poleceń, aby sprawdzić, czy to robi różnicę:

ciąg

or

strings --data nazwa twojego pliku

Strona podręcznika stwierdza, że ​​powyższe polecenie może pomóc zmniejszyć ilość śmieci zwracanych z łańcuchów.

Polecenie „strings” można skonfigurować tak, aby działało odwrotnie, tak aby przełącznik minus d był zachowaniem domyślnym. Jeśli tak jest w Twoim systemie, możesz zwrócić wszystkie dane za pomocą następującego polecenia:

ciąg


Formatowanie danych wyjściowych

Możesz uzyskać tekst w wyniku, aby wyświetlić nazwę pliku obok każdego wiersza tekstu.

Aby to zrobić, uruchom jedno z następujących poleceń:

ciąg

or

strings --print-nazwa-pliku nazwa-pliku

Wynik będzie teraz wyglądał mniej więcej tak:

yourfilename: fragment tekstu

or

yourfilename: kolejny fragment tekstu

Jako część danych wyjściowych można również wyświetlić przesunięcie miejsca, w którym ten tekst pojawia się w pliku. Aby to zrobić, uruchom następujące polecenie:

ciąg

Wynik będzie wyglądał mniej więcej tak:

Przesunięcie jest w rzeczywistości przesunięciem ósemkowym, chociaż w zależności od tego, jak napisy zostały skompilowane dla twojego systemu, może to być również przesunięcie szesnastkowe lub dziesiętne.

Bardziej dokładnym sposobem uzyskania żądanego przesunięcia jest użycie następujących poleceń:

strings -td nazwa twojego pliku
strings -to yourfilename
strings -th yourfilename

Minus t oznacza, że ​​zwraca przesunięcie, a następujący po nim znak określa typ przesunięcia. (tj. d = dziesiętny, o = ósemkowy, h = szesnastkowy).

Domyślnie polecenie strings drukuje każdy nowy ciąg w nowym wierszu, ale można ustawić wybrany separator. Na przykład, aby użyć symbolu potoku („|”) jako separatora, uruchom następujące polecenie:

ciągi -s "| &


Dostosuj limit strun

Polecenie strings domyślnie szuka ciągu 4 drukowalnych znaków w wierszu. Możesz dostosować wartość domyślną, aby zwracała tylko ciąg zawierający 8 drukowalnych znaków lub 12 drukowalnych znaków.

Dostosowując ten limit, można dostosować wynik, aby uzyskać najlepszy możliwy wynik. Szukając ciągu, który jest zbyt długi, ryzykujesz pominięcie użytecznego tekstu, ale czyniąc go zbyt krótkim, możesz otrzymać znacznie więcej śmieci.

Aby dostosować limit ciągu, uruchom następujące polecenie:

smyczki

W powyższym przykładzie zmieniłem limit na 8. Możesz zamienić 8 na wybraną przez siebie liczbę.

Możesz również użyć następującego polecenia, aby zrobić to samo:

ciągi - bajty & #

Uwzględnij odstępy

Domyślnie polecenie ciągów zawiera spacje, takie jak tabulacja lub spacja, jako znak drukowalny. Dlatego jeśli masz napis o treści „kot usiadł na macie”, polecenie string zwróci cały tekst.

Znaki nowego wiersza i powrót karetki nie są domyślnie uznawane za znaki drukowalne.

Aby ciągi rozpoznawały znaki nowego wiersza i powroty karetki jako drukowalne ciągi znaków w następujący sposób:

ciąg

Zmień kodowanie

Dostępnych jest 5 opcji kodowania do użycia z ciągami:

  • s = 7-bitowy bajt (używany dla ASCII, ISO 8859)
  • S = 8-bitowy bajt
  • b = 16-bitowy bigendian
  • l = 16-bitowy littleendian

Wartość domyślna to 7-bitowy bajt.

Aby zmienić kodowanie, uruchom następujące polecenie:

strings -es nazwa twojego pliku
strings --encoding = s twoja nazwa pliku

W powyższym poleceniu określiłem domyślne „s”, co oznacza 7-bitowy bajt. Po prostu zastąp „s” wybraną literą kodującą.

Zmień nazwę opisu pliku binarnego

Możesz zmienić zachowanie ciągów, aby używały innej biblioteki deskryptorów plików binarnych niż ta dostarczona dla twojego systemu.

Ten przełącznik jest dla ekspertów. Jeśli masz inną bibliotekę do użycia, możesz to zrobić, uruchamiając następujące polecenie ciągów:

st

Opcje czytania z pliku

Jeśli zamierzasz używać tych samych opcji za każdym razem, nie chcesz określać wszystkich przełączników za każdym razem, gdy uruchamiasz polecenie, ponieważ zajmuje to trochę czasu.

To, co możesz zrobić, to utworzyć plik tekstowy za pomocą nano i określić opcje w tym pliku.

Aby wypróbować to w terminalu, uruchom następujące polecenie:

W pliku wprowadź następujący tekst:

-f -o -n

Zapisz plik, naciskając CTRL i O i wyjdź, naciskając CTRL i X.

Aby uruchomić polecenia ciągów z tymi opcjami, uruchom następujące polecenie:

stringi @strings

Opcje zostaną odczytane z pliku stringsopts i przed każdym napisem powinieneś zobaczyć nazwę pliku, przesunięcie i znak "|" jako separator.

Uzyskiwanie pomocy

Jeśli chcesz przeczytać więcej o łańcuchach, możesz uruchomić następujące polecenie, aby uzyskać pomoc.

Alternatywnie możesz również przeczytać stronę podręcznika:

Dowiedz się, którą wersję ciągów używasz

Aby znaleźć wersję ciągów, której używasz, uruchom jedno z następujących poleceń:

ciągi -v
ciągi -V
stringi - wersja

Dodaj komentarz