So verwenden Sie den Strings-Befehl unter Linux
Veröffentlicht: 2022-01-29 Möchten Sie den Text in einer Binär- oder Datendatei sehen? Der Linux- strings
-Befehl zieht diese Textteile – „Strings“ genannt – für Sie heraus.
Linux ist voll von Befehlen, die wie Lösungen bei der Suche nach Problemen aussehen können. Das strings
fällt definitiv in dieses Lager. Was ist sein Zweck? Gibt es einen Punkt für einen Befehl, der die druckbaren Zeichenfolgen aus einer Binärdatei auflistet?
Machen wir einen Schritt zurück. Binärdateien – wie Programmdateien – können Zeichenketten mit menschenlesbarem Text enthalten. Aber wie bekommt man sie zu Gesicht? Wenn Sie cat
oder less
verwenden, werden Sie wahrscheinlich mit einem hängenden Terminalfenster enden. Programme, die für die Arbeit mit Textdateien ausgelegt sind, kommen nicht gut zurecht, wenn nicht druckbare Zeichen durch sie geleitet werden.
Die meisten Bytes in einer Binärdatei sind nicht lesbar und können nicht sinnvoll im Terminalfenster ausgegeben werden. Es gibt keine Zeichen oder Standardsymbole zur Darstellung von Binärwerten, die nicht alphanumerischen Zeichen, Satzzeichen oder Leerzeichen entsprechen. Zusammen werden diese als „druckbare“ Zeichen bezeichnet. Der Rest sind „nicht druckbare“ Zeichen.
Daher ist der Versuch, eine Binär- oder Datendatei nach Textzeichenfolgen anzuzeigen oder zu durchsuchen, ein Problem. Und hier kommen strings
ins Spiel. Es extrahiert Strings mit druckbaren Zeichen aus Dateien, sodass andere Befehle die Strings verwenden können, ohne mit nicht druckbaren Zeichen kämpfen zu müssen.
Mit dem Zeichenketten-Befehl
Der Befehl strings
ist nicht kompliziert und seine grundlegende Verwendung ist sehr einfach. Wir geben den Namen der Datei an, die wir in der strings
durchsuchen möchten.
Hier verwenden wir Strings in einer Binärdatei – einer ausführbaren Datei – namens „Jibber“. Wir geben strings
, ein Leerzeichen, „Jibber“ ein und drücken dann die Eingabetaste.
Saiten jibbern
Die Zeichenfolgen werden aus der Datei extrahiert und im Terminalfenster aufgelistet.
Festlegen der minimalen Zeichenfolgenlänge
Standardmäßig sucht Zeichenfolgen nach Zeichenfolgen, die mindestens vier Zeichen lang sind. Um eine längere oder kürzere Mindestlänge festzulegen, verwenden Sie die Option -n
(Mindestlänge).
Beachten Sie, dass je kürzer die Mindestlänge ist, desto höher ist die Wahrscheinlichkeit, dass Sie mehr Junk sehen.
Einige Binärwerte haben denselben numerischen Wert wie der Wert, der ein druckbares Zeichen darstellt. Wenn zwei dieser numerischen Werte zufällig nebeneinander in der Datei stehen und Sie eine Mindestlänge von zwei angeben, werden diese Bytes so gemeldet, als wären sie eine Zeichenfolge.
Verwenden Sie den folgenden Befehl, um strings
aufzufordern, zwei als Mindestlänge zu verwenden.
Zeichenfolgen -n 2 Jibber
Wir haben jetzt Zeichenfolgen aus zwei Buchstaben in den Ergebnissen enthalten. Beachten Sie, dass Leerzeichen als druckbare Zeichen gezählt werden.
Pfeifenschnüre durch weniger
Wegen der Länge der Ausgabe von strings
werden wir sie less
. Wir können dann durch die Datei scrollen und nach interessantem Text suchen.
Saiten Jibber | weniger
Die Auflistung wird uns jetzt in less
präsentiert, wobei der Anfang der Auflistung zuerst angezeigt wird.
Zeichenketten mit Objektdateien verwenden
Typischerweise werden Programmquellcodedateien in Objektdateien kompiliert. Diese werden mit Bibliotheksdateien verknüpft, um eine binäre ausführbare Datei zu erstellen. Wir haben die Jibber-Objektdatei zur Hand, also werfen wir einen Blick in diese Datei. Beachten Sie die Dateierweiterung „.o“.
jibber.o | weniger
Der erste Satz von Zeichenfolgen wird alle in Spalte acht umbrochen, wenn sie länger als acht Zeichen sind. Wenn sie umbrochen wurden, befindet sich in Spalte neun ein „H“-Zeichen. Möglicherweise erkennen Sie diese Zeichenfolgen als SQL-Anweisungen.
Beim Scrollen durch die Ausgabe wird deutlich, dass diese Formatierung nicht in der gesamten Datei verwendet wird.
Es ist interessant, die Unterschiede in den Textzeichenfolgen zwischen der Objektdatei und der fertigen ausführbaren Datei zu sehen.
Suchen in bestimmten Bereichen in der Datei
Kompilierte Programme haben verschiedene Bereiche in sich, die zum Speichern von Text verwendet werden. Standardmäßig durchsucht strings
die gesamte Datei nach Text. Dies ist genauso, als ob Sie die Option -a
(all) verwendet hätten. Um Zeichenfolgen nur in initialisierten, geladenen Datenabschnitten in der Datei suchen zu lassen, verwenden Sie die Option -d
(Daten).
Zeichenfolgen -d Jibber | weniger
Sofern Sie keinen triftigen Grund dazu haben, können Sie genauso gut die Standardeinstellung verwenden und die gesamte Datei durchsuchen.
Drucken des String-Offsets
Wir können strings
den Offset vom Anfang der Datei drucken lassen, an dem sich jede Zeichenfolge befindet. Verwenden Sie dazu die Option -o
(Offset).
Zeichenfolgen -o parse_phrases | weniger
Der Offset wird in Oktal angegeben.
Um den Offset in einer anderen numerischen Basis anzuzeigen, z. B. dezimal oder hexadezimal, verwenden Sie die Option -t
(Radix). Auf die Radix-Option muss d
(dezimal), x
(hexadezimal) oder o
(oktal) folgen. Die Verwendung von -to
der Verwendung von -o
.
Zeichenfolgen -td parse_phrases | weniger
Die Offsets werden jetzt dezimal gedruckt.
Zeichenfolgen -tx parse_phrases | weniger
Die Offsets werden jetzt hexadezimal gedruckt.
Einschließlich Leerzeichen
strings
betrachtet Tabulator- und Leerzeichen als Teil der gefundenen Zeichenfolgen. Andere Leerzeichen, wie z. B. Zeilenumbrüche und Wagenrückläufe, werden nicht so behandelt, als wären sie Teil der Zeichenfolgen. Die Option -w
(Whitespace) bewirkt, dass Strings alle Whitespace-Zeichen so behandeln, als wären sie Teile des Strings.
Zeichenfolgen -w add_data | weniger
Wir können die Leerzeile in der Ausgabe sehen, die das Ergebnis der (unsichtbaren) Wagenrücklauf- und Zeilenumbruchzeichen am Ende der zweiten Zeile ist.
Wir sind nicht auf Dateien beschränkt
Wir können strings
mit allem verwenden, was ein Bytestrom ist oder einen solchen erzeugen kann.
Mit diesem Befehl können wir den Arbeitsspeicher (RAM) unseres Computers durchsuchen.
Wir müssen sudo
verwenden, weil wir auf /dev/mem zugreifen. Dies ist eine Zeichengerätedatei, die ein Abbild des Hauptspeichers Ihres Computers enthält.
sudo-Strings /dev/mem | weniger
Die Auflistung ist nicht der gesamte Inhalt Ihres RAM. Es sind nur die Zeichenfolgen, die daraus extrahiert werden können.
VERWANDT: Was bedeutet „Alles ist eine Datei“ unter Linux?
Durchsuchen vieler Dateien auf einmal
Platzhalter können verwendet werden, um Gruppen von Dateien auszuwählen, die durchsucht werden sollen. Das Zeichen *
steht für mehrere Zeichen und das Zeichen ?
Zeichen steht für ein beliebiges einzelnes Zeichen. Sie können auch viele Dateinamen in der Befehlszeile angeben.
Wir werden einen Platzhalter verwenden und alle ausführbaren Dateien im Verzeichnis /bin durchsuchen. Da die Auflistung Ergebnisse aus vielen Dateien enthalten wird, verwenden wir die Option -f
(Dateiname). Dadurch wird der Dateiname am Anfang jeder Zeile ausgegeben. Wir können dann sehen, in welcher Datei jeder String gefunden wurde.
Wir leiten die Ergebnisse durch grep und suchen nach Strings, die das Wort „Copyright“ enthalten.
Zeichenketten -f /bin/* | grep Urheberrecht
Wir erhalten eine übersichtliche Auflistung der Copyright-Vermerke für jede Datei im /bin-Verzeichnis, mit dem Namen der Datei am Anfang jeder Zeile.
Saiten entwirrt
Streicher sind kein Geheimnis; es ist ein typischer Linux-Befehl. Es macht etwas sehr Bestimmtes und macht es sehr gut.
Es ist ein weiteres Rädchen von Linux und erwacht wirklich zum Leben, wenn es mit anderen Befehlen zusammenarbeitet. Wenn Sie sehen, wie es zwischen Binärdateien und anderen Tools wie grep
sitzen kann, beginnen Sie, die Funktionalität dieses etwas obskuren Befehls zu schätzen.
Linux-Befehle | ||
Dateien | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · konvertieren · rclone · shred · srm | |
Prozesse | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg | |
Vernetzung | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
RELATED: Beste Linux-Laptops für Entwickler und Enthusiasten