Find, grep e locate : la ricerca su Linux

Uno dei punti di forza di Linux, indipendentemente dalla distribuzione è sempre stata la potenza del terminale.

Grazie ai comandi a riga di comando (vedi Comandi Bash) è possibile infatti modificare ogni aspetto del sistema e renderlo adatto perfettamente a qualsiasi esigenza.

Tra le possibilità offerte dai comandi Linux c’è quella di effettuare ricerche su file. Molti sono infatti i modi in cui si posso ricercare file ed in questo post vediamo vedremo quelli più utili.

  • find : ricerca files nelle directory gerarchicamente
  • locate : ricerca i file utilizzando l’indicizzazione dei file. E’ il comando più veloce da usare ma permette molte meno personalizzazioni rispetto agli altri.
  • grep : permette la ricerca all’interno dei file, e dunque ottimo per cercare un file sapendo parte del suo contenuto.

Vediamoli in dettaglio:

LOCATE

Locate è un comando semplice da usare e permette di avere il risultato cercato in maniera molto veloce.
A differenza degli altri comandi infatti locate non effettua ricerche direttamente nel file system ma si affida a un indice presente in un db di tutti i file presenti nel sistema.
Il lato negativo di questo è 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.
Ovviamente l’aggiornamento fa perdere del tempo.
In molte distribuzioni updatedb viene lanciato tutte le notti dal crontab.
Chiamando

locate -S

è possibile conoscere il numero di file presenti nel db la dimensione totale, dove risiede il db e quanto pesa.

Il suo utilizzo è il seguente :

$locate filedacercare

Locate supporta i caratteri jolly.

FIND

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

$find posizione criterio_di_ricerca azione

Il funzionamento base è semplice :

$find / -name nomefile 

cerca ricorsivamente a partire dalla root il file nomefile.

Possono essere usati anche i caratteri jolly (*nomefile ad esempio cerca qualsiasi file il cui nome termina con nomefile).

$find / -type f -mtime -7

Trova tutti i file (type f) che sono stati modificati almeno 7 giorni fa (mtime -7).

$find / -mmin -10

Questo permette di cercare tutti i file modificati negli ultimi 10 minuti.

Può essere molto utile ad esempio per gli amministratori (vedi Linux. Manuale per l’amministratore di sistema)  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.

$find / -user username

Questo è un altro uso comune che permette di cercare un file in base al proprietario.

$find ./ -perm 777

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

$find . -mmin +5 -mmin -10

Cercando file utilizzando il tempo è possibile specificare anche il segno della ricerca. Nell’esempio cerchiamo tutti i file modificati da più di 5 minuti ma meno di 10 minuti,ed è molto utile per delimitare le ricerche in un arco di tempo ben definito.

GREP

Usato sopratutto per cercare all’interno dei file, permette di ricercare nei file anche in modo ricorsivo, la sua sintassi è:

$grep pattern file

ecco qualche esempio utile:

$grep termine_di_ricerca *.html

Ricerca in tutti i file con estensione html la parola “termine_di_ricerca”. Oltre a questi cercherà anche le parole composte quindi indicherà anche i file che contengono le parole “termine_di_ricerca” .

Per evitare questa doppia ricerca si usa l’opzione -w cosi:

$grep -w "termine_di_ricerca" *.html

L’utilizzo più comune di grep è sicuramente nella ricerca di file per contenuto.

Ad esempio

$grep -rin termine_di_ricerca /home/*.html

ci darà l’elenco dei file all’interno della directory  home e alle sue sottodirectory tutti i file html che contengano la stringa “termine_di_ricerca”.

L’opzione -i indica a grep di ignorare le maiuscole/minuscole mentre , l’opzione n permette di visualizzare il numero di riga dove ha trovato il testo oltre al nome del file.

 



About Mauro De Filippis 2463 Articles
Laureato in Ingegneria Informatica nel 2008 presso l'Università degli Studi di Lecce con una tesi in Processi di Produzione Robotizzati dal titolo "Integrazione delle tecniche di progettazione del ciclo di lavorazione con programmazione della produzione”. Le mie attività principali sono : sviluppo di applicativi ANSI C per terminali POS basati su processori ARM Risc 32Bit con 2-4 MB di Ram (progettazione, sviluppo e test delle applicazioni ) sviluppo in ambiente .NET sviluppo Web in ambiente PHP, ASP Installazione, progettazione, utilizzo di Db MS SQL Server, Mysql, Acces , Oracle Da anni mi occupo di CMS Open Source, in particolare di Joomla e Wordpress. Mia è la Guida Wordpress 3.5, la Guida Joomla 2.5 , il Corso online Joomla! 2.5 ed il Corso online Wordpress Mi occupo anche di LMS in particolare di Moodle e Docebo. Google+ by Mauro De Filippis

Be the first to comment

Leave a Reply

L'indirizzo email non sarà pubblicato.


*