GNU/Linux >> Linux Esercitazione >  >> Linux

Trova facilmente file e directory su Linux

Questo tutorial si concentra su come trovare file su Linux utilizzando il comando find e locate.

In qualità di amministratore di sistema, è un'attività molto comune cercare un file specifico nel file system .

Tuttavia, a volte potrebbe essere difficile trovare file su un Linux filesystem soprattutto se hai dozzine di utenti diversi.

Esistono 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 ottimizzati per ottenere ciò che stiamo cercando.

Trova i file usando il comando Trova

Il primo modo per trovare e individuare i file su un host Linux consiste nell'usare il comando find.

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 il percorso o l'espressione vengono prima?

Ricordalo per il grEP è E xpressione P ath, e find è l'opposto, quindi P e E xpressione!

Trova è un comando piuttosto potente in quanto ha molte più opzioni rispetto al comando locate.

Ecco tutte le possibilità della funzione trova su Linux.

Trova file con trova per nome file

L'uso più comune della funzione trova è quello di individuare i file dato il nome di file .

$ find <path> -name <pattern>

La principale differenza tra trova e individua quando si tratta di cercare file è che find cercherà i nomi dei file mentre locate cercherà i percorsi del file.

Ad esempio, se torniamo all'esempio di runlevel utilizzato in precedenza, ecco come cercare i file di runlevel utilizzando il comando find.

$ find / -name runlevel*

Qual è la parte "2> /dev/null"?

Ho reindirizzato l'output dell'errore su /dev/null utilizzando il reindirizzamento dell'output per evitare messaggi di errore sulla console.

Trova i file utilizzando trova per tipo di file

Come discusso in precedenza nel nostro articolo sui collegamenti fisici e virtuali, ai 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 collegamento simbolico o un collegamento software
  • b :blocca i dispositivi (come ad esempio un disco rigido)
  • c :dispositivi a caratteri (porte seriali, schede audio)
  • p :pipe con nome
  • s :presa

Conoscendo tutti questi tipi di file, ora puoi cercare i file per tipo con il comando trova.

$ find <path> -type <filetype>

Ad esempio, se cerchiamo tutti i link simbolici sull'host, emetteremo 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 ".service" (per isolare tutti i servizi di sistema, ad esempio), eseguirei il comando seguente.

$ find / -type l -name *.service

Trova i file utilizzando uno schema (per le estensioni)

Analogamente al comando locate, puoi trovare i file su Linux usando un pattern.

Come promemoria, un modello è una stringa che include caratteri glob (come *, ? o intervalli).

Questa opzione è particolarmente utile quando stai cercando di trovare file a cui è stata assegnata un'estensione, ad esempio file Javascript.

Per trovare i file su Linux usando un pattern, esegui il comando seguente

$ find <path> -name ".<extension>"
$ find / -name "*.js"

File di file su Linux per proprietario

A volte, vuoi isolare i file creati da un determinato utente .

Quando elimini un utente sul tuo host, potresti voler eliminare tutti i file associati a questo utente, ad esempio.

A volte, gli utenti creano file dalla loro home directory e l'eliminazione di una home directory utente non è sufficiente da sola.

Di conseguenza, per trovare i file creati da un determinato utente su Linux, eseguire il comando seguente

$ 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

E se volessi eliminare tutti i file di proprietà di john con un semplice comando?

Può essere facilmente ottenuto utilizzando il flag di eliminazione.

$ find / -user john -delete

Trova i file su Linux in base alle autorizzazioni

Utilizzando il comando trova, 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 i permessi completi (un 777 data la notazione binaria), puoi eseguire il comando seguente.

$ find / -perm 777

Può essere molto utile se, per motivi di sicurezza, desideri controllare se nessun file è configurato con autorizzazioni complete sul tuo sistema.

Trova i file con trova per dimensione

Un altro modo molto utile per trovare e individuare i file su Linux è trovare il comando trova con l'opzione dimensione.

L'opzione dimensione ti consente di cercare file che hanno esattamente la dimensione che stai specificando, maggiore di una dimensione specifica o inferiore a una dimensione specifica.

Per cercare i file per dimensione, usa 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

Puoi specificare un "+" se stai cercando file di dimensioni maggiori rispetto a quelle specificate.

Ad esempio, per trovare file di dimensioni superiori a 1 GB sul tuo sistema, esegui il comando seguente

$ find / -size +1G

Per trovare file di dimensioni inferiori a 10 MB sul tuo sistema , esegui il comando seguente

$ find / -size -10M

Infine, per cercare i file che sono esattamente la dimensione specificata nella query, non dovresti aggiungere prefissi più o meno al comando.

$ find / -size 1024k

Il comando appena definito troverà tutti i file che hanno esattamente 1024 Kb di dimensione sul tuo host.

Trova i file su Linux per data di modifica

Utilizzando la ricerca, 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 comando seguente

$ find <path> -mtime <time>

Dove l'ora rappresenta i file modificati 24* ore fa .

Di conseguenza, il tempo è espresso in giorni.

Analogamente all'opzione della dimensione, puoi aggiungere un "più ” o un “meno ” all'ora per cercare i file modificati più di

Ad esempio, per cercare i file modificati esattamente 3 ore fa , eseguiresti il ​​seguente comando.

$ find / -mtime 3

Per trovare i file modificati più di una settimana fa , eseguiresti il ​​seguente comando

$ find / -mtime +7

Per trovare i file modificati meno di due giorni fa , eseguirai il seguente comando

$ find / -mtime -2

Trova file con profondità dinamica

Come probabilmente avrai notato, sin dall'inizio di questo tutorial, stiamo fornendo esempi di ricerche di file a partire dalla directory principale.

Di conseguenza, tutte le cartelle vengono esplorate 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à , esegui la query seguente

$ find <path> -maxdepth <depth>

Ad esempio, ecco come puoi limitare le ricerche di file alla directory corrente, senza che le directory figlio vengano esplorate.

$ find / -maxdepth 1

Ovviamente puoi combinare questo comando con il flag del nome per cercare i file con un determinato nome nella directory corrente.

$ find . -maxdepth 1 -name *.tar

Concatenamento di ricerca con -exec

In alcuni casi, potrebbe essere utile 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 supponiamo che tu voglia eliminare tutti i file che sono stati modificati meno di un minuto fa.

Puoi concatenare il comando trova con l'opzione -exec usando questa sintassi.

$ find /home/user -mmin -1 -exec echo rm -f '{}' \;

Ovviamente prima "eco" i risultati perché vogliamo assicurarci di eliminare i file corretti.

Quando sei pronto per eliminare quei file, rimuovi semplicemente il comando echo.

$ find /home/user -mmin -1 -exec rm -f '{}' \;

Trova i file su Linux usando il comando Localizza

Un altro ottimo modo per trovare e individuare i file su Linux è utilizzare trova comando.

Prerequisiti

Se il comando locate non è disponibile sul tuo sistema, assicurati di leggere la sezione successiva per far funzionare locate sul tuo sistema.

a – Installazione di Locate su distribuzioni basate su APT e RPM

Per installare trova , avrai bisogno dei privilegi sudo sul tuo host Linux.

Per verificare se locate è installato sul tuo host, esegui il comando locate nella riga di comando.

$ locate

Se locate è installato sul tuo computer, si aspetterà che venga fornita un'espressione

Se locate non è installato sul tuo host, verrà visualizzato un messaggio di errore

Per installare locate su Ubuntu 18.04 e Debian 10, esegui il comando seguente.

$ sudo apt-get install mlocate

Allo stesso modo, se sei su una distribuzione basata su CentOS o Fedora, esegui il seguente comando per installare locate.

$ sudo yum install mlocate

b – Aggiornamento del database mlocate

La posizione funziona con un database locale memorizzato sul tuo filesystem che memorizza ogni singolo nome di file del tuo host.

Quando si esegue un comando locate, locate cercherà nel database preparato da updateb per il file che stai cercando.

Periodicamente, un processo cron aggiorna mlocate.db file per cercare le voci più recenti.

Il database si trova in /var/lib/mlocate/mlocate.db per impostazione predefinita e il file di configurazione aggiornatob è archiviato in /etc/updatedb.conf .

Per ora, puoi lasciare le opzioni predefinite ed eseguire un semplice comando updateb per aggiornare il tuo database.

$ sudo updatedb

Individuare i file a cui è stato assegnato un modello di nome

Il modo più semplice per trovare file su Linux è fornire uno schema al comando locate .

Per impostazione predefinita, la sintassi del comando locate è la seguente

$ locate [OPTION]... [PATTERN]...

Se stai cercando un determinato file di configurazione sul tuo sistema, un modo semplice per trovarlo è fornire il suo nome file completo al comando locate.

$ locate updatedb.conf

Come puoi vedere, il comando locate restituisce i percorsi completi del file che sto cercando.

Trova i file nelle directory limitate

A volte, potresti non avere accesso ad alcune directory sul tuo sistema.

Di conseguenza, non sarai in grado di individuare i file che si trovano al suo interno.

Prendiamo l'esempio di una cartella vietata contenente un file denominato "file-restricted “.

Per individuare i file che si trovano su directory limitate, devi eseguire il comando locate con privilegi sudo.

$ sudo locate restricted-file

Trova i file usando un modello

Usando il comando locate, puoi fornire "motivi" sotto forma di caratteri globbing .

Caratteri globulari , detti anche caratteri jolly, sono caratteri utilizzati per abbinare una o più voci con un'espressione semplificata.

Il più popolare è "* ” che corrisponderà a qualsiasi carattere incluso nessuno.

Ecco una tabella riepilogativa per i personaggi glob e le loro funzioni.

Carattere jolly Descrizione Esempio Partite Non corrisponde
* corrisponde a qualsiasi numero di qualsiasi carattere compreso nessuno devco* devconnected, devcoco, devco.com devdevco,
[abc] corrisponde a un carattere indicato tra parentesi [ab]ab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa cab
[a-z] corrisponde a un carattere dell'intervallo (dipendente dalle impostazioni locali) indicato tra parentesi runlevel[0-9] runlevel1, runlevel2, runlevel6 livelli di esecuzione, livelli di esecuzione

Ad esempio, ecco un modo per individuare tutti i file di testo sul tuo sistema.

$ locate *.txt

Trova i file usando un'espressione regolare

Come affermato nella pagina man ufficiale di locate, il comando locate accetta un pattern come input.

Significa che sei in grado di fornire un'espressione regolare al comando locate.

Per trovare e individuare i file a cui è stata assegnata una regex, usa –regex opzione per il comando di localizzazione.

$ locate --regex <regex>

Ad esempio, per isolare tutti i file che iniziano con runlevel seguito da un numero, eseguire il comando seguente.

$ locate --regex runlevel[0-9]+

Quando usi le espressioni regolari, c'è un punto importante di cui dovresti essere a conoscenza quando trovi i file.

Il comando locate cerca i percorsi dei file nel suo database locale.

Di conseguenza, durante la ricerca di file, dovresti essere consapevole che la tua espressione regolare deve corrispondere al percorso del file e non solo al nome del file.

Ad esempio, se cerco i file che iniziano con "esegui", non verrà restituito alcun risultato poiché il percorso del file inizia con "/usr".

Individua i file utilizzando l'opzione senza distinzione tra maiuscole e minuscole

Quando cerchi 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 individuare i file utilizzando un'opzione senza distinzione tra maiuscole e minuscole, aggiungi l'opzione -i al comando locate.

$ locate -i <file_pattern>

Cerca i file per contenuto usando grep

In alcuni casi, potresti essere interessato a cercare file che corrispondono a una parola specifica che si trova ALL'INTERNO del file.

Ciò può accadere, ad esempio, se stai cercando il file contenente eventi di registro specifici.

Il primo modo per cercare i file che corrispondono a una parola specifica è usare il comando grep

$ grep -r <pattern> <path>

Nota :non dimenticare l'opzione “-r” se stai cercando file in intere directory.

Per esempio. se stai cercando tutti i file con "errore" nel loro contenuto, che si trovano nella tua home directory, dovresti digitare

$ grep -r error /home/user

In alcuni casi, potresti voler trovare i file con un'espressione regolare.

Per trovare i file usando un'espressione regolare, usa l'opzione “-E”.

$ grep -r -E <expression> <path>

Diciamo ad esempio che vuoi trovare il file che corrisponde al pattern 'abc' in uno dei tuoi file, devi digitare

$ grep -r -E "abc.*" --color /home/user

Nota :l'opzione colore serve per evidenziare le corrispondenze usando il comando grep.

Trova i file usando quale

Un altro ottimo modo per individuare i file su Linux è usare il comando which.

Il comando which viene utilizzato per individuare i file associati a un comando specifico.

Questo può diventare molto utile quando non sai dove hai archiviato i file binari per un comando o se devi individuare un comando per aggiungerlo al tuo PERCORSO.

$ which <command>

Ad esempio, per cercare i file associati al comando “ls”, digitare

$ which ls
/usr/bin/ls

Come puoi vedere, ti viene fornito il percorso completo del file.

Trova i binari usando whereis

Allo stesso modo, è completamente possibile cercare i file utilizzando il comando whereis.

Il comando "whereis" può essere visto come un superset del comando "which":"whereis" fornisce informazioni sul nome del comando, la posizione del file e la posizione delle pagine di manuale.

Per eseguire whereis, digita semplicemente "whereis" e aggiungi il nome del tuo comando.

$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

Abbastanza pratico!

Conclusione

Nel tutorial di oggi, hai imparato come trovare e individuare file su Linux utilizzando due comandi importanti:individua e trova.

Anche se le opzioni sono state presentate singolarmente, dovresti ricordare che possono essere combinate per poter specificare ancora di più i file che stai cercando.

Come sempre, se sei interessato all'amministrazione del sistema Linux, abbiamo una sezione completa dedicata a Linux sul nostro sito web.


Linux
  1. Trova file e directory su Linux con il comando find

  2. Come scoprire le directory e i file principali (spazio su disco) in Linux

  3. Trova file e directory in Linux come un professionista

  4. Linux:directory standard e/o comuni su OS Unix/linux?

  5. Comandi di ricerca di Linux

Come rinominare file e directory in Linux

Comando Ls in Linux (Elenca file e directory)

Come comprimere file e directory in Linux

3 modi per trovare file e directory in Linux

Due comandi per trovare facilmente file e directory in Debian 11

Come trovare ed eliminare directory vuote in Linux