Comando Trova in Linux (Trova file e directory)

()

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.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?