Comando trova Linux
Il comando trova di Linux è un comando molto utile e pratico per cercare file dalla riga di comando. Può essere utilizzato per trovare file in base a vari criteri di ricerca come autorizzazioni, proprietà dell'utente, data/ora di modifica, dimensione ecc. In questo post impareremo a utilizzare il comando trova insieme alle varie opzioni che supporta.
Il comando find è disponibile sulla maggior parte delle distribuzioni Linux per impostazione predefinita, quindi non è necessario installare alcun pacchetto. Il comando find è essenziale da imparare, se vuoi diventare super produttivo con la riga di comando su Linux.
La sintassi di base del comando trova è simile a questa
$ find location comparison-criteria search-term
1. Elenca tutti i file nelle directory correnti e secondarie
Questo comando elenca tutti i file nella directory corrente e le sottodirectory nella directory corrente.
$ find . ./abc.txt ./subdir ./subdir/how.php ./cool.php
Il comando è lo stesso del seguente
$ find . $ find . -print
2. Cerca una directory o un percorso specifico
Il comando seguente cercherà i file nella directory test nella directory corrente. Elenca tutti i file per impostazione predefinita.
$ find ./test ./test ./test/abc.txt ./test/subdir ./test/subdir/how.php ./test/cool.php
Il comando seguente cerca i file in base al loro nome.
$ find ./test -name "abc.txt" ./test/abc.txt
Possiamo anche usare i caratteri jolly
$ find ./test -name "*.php" ./test/subdir/how.php ./test/cool.php
Si noti che tutte le sottodirectory vengono cercate in modo ricorsivo. Quindi questo è un modo molto potente per trovare tutti i file di una determinata estensione.
Cercando di cercare nella directory "/" che è la radice, cercherebbe l'intero file system inclusi i dispositivi montati e i dispositivi di archiviazione di rete. Quindi sii attento. Ovviamente puoi premere Ctrl + c in qualsiasi momento per interrompere il comando.
When specifying the directory ("./test" in this example), its fine to omit the trailing slash. However, if the directory is actually a symlink to some other location then you MUST specify the trailing slash for it to work properly (find ./test/ ...)
Ignora il caso
Spesso è utile ignorare il caso durante la ricerca di nomi di file. Per ignorare il caso, usa l'opzione "iname" invece dell'opzione "nome".
$ find ./test -iname "*.Php" ./test/subdir/how.php ./test/cool.php
Its always better to wrap the search term (name parameter) in double or single quotes. Not doing so will seem to work sometimes and give strange results at other times.
3. Limita la profondità di attraversamento della directory
Per impostazione predefinita, il comando find percorre l'intero albero di directory in modo ricorsivo, il che richiede tempo e risorse. Tuttavia, è possibile specificare la profondità dell'esplorazione della directory. Ad esempio, non vogliamo scendere di più di 2 o 3 livelli nelle sottodirectory. Questo viene fatto usando l'opzione maxdepth.
$ find ./test -maxdepth 2 -name "*.php" ./test/subdir/how.php ./test/cool.php $ find ./test -maxdepth 1 -name *.php ./test/cool.php
Il secondo esempio utilizza maxdepth di 1, il che significa che non scenderà al di sotto di 1 livello di profondità, né solo nella directory corrente.
Questo è molto utile quando vogliamo fare una ricerca limitata solo nella directory corrente o sottodirectory di massimo 1 livello e non nell'intero albero delle directory che richiederebbe più tempo.
Proprio come maxdepth c'è un'opzione chiamata mindepth che fa ciò che suggerisce il nome, ovvero andrà almeno a livello N in profondità prima di cercare i file.
4. Inverti corrispondenza
È anche possibile cercare file che non corrispondono a un determinato nome o modello. Questo è utile quando sappiamo quali file escludere dalla ricerca.
$ find ./test -not -name "*.php" ./test ./test/abc.txt ./test/subdir
Quindi nell'esempio sopra abbiamo trovato tutti i file che non hanno l'estensione php, o file non php. Il comando trova supporta anche il punto esclamativo al posto di not.
find ./test ! -name "*.php"
5. Combina più criteri di ricerca
È possibile utilizzare più criteri quando si specifica il nome e l'inversione. Ad esempio
$ find ./test -name 'abc*' ! -name '*.php' ./test/abc.txt ./test/abc
Il comando trova sopra cerca i file che iniziano con abc nei loro nomi e non hanno un'estensione php. Questo è un esempio di come è possibile creare potenti espressioni di ricerca con il comando trova.
Operatore OPPURE
Quando si utilizzano criteri di nome multipli, il comando trova li combina con l'operatore AND, il che significa che verranno abbinati solo i file che soddisfano tutti i criteri. Tuttavia, se abbiamo bisogno di eseguire una corrispondenza basata su OR, il comando trova ha l'opzione "o".
$ find -name '*.php' -o -name '*.txt' ./abc.txt ./subdir/how.php ./abc.php ./cool.php
Il comando precedente cerca i file che terminano con l'estensione php o con l'estensione txt.
6. Cerca solo file o solo directory
A volte vogliamo trovare solo file o solo directory con un determinato nome. Anche Find può farlo facilmente.
$ find ./test -name abc* ./test/abc.txt ./test/abc Only files $ find ./test -type f -name "abc*" ./test/abc.txt Only directories $ find ./test -type d -name "abc*" ./test/abc
Abbastanza utile e maneggevole!
7. Cerca più directory insieme
Quindi diciamo che vuoi cercare all'interno di 2 directory separate. Anche in questo caso, il comando è molto semplice
$ find ./test ./dir2 -type f -name "abc*" ./test/abc.txt ./dir2/abcdefg.txt
Verifica che abbia elencato i file da 2 directory separate.
8. Trova i file nascosti
I file nascosti su Linux iniziano con un punto. Quindi è facile menzionarlo nei criteri del nome ed elencare tutti i file nascosti.
$ find ~ -type f -name ".*"
9. Trova file con determinate autorizzazioni
Il comando trova può essere utilizzato per trovare file con un'autorizzazione specifica utilizzando l'opzione "perm". Il comando seguente cerca i file con l'autorizzazione 0664
$ find . -type f -perm 0664 ./abc.txt ./subdir/how.php ./abc.php ./cool.php
Questo può essere utile per trovare file con autorizzazioni errate che possono causare problemi di sicurezza. L'inversione può essere applicata anche al controllo dei permessi.
$ find . -type f ! -perm 0777 ./abc.txt ./subdir/how.php ./abc.php ./cool.php
10. Trova i file con i bit sgid/suid impostati
L'opzione "perm" del comando find accetta la stessa stringa di modalità come chmod. Il comando seguente trova tutti i file con l'autorizzazione 644 e il bit sgid impostato.
# find / -perm 2644
Allo stesso modo usa 1664 per bit appiccicoso. L'opzione perm supporta anche l'utilizzo di una sintassi alternativa al posto dei numeri ottali.
$ find / -maxdepth 2 -perm /u=s 2>/dev/null /bin/mount /bin/su /bin/ping6 /bin/fusermount /bin/ping /bin/umount /sbin/mount.ecryptfs_private
Nota che "2>/dev/null" rimuove quelle voci che hanno un errore di "Autorizzazione negata"
11. Trova file di sola lettura
Trova tutti i file di sola lettura.
$ find /etc -maxdepth 1 -perm /u=r /etc /etc/thunderbird /etc/brltty /etc/dkms /etc/phpmyadmin ... output truncated ...
12. Trova file eseguibili
Il comando seguente troverà i file eseguibili
$ find /bin -maxdepth 2 -perm /a=x /bin /bin/preseed_command /bin/mount /bin/zfgrep /bin/tempfile ... output truncated ...
13. Trova i file di proprietà di un particolare utente
Per trovare tutto o un singolo file chiamato tecmint.txt nella directory /root della radice del proprietario.
$ find . -user bob . ./abc.txt ./abc ./subdir ./subdir/how.php ./abc.php
Potremmo anche specificare il nome del file o qualsiasi criterio relativo al nome insieme ai criteri utente
$ find . -user bob -name '*.php'
È molto facile vedere come possiamo creare criteri dopo criteri per restringere la nostra ricerca di file corrispondenti.
14. Cerca i file appartenenti al gruppo
Trova tutti i file che appartengono a un particolare gruppo.
# find /var/www -group developer
Sapevi che puoi cercare nella tua home directory usando il simbolo ~?
$ find ~ -name "hidden.php"
Facile!!
Cerca file e directory in base alla data e all'ora di modifica
Un altro ottimo criterio di ricerca supportato dal comando find è la modifica e la data/ora di accesso. Questo è molto utile quando vogliamo scoprire quali file sono stati modificati in un determinato intervallo di tempo o di date. Facciamo alcuni esempi
15. Trova i file modificati N giorni fa
Per trovare tutti i file che sono stati modificati 50 giorni indietro.
# find / -mtime 50
16. Trova i file a cui hai avuto accesso negli ultimi N giorni
Trova tutti i file a cui è stato effettuato l'accesso negli ultimi 50 giorni.
# find / -atime 50
17. Trova i file modificati in un intervallo di giorni
Trova tutti i file che sono stati modificati tra 50 e 100 giorni fa.
# find / -mtime +50 –mtime -100
18. Trova i file modificati negli ultimi N minuti.
Trova i file modificati nell'ultima ora.
$ find /home/bob -cmin -60
19. File modificati nell'ultima ora
Per trovare tutti i file che sono stati modificati nell'ultima ora.
# find / -mmin -60
20. Trova i file consultati nell'ultima ora
Per trovare tutti i file a cui si è effettuato l'accesso nell'ultima ora.
# find / -amin -60
21. Trova i file di una determinata dimensione
Cerca file e directory in base alle dimensioni. Per trovare tutti i file da 50 MB, usa.
# find / -size 50M
22. Trova i file in un intervallo di dimensioni
Per trovare tutti i file maggiori di 50 MB e inferiori a 100 MB.
$ find / -size +50M -size -100M
23. Trova i file più grandi e più piccoli
Il comando find, se utilizzato in combinazione con il comando ls e sort, può essere utilizzato per elencare i file più grandi.
Il comando seguente visualizzerà i 5 file più grandi nella directory corrente e nella relativa sottodirectory. L'esecuzione dell'operazione potrebbe richiedere del tempo a seconda del numero totale di file che il comando deve elaborare.
$ find . -type f -exec ls -s {} \; | sort -n -r | head -5
Allo stesso modo, se ordinato in ordine crescente, mostra prima i file più piccoli
$ find . -type f -exec ls -s {} \; | sort -n | head -5
24. Trova file e directory vuoti
Il comando seguente utilizza l'opzione "svuota" del comando trova, che trova tutti i file vuoti.
# find /tmp -type f -empty
Per archiviare tutte le directory vuote utilizzare il tipo "d".
$ find ~/ -type d -empty
Davvero molto semplice e facile
Alcune operazioni avanzate
Il comando find non solo trova i file in base a determinati criteri, ma può anche agire su quei file usando qualsiasi comando Linux. Ad esempio, potremmo voler eliminare alcuni file.
Ecco alcuni rapidi esempi
25. Elenca i file trovati
Diciamo che abbiamo trovato i file usando il comando trova e ora vogliamo elencarli come avrebbe fatto il comando ls. Questo è molto facile.
$ find . -exec ls -ld {} \; drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 . -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php -rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php
26. Elimina tutti i file o le directory corrispondenti
Il comando seguente rimuoverà tutti i file di testo nella directory tmp.
$ find /tmp -type f -name "*.txt" -exec rm -f {} \;
La stessa operazione può essere eseguita con le directory, basta inserire il tipo d, al posto del tipo f.
Prendiamo un altro esempio in cui vogliamo eliminare file di dimensioni superiori a 100 MB
$ find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} \;
Riepilogo
Quindi questo è stato un breve tutorial sul comando linux find . Il comando trova è uno dei comandi più essenziali sul terminale linux, che consente la ricerca di file molto semplice. È un must per tutti gli amministratori di sistema. Quindi imparalo. Hai qualche domanda? Lascia un commento qui sotto.