Bagaimana cara mencari file (temukan) atau pelengkapan otomatis?

8

Saya adalah pengguna Windows dan berasal dari Windows dengan semua waktu menunggu pengindeksan dan kekal saat mencari file, saya menemukan betapa terkejutnya seberapa cepat menemukan pekerjaan atau pelengkapan otomatis (yang saya tahu) bekerja di linux.

Apakah ada pengindeksan yang dilakukan di latar belakang atau bagaimana hal ini dicapai? Saya masih memiliki instalasi yang cukup bersih, jadi mungkin ini berjalan buruk seiring waktu, tetapi pada Windows saat Anda ingin mencari di folder yang tidak diindeks Anda harus menunggu beberapa detik.

oli206
sumber

Jawaban:

18

Saya menemukan betapa terkejutnya seberapa cepat menemukan pekerjaan atau pelengkapan otomatis (yang saya tahu) bekerja di linux. ... Apakah ada pengindeksan yang dilakukan di latar belakang atau bagaimana hal ini dicapai?

Ini sebenarnya adalah dua pertanyaan yang sangat berbeda.

locatemenggunakan indeks (slocate menyimpannya di /var/lib/slocate/), yang diperbarui oleh cronpekerjaan malam . Pekerjaan malam ini biasanya berjalan sekitar 1 atau 2 pagi waktu setempat, dan memindai seluruh sistem Anda (termasuk semua drive yang terhubung). Indeks yang dihasilkan hanyalah daftar nama file.

Pelengkapan otomatis ditangani oleh shell Anda. Sebagian besar sistem menggunakan bash, begitu bash-completionjuga kumpulan skrip yang mengatur cara kerjanya. ( zshMemiliki koleksi bernama sama, dan sebagian besar kerang lain memiliki beberapa bentuk penyelesaian built-in.) Ketika Tabditekan, shell menjalankan script yang memutuskan, berdasarkan apa yang telah Anda ketik sudah, apa, tepatnya, kebutuhan untuk diselesaikan. Script kemudian menghasilkan daftar penyelesaian yang mungkin, yang mungkin atau mungkin bukan daftar file di direktori saat ini, atau daftar file yang dapat dieksekusi di file Anda $PATH. The locateperintah biasanya tidak digunakan untuk ini.

greyfade
sumber
1
Terima kasih! Begitu ya, jadi tidak terlalu "ajaib" :)
oli206
greyfade telah merusak sihir selamanya -_-
Michael Mrozek
@Michael Mrozek: Maaf. :(
greyfade
Shell menjalankan skrip yang kedengarannya tidak 100% benar, ketika menerapkan shell, orang tidak boleh keliru dalam berpikir bahwa mereka harus menulis skrip eksternal. Ini hanya rutin dalam kode itu sendiri, mungkin atau tidak mengakses file eksternal untuk kenyamanan konfigurasi, tetapi penyelesaian built-in sederhana bekerja dengan baik.
Aki
1
@NabinKhadka Karena jawaban saya ditulis, saya pikir Ubuntu berubah ke locatelayanan lain . Saya tidak tahu yang mana - saya tidak menggunakan Ubuntu - tetapi mlocate muncul di pikiran. Periksa /etc/updatedb.conf. Mungkin memiliki jalur default untuk locatealat apa pun yang Anda miliki.
greyfade
5

Biasanya, cari menggunakan indeks yang dihasilkan sekali sehari melalui cron-job (/etc/cron.daily/mlocate pada sistem saya misalnya). Tidak ada yang mewah, pada dasarnya traversal sistem file lengkap dengan beberapa optimasi dan pembangunan struktur data indeks.

Kerang mungkin menggunakan beberapa caching internal untuk penyelesaian perintah, tetapi tidak menggunakan file indeks global. Selain itu, biasanya, kernel Unix memelihara dentry-cache, yaitu \ mereka cache informasi direktori file yang digunakan oleh daftar direktori dll dalam memori (termasuk stat'ing file yang tidak ada - yang juga disebut invers caching).

maxschlepzig
sumber