introduzione
Ci sono cinque comandi la ricerca di file su Linux: whereis
, locate
, which
, type
, e find
. Ognuno di essi ha le proprie caratteristiche ed è progettato per particolari scenari di ricerca. Questa guida ti introdurrà a ciascun comando e mostrerà esempi di utilizzo. Per ulteriori letture su uno di questi comandi, è meglio rivedere la manpage appropriata.
whereis
Il whereis
comando viene utilizzato per cercare file binari, codice sorgente e pagine del manuale online in diverse directory di installazione standard per qualsiasi nome di programma specificato.
Poiché whereis
non esegue la ricerca in tutte le posizioni del sistema, non verrà trovato alcun file proveniente da queste directory specifiche. Per lo stesso motivo, otterrai rapidamente i risultati della tua ricerca, trovata o meno.
Inoltre, non cercherà quei comandi che sono integrati direttamente nella shell.
Ad esempio, se si desidera trovare informazioni sul ls
comando, eseguire il comando seguente sul terminale:
whereis ls
Riceverai alcuni feedback come:
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
Nel risultato, /bin/ls
è il binario che si desidera individuare, le altre due sono manpage per il ls
programma, non ls
è stato trovato alcun codice sorgente per il programma.
Copia il /bin/ls
file nella tua home directory e nella /usr/bin
directory, quindi esegui whereis
nuovamente il comando:
cp /bin/ls ~
cp /bin/ls /usr/bin/ls
whereis ls
Come vedi, solo /bin/ls
e /usr/bin/ls
sono stati trovati nel risultato della ricerca. Il ls
programma nella directory home non è stato trovato, poiché la directory home non è una di quelle directory di installazione standard.
ls: /bin/ls /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
Se si esegue il comando seguente:
whereis cd
Vedrai un output simile alla riga seguente. Non è stato rilevato alcun file binario perché cd
è un comando incorporato della shell.
cd: /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
locate
Il locate
comando viene utilizzato per trovare i file per nome con l'aiuto di un database ( /var/lib/mlocate/mlocate.db
). Questo database è fondamentalmente un'istantanea del layout del tuo filesystem. Tutti i record in questo database che corrispondono alla tua query verranno elencati nei risultati della ricerca. Per impostazione predefinita, il locate
comando utilizzerà la query per abbinare qualsiasi parte del nome intero di ciascun record, incluso il nome del percorso. Pertanto, il numero di file corrispondenti nel risultato della ricerca potrebbe essere maggiore del previsto.
Man mano che il database diventa obsoleto, il risultato della ricerca del locate
comando diventa meno accurato. Potresti notare file che non esistono più o che non vedrai corrispondenze per i file appena creati. Per impostazione predefinita, il mlocate.db
database viene aggiornato automaticamente una volta al giorno. È possibile utilizzare il updatedb
comando per aggiornarlo manualmente.
Poiché la ricerca viene eseguita sul database anziché sul file system, la velocità di ricerca è molto elevata.
Se si esegue il comando seguente:
locate ls
Otterrai molti record invece del risultato atteso.
Per rendere più accurato il risultato della ricerca, è possibile utilizzare il -b
flag per limitare l'intervallo di ricerca, utilizzando la query per abbinare solo il nome di base di ciascun record:
locate -b "\ls"
Questa volta, otterrai la posizione di ogni file chiamato esattamente ls
sul tuo filesystem:
/bin/ls
which
Il which
comando cercherà il comando specificato nel valore della variabile di ambiente PATH
e restituirà il primo risultato per impostazione predefinita. Se si which
esegue una query su un alias, il comando determinerà il comando effettivo per l'alias prima di eseguire la ricerca.
Il which
comando è anche molto veloce per la sua semplicità.
L'utilizzo del which
comando è semplice:
which your_command
Se vuoi mostrare tutti i comandi corrispondenti invece del primo, usa il -a
flag:
which -a your_command
Ecco un esempio per la ricerca di un comando che è stato modificato:
which ll
Il risultato della ricerca sarebbe:
alias ll='ls -l --color=auto'
/bin/ls
type
Per impostazione predefinita, il type
comando indicherà come verrà interpretato il nome di un comando. I risultati possibili includono un alias, una parola chiave, una funzione, un file incorporato o un file. Proprio come il whereis
comando, il type
comando cercherà solo in diverse directory di installazione standard per rispondere alla tua query.
Alcuni esempi per digitare diversi comandi:
Un comando incorporato della shell:
type cd
cd is a shell builtin
Un file binario sul filesystem:
type sudo
sudo is /usr/bin/sudo
Un alias:
type ls
ls is aliased to `ls --color=auto'
find
Tra i cinque comandi di ricerca dei file introdotti in questo tutorial, il find
comando è il più potente. È anche il più lento. A differenza degli altri quattro comandi, il find
comando cercherà effettivamente il tuo file sull'intero filesystem, un i-node per un i-node. Con il find
comando, è possibile utilizzare criteri di query sofisticati per trovare tutti i file necessari, anche eseguire azioni sui file trovati.
I criteri di ricerca per il find
comando sono troppo sofisticati per essere spiegati in un articolo così breve, ecco alcuni esempi.
Formato di base del find
comando:
find [path] [option] [action]
Per trovare tutti i file nella directory di lavoro e in tutte le sue sottodirectory:
find
Per trovare un file chiamato aaa
nella directory home e in tutte le sue sottodirectory:
find ~ -name 'aaa'
Per trovare tutti i file nel filesystem che sono stati modificati nelle ultime 24 ore:
find / -mtime 0
Per trovare tutti i file nella directory web e tutte le sue sottodirectory che appartengono all'utente nginx
:
find /usr/share/nginx/html/ -user nginx
Per trovare tutti i file nella directory di lavoro le cui autorizzazioni sono 0744
:
find -perm -0744
Per trovare un file con il nome aaa
nella directory di lavoro ed elencarne le informazioni dettagliate:
find -name 'aaa' -exec ls -l {} \;