Come funziona la ricerca di un file (individuare) o il completamento automatico?


8

Sono un utente Windows e provengo da Windows con tutti i tempi di indicizzazione e di attesa eterna durante la ricerca di file, trovo sorprendente quanto velocemente funzioni il localizzatore o il completamento automatico (che conosco) funziona in Linux.

C'è qualche indicizzazione in background o come si ottiene? Ho ancora un'installazione abbastanza pulita, quindi forse questo va male nel tempo, ma in Windows nel momento in cui vuoi cercare una cartella che non è indicizzata devi aspettare alcuni secondi.

Risposte:


18

Trovo sorprendente quanto velocemente funzioni il localizzatore o il completamento automatico (che conosco) funziona in Linux. ... C'è qualche indicizzazione in background o come si ottiene?

In realtà si tratta di due domande completamente distinte.

locateutilizza un indice (slocate lo memorizza in /var/lib/slocate/), che viene aggiornato da un cronlavoro notturno . Questo lavoro notturno viene in genere eseguito all'una o all'ora locale verso le 1 o 2 e analizza completamente l'intero sistema (comprese tutte le unità collegate). L'indice risultante è semplicemente un elenco di nomi di file.

Il completamento automatico è gestito dalla shell. La maggior parte dei sistemi utilizza bash, così bash-completioncome la raccolta di script che gestiscono il modo in cui funziona. ( zshha una raccolta con nomi simili e la maggior parte delle altre shell ha una forma di completamento integrata). Quando Tabviene premuto, la shell esegue uno script che decide, in base a ciò che hai già digitato, di cosa, esattamente, ha bisogno essere completato. Lo script genera quindi un elenco di possibili completamenti, che può essere o meno l'elenco dei file nella directory corrente o l'elenco dei file eseguibili nel proprio $PATH. Il locatecomando viene normalmente non utilizzato per questo.


1
Grazie! Capisco, quindi non è così "magico" :)
oli206

greyfade ha rovinato la magia per sempre -_-
Michael Mrozek

@Michael Mrozek: mi dispiace. :(
greyfade,

La shell esegue uno script che non sembra corretto al 100%, quando si implementa una shell le persone non devono sbagliare nel pensare di dover scrivere script esterni. È semplicemente una routine nel codice stesso, può o meno accedere ai file esterni per comodità di configurazione, ma il semplice completamento integrato funziona bene.
Aki,

1
@NabinKhadka Da quando la mia risposta è stata scritta, penso che Ubuntu sia passato a un altro locateservizio. Non so quale - non uso Ubuntu - ma mi viene in mente mlocate. Controllare /etc/updatedb.conf. Potrebbe avere il percorso predefinito per qualunque locatestrumento tu abbia.
Greyfade,

5

Di solito, individuare utilizza un indice che viene generato una volta al giorno tramite un cron-job (ad esempio /etc/cron.daily/mlocate sul mio sistema). Non fa nulla di speciale, fondamentalmente un attraversamento completo del filesystem con alcune ottimizzazioni e la costruzione della struttura dei dati dell'indice.

Le shell usano probabilmente un po 'di cache interna per il completamento del comando, ma non usano un file di indice globale. Inoltre, in genere, i kernel Unix mantengono una cache dentry, ovvero memorizzano nella cache le informazioni sulla directory dei file utilizzate dagli elenchi di directory, ecc. (Incluso lo stating dei file inesistenti, che è anche chiamato cache inversa).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.