Il find
command è 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 un'azione specificata dall'utente su ogni file corrispondente.
Puoi usare il find
comando per cercare file e directory in base alle loro autorizzazioni, tipo, data, proprietà, dimensione e altro. Può anche essere combinato con altri strumenti come grep
o sed
.
find
Sintassi del comando #
La sintassi generale per find
il comando è il seguente:
find [options] [path...] [expression]
- Le
options
l'attributo controlla il trattamento dei collegamenti simbolici, le opzioni di debug e il metodo di ottimizzazione. - Il
path...
attributo definisce la directory o le directory iniziali in cui find cercherà i file. - L'
expression
l'attributo è composto da opzioni, modelli di ricerca e azioni separate da operatori.
Per cercare i file in una directory, l'utente invoca il find
il comando 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 afind
comando per seguire i collegamenti simbolici. - Il
/var/www
(percorso...) specifica la directory in cui verrà eseguita la ricerca. - L'(espressione)
-name "*.js
dice afind
per cercare file che terminano con.js
(file JavaScript).
Trova file per nome #
Trovare i file per nome è probabilmente l'uso più comune di find
comando. Per trovare un file in base al suo nome, usa il -name
opzione seguita dal nome del file che stai cercando.
Ad esempio, per cercare un file denominato document.pdf
nel /home/linuxize
directory, dovresti usare il seguente comando:
find /home/linuxize -type f -name document.pdf
Per eseguire una ricerca senza distinzione tra maiuscole e minuscole, cambia il -name
opzione 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 di file per estensione equivale alla ricerca di file per nome. Ad esempio, per trovare tutti i file che terminano con .log.gz
all'interno di /var/log/nginx
directory, dovresti digitare:
find /var/log/nginx -type f -name '*.log.gz'
È importante ricordare che devi citare il modello o evitare l'asterisco *
simbolo con barra rovesciata \
in modo che non venga interpretato dalla shell quando usi il carattere jolly.
Per trovare tutti i file che non corrispondono all'espressione regolare *.log.gz
puoi usare il -not
opzione. Ad esempio, per trovare tutti i file che non terminano con *.log.gz
useresti:
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, usa il -type
opzione e uno dei seguenti descrittori per specificare il tipo di file:
f
:un file normaled
:directoryl
:collegamento simbolicoc
:dispositivi a caratterib
:blocca i dispositivip
:named pipe (FIFO)s
:presa
Ad esempio, per trovare tutte le directory nella directory di lavoro corrente, dovresti usare:
find . -type d
L'esempio comune potrebbe essere quello di modificare ricorsivamente le autorizzazioni del file del sito Web in 644
e autorizzazioni di directory per 755
usando 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, passa il -size
parametro insieme ai criteri di dimensione. Puoi utilizzare i seguenti suffissi per specificare la dimensione del file:
b
:blocchi da 512 byte (predefinito)c
:bytew
:parole a due bytek
:kilobyteM
:MegabyteG
:Gigabyte
Il comando seguente troverà tutti i file esattamente di 1024
byte all'interno di /tmp
directory:
find /tmp -type f -size 1024c
Il find
Il comando consente inoltre di cercare file maggiori o minori di una dimensione specificata.
Nell'esempio seguente, cerchiamo tutti i file inferiori a 1MB
all'interno della directory di lavoro corrente. Nota il meno -
simbolo prima del valore della dimensione:
find . -type f -size -1M
Se vuoi cercare file con una dimensione maggiore di 1MB
, quindi devi utilizzare il segno più +
simbolo:
find . -type f -size +1M
Puoi anche cercare file all'interno di un intervallo di dimensioni. Il comando seguente troverà tutti i file compresi tra 1
e 2MB
:
find . -type f -size +1M -size 21M
Trova file per data di modifica #
Il find
comando può anche cercare i file in base alla loro ultima modifica, accesso o ora di modifica.
Come per la ricerca per dimensione, utilizza 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 sotto /etc/dovecot/conf.d
directory che termina con .conf
ed è stato modificato 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 il -daystart
opzione. Il comando seguente elencherà tutti i file in /home
directory che sono state modificate 30
o più giorni fa:
find /home -mtime +30 -daystart
Trova file in base alle autorizzazioni #
Il -perm
l'opzione ti consente di cercare i file in base ai permessi dei file.
Ad esempio, per trovare tutti i file con autorizzazioni di esattamente 775
all'interno del /var/www/html
directory, useresti:
find /var/www/html -perm 644
Puoi anteporre alla modalità numerica meno -
o barra /
.
Quando barra /
viene utilizzato come prefisso, quindi 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 meno -
viene utilizzato come prefisso, quindi 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, usa -user
e -group
opzioni.
Ad esempio, per cercare tutti i file e le directory di proprietà dell'utente linuxize
, eseguiresti:
find / -user linuxize
Ecco un esempio del mondo reale. Supponiamo che tu voglia trovare tutti i file di proprietà dell'utente www-data
e cambia la proprietà dei file corrispondenti da www-data
a nginx
:
find / -user www-data -type f -exec chown nginx {} \;
Trova ed elimina file #
Per eliminare tutti i file corrispondenti, aggiungi il -delete
opzione 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 usare -delete
opzione.
Ad esempio, per eliminare tutti i file che terminano con .temp
dal /var/log/
, useresti:
find /var/log/ -name `*.temp` -delete
Usa il -delete
opzione con estrema cautela. Il find
il comando viene valutato come un'espressione e se aggiungi il -delete
prima opzione, il comando eliminerà tutto ciò che si trova al di sotto dei punti di partenza specificati.
Quando si tratta di directory, find
può eliminare solo 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 il find
pagina man e leggi tutte le altre potenti opzioni di find
comando.
Se hai domande o commenti, lascia un commento qui sotto.