• linux-find-locate-grep

    Ricerca di file e testo in Linux: i comandi find, locate e grep

    Come cercare dei file e testi nel file system Linux: i comandi find, locate e grep.

    Individuazione dei file

    Su un normale sistema UNIX/Linux utilizzato a pieno regine in produzione per attività di sviluppo è normale avere centinaia di migliaia di file e directory. Cercare uno specifico file può rivelarsi un compito non facile. Linux fornisce diversi strumenti che consentono la ricerca dei file e l’individuazione delle caratteristiche più importanti (dimensione, appartenenza, data di creazione, etc …).

    debian-linux-file-directory

    Utilizzo del comando find

    Il comando find cerca i file in un percorso che corrispondono ad un’espressione di ricerca. La sintassi del comando find è la seguente:

    find [percorso] [espressione]

    Il percorso limita la ricerca all’interno di una cartella. Se non viene specificato un percorso, la ricerca viene effettuata sulla directory corrente dove viene eseguito il comando find.

    L’espressione -name del comando find

    Utilizzando l’espressione -name viene effettuata ricerca basandoti sul nome file, secondo il pattern fornito dei file specificati nella directory corrente indicata dal percorso.

    linux-comando-find-opzione-name

    L’espressione -iname del comando find

    Utilizzando l’espressione -name viene effettuata ricerca secondo il pattern fornito senza distinguere tra maiuscole e minuscole (case insensitive) dei file specificati nella directory corrente indicata dal percorso.

    linux-comando-find-opzione-iname

    L’espressione -ls del comando find

    Visualizza i risultati in formato ls:

    linux-comando-find-opzione-ls

    L’espressione -mtime del comando find

    Seleziona i risultati in base al tempo. Ad esempio, quelli modificati da almeno un giorno ( -mtime +1 ) e non oltre 5 giorni ( -mtime -5 ).

    linux-comando-find-opzione-mtime

    L’espressione -size del comando find

    Seleziona i risultati in base alla dimensione dei file. Ad esempio per cercare i file con dimensione compresa tra 40 byte ( -size +40c ) e inferiori a 70 byte ( -size -70c ). Le unità di misura utilizzabili nell’opzione sono il byte o carattere (c), il kilobyte (k), il megabyte (M) e il gigabyte (G).

    linux-comando-find-opzione-size

    L’espressione -type del comando find

    Seleziona i risultati in base alla tipologia. Ad esempio, le directory (d), i file (f).

    linux-comando-find-opzione-type

    L’espressione -newer del comando find

    Seleziona i file più recenti rispetto a una risorsa presa come riferimento. Nell’esempio sotto, cerchiamo i file con nome del tipo var* nella directory ./script che siano più recenti rispetto a ./script/var3.sh:

    linux-comando-find-opzione-newer

    L’espressione -user del comando find

    Seleziona i file di un utente specifico.

    linux-comando-find-opzione-user

    L’espressione -group del comando find

    Seleziona i file di un gruppo specifico.

    linux-comando-find-opzione-group

    L’espressione -perm del comando find

    Seleziona i file in base ai permessi.

    linux-comando-find-opzione-perm

    L’espressione -exec del comando find

    Esegue un’operazione sui risultati. Ad esempio il comando nella figura esegue una ricerca di tutti i file presenti nella directory corrente (incluse tutte le sottocartelle) che hanno un permesso di accesso 700. Quindi, per ognuno dei file individuati verrà eseguito il comando chmod per impostare il nuovo codice di accesso in 755.

    linux-comando-find-opzione-exec

    Le opzioni sono combinabili tra loro.

     

    Utilizzo del comando locate

    Il comando locate cerca i file che corrispondono ad un’espressione di ricerca. La sintassi del comando locate è la seguente:

    locate [espressione]

    linux-comando-locate

    Utilizzo del comando grep

    Per ricercare del testo all’interno di file, si utilizza il comando grep. La sintassi del comando grep è la seguente:

    grep [-opzione/i] “stringa di ricerca” [file] [percorso]
    • Il parametro -r imposta una ricerca di tipo “ricorsivo”, cioè il testo indicato verrà cercato all’interno di tutti i file presenti nella cartella corrente e in tutte le sottocartelle.
    • Il parametro -i indica che la stringa di ricerca specificata non è case-sensitive. Se occorre eseguire una ricerca case-sensitive, basta omettere semplicemente l’operatore -i.
    • Il parametro -v trova le corrispondenze inverse, cioè tutte le linee che non contengono il pattern.
    • Il parametro -c restituisce il numero delle corrispondenze trovate nel file.
    • Il parametro -n aggiunge in output anche il numero della riga del file dove trova le corrispondenze.

    linux-comando-grep

    In alcuni casi il comando grep visualizza un messaggio di errore quando non riesce ad accedere a una determinata directory a causa della mancanza delle autorizzazioni necessarie, oppure nel caso si tratti di una cartella vuota. Ad esempio:

    linux-comando-grep-errore

    Per evitare che tale messaggio di errore venga visualizzato a video, è possibile reindirizzarlo al dispositivo /dev/null. In Linux il descrittore per il flusso stderr è il 2.

    linux-comando-grep-errore-redirect-stderr

     

    Per approfondire il discorso di redirezione (redirect) dei flussi stdin, stdout e stderr puoi aprire l’articolo dal titolo “Input e output redirect in Linux” su questo blog.

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">