Afficher les caractères imprimables d’un fichier avec des chaînes

Avez-vous déjà essayé d'ouvrir un fichier dans un éditeur pour découvrir qu'il contient un contenu binaire illisible?

La commande Linux "strings" permet d'afficher les caractères lisibles par l'homme dans n'importe quel fichier.

Le but principal de l'utilisation de la commande "strings" est de déterminer le type de fichier que vous recherchez, mais vous pouvez également l'utiliser pour extraire du texte. Par exemple, si vous avez un fichier d'un programme propriétaire qui enregistre les fichiers dans un format binaire étrange, vous pouvez utiliser des "chaînes" pour extraire le texte que vous mettez dans le fichier.


Exemple d'utilisation de la commande Strings

Un excellent moyen de démontrer la puissance de la commande strings est de créer un document à l'aide de LibreOffice Writer.

Ouvrez simplement LibreOffice Writer et entrez du texte, puis enregistrez-le au format ODT standard.

Ouvrez maintenant une fenêtre de terminal (appuyez sur CTRL, ALT et T en même temps), puis utilisez la commande cat pour afficher le fichier comme suit:

chat yourfi

(Remplacez yourfilename.odt par le nom du fichier que vous avez créé)

Ce que vous verrez est un mur entier de texte illisible.

Appuyez sur la barre d'espace pour faire défiler le fichier. De façon sporadique tout au long du fichier, vous verrez une partie du texte que vous avez entré.

La commande strings peut être utilisée pour afficher uniquement les parties lisibles par l'homme.

Dans sa forme la plus simple, vous pouvez exécuter la commande suivante:

cordes yourfi

Comme auparavant, un mur de texte apparaîtra, mais uniquement du texte que vous pouvez lire en tant qu'être humain. Si vous avez de la chance, vous pourrez voir votre texte.

Ce que vous pourrez voir qui est essentiel, cependant, se trouve sur la première ligne:

mimetypeapplication / vnd.oasis.

Nous savons que le type de fichier est un fichier ODT LibreOffice Writer pour 2 raisons:

  1. Nous avons créé le fichier
  2. L'extension est .ODT

Imaginez que vous n'ayez pas créé le fichier ou que vous ayez trouvé le fichier sur un disque récupéré et que le fichier n'avait pas d'extension.

La récupération Windows récupérait souvent des fichiers avec des noms tels que 0001, 0002, 0003, etc.

En utilisant des chaînes, vous avez une chance de déterminer le type de fichier. Savoir qu'un fichier est un fichier opendocument.text signifie que vous pouvez l'enregistrer avec l'extension ODT et l'ouvrir dans LibreOffice.

Au cas où vous ne le saviez pas, un fichier ODT est essentiellement un fichier compressé. Si vous renommez yourfilename.odt en yourfilename.zip, vous pouvez l'ouvrir dans un outil d'archivage et même décompresser le fichier.

Comportements alternatifs

Par défaut, la commande strings renvoie toutes les chaînes d'un fichier, mais vous pouvez changer le comportement afin qu'elle renvoie des chaînes de sections de données initialisées et chargées dans un fichier.

Qu'est-ce que cela signifie exactement? Personne ne semble savoir.

Il est logique de supposer que vous utilisez des chaînes pour essayer de trouver le type de fichier ou pour rechercher du texte spécifique dans un fichier.

Si lors de l'exécution de la commande strings en utilisant le comportement par défaut, vous n'obtenez pas le résultat que vous espériez, essayez d'exécuter l'une des commandes suivantes pour voir si cela fait une différence:

un magnifique

or

strings --data votre nom de fichier

La page de manuel indique que la commande ci-dessus peut aider à réduire la quantité de déchets renvoyée par les chaînes.

La commande "strings" peut être configurée pour fonctionner en sens inverse de sorte que le commutateur moins d soit le comportement par défaut. Si tel est le cas sur votre système, vous pouvez renvoyer toutes les données en utilisant la commande suivante:

un magnifique


Formatage de la sortie

Vous pouvez obtenir le texte dans la sortie pour afficher le nom du fichier à côté de chaque ligne de texte.

Pour ce faire, exécutez l'une des commandes suivantes:

un magnifique

or

strings --print-file-name votre nom de fichier

La sortie ressemblera maintenant à ceci:

yourfilename: un morceau de texte

or

yourfilename: un autre morceau de texte

Dans le cadre de la sortie, vous pouvez également afficher le décalage de l'endroit où ce texte apparaît dans un fichier. Pour ce faire, exécutez la commande suivante:

un magnifique

La sortie ressemblera à ceci:

Le décalage est en fait le décalage octal bien que, selon la façon dont les chaînes ont été compilées pour votre système, il pourrait facilement être le décalage hexadécimal ou décimal.

Un moyen plus précis d'obtenir le décalage souhaité consiste à utiliser les commandes suivantes:

strings -td votre nom de fichier
chaînes -à votre nom de fichier
chaînes -th votre nom de fichier

Le moins t signifie retourner le décalage et le caractère qui suit détermine le type de décalage. (c'est-à-dire d = décimal, o = octal, h = hexadécimal).

Par défaut, la commande strings imprime chaque nouvelle chaîne sur une nouvelle ligne mais vous pouvez définir le délimiteur de votre choix. Par exemple, pour utiliser un symbole de barre verticale ("|") comme délimiteur, exécutez la commande suivante:

chaînes -s "| &


Ajuster la limite de chaîne

La commande strings recherche par défaut une chaîne de 4 caractères imprimables d'affilée. Vous pouvez ajuster la valeur par défaut pour qu'elle ne renvoie qu'une chaîne de 8 caractères imprimables ou 12 caractères imprimables.

En ajustant cette limite, vous pouvez personnaliser la sortie pour obtenir le meilleur résultat possible. En recherchant une chaîne trop longue, vous risquez d'omettre du texte utile, mais en la rendant trop courte, vous pourriez vous retrouver avec beaucoup plus de courrier indésirable retourné.

Pour ajuster la limite de chaîne, exécutez la commande suivante:

instruments à cordes

Dans l'exemple ci-dessus, j'ai changé la limite à 8. Vous pouvez remplacer 8 par le nombre de votre choix.

Vous pouvez également utiliser la commande suivante pour faire la même chose:

chaînes - octets & #

Inclure les espaces

Par défaut, la commande de chaînes inclut des espaces tels qu'une tabulation ou un espace en tant que caractère imprimable. Par conséquent, si vous avez une chaîne qui se lit comme "le chat assis sur le tapis", alors la commande de chaînes renverra le texte entier.

Les caractères de nouvelle ligne et les retours chariot ne sont pas considérés par défaut comme des caractères imprimables.

Pour obtenir des chaînes afin de reconnaître les caractères de nouvelle ligne et les retours chariot en tant que caractère imprimable, exécutez les chaînes de la manière suivante:

un magnifique

Changer le codage

Il existe 5 options d'encodage disponibles pour une utilisation avec des chaînes:

  • s = octet 7 bits (utilisé pour ASCII, ISO 8859)
  • S = octet 8 bits
  • b = bigendien 16 bits
  • l = 16 bits littleendian

La valeur par défaut est un octet de 7 bits.

Pour modifier le codage, exécutez la commande suivante:

chaînes -es votre nom de fichier
strings --encoding = s votre nom de fichier

Dans la commande ci-dessus, j'ai spécifié le "s" par défaut qui signifie octet de 7 bits. Remplacez simplement le "s" par la lettre d'encodage de votre choix.

Modifier le nom de la description du fichier binaire

Vous pouvez modifier le comportement des chaînes afin qu'elles utilisent une bibliothèque de descripteurs de fichiers binaires différente de celle fournie pour votre système.

Cet interrupteur est réservé aux experts. Si vous avez une autre bibliothèque à utiliser, vous pouvez le faire en exécutant la commande de chaînes suivante:

st

Options de lecture à partir d'un fichier

Si vous prévoyez d'utiliser les mêmes options à chaque fois, vous ne voulez pas avoir à spécifier tous les commutateurs chaque fois que vous exécutez la commande, car cela prend du temps.

Ce que vous pouvez faire, c'est créer un fichier texte à l'aide de nano et spécifier les options de ce fichier.

Pour essayer cela dans un terminal, exécutez la commande suivante:

Dans le fichier, entrez le texte suivant:

-f -o -n

Enregistrez le fichier en appuyant sur CTRL et O et quittez en appuyant sur CTRL et X.

Pour exécuter les commandes de chaînes avec ces options, exécutez la commande suivante:

chaînes @ chaînes

Les options seront lues à partir du fichier stringsopts et vous devriez voir le nom du fichier avant chaque chaîne, l'offset et le "|" comme séparateur.

Obtenir de l'aide

Si vous souhaitez en savoir plus sur les chaînes, vous pouvez exécuter la commande suivante pour obtenir de l'aide.

Vous pouvez également lire la page de manuel:

Découvrez quelle version de chaînes vous exécutez

Pour trouver la version des chaînes que vous exécutez, exécutez l'une des commandes suivantes:

chaînes -v
chaînes -V
chaînes --version

Laisser un commentaire