Come utilizzare il comando strings su Linux
Pubblicato: 2022-01-29 Vuoi vedere il testo all'interno di un file binario o di dati? Il comando delle strings
di Linux estrae quei frammenti di testo, chiamati "stringhe", per te.
Linux è pieno di comandi che possono sembrare soluzioni in cerca di problemi. Il comando delle strings
rientra sicuramente in quel campo. Qual è il suo scopo? C'è un punto per 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 leggibili. Ma come fai a vederli? Se usi cat
o less
, è probabile che ti ritrovi con una finestra del terminale sospesa. 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 sono leggibili dall'uomo e non possono essere stampati sulla finestra del terminale in un modo sensato. Non sono presenti 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". Il resto 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 strings
. Estrae stringhe di caratteri stampabili dai file in modo che altri comandi possano utilizzare le stringhe senza dover fare i conti con caratteri non stampabili.
Usando il comando stringhe
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 strings
cerchino sulla riga di comando.
Qui useremo le stringhe su un file binario, un file eseguibile, chiamato "jibber". Digitiamo strings
, uno spazio, "jibber" e quindi premiamo Invio.
jibber di corde
Le stringhe vengono estratte dal file ed elencate nella finestra del terminale.
Impostazione della lunghezza minima della stringa
Per impostazione predefinita, le stringhe cercheranno le stringhe di quattro caratteri o più. Per impostare una lunghezza minima più o meno lunga, 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 sono affiancati nel file e si specifica una lunghezza minima di due, quei byte verranno riportati come se fossero una stringa.
Per chiedere alle strings
di utilizzare due come lunghezza minima, utilizzare il comando seguente.
stringhe -n 2 jibber
Ora abbiamo stringhe di due lettere incluse nei risultati. Si noti che gli spazi vengono contati come un carattere stampabile.
Stringhe di tubazioni attraverso meno
A causa della lunghezza dell'output delle strings
, lo faremo passare attraverso less
. Possiamo quindi scorrere il file alla ricerca del testo di interesse.
jibber di corde | meno
L'elenco viene ora presentato per noi in less
, con la parte superiore dell'elenco visualizzata per prima.
Utilizzo di stringhe con i file oggetto
In genere, i file del codice sorgente del programma vengono compilati in file oggetto. Questi sono collegati ai file di libreria per creare un file eseguibile binario. Abbiamo il file dell'oggetto jibber a portata di mano, quindi diamo un'occhiata all'interno di quel file. Nota l'estensione del file ".o".
jibber.o | meno
Il primo set di stringhe viene avvolto nella colonna otto se sono più lunghe di otto caratteri. Se sono stati avvolti, un carattere "H" è nella colonna nove. È possibile riconoscere queste stringhe come istruzioni SQL.
Scorrendo l'output si scopre che questa formattazione non viene utilizzata in tutto il file.
È interessante vedere le differenze nelle stringhe di testo tra il file oggetto e l'eseguibile finito.
Ricerca in aree specifiche nel file
I programmi compilati hanno diverse aree interne che vengono utilizzate per memorizzare il testo. Per impostazione predefinita, strings
cerca il testo nell'intero file. Questo è proprio come se avessi usato l'opzione -a
(tutto). Per fare in modo che le stringhe cerchino solo nelle sezioni di dati inizializzate e caricate nel file, utilizzare l'opzione -d
(dati).
stringhe -d jibber | meno
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 della stringa
Possiamo fare in modo che le strings
stampino l'offset dall'inizio del file in cui si trova ciascuna stringa. Per fare ciò, usa l'opzione -o
(offset).
stringhe -o parse_phrases | meno
L'offset è dato in Octal.
Per visualizzare l'offset in una base numerica diversa, ad esempio decimale o esadecimale, utilizzare l'opzione -t
(radice). L'opzione radice deve essere seguita da d
(decimale), x
(esadecimale) o o
(ottale). Usare -to
è lo stesso che usare -o
.
stringhe -td parse_phrases | meno
Gli offset vengono ora stampati in decimale.
stringhe -tx parse_phrases | meno
Gli offset vengono ora stampati in esadecimale.
Compreso lo spazio bianco
strings
considera i caratteri di tabulazione e spazio come parte delle stringhe che trova. Altri caratteri di spazi vuoti, come le nuove righe e i ritorni a capo, non vengono trattati come se facessero parte delle stringhe. L' -w
(spazi bianchi) fa sì che le stringhe trattino tutti i caratteri di spazi vuoti come se fossero parti della stringa.
stringhe -w aggiungi_dati | meno
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.
Non siamo limitati ai file
Possiamo usare strings
con tutto ciò che è, o può produrre, un flusso di byte.
Con questo comando, possiamo esaminare la 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 stringhe /dev/mem | meno
L'elenco non è l'intero contenuto della tua RAM. Sono solo le stringhe che possono essere estratte da esso.
CORRELATI: Cosa significa "Tutto è un file" in Linux?
Ricerca di più file contemporaneamente
I caratteri jolly possono essere utilizzati per selezionare gruppi di file da cercare. Il carattere *
rappresenta più caratteri e il ?
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 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 inviando i risultati tramite grep e cercando stringhe che contengano la parola "Copyright".
stringhe -f /bin/* | grep Copyright
Otteniamo un elenco ordinato delle dichiarazioni di copyright per ogni file nella directory /bin, con il nome del file all'inizio di ogni riga.
stringhe sbrogliate
Non c'è mistero per le corde; è un tipico comando Linux. Fa qualcosa di molto specifico e lo fa molto bene.
È un altro degli ingranaggi di Linux e prende davvero vita quando funziona con altri comandi. Quando vedi come può stare tra file binari e altri strumenti come grep
, inizi ad apprezzare la funzionalità di questo comando leggermente oscuro.
Comandi Linux | ||
File | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · converti · rclone · shred · srm | |
Processi | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg | |
Rete | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
CORRELATI: I migliori laptop Linux per sviluppatori e appassionati