Avez-vous déjà essayé d'ouvrir un fichier dans un éditeur uniquement pour découvrir qu'il contient un contenu binaire illisible?
La commande "chaînes" de Linux permet de visualiser 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 recherché 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 avez mis dans le fichier.
Exemple d'utilisation de la commande Strings
Un excellent moyen de démontrer la puissance de la commande strings consiste à 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 simultanément sur CTRL, ALT et T), puis utilisez la commande cat pour afficher le fichier comme suit:
chat votrefichier.odt | plus
(Remplacez le yourfilename.odt par le nom du fichier que vous avez créé)
Vous verrez tout un mur de texte illisible.
Appuyez sur la barre d'espace pour faire défiler le fichier. Sporadiquement 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:
chaînes votrefichier.odt | plus
Comme auparavant, un mur de texte apparaîtra, mais seul le 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 comme clé, cependant, se trouve sur la première ligne:
mimetypeapplication / vnd.oasis.opendocument.text
Nous savons que le type de fichier est un fichier ODT LibreOffice Writer pour 2 raisons:
- Nous avons créé le fichier
- L'extension est .ODT
Imaginez que vous n'avez pas créé le fichier ou que vous avez trouvé le fichier sur un disque récupéré et que le fichier n'avait pas d'extension.
La récupération de Windows permettrait souvent de récupérer des fichiers portant des noms tels que 0001, 0002, 0003, etc. Le fait que les fichiers aient été récupérés est formidable, mais essayer de déterminer le type de ces fichiers était un cauchemar.
En utilisant des chaînes, vous avez une chance de déterminer le type de fichier. Sachant qu'un fichier est un fichier opendocument.text signifie que vous pouvez l'enregistrer avec l'extension ODT et l'ouvrir dans le rédacteur LibreOffice.
Au cas où vous ne le sauriez pas, un fichier ODT est essentiellement un fichier compressé. Si vous renommez votrefichier.odt en votrefichier.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 modifier le comportement de sorte qu'il renvoie des chaînes à partir de sections de données chargées et initialisé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, lorsque vous exécutez la commande strings en utilisant le comportement par défaut, vous n'obtenez pas le résultat escompté, exécutez l'une des commandes suivantes pour voir si cela fait une différence:
La page de manuel indique que la commande ci-dessus peut aider à réduire la quantité de déchets renvoyés par les chaînes. La commande "strings" peut être configurée pour fonctionner en 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 alors renvoyer toutes les données à l'aide de la commande suivante: 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: La sortie ressemblera maintenant à quelque chose comme ceci: Dans le cadre de la sortie, vous pouvez également afficher le décalage de l'emplacement de ce texte dans un fichier. Pour ce faire, exécutez la commande suivante: La sortie ressemblera à ceci: Le décalage est en réalité le décalage octal, bien que selon la manière dont les chaînes ont été compilées pour votre système, il peut également s'agir également du décalage hexadécimal ou décimal. Une méthode plus précise pour obtenir le décalage souhaité consiste à utiliser les commandes suivantes: Le moins t signifie le retour du décalage et le caractère qui suit détermine le type de décalage. (c’est-à-dire d = décimal, o = octal, h = hex). 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 canal ("|") en tant que délimiteur, exécutez la commande suivante: La commande strings par défaut recherche une chaîne de 4 caractères imprimables à la suite. Vous pouvez ajuster la valeur par défaut pour qu’elle ne retourne qu’une chaîne contenant 8 caractères imprimables ou 12 caractères imprimables. En ajustant cette limite, vous pouvez adapter 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 risquez de vous retrouver avec beaucoup plus d'ordures. Pour ajuster la limite de chaîne, exécutez la commande suivante: Dans l'exemple ci-dessus, j'ai modifié la limite à 8.Vous pouvez remplacer 8 par le numéro de votre choix. Vous pouvez également utiliser la commande suivante pour faire la même chose: Par défaut, la commande strings inclut des espaces tels que des tabulations ou des espaces 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", la commande strings retournera tout le texte. Les caractères de nouvelle ligne et les retours à la ligne ne sont pas considérés comme des caractères imprimables par défaut. Pour que les chaînes reconnaissent les nouveaux caractères de ligne et les retours à la ligne en tant que caractères imprimables, exécutez les chaînes de la manière suivante: Il y a 5 options d'encodage disponibles pour une utilisation avec des chaînes: La valeur par défaut est un octet 7 bits. Pour modifier le codage, exécutez la commande suivante: Dans la commande ci-dessus, j'ai spécifié le "s" par défaut qui signifie octet 7 bits. Il suffit de remplacer le "s" par la lettre d'encodage de votre choix. 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. Ce commutateur est un pour les experts. Si vous avez une autre bibliothèque à utiliser, vous pouvez le faire en exécutant la commande suivante: Si vous utilisez les mêmes options à chaque fois, vous ne souhaitez pas spécifier tous les commutateurs à chaque exécution de la commande, car cela prend du temps. Ce que vous pouvez faire est de créer un fichier texte en utilisant nano et spécifier les options de ce fichier. Pour essayer ceci dans un terminal, exécutez la commande suivante: Dans le fichier, entrez le texte suivant: 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: Les options seront lues dans le fichier stringsopts et vous devriez voir le nom du fichier avant chaque chaîne, le décalage et le "|" en tant que séparateur. Si vous souhaitez en savoir plus sur les chaînes, vous pouvez exécuter la commande suivante pour obtenir de l'aide. Sinon, vous pouvez également lire la page de manuel: Pour rechercher la version des chaînes que vous exécutez, exécutez l'une des commandes suivantes:chaînes -d votre nom de fichier
strings --data yourfilenamechaînes -un yourfilename
Formatage de la sortie
chaînes -f votre nom de fichier
strings --print-nom-fichier nomfichiervotre nom de fichier: un morceau de texte
votre nom de fichier: un autre morceau de textechaînes -o votre nom de fichier
16573 votre
17024 texte
chaînes -t d votrenomfichier
chaînes -t o nomfichierchaînes -t h votrefilenamechaînes -s "|" votre nom de fichier
Ajuster la limite de chaîne
chaînes -n 8 nomfichier
strings --bytes = 8 nomfichier
Inclure les espaces
chaînes -w votrefichier
Changer l'encodage
chaînes -e votre nom de fichier
strings --encoding = votre nom de fichier Changer le nom de la description du fichier binaire
chaînes -T bfdname
Options de lecture à partir d'un fichier
nano stringsopts
-f -o -n 3 -s "|"
@stringsopts votre nom de fichier
Obtenir de l'aide
cordes --help
cordes homme
Découvrez la version des chaînes que vous exécutez
chaînes -v
cordes -Vcordes --version