Il comando find è uno degli strumenti più potenti nell’arsenale degli amministratori di sistema Linux.
Cerca file e directory in una gerarchia di directory basata su un’espressione data dall’utente e può eseguire azioni specificate dall’utente su ciascun file corrispondente.
Puoi utilizzare il comando find per cercare file e directory in base alle loro autorizzazioni, tipo, data, proprietà, dimensioni e altro.
Può anche essere combinato con altri strumenti come grep o sed .
find Sintassi dei comandi
La sintassi generale del findcomando è la seguente:
find [options] [path…] [expression]
L’ attributo options controlla il trattamento dei collegamenti simbolici, le opzioni di debug e il metodo di ottimizzazione.
L’ attributo path… definisce la directory o le directory di partenza in cui find cercherà i file.
L’ attributo expression è composto da opzioni, modelli di ricerca e azioni separate da operatori.
Per cercare i file in una directory, l’utente che invoca il comando find deve avere i permessi di lettura su quella directory.
Diamo un’occhiata al seguente esempio:
find -L /var/www -name “*.js”
L’opzione -L(opzioni) dice al findcomando di seguire i collegamenti simbolici.
Il /var/www(percorso…) specifica la directory in cui verrà eseguita la ricerca.
L'(espressione) -name “*.jsdice finddi cercare i file che terminano con .js(file JavaScript).
Trova file per nome
La ricerca dei file per nome è probabilmente l’uso più comune del findcomando. Per trovare un file in base al suo nome, usa l’ -nameopzione seguita dal nome del file che stai cercando.
Ad esempio, per cercare un file denominato document.pdf nella /home/linuxizedirectory, utilizzare il seguente comando:
find /home/linuxize -type f -name document.pdf
Per eseguire una ricerca senza distinzione tra maiuscole e minuscole, modificare l’ -nameopzione con -iname:
find /home/linuxize -type f -iname document.pdf
Il comando sopra corrisponderà a “Document.pdf”, “DOCUMENT.pdf” ..etc.
Trova file per estensione
La ricerca dei file per estensione equivale alla ricerca dei file per nome. Ad esempio, per trovare tutti i file che terminano con .log.gzall’interno della /var/log/nginxdirectory, digitare:
find /var/log/nginx -type f -name ‘*.log.gz’
È importante ricordare che è necessario citare il modello o sfuggire al *simbolo dell’asterisco con una barra rovesciata in \modo che non venga interpretato dalla shell quando si utilizza il carattere jolly.
Per trovare tutti i file che non corrispondono all’espressione regolare *.log.gzpuoi utilizzare l’ -notopzione.
Ad esempio, per trovare tutti i file che non finiscono con, *.log.gzdovresti usare:
find /var/log/nginx -type f -not -name ‘*.log.gz’
Trova file per tipo
A volte potrebbe essere necessario cercare tipi di file specifici come file normali, directory o collegamenti simbolici. In Linux, tutto è un file.
Per cercare i file in base al loro tipo, utilizzare l’ -typeopzione e uno dei seguenti descrittori per specificare il tipo di file:
f: un file normale
d: directory
l: link simbolico
c: dispositivi di carattere
b: blocca dispositivi
p: pipe con nome (FIFO)
s: presa
Ad esempio, per trovare tutte le directory nella directory di lavoro corrente , dovresti usare:
find . -type d
L’esempio comune sarebbe quello di modificare in modo ricorsivo le autorizzazioni del file del sito Web 644e le autorizzazioni della directory 755utilizzando il chmod comando:
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
Trova file per dimensione
Per trovare i file in base alla dimensione del file, passare il -sizeparametro insieme ai criteri di dimensione. È possibile utilizzare i seguenti suffissi per specificare la dimensione del file:
b: blocchi da 512 byte (predefinito)
c: byte
w: parole a due byte
k: Kilobyte
M: Megabyte
G: Gigabyte
Il seguente comando troverà tutti i file di esattamente 1024byte all’interno della /tmpdirectory:
find /tmp -type f -size 1024c
Il findcomando consente anche di cercare file di dimensioni maggiori o minori di una specificata.
Nell’esempio seguente, cerchiamo tutti i file meno che 1MBall’interno della directory di lavoro corrente. Notare il -simbolo meno prima del valore della dimensione:
find . -type f -size -1M
Se vuoi cercare file con una dimensione maggiore di 1MB, devi usare il +simbolo più :
find . -type f -size +1M
Puoi anche cercare file all’interno di un intervallo di dimensioni. Il seguente comando troverà tutti i file tra 1e 2MB:
find . -type f -size +1M -size 21M
Trova file per data di modifica
Il findcomando può anche cercare i file in base alla loro ultima modifica, accesso o ora di modifica.
Come per la ricerca per dimensione, utilizzare i simboli più e meno per “maggiore di” o “minore di”.
Diciamo che qualche giorno fa hai modificato uno dei file di configurazione di dovecot, ma hai dimenticato quale. Puoi facilmente filtrare tutti i file nella /etc/dovecot/conf.ddirectory che termina con .confed è stata modificata negli ultimi cinque giorni:
find /etc/dovecot/conf.d -name “*.conf” -mtime 5
Ecco un altro esempio di filtraggio dei file in base alla data di modifica utilizzando l’ -daystartopzione. Il comando seguente elencherà tutti i file nella /homedirectory che sono stati modificati 30o più giorni fa:
find /home -mtime +30 -daystart
Trova file per autorizzazioni
L’ -permopzione consente di cercare i file in base ai permessi dei file.
Ad esempio, per trovare tutti i file con i permessi esattamente 775all’interno della /var/www/htmldirectory, dovresti usare:
find /var/www/html -perm 644
È possibile anteporre alla modalità numerica un segno meno -o una barra /.
Quando /viene utilizzata la barra come prefisso, almeno una categoria (utente, gruppo o altro) deve avere almeno i rispettivi bit impostati affinché un file corrisponda.
Considera il seguente comando di esempio:
find . -perm /444
Il comando precedente corrisponderà a tutti i file con i permessi di lettura impostati per utente, gruppo o altri.
Se -come prefisso viene utilizzato meno , affinché il file corrisponda, devono essere impostati almeno i bit specificati. Il comando seguente cercherà i file che hanno l’autorizzazione di lettura e scrittura per il proprietario e il gruppo e sono leggibili da altri utenti:
find . -perm -664
Trova file per proprietario
Per trovare i file di proprietà di un particolare utente o gruppo, utilizzare le opzioni -user e -group.
Ad esempio, per cercare tutti i file e le directory di proprietà dell’utente linuxize, eseguire:
find / -user linuxize
Ecco un esempio del mondo reale. Supponiamo che tu voglia trovare tutti i file di proprietà dell’utente www-datae modificare la proprietà dei file corrispondenti da www-dataa nginx:
find / -user www-data -type f -exec chown nginx {} \;
Trova ed elimina file
Per eliminare tutti i file corrispondenti, aggiungi l’ -deleteopzione alla fine dell’espressione di corrispondenza.
Assicurati di utilizzare questa opzione solo quando sei sicuro che il risultato corrisponda ai file che desideri eliminare. È sempre una buona idea stampare i file corrispondenti prima di utilizzare l’ -deleteopzione.
Ad esempio, per eliminare tutti i file che terminano con .tempda /var/log/, dovresti usare:
find /var/log/ -name *.temp
-delete
Utilizzare l’ opzione -delete con estrema cautela. Il comando find viene valutato come un’espressione e se aggiungi -delete prima l’ opzione, il comando eliminerà tutto ciò che si trova al di sotto dei punti iniziali specificati. Quando si tratta di directory, find è possibile eliminare solo le directory vuote, come rmdir .
Conclusione
Ti abbiamo mostrato come utilizzare il find comando con varie opzioni e criteri.
Questo articolo dovrebbe darti una comprensione fondamentale di come individuare i file sui tuoi sistemi Linux. Puoi anche visitare la findpagina man e leggere tutte le altre potenti opzioni del findcomando.
Se hai domande o commenti, lascia un commento qui sotto.