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 whereiscomando 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é whereisnon 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 lscomando, 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 lsprogramma, non lsè stato trovato alcun codice sorgente per il programma.
Copia il /bin/lsfile nella tua home directory e nella /usr/bindirectory, quindi esegui whereisnuovamente il comando:
cp /bin/ls ~
cp /bin/ls /usr/bin/ls
whereis ls
Come vedi, solo /bin/lse /usr/bin/lssono stati trovati nel risultato della ricerca. Il lsprogramma 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 locatecomando 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 locatecomando 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 locatecomando 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.dbdatabase viene aggiornato automaticamente una volta al giorno. È possibile utilizzare il updatedbcomando 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 -bflag 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 lssul tuo filesystem:
/bin/ls
which
Il whichcomando cercherà il comando specificato nel valore della variabile di ambiente PATHe restituirà il primo risultato per impostazione predefinita. Se si whichesegue una query su un alias, il comando determinerà il comando effettivo per l'alias prima di eseguire la ricerca.
Il whichcomando è anche molto veloce per la sua semplicità.
L'utilizzo del whichcomando è semplice:
which your_command
Se vuoi mostrare tutti i comandi corrispondenti invece del primo, usa il -aflag:
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 typecomando 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 whereiscomando, il typecomando 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 findcomando è il più potente. È anche il più lento. A differenza degli altri quattro comandi, il findcomando cercherà effettivamente il tuo file sull'intero filesystem, un i-node per un i-node. Con il findcomando, è possibile utilizzare criteri di query sofisticati per trovare tutti i file necessari, anche eseguire azioni sui file trovati.
I criteri di ricerca per il findcomando sono troppo sofisticati per essere spiegati in un articolo così breve, ecco alcuni esempi.
Formato di base del findcomando:
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 aaanella 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 aaanella directory di lavoro ed elencarne le informazioni dettagliate:
find -name 'aaa' -exec ls -l {} \;