Questo articolo introdurrà due strumenti utili per cercare i file all'interno del filesystem Linux. Il primo è il find
comando, che può essere trovato in qualsiasi distribuzione Linux, e il secondo è locate
, che necessita di un'installazione.
Trova comando
Il comando find fa parte di Linux per impostazione predefinita. Offre più parametri per perfezionare la tua ricerca.
Trova per nome
Il comando di ricerca più semplice è cercare per nome in cui ti trovi:
$ find -name "FILE_NAME"
È possibile specificare la directory in cui si desidera cercare il file:
$ find /home -name my_file.txt
$ find / -name my_other_file.txt
Tieni presente che questo comando fa distinzione tra maiuscole e minuscole. Se vuoi ignorare il caso usa:
$ find -iname "FILE_NAME"
Ricerca inversa
Nel caso in cui desideri cercare file che non aderiscono allo schema specificato puoi negare i parametri di ricerca utilizzando il -not
parametro o \!
. Ad esempio:
$ find -not -name "FILE_NAME_TO_AVOID"
or
$ find \! -name "FILE_NAME_TO_AVOID"
Trova per tipo di file
Il file
Il comando consente anche di cercare i tipi di file. Alcuni comuni descrittori del tipo di file sono:
f
:file normaled
:directoryl
:collegamento simboloc
:dispositivi a caratterib
:blocca i dispositivi
Il tipo di file desiderato va dopo il -type
attributo.
Ad esempio, per trovare tutti i file JSON sotto etc
directory:
$ find /etc -type f -name "*.json"
Trova per dimensione del file
C'è anche un parametro usato per filtrare il risultato della ricerca in base alla dimensione dei file:-size
.
Per le unità dimensionali è possibile utilizzare i seguenti suffissi:
c
:bytek
:kilobyteM
:megabyteG
:gigabyteb
:blocchi da 512 byte
E per specificare se stai parlando di una dimensione esatta, minore o maggiore di utilizza i seguenti prefissi:
- Ricerca esatta :nessun prefisso
- Meno di :
-
prefisso - Maggiore di :
+
prefisso
Ad esempio, per trovare tutti i file da 3 gigabyte nella home directory:
$ find /home -size 3G
Per tutti i file inferiori a 3 gigabyte:
$ find /home -size -3G
File oltre 3 gigabyte:
$ find /home -size +3G
Cerca per ora
Puoi anche cercare i file in base all'ultimo accesso, modifica o orario di modifica.
- Tempo di accesso :
-atime
per l'ultima volta il file è stato letto. - Tempo di modifica :
-mtime
per l'ultima volta il contenuto del file è stato modificato. - Cambia ora :
-ctime
per l'ultima volta in cui sono stati modificati i metadati dell'inode del file.
È anche possibile confrontare con un file di riferimento per restituire quelli più recenti:
$ find / -newer file_name
Per i tempi, i parametri specificati sono in giorni . È possibile utilizzare gli stessi prefissi della ricerca per dimensione:
$ find /home -mtime 3
$ find /home -atime -2
$ find /home -ctime +5
Per trovare i file usando il tempo in minuti puoi usare:
$ find /home -mmin 3
Trova per proprietario e autorizzazioni
Ci sono anche parametri per trovare i file in base ai loro proprietari (-user
e -group
) e le loro autorizzazioni (-perm
):
$ find /home -user my_user
$ find /home -group my_group
$ find /home -perm 777
Definizione della profondità di ricerca
Durante la ricerca in una directory, find
il comando restituirà tutti i file in quella directory, anche se si trovano all'interno di altre sottodirectory. Per controllare questa profondità puoi definire una profondità massima, una profondità minima o entrambe.
Ad esempio, per cercare solo nella directory superiore e in un livello di sottodirectory è possibile impostare il -maxdepth
parametro a 2:
$ find -maxdepth 2 -name my_file
Per definire la profondità minima dove find
dovrebbe cercare si usa il -mindepth
parametro:
$ find -mindepth 5 -name my_file
Questi parametri possono essere combinati:
$ find -mindepth 4 -maxdepth 7 -name my_file
Esecuzione di comandi sui risultati
Come visto nei comandi di profondità, tutti find
i parametri possono essere combinati per ottenere risultati molto specifici. Quando ottieni i risultati desiderati, è possibile eseguire comandi su di essi utilizzando -exec
parametro.
Quando si combinano i parametri di ricerca è anche possibile utilizzare il -and
e -or
opzioni per personalizzare i criteri di ricerca. Quando nessuno di essi viene utilizzato, -and
l'opzione è l'impostazione predefinita.
Ad esempio, per modificare i permessi di tutti i file in /my_dir
directory che attualmente hanno 777 autorizzazioni su 664 utilizzano quanto segue:
$ cd /my_dir
$ find . -type f -perm 777 -exec chmod 664 {} \;
Strumento di localizzazione
Il locate
comando è un'alternativa a find
. La differenza è che utilizza un database dei file nel filesystem in modo che possa funzionare più velocemente. Per installare il locate
strumento che puoi utilizzare:
- Per le distribuzioni Ubuntu/Debian:
$ sudo apt install mlocate`
- Per le distribuzioni CentOS/RHEL:
$ sudo yum install mlocate`
Locate utilizza un processo cron per aggiornare il database quotidianamente, ma può essere aggiornato manualmente utilizzando:
$ sudo updatedb
Per cercare il “nome di base”, ovvero se la query è contenuta solo nel nome del file e non nel percorso del file, utilizzare il -b
bandiera:
$ locate -b name
Per trovare i file che esistono ancora (dopo l'ultimo updatedb
call) usa il -and
bandiera:
$ locate -e name
Per le statistiche dal database generato utilizzare:
$ locate -S
Conclusione
La ricerca di file nella riga di comando di Linux potrebbe essere difficile. Gli strumenti presentati in questo articolo forniscono un modo semplice per gestire e trovare i file. Comprendendo i diversi parametri, la ricerca può essere specifica quanto si desidera.
Utilizza la scheda Feedback per inserire commenti o porre domande. Puoi anche avviare una conversazione con noi.