Hai mai provato ad aprire un file in un editor solo per scoprire che contiene contenuti binari illeggibili?
Il comando "stringhe" di Linux rende possibile visualizzare i caratteri leggibili da tutti i file.
Lo scopo principale dell'uso del comando "stringhe" è capire quale tipo di file stai guardando ma puoi anche usarlo per estrarre del testo. Ad esempio, se si dispone di un file da un programma proprietario che salva i file in uno strano formato binario, è possibile utilizzare "stringhe" per estrarre il testo inserito nel file.
Esempio di utilizzo del comando Stringhe
Un ottimo modo per dimostrare la potenza del comando stringhe è creare un documento usando LibreOffice Writer.
Basta aprire LibreOffice Writer e inserire del testo e quindi salvarlo nel formato ODT standard.
Ora apri una finestra di terminale (premi CTRL, ALT e T allo stesso tempo) e poi usa il comando cat per visualizzare il file come segue:
cat yourfilename.odt | Di Più
(Sostituisci yourfilename.odt con il nome del file che hai creato)
Quello che vedrete è un intero muro di testo illeggibile.
Premere la barra spaziatrice per scorrere il file. Sporadicamente in tutto il file vedrai parte del testo che hai inserito.
Il comando stringhe può essere utilizzato per visualizzare solo le parti leggibili dall'uomo.
Nella sua forma più semplice puoi eseguire il seguente comando:
stringhe yourfilename.odt | Di Più
Come prima, apparirà un muro di testo, ma solo il testo che puoi leggere come umano. Se sei fortunato, potrai vedere il tuo testo.
Quello che sarai in grado di vedere è la chiave, tuttavia, è sulla prima riga:
mimetypeapplication / vnd.oasis.opendocument.text
Sappiamo che il tipo di file è un file ODT di LibreOffice Writer per 2 motivi:
- Abbiamo creato il file
- L'estensione è .ODT
Immagina di non aver creato il file o di aver trovato il file su un disco recuperato e che il file non avesse un'estensione.
Il ripristino di Windows recuperava spesso file con nomi come 0001, 0002, 0003 ecc. Il fatto che i file siano stati ripristinati è ottimo, ma cerca di capire quali sono stati i tipi di questi file era un incubo.
Usando le stringhe hai una possibilità di combattere il tipo di file. Sapendo che un file è un file opendocument.text significa che è possibile salvarlo con l'estensione ODT e aprirlo in LibreOffice writer.
Nel caso tu fossi inconsapevole, un file ODT è fondamentalmente un file compresso. Se si rinomina il nomefile.odt in nomefile.zip, è possibile aprirlo in uno strumento di archiviazione e persino decomprimere il file.
Comportamenti alternativi
Per impostazione predefinita, il comando stringhe restituisce tutte le stringhe all'interno di un file, ma è possibile cambiare il comportamento in modo che restituisca stringhe da sezioni di dati caricate e inizializzate in un file.
Cosa significa esattamente? Nessuno sembra saperlo.
È logico presupporre che si stiano utilizzando stringhe per provare a individuare il tipo di file o cercare il testo specifico in un file.
Se quando esegui il comando stringhe usando il comportamento predefinito non ottieni l'output sperato, prova a eseguire uno dei seguenti comandi per vedere se fa la differenza:
La pagina di manuale indica che il comando precedente può aiutare a ridurre la quantità di garbage restituita dalle stringhe. Il comando "stringhe" può essere impostato in modo da funzionare all'indietro in modo che il parametro meno d sia il comportamento predefinito. Se questo è il caso sul tuo sistema, puoi restituire tutti i dati usando il seguente comando: È possibile ottenere il testo all'interno dell'output per visualizzare il nome del file accanto a ciascuna riga di testo. Per fare questo, esegui uno dei seguenti comandi: L'output sarà ora simile a questo: Come parte dell'output puoi anche visualizzare l'offset di dove quel testo appare in un file. Per farlo, esegui il seguente comando: L'output sarà simile a questo: L'offset è in realtà l'offset ottale, anche se a seconda di come sono state compilate le stringhe per il tuo sistema, potrebbe essere anche l'esadecimale o l'offset decimale. Un modo più accurato per ottenere l'offset desiderato è utilizzare i seguenti comandi: Il meno t significa restituire l'offset e il carattere che segue determina il tipo di offset. (cioè d = decimale, o = ottale, h = esadecimale). Per impostazione predefinita, il comando stringhe stampa ogni nuova stringa su una nuova riga, ma è possibile impostare il delimitatore di propria scelta. Ad esempio, per utilizzare un simbolo pipe ("|") come delimitatore, eseguire il seguente comando: Il comando stringhe di default cerca una stringa di 4 caratteri stampabili in una riga. È possibile regolare l'impostazione predefinita in modo che restituisca solo una stringa con 8 caratteri stampabili o 12 caratteri stampabili. Regolando questo limite puoi personalizzare l'output per ottenere il miglior risultato possibile. Cercando una stringa troppo lunga si rischia di omettere il testo utile, ma rendendolo troppo breve si potrebbe finire con molto più junk restituito. Per regolare il limite della stringa, eseguire il seguente comando: Nell'esempio sopra ho modificato il limite a 8.Puoi sostituire 8 con il numero di tua scelta. Puoi anche usare il seguente comando per fare la stessa cosa: Per impostazione predefinita, il comando stringhe include uno spazio bianco come una tabulazione o uno spazio come carattere stampabile. Pertanto, se si dispone di una stringa che legge "il gatto seduto sul tappeto", il comando delle stringhe restituirà l'intero testo. Per impostazione predefinita, i nuovi caratteri di riga e i ritorni a capo non sono considerati caratteri stampabili. Per ottenere stringhe per riconoscere nuovi caratteri di riga e ritorni a capo come caratteri stampabili, eseguire le stringhe nel modo seguente: Ci sono 5 opzioni di codifica disponibili per l'uso con le stringhe: Il valore predefinito è 7 bit byte. Per cambiare la codifica eseguire il seguente comando: Nel comando precedente, ho specificato il valore predefinito "s" che significa 7 bit byte. Sostituisci semplicemente la "s" con la lettera di codifica a tua scelta. È possibile modificare il comportamento delle stringhe in modo che utilizzi una libreria di descrittori di file binari diversa da quella fornita per il proprio sistema. Questo interruttore è uno per gli esperti. Se si dispone di un'altra libreria da utilizzare, è possibile farlo eseguendo il seguente comando di stringhe: Se si utilizzano le stesse opzioni ogni volta, non si desidera dover specificare tutte le opzioni ogni volta che si esegue il comando perché richiede tempo. Quello che puoi fare è creare un file di testo usando nano e specificare le opzioni all'interno di quel file. Per provare questo in un terminale, eseguire il seguente comando: Nel file inserisci il seguente testo: Salvare il file premendo CTRL e O e uscire premendo CTRL e X. Per eseguire i comandi di stringhe con queste opzioni, eseguire il seguente comando: Le opzioni verranno lette dal file stringsopts e dovresti vedere il nome del file prima di ogni stringa, l'offset e "|" come separatore. Se vuoi saperne di più sulle stringhe, puoi eseguire il seguente comando per ottenere aiuto. In alternativa puoi anche leggere la pagina di manuale: Per trovare la versione di stringhe in esecuzione, esegui uno dei seguenti comandi:stringhe -d nomefile
stringhe --data yourfilenamestringhe -a nomefile
Formattazione dell'output
stringhe -f nomefile
stringhe --print-file-name yourfilenamenomefile: una porzione di testo
nomefile: un'altra porzione di testostringhe -o il tuo nomefile
16573 tuo
17024 testo
stringhe -t d nomefile
stringhe -t o il tuo nomefilestringhe -t h nomefilestringhe -s "|" yourfilename
Regola il limite della stringa
stringhe -n 8 nomefile
stringhe --bytes = 8 yourfilename
Includi spazio bianco
stringhe -w nomefile
Cambia la codifica
stringhe -e s il tuo nomefile
stringhe --encoding = s nomefile Cambia il nome della descrizione del file binario
stringhe -T bfdname
Opzioni di lettura da un file
nano stringsopts
-f -o -n 3 -s "|"
stringhe @stringsopts yourfilename
Ottenere aiuto
stringhe --help
corde di uomo
Scopri quale versione di stringhe stai utilizzando
stringhe -v
stringhe -Vstringhe --versione