Come utilizzare il comando stringhe su Linux

Vuoi vedere il testo all’interno di un file binario o di dati? Il comando Linux strings estrae quei frammenti di testo, chiamati “stringhe”, per te.

Linux è pieno di comandi che possono sembrare soluzioni alla ricerca di problemi. Il comando delle stringhe rientra sicuramente in quel campo. Qual è il suo scopo? C’è un punto a un comando che elenca le stringhe stampabili da un file binario?

Facciamo un passo indietro. I file binari, come i file di programma, possono contenere stringhe di testo leggibile dall’uomo. Ma come fai a vederli? Se usi cat o meno, probabilmente ti ritroverai con una finestra di terminale bloccata. I programmi progettati per funzionare con file di testo non funzionano bene se vengono inseriti caratteri non stampabili.

La maggior parte dei byte all’interno di un file binario non è leggibile dall’uomo e non può essere stampata nella finestra del terminale in un modo che abbia senso. Non ci sono caratteri o simboli standard per rappresentare valori binari che non corrispondono a caratteri alfanumerici, punteggiatura o spazi bianchi. Collettivamente, questi sono noti come caratteri “stampabili”. Gli altri sono caratteri “non stampabili”.

Quindi, provare a visualizzare o cercare stringhe di testo in un file binario o di dati è un problema. Ed è qui che entrano in gioco le stringhe. Estrae stringhe di caratteri stampabili da file in modo che altri comandi possano utilizzare le stringhe senza dover fare i conti con caratteri non stampabili.

Utilizzando le stringhe Command

Non c’è niente di complicato nel comando strings e il suo utilizzo di base è molto semplice. Forniamo il nome del file in cui desideriamo che le stringhe cerchino nella riga di comando.

  Come disabilitare il firewall UFW in Linux

Qui, useremo stringhe su un file binario, un file eseguibile, chiamato “jibber”. Digitiamo stringhe, uno spazio, “jibber” e quindi premere Invio.

strings jibber

stringhe jibber in una finestra di terminale

Le stringhe vengono estratte dal file ed elencate nella finestra del terminale.

stringhe in output in una finestra di terminale

Impostazione della lunghezza minima della stringa

Per impostazione predefinita, le stringhe cercheranno stringhe di quattro caratteri o più. Per impostare una lunghezza minima più lunga o più corta, utilizzare l’opzione -n ​​(lunghezza minima).

Nota che minore è la lunghezza minima, maggiori sono le possibilità di vedere più spazzatura.

Alcuni valori binari hanno lo stesso valore numerico del valore che rappresenta un carattere stampabile. Se due di questi valori numerici si trovano uno accanto all’altro nel file e si specifica una lunghezza minima di due, quei byte verranno riportati come se fossero una stringa.

Per chiedere alle stringhe di utilizzare due come lunghezza minima, utilizzare il seguente comando.

strings -n 2 jibber

stringhe -n 2 jibber in una finestra di terminale

Ora abbiamo stringhe di due lettere incluse nei risultati. Notare che gli spazi vengono conteggiati come caratteri stampabili.

stringhe di output con due stringhe di lettere in una finestra di terminale

Stringhe di tubazioni Through Less

A causa della lunghezza dell’output delle stringhe, lo faremo passare attraverso less. Possiamo quindi scorrere il file cercando il testo di interesse.

strings jibber | less

corde jibber |  meno in una finestra di terminale

L’elenco viene ora presentato per noi in meno, con la parte superiore dell’elenco visualizzata per prima.

stringhe in output in less in una finestra di terminale

Utilizzo di stringhe con file oggetto

In genere, i file del codice sorgente del programma vengono compilati in file oggetto. Questi sono collegati con i file di libreria per creare un file eseguibile binario. Abbiamo il file oggetto jibber a portata di mano, quindi diamo un’occhiata all’interno di quel file. Notare l’estensione del file “.o”.

jibber.o | less

jibber.o |  meno in una finestra di terminale

La prima serie di stringhe viene inserita nella colonna otto se sono più lunghe di otto caratteri. Se sono stati inseriti, un carattere “H” è nella colonna nove. È possibile riconoscere queste stringhe come istruzioni SQL.

  Come giocare a Subnautica su Linux

stringhe in output in less in una finestra di terminale

Lo scorrimento dell’output rivela che questa formattazione non viene utilizzata in tutto il file.

stringhe in output in less in una finestra di terminale

È interessante vedere le differenze nelle stringhe di testo tra il file oggetto e l’eseguibile finito.

Ricerca in aree specifiche del file

I programmi compilati hanno diverse aree al loro interno che vengono utilizzate per memorizzare il testo. Per impostazione predefinita, le stringhe eseguono la ricerca nell’intero file alla ricerca di testo. È come se avessi usato l’opzione -a (all). Per fare in modo che le stringhe cerchino solo nelle sezioni di dati caricate e inizializzate nel file, utilizzare l’opzione -d (dati).

strings -d jibber | less

corde -d jibber |  meno in una finestra di terminale

A meno che tu non abbia una buona ragione per farlo, potresti anche utilizzare l’impostazione predefinita e cercare l’intero file.

Stampa dell’offset delle corde

Possiamo fare in modo che le stringhe stampino l’offset dall’inizio del file in cui si trova ciascuna stringa. A tale scopo, utilizzare l’opzione -o (offset).

strings -o parse_phrases | less

stringhe -o parse_phrases |  Di meno

L’offset viene fornito Octal.

stringhe con l'offset in ottale in una finestra di terminale

Per visualizzare l’offset in una base numerica diversa, ad esempio decimale o esadecimale, utilizzare l’opzione -t (radice). L’opzione radix deve essere seguita da d (decimale), X (esadecimale) o o (ottale). Usare -to è lo stesso che usare -o.

strings -t d parse_phrases | less

stringhe -td parse_phrases |  meno in una finestra di terminale

Gli offset vengono ora stampati in decimale.

output di stringhe con offset in decimale in una finestra di terminale

strings -t x parse_phrases | less

stringhe -tx parse_phrases |  meno in una finestra di terminale

Gli offset vengono ora stampati in esadecimale.

output di stringhe con offset in esadecimale in una finestra di terminale

Compresi gli spazi bianchi

stringhe considera i caratteri di tabulazione e spazio come parte delle stringhe che trova. Altri caratteri di spazio, come i ritorni a capo e i ritorni a capo, non vengono trattati come se facessero parte delle stringhe. L’opzione -w (spazi bianchi) fa in modo che le stringhe trattino tutti i caratteri degli spazi come se fossero parti della stringa.

strings -w add_data | less

stringhe -w add_data |  meno in una finestra di terminale

Possiamo vedere la riga vuota nell’output, che è il risultato del ritorno a capo (invisibile) e dei caratteri di nuova riga alla fine della seconda riga.

  Come creare alias e funzioni di shell su Linux

stringhe in output in una finestra di terminale

Non siamo limitati ai file

Possiamo usare stringhe con tutto ciò che è, o può produrre, un flusso di byte.

Con questo comando possiamo esaminare il file memoria ad accesso casuale (RAM) del nostro computer.

Dobbiamo usare sudo perché stiamo accedendo a / dev / mem. Questo è un file di dispositivo a caratteri che contiene un’immagine della memoria principale del tuo computer.

sudo strings /dev/mem | less

stringhe sudo / dev / mem |  meno in una finestra di terminale

L’elenco non è l’intero contenuto della tua RAM. Sono solo le stringhe che possono essere estratte da esso.

stringhe in output in less in una finestra di terminale

Ricerca in più file contemporaneamente

I caratteri jolly possono essere utilizzati per selezionare gruppi di file da cercare. Il carattere * rappresenta più caratteri e il? carattere rappresenta ogni singolo carattere. Puoi anche scegliere di fornire molti nomi di file sulla riga di comando.

Useremo un carattere jolly e cercheremo in tutti i file eseguibili nella directory / bin. Poiché l’elenco conterrà i risultati di molti file, utilizzeremo l’opzione -f (nome file). Questo stamperà il nome del file all’inizio di ogni riga. Possiamo quindi vedere in quale file è stata trovata ciascuna stringa.

Stiamo trasmettendo i risultati grepe cercando le stringhe che contengono la parola “Copyright”.

strings -f /bin/* | grep Copyright

stringhe -f / bin / * |  grep Copyright in una finestra di terminale

Otteniamo un elenco preciso delle dichiarazioni di copyright per ogni file nella directory / bin, con il nome del file all’inizio di ogni riga.

output di stringhe che mostra le dichiarazioni di copyright in una finestra di terminale

stringhe Unraveled

Non c’è mistero per le stringhe; è un tipico comando Linux. Fa qualcosa di molto specifico e lo fa molto bene.

È un altro degli ingranaggi di Linux e prende vita quando funziona con altri comandi. Quando vedi come può stare tra i file binari e altri strumenti come grep, inizi ad apprezzare la funzionalità di questo comando leggermente oscuro.