Il comando find di Linux è un potente strumento che consente agli amministratori di sistema di individuare e gestire file e directory in base a un’ampia gamma di criteri di ricerca. Può trovare directory e file in base al loro nome, tipo o estensione, dimensione, autorizzazioni, ecc.
Oltre a individuare file e directory, la combinazione del comando find con altri consente di agire sui risultati. L’aggiunta dell’opzione -exec consente agli amministratori di sistema di eseguire comandi esterni ed eseguire azioni come copiare, spostare, eliminare o modificare le autorizzazioni dei file che corrispondono ai criteri specificati come dimensione, nome, ecc.
In questo articolo, inizieremo spiegando i comandi find di base di Linux con esempi. Questo ti mostrerà come trovare file e directory. Ti mostreremo quindi come utilizzare l’opzione -exec per agire sui file o sulle directory in base alla loro dimensione, autorizzazioni, ecc.
La sintassi generale per il comando find è
find {path} {name -of-file or dir-to-search} {action-to-take}
Dove,
- percorso specifica la directory.
- name-of file or dir-to-search : nome del file o della directory da cercare
- azione da intraprendere: come copiare, eliminare, spostare, ecc.
In questo tutorial, spiegheremo come individuare file e directory che corrispondono a modelli specificati. Vedremo anche come eseguire azioni sui file o sulle directory individuate dal comando find. La guida è basata su Ubuntu ma è applicabile alla maggior parte delle distribuzioni e versioni di Linux.
Sommario:
Trova file e directory
Trova file specifici per nome o estensione
Per cercare un file specifico, eseguire il seguente comando dalla radice (/). Il comando contiene il nome esatto del file che stai cercando.
find . -name file22.txt
Produzione
./test/file22.txt ./sales/file22.txt
Tieni presente che i risultati includono il percorso. Questo è importante se non conosci la directory in cui si trova il file o quando si trova in più di una posizione.
Puoi anche cercare il file in un’altra directory mentre sei ancora nella posizione corrente. In questo caso, è necessario fornire il percorso della directory in cui si desidera eseguire la ricerca.
find ./test -name file22.txt
Alla ricerca di file specifici in un’altra directory
Nel nostro caso, cercheremo tutti quelli che iniziano con il file delle lettere nella directory del test.
find ./test -name file*
Produzione
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Cerca i file per estensione
Per trovare un file in Linux con una certa estensione, aggiungilo al comando.
find . -name *.txt
Produzione
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Trova file e directory per nome
Utilizzare il comando seguente per cercare file e directory che iniziano con le lettere qa. Nel nostro computer abbiamo i file qatree.txt e qa.txt oltre a una directory dal nome qa.
Se eseguiamo il comando;
find ./ -name "qa*"
Restituisce il seguente output
./test/qatree.pdf ./test/qa.txt ./home/qa
Il comando restituisce sia i file che le directory corrispondenti ai criteri di ricerca. Per trovare solo file o directory, è necessario specificarlo nel comando.
Trova solo file o directory
Solo per i file, utilizzare l’opzione type f.
Solo file
find ./ -type f -name "qa*"
Produzione
./test/qatree.pdf ./test/qa.txt
Solo directory
Aggiungere l’opzione type d per individuare solo le directory.
find ./ -type d -name "qa*"
Produzione
./home/qa
Comando di ricerca senza distinzione tra maiuscole e minuscole
Tutte le ricerche con l’opzione -name fanno distinzione tra maiuscole e minuscole e non daranno risultati con lettere maiuscole. Per ottenere tutti i casi, utilizzare l’opzione -iname.
find ./ -iname "qa*"
Produzione
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Cerca un file da più directory
Per trovare i file in directory diverse, aggiungi i loro percorsi nel comando. Nel nostro caso, controlleremo le directory test e numeric.
find ./test ./numeric -name file22.txt -type f
Produzione
./test/file22.txt /root/numeric/file22.txt
Trova più file con estensioni diverse da tutte le directory
È possibile utilizzare il comando find per individuare più file che condividono le diverse estensioni come *.doc, *.txt *.pdf, ecc. Questo può essere fatto separatamente, un’estensione alla volta o utilizzando un solo comando che includa tutti le estensioni desiderate.
trova . -tipo f ( -nome “*.txt” -o -nome “*.pdf” -o -nome “*.doc” )
produzione
./test/subtest/subfil.txt ./test/qatree.pdf ./test/file22.txt ./test/qa.txt ./test/file30.doc ./books/acro.pdf ./data1/FILE22.txt ./docs/files32.txt
Trova i file contenenti un determinato testo
A volte, si desidera accedere a un file contenente un determinato testo ma non si riesce a ricordarne il nome o la posizione. Questo comando ti consente di trovare tutti i file contenenti il testo di destinazione.
Per cercare tutti i file contenenti la parola iperconvergenza”, utilizzare;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Produzione
/root/numeric/hci /root/HCIP
L’opzione –i consente al comando di ignorare i casi e troverà il testo in maiuscolo o meno, ad esempio hyperconvergence, Hyperconvergence , ecc.
Per cercare i file in una directory specifica, aggiungili semplicemente al comando
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Produzione
./numeric/hci
Esplora altri esempi di comando grep.
Trova file e directory in base alle dimensioni
Puoi trovare tutti i file o le directory più piccole, uguali o maggiori di una certa dimensione, all’interno di un certo intervallo o vuote. Utilizzare il formato di dimensione appropriato a seconda del tipo di file o directory che si sta cercando.
Le opzioni di dimensione includono;
c – byte
k – kilobyte
M – Megabyte
G – Gigabyte
Trova file di una certa dimensione, pari a 30 MB
Per cercare trova tutti i file da 30 MB
find / -size 30M
Trova file più grandi di una dimensione specificata
find -size +2M
Produzione
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Trova file inferiori a 10 MB nella directory corrente
find . -type f -size -10M
Trova file con dimensioni comprese tra 100 e 200 MB
Quando si cercano file all’interno di un intervallo specifico, ad esempio tra 100 e 200 MB
find / -size +100M -size -200M
Cerca directory più grandi di 20kb
find / -type d -size +20k
Trova file e directory vuoti.
File
find ./ -type f -size 0
o
find ./ -type f –empty
Directory
find ./ -type d –empty
Trova i file in base all’età o all’ora di modifica
Trova i file più vecchi di n giorni
find /path/ -type f -name '*.txt' -mtime +8
Il -mtime +8 cercherà i file txt più vecchi di 8 giorni.
Per data di modifica
Questo cercherà i file modificati nelle ultime 17 ore
find . -mtime -17 -type f
Cerca le directory modificate negli ultimi 10 giorni
find . -mtime -10 -type d
Trova i file in base all’accesso o alla modifica
Trova i file in base alla data o all’ora di accesso. Ciò ti consente di vedere i file a cui è stato effettuato o non è stato effettuato l’accesso entro un periodo specificato.
Per visualizzare i file a cui non è stato effettuato l’accesso negli ultimi 10 giorni nella home directory.
find /home -atime +10
File consultati esattamente 10 giorni fa
find /home -atime 10
Accesso effettuato negli ultimi 10 giorni
find /home -atime -10
Trova i file modificati negli ultimi n giorni
Puoi anche cercare i file nella directory /home modificati negli ultimi 10 giorni usando il comando;
find /home -mtime -10
Trova i file modificati entro un periodo specifico.
Ad esempio, tutti i file modificati tra 6 e 15 giorni fa nella home directory.
find /home -type f -mtime +6 -mtime -15
File e directory a cui è stato effettuato l’accesso negli ultimi 10 minuti
Per trovare i file a cui è stato effettuato l’accesso negli ultimi 10 minuti, utilizzare l’opzione -amin.
find . -amin -10 -type f
Produzione
./.bash_history ./[email protected]:~#
Directory a cui si è avuto accesso negli ultimi 10 minuti
find . -amin -10 -type d
Trova i file che corrispondono a autorizzazioni specifiche
Sintassi
$ find -perm mode
Dove mode è l’autorizzazione che può essere numerica come 644, 655, 700, 777, ecc. o lettere come u=x, a=r+x, ecc.
È possibile specificare la modalità nei seguenti tre modi diversi.
Trova i file con il permesso 777
find -perm 777
Produzione
./file1
Trova i file con almeno 766
trova -perm -766
Produzione
./file2 ./file1
Il comando cerca tutti i file in cui il file
- Il proprietario del file dispone dei permessi di lettura/scrittura/esecuzione.
- Il gruppo dispone di autorizzazioni di lettura/scrittura
- Altri hanno il permesso di lettura/scrittura
Pertanto, restituisce due file che soddisfano questo criterio: file1 e file2. Non è necessario che i file dispongano delle autorizzazioni 766 esatte e possono averne altre della stessa durata, ma devono avere almeno quelle specificate.
Trova i file scrivibili dal proprietario
Useremo ora la “/” per cercare i file scrivibili dal loro proprietario, o gruppo, o altri.
find -perm /222 . ./file2 ./file3 ./file1
Quanto sopra cerca i file scrivibili dal loro proprietario o gruppo.
Questo restituisce file scrivibili da uno ma non necessariamente da entrambi. Per vedere i file, dove entrambi hanno permessi scrivibili, usa il prefisso –.
find -perm -220
Produzione
./file2 ./file1
Trova i file di proprietà di un utente
Trova tutti i file di proprietà di Jack
find /home -user jack
Produzione
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Trova file specifici di proprietà di un utente
Trova tutti i file di testo di proprietà di Jack
find /home -user jack -iname "*.txt"
Produzione
/home/jack/docs/file32.txt
Trova ed elenca file e directory insieme ai loro permessi
find -name "*.conf" | ls -l
Produzione
total 120 drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2 drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23 -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt
Trova e agisci in base ai risultati
In questa sezione vedremo come agire sui file che corrispondono al pattern specificato nel comando find.
Trova i file e modifica i permessi
Trova e modifica le autorizzazioni di determinati tipi di file. Nel nostro caso, lavoreremo con file PHP con autorizzazioni diverse come mostrato di seguito.
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php
Ora cercheremo tutti i file PHP (sopra) e sostituiremo i loro permessi con 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
Il comando cerca i file PHP nella directory ver e quindi imposta la loro autorizzazione su 755 (rwxr-xr-x)
Risultati
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php
Trova e modifica i permessi di file e directory
Trova i file con autorizzazioni 644 e modificali per avere autorizzazioni 655
find . -type f -perm 644 -exec chmod 655 {} ;
Puoi anche cercare directory con autorizzazioni 644 e sostituirle con 755.
find . -type d -perm 644
Produzione
./docs
La cartella docs ha 644 permessi
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Per impostarlo su 755, corriamo
find . -type d -perm 644 -exec chmod 755 {} ;
Ora possiamo ricontrollare per vedere cos’è esattamente 755
find . -type d -perm 755
Produzione
.
./docs
Dall’alto possiamo vedere che le directory root e docs hanno i permessi 755.
Il comando Ls –la fornisce i seguenti dettagli
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Trova e copia file o directory
Trova e copia un file specifico in una directory
Il comando seguente troverà il file file22.txt e lo copierà nella directory ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Trova e copia un tipo di file in una directory
Per trovare file come immagini con estensione jpg nella directory corrente e copiarli in una posizione diversa come una cartella di immagini, utilizzare;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Questo troverà e copierà tutti i file jpg nella cartella ~/tmp/images.
Trova e copia un file in molte directory
Trova e copia una singola in più directory.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Questo troverà il file hci file e lo copierà nelle tre directory di /tmp/dir1/ /tmp/dir2/ e $HOME/3/
Trova e sposta i file in una directory diversa
Per spostare un file noto da una directory a un’altra. Per spostare il file universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Cerca e sposta i file con una determinata estensione in una cartella diversa
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Trova determinati file e spostati in una specifica cartella diversa
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
Il comando cerca tutti i file con nomi che iniziano con uni e hanno qualsiasi estensione. Quindi li sposta nella directory /unifiles/
Trova e sposta i file in base all’età
Trova e sposta i file più vecchi di giorni specificati in una posizione diversa come l’archivio.
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Questo cercherà i file pdf più vecchi di 20 giorni e li sposterà nella directory backup1.
Trova ed elimina file e directory
La sintassi per trovare e rimuovere file o directory nella directory corrente è
trova . -type f -name “file da cancellare” -exec rm -f {} ; per eliminare solo i file o
trova . -type d -name “dir-to-delete” -exec rm -rf {} ; per eliminare solo le directory
Trova ed elimina solo file specifici
Per trovare ed eliminare i file che iniziano con til, utilizzare;
find . -type f -name "til*" -exec rm {} ;
Per trovare ed eliminare le directory che iniziano con til
find . -type d -name "til*" -exec rm {} ;
Rimuovi sia i file che le directory
find . -name "til*" -exec rm -rf {} ;
Questo rimuoverà sia i file che le directory che iniziano con le lettere til.
Elimina per estensione
Di seguito è riportato come individuare ed eliminare tutti i file txt nella directory corrente. Sostituisci il txt con un’altra estensione come bak, pdf o qualsiasi altra che desideri rimuovere.
find . -type f -name "*.txt" -exec rm -f {} ;
Nel caso in cui desideri che il sistema ti chieda di confermare prima di eliminare ogni file, aggiungi l’opzione -i come di seguito.
find . -type f -name "*.txt" -exec rm -i {} ;
Produzione
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
Per impostazione predefinita, -rm non rimuoverà le directory ed è necessario utilizzare l’opzione –r per garantire una rimozione ricorsiva. Ciò garantisce l’eliminazione delle directory vuote e di quelle contenenti file. L’opzione -f forza la rimozione e viene utilizzata sia per i file che per le directory.
Trova ed elimina i file più vecchi di n giorni
Trova ed elimina i file di backup più vecchi di 20 giorni dalla directory corrente.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Questo eliminerà tutti i file .bak più vecchi di 20 giorni.
Trova ed elimina solo le directory
Per eliminare una directory chiamata dir22
find . -type d -name dir22 -exec rm -rf {} ;
Assicurati di abbinare maiuscole e minuscole al nome della directory o utilizza l’opzione -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Rimuove sia Dir22 che dir22
Per confermare prima dell’eliminazione, utilizzare l’opzione -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Produzione
rm: rimuovere la directory ‘./Dir22’? n
rm: rimuovere la directory ‘./dir22’? si
Nel nostro caso, abbiamo digitato n per la directory Dir22 che non verrà eliminata e y per la dir22 che verrà ora rimossa.
Trova e rimuovi i file vuoti
È possibile utilizzare uno dei seguenti comandi per individuare i file vuoti ed eliminarli automaticamente.
find ./ -type f -size 0 -exec rm -f {} ;
o
find ./ -type f -size 0 | xargsrm -f
o
find ./ -type f -size 0 –delete
Trova e rimuovi le directory vuote
Per rimuovere le directory vuote useremo l’opzione d.
find ./ -type d -empty -exec rmdir {} ;
Un’altra alternativa è usare delete invece di remove.
find ./ -type d -empty -delete
Tieni presente che l’eliminazione di file di sistema o critici dal tuo computer può danneggiare il sistema operativo o le applicazioni o portare alla perdita di dati importanti.
Per evitare eliminazioni accidentali, è consigliabile utilizzare un account utente non root. Inoltre, assicurati di eliminare i file giusti che non sono utili e di disporre di un backup di tutti i file di dati per ogni evenienza.
Qual è il prossimo?
Vai avanti e prova i comandi Linux find sopra nel tuo laboratorio o ambiente NON PRODUTTIVO. Vedi se puoi usarne alcuni per automatizzare la pulizia del file system con Crontab. E, per padroneggiare Linux, dai un’occhiata a questo corso in linea.