martedì, Novembre 30, 2021
HomeTrucchiLinuxTutorial sulla ricerca dalla shell Linux (find, grep, locate)

Tutorial sulla ricerca dalla shell Linux (find, grep, locate)

Effettuare ricerche su file tramite shell linux è una grande comodità, in questo post vediamo tutti i comandi per la ricerca presenti in linux e ovviamente daremo risalto a quelli più utili.In linux ci sono diversi comandi utili per cercare noi ci focalizeremo principalmente sui tre principali:

  • find, ricerca files nelle directory gerarchicamente.
  • locate, ricerca i file utilizzando l’indicizzazione dei file, probabilmente il modo più veloce per cercare un file, e ovviamente anche quello più limitato.
  • grep, ricerca principalmente nei file, ottimo per cercare un file sapendo parte del suo contenuto.

Analiziamoli in dettaglio:

FIND

il comando find, è molto utile per fare ricerche su più gerarchie, in genere viene utilizzato insieme ad altri comandi, ecco qualche esempio:

 $find  dove-cercare criterio cosa-fare

Sintassi base.

 $find / -name qualcosa.txt 

Cerca in tutto l’hdd (e dispositivi montati) file con nome “qualcosa.txt”, come potete vedere provando a fare qualche ricerca find restituisce il nome del file senza tanti fronzoli sullo standard output rendendo il comando molto utile per concatenarsi con altri comandi. Ovviamente find supporta i caratteri jolly quindi avremmo potuto cercare qual*.txt e avremmo trovato gli stessi file (più qualcun altro probabilmente :D)

 $find / -type f -mtime -7

Trova tutti i file (type f) che sono stati modificati almeno 7 giorni fa (mtime -7), questo è un classico esempio di ricerca con 2 criteri

 $find / -mmin -10

Questo è uno dei miei preferiti, permette di cercare tutti i file modificati negli ultimi 10minuti, ed è molto buono per gli amministratori, perchè permette in caso di attacco di tenere sott’occhio quali file sono stati modificati senza permesso, volendo in caso di siti web si potrebbe fare uno script per monitorare queste modifiche e in caso mandare un e-mail o sms, ma ne parliamo un altra volta :D.

$find / -user username

Questo è un altro uso comune ricerca per proprietario.

$find ./ -perm 777

Anche questo può essere utile, cerca i file in base ai permessi.

$find . -mmin +5 -mmin -10

Quando cerchi un file utilizzando il tempo puoi specificare anche il segno, in questo caso cerchiamo tutti i file modificati da più di 5 minuti ma meno di 10 minuti, questo è molto utile da capire perchè è utile per delimitare le ricerche in un arco di tempo ben definito.

Terminiamo qui la parte su find poi la riprenderemo con i comandi composti alla fine.

LOCATE

Locate è uno dei comandi più utili per la ricerca di file il suo punto di forza è la velocità è stato pensato per restituire il risultato molto velocemente, il segreto di questa velocità sta nel fatto che locate a differenza di find (e grep) non effettua ricerche in tempo reale ma si affida a un indice presente in un db di tutti i file presenti nel sistema. Questo è fantastico ma c’è quindi da far presente che se si cerca un file appena creato sarà difficile trovarlo con locate a meno che non si utilizzi il comando updatedb, che serve proprio per aggiornare l’indice dei file. In molti sistemi updatedb viene lanciato tutte le notti dal crontab (sorvoliamo :D).

$locate filedacercare.txt

Come vedete è molto semplice, anche locate supporta i caratteri giolli proprio come find.
updatedb può essere lanciato in qualsiasi momento, ma ci vorrà un pò per creare il db (dipende anche dal numero di file presenti).

Se siete curiosi potrete usare il comando locate -S per conoscere il numero di file presenti nel db la dimensione totale, dove risiede il db e quanto pesa.

GREP

Per me è il comando più utile in assoluto, permette di ricercare nei file anche in modo ricorsivo, la sua sintassi è:

$grep pattern file

ecco qualche esempio utile:

$grep Porta *.html

Ricerca in tutti i file con estensione html la parola “Porta”, ma non si limita a questo non avendo dato restrizioni cercherà anche le parole composte quindi indicherà anche i file che contengono le parole “Portale” “Portantino” ecc.

Per evitare ciò dobbiamo dire a grep che vogliamo solo la parola “Porta” utilizzando l’opzione -w cosi:

$grep -w "Porta" *.html

Grep è molto utile anche per la ricerca di parole da uno standard output, ma lo vedremo alla fine nei comandi compositi.

L’utilizzo sicuramente più comune di grep è sicuramente nella ricerca di file per contenuto, mettiamo che ricordiamo che un file contenga la stringa “Porta” ma non ricordiamo dove lo abbiamo messo.
Ecco che grep ci mostra come fare:

$grep -rin Porta /home/*.html

Con questo comando diciamo a grep di ricercare all’interno di home e alle sue sottodirectory tutti i file html che contengano la stringa “Porta” l’opzione -i indica a grep di ignorare le maiuscole/minuscole mentre la n fa si che riporti il numero di riga dove ha trovato il testo oltre al nome del file.

Non è fantastico?

COMANDI COMPOSTI e COMANDI UTILI:

$grep . filename > nuovofilename

Rimuove gli a capo vuoti e li salva in nuovofilename

$find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate

Questo enorme comando (in realtà sono più comandi) trova i file duplicati prima in base alla dimensione poi facendo una comparazione dell’md5

$find ./ -type f -print0 | xargs -0 chmod 755

Cambia in modo ricorsivo tutti i permessi della directory corrente.

Ce ne sarebbero altri di comandi utilissimi ma per oggi chiudiamo qui se ve ne viene in mente qualcun altro non esitate ad inserirli nei commenti.

Stefano
Sono un amante della tecnologia, appassionato di programmazione, marketing e videogames. Adoro sperimentare tutto ciò che la tecnologia ha da offrire.

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Most Popular