Terminal Linux en una computadora portátil

Cómo usar el comando strings en Linux

Fatmawati Achmad Zaenuri / Shutterstock.com

¿Quiere ver el texto dentro de un archivo binario o de datos? Linux strings El comando extrae estos fragmentos de texto, llamados «cadenas», por usted.

Linux está lleno de comandos que pueden parecer soluciones de resolución de problemas. los strings el mando recae definitivamente en este bando. ¿Cuál es exactamente su propósito? ¿Hay un punto en un comando que enumera cadenas imprimibles de un archivo binario?

Demos un paso atrás. Los archivos binarios, como los archivos de programa, pueden contener cadenas de texto legibles por humanos. Pero, ¿cómo verlos? Si utiliza cat Dónde less podría terminar con una ventana de terminal colgada. Los programas diseñados para trabajar con archivos de texto no funcionan bien si se insertan caracteres no imprimibles a través de ellos.

La mayoría de los bytes de un archivo binario no son legibles por humanos y no se pueden imprimir en la ventana de la terminal de manera significativa. No hay caracteres o símbolos estándar para representar valores binarios que no coincidan con caracteres alfanuméricos, puntuación o espacios. En conjunto, se conocen como caracteres «imprimibles». Los otros son caracteres «no imprimibles».

Por lo tanto, tratar de mostrar o buscar cadenas de texto en un archivo binario o de datos es un problema. Y ahí es donde strings Entre. El extrae cadenas imprimibles de archivos para que otros comandos puedan usar las cadenas sin tener que luchar con caracteres que no se imprimen.

Usando el comando strings

No hay nada complicado en el strings comando, y su uso básico es muy sencillo. Proporcionamos el nombre del archivo que queremos strings para buscar en la línea de comando.

Aquí vamos a utilizar cadenas en un archivo binario, un archivo ejecutable, llamado «jibber». nosotros escribimos strings, un espacio, «jibber» y luego presione Entrar.

strings jibber

Las cadenas se extraen del archivo y se enumeran en la ventana de terminal.

Establecer la longitud mínima de la cuerda

De forma predeterminada, las cadenas buscarán cadenas de cuatro o más caracteres. Para establecer una longitud mínima más larga o más corta, utilice el -n opción (longitud mínima).

Tenga en cuenta que cuanto más corta sea la longitud mínima, es más probable que vea más desperdicio.

Algunos valores binarios tienen el mismo valor numérico que el valor que representa un carácter imprimible. Si dos de estos valores numéricos se encuentran uno al lado del otro en el archivo y especifica una longitud mínima de dos, estos bytes se informarán como si fueran una cadena.

Solicitud strings para usar dos como longitud mínima, use el siguiente comando.

strings -n 2 jibber

Ahora tenemos dos cadenas de letras incluidas en los resultados. Tenga en cuenta que los espacios se cuentan como un carácter imprimible.

Cables de tubería a través de Less

Debido a la longitud de la salida stringslo pasaremos less. A continuación, podemos desplazarnos por el archivo en busca de texto de interés.

strings jibber | less

La lista se nos presenta ahora en less, con la parte superior de la lista mostrada primero.

Usar cadenas con archivos de objeto

Normalmente, los archivos de código fuente del programa se compilan en archivos de objeto. Estos están vinculados con archivos de biblioteca para crear un archivo ejecutable binario. Tenemos el archivo de objeto jibber a mano, así que echemos un vistazo dentro de ese archivo. Tenga en cuenta la extensión de archivo «.o».

jibber.o | less

El primer conjunto de cadenas se envuelve en la columna ocho si tienen más de ocho caracteres. Si se han empaquetado, aparece un carácter «H» en la columna nueve. Puede reconocer estas cadenas como sentencias SQL.

El desplazamiento por la salida revela que este formato no se utiliza en todo el archivo.

Es interesante ver las diferencias en las cadenas de texto entre el archivo objeto y el ejecutable terminado.

Buscar en áreas específicas del archivo

Los programas compilados tienen diferentes áreas dentro de sí mismos que se utilizan para almacenar texto. Por defecto, strings busca texto en todo el archivo. Es como si hubieras usado el -a (todos) opción. Para que las cadenas busquen solo en las secciones de datos inicializadas y cargadas del archivo, utilice la -d opción (datos).

strings -d jibber | less

A menos que tenga una buena razón para hacerlo, también puede usar la configuración predeterminada y buscar en todo el archivo.

Impresión offset de canal

Podemos tener strings imprime el desplazamiento desde el inicio del archivo donde se encuentra cada cadena. Para hacer esto, use el -o opción (compensación).

strings -o parse_phrases | less

El desplazamiento se da en Octal.

Para mostrar el desplazamiento en una base numérica diferente, como decimal o hexadecimal, use el -t opción (base). La opción radix debe ir seguida de d (decimal), x (hexadecimal), Dónde o (Octal). En ayuda de -t o es lo mismo que usar -o.

strings -t d parse_phrases | less

Las compensaciones ahora se imprimen en decimal.

strings -t x parse_phrases | less

Las compensaciones ahora se imprimen en hexadecimal.

Incluyendo espacios

strings considera que los caracteres de tabulación y espacio son parte de las cadenas que encuentra. Otros caracteres de espacio, como los avances de línea y los retornos de carro, no se tratan como si fueran parte de cadenas. los -w (espacio en blanco) hace que las cadenas traten todos los caracteres de espacio en blanco como si fueran parte de la cadena.

strings -w add_data | less

Podemos ver la línea vacía en la salida, que es el resultado del retorno de carro (invisible) y los caracteres de nueva línea al final de la segunda línea.

No estamos limitados a archivos

Nosotros podemos usar strings con cualquier cosa que sea, o pueda producir, un flujo de bytes.

Con este comando podemos mirar a través del memoria viva (RAM) de nuestra computadora.

Debemos usar sudo porque estamos accediendo a / dev / mem. Este es un archivo de dispositivo de caracteres que contiene una imagen de la memoria principal de su computadora.

sudo strings /dev/mem | less

La lista no incluye todo el contenido de su RAM. Estas son solo las cadenas que se pueden extraer de él.

Buscando varios archivos a la vez

Se pueden usar comodines para seleccionar grupos de archivos para buscar. los * carácter representa varios caracteres, y el ? carácter representa cualquier carácter. También puede optar por proporcionar varios nombres de archivo en la línea de comando.

Usaremos un comodín y buscaremos todos los archivos ejecutables en el directorio / bin. Dado que la lista contendrá los resultados de muchos archivos, usaremos el -f opción (nombre de archivo). Esto imprimirá el nombre del archivo al comienzo de cada línea. Luego podemos ver en qué archivo se encontró cada cadena.

Transmitimos los resultados a través grepy buscando cadenas que contengan la palabra «Copyright».

strings -f /bin/* | grep Copyright

Obtenemos una lista ordenada de declaraciones de derechos de autor para cada archivo en el directorio / bin, con el nombre del archivo al comienzo de cada línea.

cuerdas desenredadas

No hay ningún misterio sobre las cuerdas; este es un comando típico de Linux. Hace algo muy específico y lo hace muy bien.

Es otro engranaje en Linux, y realmente cobra vida cuando funciona con otros comandos. Cuando vea cómo puede ubicarse entre archivos binarios y otras herramientas como grep, comienza a apreciar la funcionalidad de este comando algo oscuro.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas