Crea sito

How To : Comando Trova in Linux (Trova file e directory)

11 / 100

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.

Translate »