Cómo usar el comando Strings en Linux

¿Quiere ver el texto dentro de un archivo binario o de datos? El comando Linux Strings extrae estas piezas de texto, llamadas «cadenas», para usted.

Linux está lleno de comandos que pueden parecer soluciones en busca de problemas. El comando de las cuerdas definitivamente cae en este campamento.¿Cual es su propósito?¿Tiene sentido un comando que enumera las cadenas imprimibles de un binario?

Demos un paso atrás. Los archivos binarios, como los archivos de programa, pueden contener cadenas de texto legible por humanos. Pero, ¿cómo los ves? Si usa CAT o menos, es probable que tenga una ventana de terminal colgada. Los programas diseñados para manejar los archivos de texto no funcionan bien si los caracteres no imprimibles se pasan a través de ellos.

La mayoría de los bytes en un archivo binario no son legibles por humanos y no se pueden imprimir en una ventana terminal con ningún significado. No hay símbolos o caracteres estándar para representar valores binarios que no corresponden a caracteres alfanuméricos, puntuación o espacios. Colectivamente, estos se conocen como caracteres «impresos». Los personajes restantes son personajes «no imprimibles».

Por lo tanto, tratar de navegar o buscar cadenas de texto en un archivo binario o de datos es un problema. Aquí es donde llega las cuerdas al rescate. Extrae cadenas de caracteres imprimibles de archivos para que otros comandos puedan usar cadenas sin tener que lidiar con caracteres no imprimibles.

Usando el comando Strings

No hay nada complicado en el comando Strings, y su uso básico es muy simple. Especificamos el nombre del archivo donde queremos que se vean las cadenas en la línea de comando.

Cómo instalar KDE Plasma Mobile Linux en Nexus 5 y 5x

Aquí vamos a usar cadenas en un archivo binario, un ejecutable llamado «Jibber». Escribimos cadenas, espacio, «trep» y presionamos Entrar.

cuerdas Jibber.

hilos de jibber en una ventana terminal

Las cadenas se extraen del archivo y se muestran en una ventana de terminal.

cadenas de salida en una ventana de terminal

Configuración de la longitud mínima de la cadena

Por defecto, las cadenas buscarán cadenas de cuatro caracteres o más de longitud. Para establecer una longitud mínima más larga o más corta, use el parámetr o-n (longitud mínima).

Tenga en cuenta que cuanto más corta sea la longitud mínima, más probabilidades tendrá de ver más basura.

Algunos valores binarios tienen el mismo valor numérico que el valor que representa el carácter impreso. Si dos de estos valores numéricos son adyacentes en un archivo y usted especifica una longitud mínima igual a dos, estos bytes se informarán como si fueran una cadena.

Para pedirle a las cadenas que usen dos como longitud mínima, use el siguiente comando.

cuerda s-n 2 jibber

cadena s-n 2 Jibber en la ventana terminal

Los resultados ahora incluyen cadenas de dos letras. Tenga en cuenta que los espacios se consideran un carácter imprimible.

cadenas de salida con dos cadenas de letras en la ventana de terminal

Canalización de cadenas a través de menos

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

jibber de cuerdas |menos

<span class=» width=»646″ height=»57″ />

La lista ahora se nos presenta en un tamaño más pequeño, con la parte superior de la lista en primer lugar.

Uso de cadenas con archivos de objetos

Por lo general, los archivos de código fuente del programa se compilan en archivos de objetos. Estos están vinculados a archivos de biblioteca para crear un ejecutable binario. Tenemos un archivo de objeto jibber, así que echemos un vistazo dentro de ese archivo. Observe la extensión de archivo «. o».

jibber. o |menos

El primer conjunto de líneas se coloca en la octava columna si tiene más de ocho caracteres. Si se han envuelto, la novena columna contendrá un carácter «H». Puede reconocer estas cadenas como instrucciones SQL.

4 mejores clientes ftp para Linux

Desplazarse por la salida muestra que este formato no se usa en todo el archivo.

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

Buscar en áreas específicas de un archivo

Los programas compilados tienen diferentes áreas dentro de ellos que se utilizan para almacenar texto. De forma predeterminada, las cadenas buscan texto en todo el archivo. Esto es como si estuviera usando el parámetr o-a (todos). Para que las cadenas se ejecuten solo en las secciones de datos cargadas e inicializadas en el archivo, use el parámetr o-d (datos).

cuerda s-d jibber |menos

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

Imprimir un desplazamiento de cadena

Podemos hacer que las cadenas impriman el desplazamiento desde el principio del archivo donde se encuentra cada línea. Para hacer esto, use el parámetr o-o (desplazamiento).

cadena s-o analizar_frases |menos

El desplazamiento se especifica en Octal.

Para mostrar el desplazamiento en otro formato numérico, como decimal o hexadecimal, utilice la opció n-t (base del sistema numérico). La opción de raíz debe ir seguida de d (decimal), X (hexadecimal) u o (octal). El uso d e-to es similar al uso d e-o.

cadena s-t d parse_phrases |menos

Las compensaciones ahora se imprimen en formato decimal.

cadena s-t x parse_phrases |menos

Las compensaciones ahora se imprimen en formato hexadecimal.

Incluyendo espacios

Las cadenas considera que los caracteres de la pestaña y el espacio son parte de las cuerdas encontradas. Otros personajes de espacios en blanco, como los caracteres Newline y el retorno de carro, no son tratados como si fueran parte de la cadena. El parámetr o-W (Whitespace) hace que las cadenas traten a todos los caracteres en blanco como si fueran parte de la cadena.

cadena s-w add_data |menos

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

Cómo cargar y compartir archivos desde un terminal de Linux usando Transfer. SH

cadenas de salida en una ventana de terminal

No estamos limitados a los archivos

Podemos usar cadenas con cualquier cosa que sea o pueda crear un flujo de bytes.

Con este comando, podemos ver la RAM (RAM) de nuestra computadora.

Necesitamos usar sudo porque estamos accediendo / 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 |menos

La lista no es todo el contenido de su memoria principal. Solo se pueden recuperar cadenas de él.

Búsqueda simultánea en muchos archivos

Puede usar comodines para seleccionar grupos de archivos para buscar. El símbolo * representa múltiples caracteres y el? El símbolo representa cualquier personaje único. También puede especificar múltiples nombres de archivo en la línea de comando.

Vamos a usar un comodín y buscar a través de todos los archivos ejecutables en el directorio / bin. Dado que la lista contendrá los resultados de muchos archivos, vamos a usar el parámetr o-f (nombre de archivo). Esto imprimirá el nombre de archivo al comienzo de cada línea. Luego podemos ver en qué archivo se encontró cada línea.

Pasamos los resultados a través de GREP y buscamos líneas que contengan la palabra «copyright».

cadena s-f /bin /* |Grep Derechos de autor

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

cuerdas desenredadas

No hay nada misterioso en las cuerdas; Es un comando típico de Linux. Hace algo muy específico y lo hace muy bien.

Es otro engranaje de Linux que realmente cobra vida cuando funciona con otros comandos. Cuando ve cómo puede sentarse entre binarios y otras herramientas como Grep, comienza a apreciar la funcionalidad de este comando algo oscuro.