Questo tutorial si concentra su come trovare i file su Linux utilizzando il trova e il comando locate.
Come amministratore di sistema, è un compito molto comune cercare un file specifico sul file system.
Tuttavia, a volte potrebbe essere difficile trovare file su un filesystem Linux, specialmente se hai dozzine di utenti diversi.
Ci sono due comandi che possono aiutarti a raggiungere il tuo obiettivo : trova e individua.,
In questo tutorial, vedremo come utilizzare questi comandi in modo efficace e come possono essere sintonizzati per ottenere ciò che stiamo cercando.
Sommario
Trova File utilizzando il comando Trova
Il primo modo per trovare e individuare i file su un host Linux è quello di utilizzare il comando trova.,
Per impostazione predefinita, il comando find è disponibile su tutte le distribuzioni e ha la seguente sintassi
$ find <options> <path> <expression>
Suggerimento rapido : hai qualche problema a ricordare se path o expression viene prima?
Ricorda che per il grEP è il percorso dell’espressione, e find è l’opposto, quindi l’espressione del percorso!
Find è un comando piuttosto potente in quanto ha molte più opzioni rispetto al comando locate.
Ecco tutte le possibilità della funzione find su Linux.,
Trova file con trova per nome file
L’uso più comune della funzione trova è quello di individuare i file dati i loro nomi di file.
$ find <path> -name <pattern>
La differenza principale tra find e locate quando si tratta di cercare i file è che find cercherà i nomi dei file mentre locate cercherà i percorsi del file.
Ad esempio, se torniamo all’esempio di runlevel che abbiamo usato prima, ecco come cercare i file di runlevel usando il comando find.,
$ find / -name runlevel*
che Cosa è il “2> /dev/null” parte?
Ho reindirizzato l’output dell’errore a/dev / null usando il reindirizzamento dell’output per evitare messaggi di errore sulla console.
Trova i file utilizzando trova per tipo di file
Come abbiamo discusso in precedenza nel nostro articolo sui collegamenti hard e soft, i file vengono assegnati tipi di file e viene utilizzato come un modo per differenziarli.,
Ecco un riepilogo di tutti i tipi di file utilizzati su Linux.
- f : un file standard
- d : una cartella o directory
- l : un link simbolico o soft link
- b : dispositivi di blocco (ad esempio un disco rigido, per esempio)
- c : carattere dispositivi (porte seriali, schede audio)
- p : named pipe
- s : socket
conoscenza di tutti questi tipi di file, è possibile cercare file in base al tipo di file con il comando trova.
$ find <path> -type <filetype>
Ad esempio, se cerchiamo tutti i collegamenti simbolici sull’host, emettiamo il seguente comando.,
$ find / -type l
I parametri possono essere combinati, ad esempio se sto cercando tutti i collegamenti simbolici i cui nomi di file terminano con “.servizio ” (per isolare tutti i servizi systemd, ad esempio), eseguirei il seguente comando.
$ find / -type l -name *.service
Trova il file utilizzando un modello (per estensioni)
allo stesso modo per il comando locate, si è in grado di trovare i file su Linux utilizzando un modello.
Come promemoria, un modello è una stringa che include caratteri globbing (come *, ?,, o intervalli).
Questa opzione è particolarmente quando si sta cercando di trovare i file con un’estensione, ad esempio i file Javascript.
Per trovare i file su Linux utilizzando un modello, eseguire il seguente comando:
$ find <path> -name ".<extension>"
$ find / -name "*.js"
File file su Linux dal proprietario
a Volte, si desidera isolare i file creati da un certo utente.
Quando si elimina un utente sul proprio host, è possibile eliminare tutti i file associati a questo utente, ad esempio.,
A volte, gli utenti creano file dalla loro directory home e l’eliminazione di una directory home dell’utente non è sufficiente da sola.
Di conseguenza, per trovare i file creati da un determinato utente su Linux, eseguire il seguente comando
$ find <path> -user <user>
Ad esempio, per trovare tutti i file di proprietà di “john” sul mio host, eseguirei il seguente comando.
$ find / -user john
Ora cosa succede se voglio eliminare tutti i file di proprietà di john con un semplice comando?,
Può essere facilmente raggiunto utilizzando il flag elimina.
$ find / -user john -delete
Trova i file su Linux in base alle autorizzazioni
Utilizzando il comando find, puoi anche trovare e individuare i file che hanno determinate autorizzazioni sul tuo host.
$ find <path> -perm <permissions>
Come promemoria, ecco come funzionano i permessi dei file su Linux.
Per trovare tutti i file che hanno autorizzazioni complete (un 777 data la notazione binaria), è possibile eseguire il seguente comando.,
$ find / -perm 777
Può essere molto utile se per motivi di sicurezza si desidera controllare se nessun file è configurato con autorizzazioni complete sul sistema.
Trova file con trova per dimensione
Un altro modo molto utile per trovare e localizzare file su Linux è trovare il comando trova con l’opzione taglia.
L’opzione dimensione consente di cercare file che sono esattamente le dimensioni specificate, maggiori di una dimensione specifica o inferiori a una dimensione specifica.,
per cercare file in base alla dimensione, utilizzare il seguente comando:
$ find <path> -size <size>
La dimensione è definita dai seguenti prefissi :
- c: byte
- b: blocchi da 512 byte
- k: Kilobyte
- M: Megabyte
- G: Gigabyte
È possibile specificare un “+” se siete alla ricerca per i file maggiore della dimensione specificata.,
Per esempio, per trovare i file più grandi di 1 GB sul vostro sistema, eseguire il seguente comando:
$ find / -size +1G
Per trovare i file inferiori a 10 Mb sul tuo sistema, eseguire il seguente comando:
$ find / -size -10M
Infine, per cercare i file che sono esattamente la dimensione specificati nella query non si dovrebbe aggiungere più o meno prefissi per il comando.
$ find / -size 1024k
Il comando appena definito troverà tutti i file che hanno esattamente 1024 Kbs di dimensione sul tuo host.,
Trova i file su Linux per data di modifica
Utilizzando il find, puoi anche trovare i file con una data di modifica, recente o meno.
Questo comando è molto utile e usato abbastanza spesso dagli amministratori di sistema per trovare file o directory che sono stati modificati di recente.
Per cercare i file utilizzando Trova per data di modifica, eseguire il seguente comando
$ find <path> -mtime <time>
Dove time rappresenta i file modificati 24*<time> ore fa.
Di conseguenza, il tempo è espresso in giorni.,
Analogamente all’opzione size, è possibile aggiungere un operatore “più” o un operatore “meno” al tempo di ricerca dei file modificati più di <time> giorni fa, o meno di <time> giorni fa.
Ad esempio, per cercare i file modificati esattamente 3 ore fa, dovresti eseguire il seguente comando.,
$ find / -mtime 3
Per trovare i file modificati più di una settimana fa, eseguire il seguente comando:
$ find / -mtime +7
Per trovare i file modificati a meno di due giorni fa, eseguire il seguente comando:
$ find / -mtime -2
Trova file con la dinamica della profondità
Come probabilmente avete notato, fin dall’inizio di questo tutorial, stiamo dando esempi di file di ricerche a partire dalla directory root.
Di conseguenza, tutte le cartelle vengono sfogliate in modo ricorsivo.,
Tuttavia, possiamo limitare il numero di directory percorse ricorsivamente da una directory, questa è chiamata profondità.
Per limitare le ricerche di file a una determinata profondità, eseguire la seguente query
$ find <path> -maxdepth <depth>
Ad esempio, ecco come è possibile limitare le ricerche di file alla directory corrente, senza directory secondarie sfogliate.
$ find / -maxdepth 1
È ovviamente possibile combinare questo comando con il flag name per cercare i file con un determinato nome nella directory corrente.,
$ find . -maxdepth 1 -name *.tar
Trovare concatenamento con-exec
In alcuni casi, è possibile trova utile per concatenare il comando find con quello exec.
L’opzione exec può essere utilizzata per concatenare più comandi insieme : prendendo il risultato del primo come input del secondo.,
Diciamo ad esempio che vuoi trovare tutti i file modificati meno di un minuto fa
$ find /home/user -mmin -1./file1
Ora diciamo che vuoi eliminare tutti i file che sono stati modificati meno di un minuto fa.
Puoi concatenare il comando find con l’opzione-exec usando questa sintassi.
$ find /home/user -mmin -1 -exec echo rm -f '{}' \;
Abbiamo ovviamente prima “eco” i risultati come vogliamo fare in modo che stiamo eliminando la corretta file.,
Quando si è pronti per eliminare i file, è sufficiente rimuovere il comando echo.
$ find /home/user -mmin -1 -exec rm -f '{}' \;
Trova i file su Linux usando il comando Locate
Un altro ottimo modo per trovare e localizzare i file su Linux è usare il comando locate.
Prerequisiti
Se il comando locate non è disponibile per il vostro sistema, assicurarsi di leggere la sezione successiva per ottenere individuare in esecuzione sul vostro sistema.,
a – Installazione Locate su distribuzioni basate su APT e RPM
Per installare locate, avrete bisogno dei privilegi sudo sul vostro host Linux.
Per verificare se locate è installato sull’host, eseguire il comando locate nella riga di comando.,
$ locate
individuare Se è installato sul vostro computer, si aspetta un’espressione di
individuare Se non è installato sul tuo host, un messaggio di errore verrà visualizzato
Per installare individuare su Ubuntu 18.04 e Debian 10, eseguire il comando riportato di seguito.,
$ sudo apt-get install mlocate
Allo stesso modo, se si è su una distribuzione basata su CentOS o Fedora, eseguire il seguente comando per installare locate.
$ sudo yum install mlocate
b – Aggiornamento del database mlocate
La funzione locate funziona con un database locale memorizzato sul filesystem che memorizza ogni singolo nome di file del tuo host.
Quando si esegue un comando locate, locate cercherà nel database preparato da updatedb il file che si sta cercando.
Periodicamente, un lavoro cron aggiorna il mlocate.file db per cercare le voci più recenti.,
Il database si trova in /var/lib/mlocate/mlocate.db per impostazione predefinita e il file di configurazione updatedb è memorizzato in / etc / updatedb.conf.
Per ora, è possibile lasciare le opzioni predefinite ed eseguire un semplice comando updatedb per l’aggiornamento del database.
$ sudo updatedb
Individuare i file dato un nome modello
Il modo più semplice per trovare i file su Linux è quello di fornire un modello per il comando locate.,
Per impostazione predefinita, la sintassi del comando locate è la seguente
$ locate ... ...
Se stai cercando un determinato file di configurazione sul tuo sistema, un modo semplice per trovarlo è fornire il nome completo del file al comando locate.
$ locate updatedb.conf
Come puoi vedere, il comando locate restituisce i percorsi completi al file che sto cercando per.,
Individuare i file nelle directory con restrizioni
A volte, potrebbe non essere possibile avere accesso ad alcune directory del sistema.
Di conseguenza, non sarai in grado di individuare i file che si trovano in esso.
Prendiamo l’esempio di una cartella proibita contenente un file denominato “restricted-file”.
Per individuare i file che si trovano in directory con restrizioni, è necessario eseguire il comando locate con privilegi sudo.,
$ sudo locate restricted-file
Individuare i file utilizzando un modello
Utilizzando il comando locate, si può fornire “modelli” sotto forma di caratteri globbing.
I caratteri globbing, chiamati anche caratteri jolly, sono caratteri utilizzati per abbinare una o più voci con un’espressione semplificata.
Il più popolare è il “*” che corrisponderà a qualsiasi carattere incluso nessuno.
Ecco una tabella riassuntiva per i caratteri globbing e le loro funzioni.,6934f1″>
ab
cab
runlevel
runlevel1, runlevel2, runlevel6
As an example, here’s a way to locate all text files on your system.,
$ locate *.txt
Individuare i file utilizzando un’espressione regolare
Come indicato nella gazzetta ufficiale pagina man per individuare il comando locate accetta un modello come input.
Significa che sei in grado di fornire un’espressione regolare al comando locate.
Per trovare e localizzare i file con una regex, utilizzare l’opzione –regex per il comando locate.,
$ locate --regex <regex>
Ad esempio, per isolare tutti i file che iniziano con runlevel seguito da un numero, si dovrebbe eseguire il seguente comando.
$ locate --regex runlevel+
Quando si usano le regex, c’è un punto importante di cui dovresti essere a conoscenza quando individuazione dei file.
Il comando locate sta cercando percorsi per i file nel suo database locale.,
Di conseguenza, durante la ricerca di file, è necessario essere consapevoli che l’espressione regolare deve corrispondere al percorso del file e non al solo nome del file.
Ad esempio, se cerco file che iniziano con “esegui”, nessun risultato verrà restituito poiché il percorso del file inizia con “/usr”.
Individua i file usando l’opzione senza distinzione tra maiuscole e minuscole
Durante la ricerca di file sul tuo filesystem, potresti non essere sicuro del modo in cui un determinato file è stato nominato.,
Era scritto in maiuscolo o in minuscolo? Contiene lettere maiuscole?
Per trovare e localizzare i file utilizzando un’opzione senza distinzione tra maiuscole e minuscole, aggiungere l’opzione-i al comando locate.,
$ locate -i <file_pattern>
Ricerca i file dal contenuto l’uso di grep
In alcuni casi, si può essere interessati nella ricerca per i file che corrispondono a specifici parola della frase che si trova all’INTERNO del file.
Ciò può accadere ad esempio se si sta tentando di trovare il file contenente eventi di registro specifici.,
Il primo modo per cercare file corrispondenti a una parola specifica è usare il comando grep
$ grep -r <pattern> <path>
Nota : non dimenticare l’opzione “-r” se stai cercando file attraverso intere directory.
Per esempio., se siete alla ricerca di tutti i file con “errore” nel loro contenuto, che si trova nella home directory, digitare
$ grep -r error /home/user
In alcuni casi, è possibile trovare i file data una espressione regolare.
Per trovare i file usando un’espressione regolare, usa l’opzione “-E”.,
$ grep -r -E <expression> <path>
Let s dire per esempio che si desidera trovare il file corrispondente ‘abc’ modello del tuo file, digitare
$ grep -r -E "abc.*" --color /home/user
Nota : l’opzione di colore è utilizzato per evidenziare partite usando il comando grep.,
Trova i file con cui
Un altro ottimo modo per individuare i file Linux deve usare il comando which.
Il comando che viene utilizzato per individuare i file associati a un comando specifico.
Questo può diventare molto utile quando non sai dove hai memorizzato i tuoi binari per un comando o se hai bisogno di localizzare un comando per aggiungerlo al tuo PERCORSO.,
$ which <command>
Ad esempio, per cercare i file associati al comando “ls”, devi digitare
$ which ls/usr/bin/ls
Come puoi vedere, ti viene dato il percorso completo del file.
Individuare i binari utilizzando whereis
Allo stesso modo, è completamente possibile cercare i file utilizzando il comando whereis.
Il comando “whereis” può essere visto come un superset del comando “where”: “whereis” fornisce informazioni sul nome del comando, sulla posizione del file e sulla posizione delle pagine di manuale.,
Per eseguire whereis, digita semplicemente “whereis” e aggiungi il nome del tuo comando.
$ whereis lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
Abbastanza a portata di mano!
Conclusione
Nel tutorial di oggi, hai imparato come puoi trovare e localizzare i file su Linux usando due comandi importanti : locate e find.
Anche se le opzioni sono state presentate singolarmente, dovresti ricordare che possono essere combinate in modo da poter specificare ancora di più i file che stai cercando.
Come sempre, se siete interessati all’amministrazione del sistema Linux, abbiamo una sezione completa dedicata a Linux sul nostro sito.,
As always, here is a short video on the subject in case you prefer Youtube videos.