Haben Sie jemals versucht, eine Datei in einem Editor zu öffnen, um festzustellen, dass sie unlesbaren binären Inhalt enthält?
Mit dem Linux-Befehl "strings" können die für Menschen lesbaren Zeichen in jeder Datei angezeigt werden.
Der Hauptzweck der Verwendung des Befehls "strings" besteht darin, herauszufinden, um welchen Dateityp es sich handelt. Sie können ihn jedoch auch zum Extrahieren von Text verwenden. Wenn Sie beispielsweise eine Datei aus einem proprietären Programm haben, das Dateien in einem seltsamen Binärformat speichert, können Sie den in die Datei eingefügten Text mit "Zeichenfolgen" extrahieren.
Beispiel für die Verwendung des Befehls Strings
Eine gute Möglichkeit, die Leistungsfähigkeit des Befehls strings zu demonstrieren, besteht darin, ein Dokument mit LibreOffice Writer zu erstellen.
Öffnen Sie einfach LibreOffice Writer, geben Sie Text ein und speichern Sie ihn im Standard-ODT-Format.
Öffnen Sie nun ein Terminalfenster (drücken Sie STRG, ALT und T. gleichzeitig) und verwenden Sie dann den Befehl cat, um die Datei wie folgt anzuzeigen:
Katze yourfi
(Ersetzen Sie die Datei yourfilename.odt durch den Namen der von Ihnen erstellten Datei.)
Was Sie sehen werden, ist eine ganze Wand aus unleserlichem Text.
Drücken Sie die Leertaste, um durch die Datei zu scrollen. In der gesamten Datei wird sporadisch ein Teil des eingegebenen Textes angezeigt.
Mit dem Befehl strings können nur die Teile angezeigt werden, die für den Menschen lesbar sind.
In seiner einfachsten Form können Sie den folgenden Befehl ausführen:
Saiten yourfi
Nach wie vor wird eine Textwand angezeigt, jedoch nur Text, den Sie als Mensch lesen können. Wenn Sie Glück haben, können Sie Ihren Text sehen.
Was Sie jedoch als Schlüssel sehen können, steht in der ersten Zeile:
mimetypeapplication / vnd.oasis.
Wir wissen, dass der Dateityp aus zwei Gründen eine LibreOffice Writer-ODT-Datei ist:
- Wir haben die Datei erstellt
- Die Erweiterung ist .ODT
Stellen Sie sich vor, Sie haben die Datei nicht erstellt oder auf einer wiederhergestellten Festplatte gefunden und die Datei hatte keine Erweiterung.
Bei der Windows-Wiederherstellung wurden häufig Dateien mit Namen wie 0001, 0002, 0003 usw. wiederhergestellt. Die Tatsache, dass die Dateien wiederhergestellt wurden, ist großartig, aber es war ein Albtraum, herauszufinden, um welche Dateitypen es sich handelt.
Durch die Verwendung von Zeichenfolgen haben Sie die Chance, den Dateityp zu ermitteln. Wenn Sie wissen, dass eine Datei eine opendocument.text-Datei ist, können Sie sie mit der ODT-Erweiterung speichern und in LibreOffice Writer öffnen.
Falls Sie nicht wussten, dass eine ODT-Datei im Grunde eine komprimierte Datei ist. Wenn Sie yourfilename.odt in yourfilename.zip umbenennen, können Sie es in einem Archivierungswerkzeug öffnen und sogar die Datei entpacken.
Alternative Verhaltensweisen
Standardmäßig gibt der Befehl strings alle Zeichenfolgen in einer Datei zurück. Sie können das Verhalten jedoch so ändern, dass Zeichenfolgen aus initialisierten, geladenen Datenabschnitten in einer Datei zurückgegeben werden.
Was bedeutet das genau? Niemand scheint es zu wissen.
Es ist sinnvoll anzunehmen, dass Sie Zeichenfolgen verwenden, um entweder den Dateityp herauszufinden oder nach einem bestimmten Text in einer Datei zu suchen.
Wenn Sie beim Ausführen des Befehls strings mit dem Standardverhalten nicht die erhoffte Ausgabe erhalten, versuchen Sie, einen der folgenden Befehle auszuführen, um festzustellen, ob dies einen Unterschied macht:
Schnur
or
Zeichenfolgen --Daten Sie Ihren Dateinamen
Auf der Handbuchseite wird angegeben, dass der obige Befehl dazu beitragen kann, die Menge des von Zeichenfolgen zurückgegebenen Mülls zu verringern.
Der Befehl "strings" kann so eingerichtet werden, dass er umgekehrt funktioniert, sodass der Minus-d-Schalter das Standardverhalten ist. Wenn dies auf Ihrem System der Fall ist, können Sie alle Daten mit dem folgenden Befehl zurückgeben:
Schnur
Ausgabe formatieren
Sie können den Text in der Ausgabe so einstellen, dass neben jeder Textzeile der Name der Datei angezeigt wird.
Führen Sie dazu einen der folgenden Befehle aus:
Schnur
or
Zeichenfolgen --print-file-name yourfilename
Die Ausgabe sieht nun ungefähr so aus:
Ihr Dateiname: ein Textstück
or
Ihr Dateiname: ein weiterer Text
Als Teil der Ausgabe können Sie auch den Versatz anzeigen, an dem dieser Text in einer Datei angezeigt wird. Führen Sie dazu den folgenden Befehl aus:
Schnur
Die Ausgabe sieht ungefähr so aus:
Der Versatz ist eigentlich der Oktalversatz, obwohl es abhängig davon, wie Zeichenfolgen für Ihr System kompiliert wurden, leicht auch der Hex- oder der Dezimalversatz sein kann.
Eine genauere Möglichkeit, den gewünschten Versatz zu erhalten, besteht darin, die folgenden Befehle zu verwenden:
Zeichenfolgen -td Ihr Dateiname
Zeichenfolgen - zu Ihrem Dateinamen
Zeichenfolgen -th Ihr Dateiname
Das Minus t bedeutet, den Versatz zurückzugeben, und das folgende Zeichen bestimmt den Versatztyp. (dh d = dezimal, o = oktal, h = hex).
Standardmäßig druckt der Befehl strings jede neue Zeichenfolge in einer neuen Zeile. Sie können jedoch das Trennzeichen Ihrer Wahl festlegen. Um beispielsweise ein Pipe-Symbol ("|") als Trennzeichen zu verwenden, führen Sie den folgenden Befehl aus:
Strings -s "| &
Passen Sie das String-Limit an
Der Befehl strings sucht standardmäßig nach einer Zeichenfolge mit 4 druckbaren Zeichen in einer Reihe. Sie können die Standardeinstellung so anpassen, dass nur eine Zeichenfolge mit 8 druckbaren Zeichen oder 12 druckbaren Zeichen zurückgegeben wird.
Durch Anpassen dieses Grenzwerts können Sie die Ausgabe anpassen, um das bestmögliche Ergebnis zu erzielen. Wenn Sie nach einer zu langen Zeichenfolge suchen, riskieren Sie, nützlichen Text wegzulassen. Wenn Sie ihn jedoch zu kurz machen, wird möglicherweise viel mehr Junk zurückgegeben.
Führen Sie den folgenden Befehl aus, um das Zeichenfolgenlimit anzupassen:
Streicher
Im obigen Beispiel habe ich das Limit auf 8 geändert. Sie können 8 durch die Nummer Ihrer Wahl ersetzen.
Sie können auch den folgenden Befehl verwenden, um dasselbe zu tun:
Zeichenfolgen --bytes & #
Leerzeichen einschließen
Standardmäßig enthält der Befehl strings Leerzeichen wie eine Registerkarte oder ein Leerzeichen als druckbares Zeichen. Wenn Sie also eine Zeichenfolge haben, die lautet "Die Katze saß auf der Matte", gibt der Befehl "Zeichenfolgen" den gesamten Text zurück.
Neue Zeilenzeichen und Zeilenumbrüche gelten standardmäßig nicht als druckbare Zeichen.
Um Zeichenfolgen dazu zu bringen, neue Zeilenzeichen und Zeilenumbrüche als druckbare Zeichen zu erkennen, führen Sie die folgenden Zeichenfolgen aus:
Schnur
Ändern Sie die Codierung
Für die Verwendung mit Zeichenfolgen stehen 5 Codierungsoptionen zur Verfügung:
- s = 7-Bit-Byte (verwendet für ASCII, ISO 8859)
- S = 8-Bit-Byte
- b = 16 Bit Bigendian
- l = 16 Bit Littleendian
Der Standardwert ist ein 7-Bit-Byte.
Führen Sie den folgenden Befehl aus, um die Codierung zu ändern:
Zeichenfolgen -es Ihr Dateiname
Zeichenfolgen --encoding = s Ihr Dateiname
Im obigen Befehl habe ich die Standardeinstellung "s" angegeben, was 7-Bit-Byte bedeutet. Ersetzen Sie einfach das "s" durch den Codierungsbuchstaben Ihrer Wahl.
Ändern Sie den Beschreibungsnamen der Binärdatei
Sie können das Verhalten von Zeichenfolgen so ändern, dass eine andere Binärdateideskriptorbibliothek als die für Ihr System bereitgestellte verwendet wird.
Dieser Schalter ist einer für die Experten. Wenn Sie eine andere Bibliothek verwenden möchten, können Sie dies tun, indem Sie den folgenden Zeichenfolgenbefehl ausführen:
st
Leseoptionen aus einer Datei
Wenn Sie jedes Mal dieselben Optionen verwenden möchten, müssen Sie nicht jedes Mal, wenn Sie den Befehl ausführen, alle Schalter angeben, da dies einige Zeit in Anspruch nimmt.
Sie können eine Textdatei mit nano erstellen und die Optionen in dieser Datei angeben.
Um dies in einem Terminal auszuprobieren, führen Sie den folgenden Befehl aus:
Geben Sie in die Datei den folgenden Text ein:
-f -o -n
Speichern Sie die Datei, indem Sie STRG und O drücken, und beenden Sie sie, indem Sie STRG und X drücken.
Führen Sie den folgenden Befehl aus, um die Zeichenfolgenbefehle mit diesen Optionen auszuführen:
Strings @strings
Die Optionen werden aus den Stringsopts der Datei gelesen und Sie sollten den Dateinamen vor jedem String, den Offset und das "|" sehen. als Trennzeichen.
Erste Hilfe
Wenn Sie mehr über Zeichenfolgen erfahren möchten, können Sie den folgenden Befehl ausführen, um Hilfe zu erhalten.
Alternativ können Sie auch die Handbuchseite lesen:
Finden Sie heraus, welche Version von Strings Sie ausführen
Führen Sie einen der folgenden Befehle aus, um die Version der von Ihnen ausgeführten Zeichenfolgen zu ermitteln:
Strings -v
Saiten -V
Strings - Version