Jak korzystać z polecenia ciągów w systemie Linux
Opublikowany: 2022-01-29 Chcesz zobaczyć tekst w pliku binarnym lub pliku danych? Polecenie Linux strings
wyciąga dla ciebie te fragmenty tekstu - zwane "stringami".
Linux jest pełen poleceń, które mogą wyglądać jak rozwiązania w poszukiwaniu problemów. Do tego obozu zdecydowanie należy dowództwo strings
. Jaki jest jego cel? Czy istnieje sens polecenia, które wyświetla listę ciągów do wydrukowania z pliku binarnego?
Cofnijmy się o krok. Pliki binarne — takie jak pliki programów — mogą zawierać ciągi tekstu czytelnego dla człowieka. Ale jak możesz je zobaczyć? Jeśli używasz cat
lub less
, prawdopodobnie skończysz z zawieszonym oknem terminala. Programy zaprojektowane do pracy z plikami tekstowymi nie radzą sobie dobrze, jeśli są przez nie podawane znaki niedrukowalne.
Większość bajtów w pliku binarnym nie jest czytelna dla człowieka i nie można ich wyświetlić w oknie terminala w żaden sensowny sposób. Nie ma żadnych znaków ani standardowych symboli reprezentujących wartości binarne, które nie odpowiadają znakom alfanumerycznym, interpunkcji lub odstępom. Łącznie są one znane jako znaki „drukowalne”. Reszta to znaki „niedrukowalne”.
Tak więc próba wyświetlenia lub przeszukania pliku binarnego lub pliku danych w poszukiwaniu ciągów tekstowych stanowi problem. I tu właśnie wkraczają strings
. Wyodrębnia z plików łańcuchy znaków drukowalnych, aby inne polecenia mogły używać tych łańcuchów bez konieczności walki ze znakami niedrukowalnymi.
Korzystanie z polecenia ciągów
W poleceniu strings
nie ma nic skomplikowanego, a jego podstawowe użycie jest bardzo proste. W wierszu poleceń podajemy nazwę pliku, w którym mają być przeszukiwane strings
.
Tutaj użyjemy ciągów w pliku binarnym – pliku wykonywalnym – zwanym „jibber”. Wpisujemy strings
, spację, „jibber” i wciskamy Enter.
strunowe jibbber
Ciągi są wyodrębniane z pliku i wyświetlane w oknie terminala.
Ustawianie minimalnej długości struny
Domyślnie strings wyszukuje ciągi, które mają co najmniej cztery znaki. Aby ustawić dłuższą lub krótszą minimalną długość, użyj opcji -n
(minimalna długość).
Pamiętaj, że im krótsza minimalna długość, tym większe prawdopodobieństwo, że zobaczysz więcej śmieci.
Niektóre wartości binarne mają taką samą wartość liczbową jak wartość reprezentująca znak drukowalny. Jeśli dwie z tych wartości liczbowych znajdują się obok siebie w pliku i określisz minimalną długość dwóch, te bajty zostaną zgłoszone tak, jakby były łańcuchem.
Aby poprosić strings
, aby używały dwóch jako minimalnej długości, użyj następującego polecenia.
strings -n 2 jibber
W wynikach znajdują się teraz dwuliterowe ciągi znaków. Zwróć uwagę, że spacje są liczone jako znak drukowalny.
Rurociągi przez Less
Ze względu na długość danych wyjściowych z strings
, będziemy je przepuszczać przez less
. Następnie możemy przewijać plik w poszukiwaniu interesującego tekstu.
jibbber strun | mniej
Aukcja jest teraz dla nas prezentowana w less
, z górną częścią wykazu wyświetlaną jako pierwsza.
Używanie ciągów z plikami obiektowymi
Zazwyczaj pliki kodu źródłowego programu są kompilowane w pliki obiektowe. Są one połączone z plikami bibliotek w celu utworzenia binarnego pliku wykonywalnego. Mamy pod ręką plik obiektu jibber, więc zajrzyjmy do środka tego pliku. Zwróć uwagę na rozszerzenie pliku „.o”.
jibber.o | mniej
Pierwszy zestaw ciągów jest zawinięty w kolumnie ósmej, jeśli jest dłuższy niż osiem znaków. Jeśli zostały zapakowane, znak „H” znajduje się w kolumnie dziewiątej. Możesz rozpoznać te ciągi jako instrukcje SQL.
Przewijanie danych wyjściowych pokazuje, że to formatowanie nie jest używane w całym pliku.
Interesujące jest zobaczenie różnic w ciągach tekstowych między plikiem obiektowym a gotowym plikiem wykonywalnym.
Wyszukiwanie w określonych obszarach pliku
Skompilowane programy mają w sobie różne obszary, które służą do przechowywania tekstu. Domyślnie strings
przeszukuje cały plik w poszukiwaniu tekstu. To tak, jakbyś użył opcji -a
(wszystkie). Aby wyszukiwać ciągi tylko w zainicjowanych, załadowanych sekcjach danych w pliku, użyj opcji -d
(dane).
ciągi -d jibbber | mniej
Jeśli nie masz ku temu dobrego powodu, równie dobrze możesz użyć ustawienia domyślnego i przeszukać cały plik.
Drukowanie przesunięcia ciągu
Możemy poprosić strings
o wypisanie offsetu od początku pliku, w którym znajduje się każdy string. Aby to zrobić, użyj opcji -o
(przesunięcie).
strings -o parse_phrases | mniej
Przesunięcie podano w ósemkach.
Aby przesunięcie było wyświetlane w innej podstawie numerycznej, na przykład dziesiętnej lub szesnastkowej, użyj opcji -t
(podstawa). Po opcji podstawy musi następować d
(dziesiętny), x
(szesnastkowy) lub o
(ósemkowy). Użycie -to
jest tym samym co użycie -o
.
strings -td parse_phrases | mniej
Przesunięcia są teraz drukowane w postaci dziesiętnej.
strings -tx parse_phrases | mniej
Przesunięcia są teraz drukowane w systemie szesnastkowym.
W tym białe znaki
strings
traktuje znaki tabulacji i spacji jako część znalezionych ciągów. Inne znaki odstępu, takie jak znaki nowej linii i powrót karetki, nie są traktowane tak, jakby były częścią łańcuchów. Opcja -w
(białe znaki) powoduje, że łańcuchy traktują wszystkie białe znaki tak, jakby były częścią łańcucha.
strings -w add_data | mniej
Na wyjściu możemy zobaczyć pustą linię, która jest wynikiem (niewidocznego) powrotu karetki i znaków nowej linii na końcu drugiej linii.
Nie ograniczamy się do plików
strings
możemy używać ze wszystkim, co jest lub może wytworzyć strumień bajtów.
Za pomocą tego polecenia możemy przejrzeć pamięć o dostępie swobodnym (RAM) naszego komputera.
Musimy użyć sudo
, ponieważ uzyskujemy dostęp do /dev/mem. Jest to plik urządzenia znakowego, który przechowuje obraz pamięci głównej komputera.
sudo stringi /dev/mem | mniej
Lista nie obejmuje całej zawartości pamięci RAM. To tylko struny, które można z niego wyciągnąć.
POWIĄZANE: Co oznacza „Wszystko jest plikiem” w systemie Linux?
Wyszukiwanie wielu plików jednocześnie
Symbole wieloznaczne mogą służyć do wybierania grup plików do przeszukania. Znak *
reprezentuje wiele znaków, a ?
znak reprezentuje dowolny pojedynczy znak. Możesz także podać wiele nazw plików w wierszu poleceń.
Użyjemy symbolu wieloznacznego i przeszukamy wszystkie pliki wykonywalne w katalogu /bin. Ponieważ listing będzie zawierał wyniki z wielu plików, użyjemy opcji -f
(nazwa pliku). Spowoduje to wydrukowanie nazwy pliku na początku każdego wiersza. Możemy wtedy zobaczyć, w którym pliku został znaleziony każdy ciąg.
Przepuszczamy wyniki przez program grep i szukamy ciągów zawierających słowo „Prawa autorskie”.
ciągi -f /bin/* | grep Prawa autorskie
Otrzymujemy zgrabną listę oświadczeń o prawach autorskich dla każdego pliku w katalogu /bin, z nazwą pliku na początku każdego wiersza.
smyczki rozwinięte
Struny nie mają żadnej tajemnicy; jest to typowe polecenie Linuksa. Robi coś bardzo konkretnego i robi to bardzo dobrze.
Jest to kolejny trybik Linuksa, który naprawdę ożywa, gdy pracuje z innymi poleceniami. Kiedy zobaczysz, jak może siedzieć między plikami binarnymi a innymi narzędziami, takimi jak grep
, zaczynasz doceniać funkcjonalność tego nieco niejasnego polecenia.
Polecenia Linuksa | ||
Pliki | tar · pv · kot · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · dysk testowy · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · ogon · stat · ls · fstab · echo · mniej · chgrp · chown · rev · wygląd · stringi · typ · zmiana nazwy · zip · rozpakuj · montuj · umount · zainstaluj · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · konwertuj · rclone · shred · srm | |
Procesy | alias · ekran · top · ładne · renice · postęp · strace · systemd · tmux · chsh · historia · w · wsad · free · co · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · ściana · tak · kill · sen · sudo · su · czas · groupadd · usermod · grupy · lshw · zamknij · restart · halt · poweroff · passwd · lscpu · crontab · data · bg · fg | |
Sieć | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
POWIĄZANE: Najlepsze laptopy z systemem Linux dla programistów i entuzjastów