¿Quiere ver el texto dentro de un archivo binario o de datos? El Linux strings
El comando extrae esos fragmentos de texto, llamados «cadenas», para ti.
Linux está repleto de comandos que pueden parecer soluciones en busca de problemas. los strings
El comando definitivamente cae en ese campo. ¿Cuál es su objetivo? ¿Hay algún punto en un comando que enumera las cadenas imprimibles desde un archivo 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 puedes verlos? Si utiliza cat
o less
es probable que termine con una ventana de terminal colgada. Los programas que están diseñados para trabajar con archivos de texto no funcionan bien si se introducen caracteres no imprimibles a través de ellos.
La mayoría de los bytes dentro de un archivo binario no son legibles por humanos y no se pueden imprimir en la ventana del terminal de una manera que tenga sentido. No hay caracteres ni símbolos estándar para representar valores binarios que no se correspondan con caracteres alfanuméricos, puntuación o espacios en blanco. En conjunto, estos se conocen como caracteres «imprimibles». El resto son caracteres «no imprimibles».
Por eso, tratar de ver o buscar cadenas de texto en un archivo binario o de datos es un obstáculo. Y ahí es donde strings
entra. Extrae cadenas de caracteres imprimibles de archivos para que otros comandos puedan utilizar las cadenas sin tener que lidiar con caracteres no imprimibles.
Usando el comando strings
No hay nada complicado en el strings
comando, y su uso básico es muy fácil. Proporcionamos el nombre del archivo que anhelamos strings
para buscar en la línea de comando.
Aquí, usaremos cadenas en un archivo binario, un archivo ejecutable, llamado «jibber». Escribimos strings
, un espacio, «jibber» y después presione Enter.
strings jibber
Las cadenas se extraen del archivo y se enumeran en la ventana de terminal.
Configuración de la longitud mínima de la cuerda
De forma predeterminada, las cadenas buscarán cadenas de cuatro caracteres o más. Para determinar una longitud mínima más larga o más corta, utilice el -n
(longitud mínima) opción.
Tenga en cuenta que cuanto más corta sea la longitud mínima, mayores serán las posibilidades de que vea más basura.
Algunos valores binarios disponen el mismo valor numérico que el valor que representa un carácter imprimible. Si dos de esos valores numéricos están uno al lado del otro en el archivo y especifica una longitud mínima de dos, esos bytes se informarán como si fueran una cadena.
Preguntar strings
para utilizar dos como longitud mínima, use el siguiente comando.
strings -n 2 jibber
Ahora tenemos cadenas de dos letras incluidas en los resultados. Tenga en cuenta que los espacios se cuentan como un carácter imprimible.
Tubería de cuerdas a través de Less
Debido a la longitud de la salida de strings
, lo vamos a canalizar less
. A continuación, podemos desplazarnos por el archivo en busca de texto de interés.
strings jibber | less
La lista ahora se nos presenta en less
, con la parte de arriba de la lista mostrada primero.
Utilizar cadenas con archivos de objeto
Regularmente, 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 del objeto jibber a mano, por lo tanto 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 disponen más de ocho caracteres. Si se han ajustado, aparece un carácter «H» en la columna nueve. Puede reconocer estas cadenas como declaraciones 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.
Búsqueda en áreas específicas del archivo
Los programas compilados disponen diferentes áreas dentro de sí mismos que se usan para guardar texto. Por defecto, strings
busca en todo el archivo buscando texto. Esto es como si hubiera utilizado el -a
(todos) opción. Para que las cadenas busquen solo en secciones de datos cargadas e inicializadas en el archivo, utilice la -d
opción (datos).
strings -d jibber | less
A menos que tenga una buena razón para hacerlo, además puede utilizar la configuración predeterminada y buscar en todo el archivo.
Impresión de la compensación de cadena
Podemos tener strings
imprime el desplazamiento desde el inicio del archivo en el que se encuentra cada cadena. Para hacer esto, use el -o
(compensación) opción.
strings -o parse_phrases | less
El desplazamiento se da en Octal.
Para que el desplazamiento se muestre en una base numérica distinto, como decimal o hexadecimal, utilice el -t
(radix) opción. La opción radix debe ir seguida de d
(decimal), x
(hexadecimal), o o
(Octal). Usando -t o
es lo mismo que utilizar -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 en blanco
strings
considera que los caracteres de tabulación y espacio forman parte de las cadenas que encuentra. Otros caracteres de espacio en blanco, como nuevas líneas y retornos de carro, no se tratan como si fueran parte de las cadenas. los -w
La opción (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 en blanco 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 utilizar strings
con cualquier cosa que sea, o pueda producir, un flujo de bytes.
Con este comando, podemos mirar a través del memoria de acceso aleatorio (RAM) de nuestra computadora.
Necesitamos utilizar sudo
debido a que 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 es el contenido completo de su RAM. Son solo las cadenas que se pueden extraer de él.
RELACIONADO: ¿Qué significa «todo es un archivo» en Linux?
Búsqueda de varios archivos al mismo tiempo
Se pueden usar comodines para elegir grupos de archivos que se buscarán. los *
carácter representa varios caracteres, y el ?
carácter representa cualquier carácter individual. Además puede elegir por proporcionar muchos nombres de archivo en la línea de comandos.
Usaremos un comodín y buscaremos en todos los archivos ejecutables en el directorio / bin. Debido a que la lista contendrá resultados de muchos archivos, usaremos el -f
opción (nombre de archivo). Esto imprimirá el nombre del archivo al comienzo de cada línea. Después podemos ver en qué archivo se encontró cada cadena.
Estamos canalizando los resultados a través de grepy buscando cadenas que contengan la palabra «Copyright».
strings -f /bin/* | grep Copyright
Obtenemos una lista ordenada de las 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
Las cuerdas no disponen ningún misterio; es un comando típico de Linux. Hace algo muy específico y lo hace muy bien.
Es otro de los engranajes de Linux y verdaderamente 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 un poco oscuro.
setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);