Perintah locate Linux: cari jalur melalui indeks file
Perintah locate mencari jalur dalam indeks nama file yang sudah dibuat sebelumnya. Pencarian ini dapat menghindari penelusuran seluruh direktori saat setiap kueri, tetapi hasilnya mengikuti isi dan cakupan indeks, bukan selalu keadaan terbaru. Gunakan find bila Anda perlu memeriksa pohon direktori saat ini atau menggabungkan kondisi metadata.
Cara kerja locate dan updatedb
Nama locate dapat disediakan oleh plocate, mlocate, atau GNU locate, bergantung pada distribusi. Program updatedb membangun atau memperbarui basis data jalur; sistem dapat menjadwalkannya melalui timer atau tugas berkala. Lokasi basis data, aturan visibilitas, pola, dan opsi bergantung pada implementasi serta konfigurasi distribusi.
Periksa locate --version, locate --help, man locate, dan man updatedb sebelum memakai opsi khusus. Contoh dasar di bawah memakai bentuk yang umum pada plocate dan GNU locate. Pembahasan perbedaan keduanya ditandai secara eksplisit; nama program yang sama tidak menjamin semua perilakunya identik.
Sintaks dasar
locate [OPSI]... POLA...
OPSI dan POLA adalah penanda yang diganti sesuai kebutuhan. Tanpa opsi khusus, teks biasa dicari sebagai bagian dari jalur penuh. Bila memakai karakter glob seperti *, ?, atau [], kutip pola agar shell tidak menggantinya dengan nama file lokal. Pola glob dicocokkan terhadap keseluruhan bagian jalur yang dipilih, sehingga tanda * di awal atau akhir mempunyai arti penting.
Penggunaan dasar locate
Cari sebagian jalur
Jika indeks memuat nama tersebut, contoh berikut dapat menampilkan jalur yang mengandung nginx.conf. Ini bukan pencarian isi file dan bukan jaminan kecocokan nama terakhir secara tepat: nama seperti nginx.conf.backup juga dapat cocok. Program tidak membuka editor atau mengubah file yang ditemukan.
locate nginx.conf
Abaikan perbedaan huruf besar/kecil
Opsi -i memungkinkan pencocokan seperti readme.md dengan README.md dalam cakupan indeks. Aturan huruf mengikuti implementasi dan locale, yaitu pengaturan bahasa serta karakter lingkungan. Jangan menganggap semua pasangan huruf Unicode diperlakukan sama; plocate, misalnya, tidak menyediakan seluruh aturan pelipatan huruf Unicode.
locate -i readme.md
Periksa keberadaan hasil yang terindeks
-e atau --existing menambahkan pemeriksaan apakah jalur hasil masih ada saat diperiksa. Pola '*.service' memilih jalur berakhiran .service. Pemeriksaan ini dapat menyingkirkan entri lama, tetapi tidak menambahkan file baru yang belum masuk indeks. File juga dapat berubah lagi sesudah pemeriksaan.
locate -e '*.service'
Perilaku tautan simbolis berbeda: plocate tidak mengikuti tautan saat pemeriksaan -e, sedangkan GNU locate secara bawaan menganggap tautan rusak sebagai tidak ada saat pengujian keberadaan. Baca manual lokal jika hasil harus membedakan tautan dari targetnya.
Mengapa hasil belum tentu mencerminkan file terbaru?
Pada sistem Linux yang indeksnya mencakup jalur tersebut, kueri berikut dapat menghasilkan entri /etc/passwd. Contoh ini hanya mencari namanya, bukan menampilkan isi file.
locate /etc/passwd
Salah satu kemungkinan baris hasil:
/etc/passwd
Karena pola itu berupa substring, jalur tambahan seperti /etc/passwd- juga dapat muncul bila terindeks. Hasil pada mesin lain tidak harus sama. File yang dibuat setelah pembaruan dapat belum terlihat; setelah pemindahan, jalur lama dapat masih tercatat sementara jalur baru belum ada di indeks.
Bila hasil kosong, periksa pesan kesalahan, basis data yang dipilih, cakupan indeks, pola, dan hak akses sebelum menyimpulkan file tidak ada. Untuk pemeriksaan saat ini, pilih direktori yang relevan lalu gunakan find, misalnya find /etc -name 'passwd' -print jika /etc tersedia dan dapat ditelusuri.
Opsi utama
| Opsi | Kegunaan |
|---|---|
-i |
Abaikan perbedaan huruf besar/kecil sesuai implementasi dan locale. |
-e, --existing |
Periksa keberadaan jalur hasil yang sudah ada dalam indeks. |
-b, --basename |
Cocokkan hanya nama terakhir; keluaran tetap berupa jalur. |
-c, --count |
Tampilkan jumlah kecocokan, bukan daftar jalur. |
-l N, --limit N |
Berhenti setelah paling banyak N kecocokan. |
-r POLA |
Gunakan ekspresi reguler; dialek dan bentuk opsi berbeda menurut implementasi. |
-d DBPATH |
Cari dalam basis data atau daftar basis data yang ditentukan. |
Ganti N dengan jumlah yang diinginkan dan DBPATH dengan berkas basis data yang benar. Opsi -d memilih basis data, bukan membuatnya; format indeks perlu sesuai dengan program pembaca. Bila -c digabungkan dengan -l, jumlah yang dilaporkan dibatasi oleh limit tersebut pada plocate dan GNU locate, sehingga belum tentu jumlah seluruh kecocokan.
Contoh praktis
Cocokkan nama terakhir secara tepat
-b mengabaikan bagian direktori saat mencocokkan, tetapi tidak otomatis mengubah pencarian substring menjadi kecocokan tepat. Contoh berikut memilih nama terakhir hosts dengan jangkar ekspresi reguler ^ untuk awal dan $ untuk akhir. Dengan demikian, myhosts atau hosts.backup tidak cocok. Jalur lengkap hasil tetap ditampilkan.
locate -b --regex '^hosts$'
Untuk jangkar sederhana ini, bentuk tersebut berlaku pada plocate dan GNU locate yang menyediakan opsi --regex. Jangan langsung memperluasnya ke semua sintaks regex: plocate memakai ekspresi reguler POSIX extended untuk --regex dan POSIX basic untuk -r, sedangkan GNU locate menyediakan dialek sendiri serta --regextype. Pencarian regex juga dapat memerlukan pemindaian indeks yang lebih luas daripada pencarian teks biasa.
Hitung atau batasi hasil
Perintah pertama menghitung jalur yang mengandung cache; perintah kedua menampilkan paling banyak 20 kecocokan. Jalankan keduanya sebagai kueri terpisah bila memerlukan hitungan penuh sekaligus sampel terbatas. Jumlah itu adalah entri jalur yang cocok, bukan jumlah byte atau jaminan 20 file terbaru.
locate -c cache
locate -l 20 cache
Perbarui indeks sistem bila diperlukan
Pembaruan indeks adalah tugas pengelolaan sistem. Administrator yang memang bermaksud memperbarui basis data sistem dapat menjalankan contoh berikut setelah memeriksa implementasi updatedb dan jadwal distribusinya. Pekerjaan ini dapat menelusuri banyak direktori dan memakai waktu serta aktivitas disk; tidak perlu mengulanginya sebelum setiap pencarian.
sudo updatedb
Perintah ini memperbarui indeks, bukan memperbaiki isi file yang dicari. Jika gagal, periksa pesan kesalahan dan status pekerjaan; jangan menganggap indeks sudah berubah hanya karena perintah selesai. Pada plocate, konfigurasi updatedb.conf dapat mengecualikan direktori atau sistem berkas melalui aturan seperti PRUNEPATHS dan PRUNEFS. File di area yang memang dikecualikan tidak otomatis menjadi hasil setelah pembaruan. Manual updatedb untuk plocate menjelaskan opsi pembaruan dan basis data pengguna; opsi GNU updatedb berbeda.
Perbandingan dengan perintah lain
| Perintah | Fungsi utama | Penggunaan yang sesuai |
|---|---|---|
locate |
Mencari nama jalur dalam indeks | Menemukan jalur yang sudah tercatat |
find |
Menelusuri pohon direktori saat dijalankan | Keadaan saat ini dan kondisi metadata |
which |
Mencari program eksternal melalui PATH | Menemukan lokasi berkas program |
whereis |
Mencari lokasi yang berkaitan dengan program | Berkas program, sumber, dan manual |
PATH adalah daftar direktori pencarian program oleh shell. Locate tidak menentukan semua bentuk perintah shell seperti alias atau fungsi. Indeks dapat mempercepat pencarian nama pada cakupan besar, sedangkan find pada direktori kecil juga bisa cepat; tidak ada jaminan perbandingan kecepatan untuk setiap mesin dan kueri. Referensi perintah Linux berdasarkan tugas (bahasa Inggris) menjelaskan pilihan alat lain.
Hal yang perlu diperhatikan
Kebaruan dan cakupan adalah dua hal berbeda
Indeks yang baru diperbarui tetap hanya mencakup direktori yang memang diindeks. Sebaliknya, jalur yang dulu tercatat dapat sudah berubah. -e menguji entri yang ditemukan, bukan menelusuri area yang tidak ada dalam indeks. Keberadaan yang diperiksa juga tidak menjamin file masih sama ketika tindakan berikutnya dijalankan.
Visibilitas nama tidak sama dengan izin membaca isi
Penyaringan jalur mengikuti kebijakan implementasi serta cara basis data dibuat dan dilindungi. Plocate dapat memeriksa akses direktori induk sebelum melaporkan nama; basis data dengan kebijakan lain tidak boleh diasumsikan mempunyai perlindungan yang sama. Nama yang tampil tidak memberikan hak membaca isi file. Jangan mengubah izin basis data atau menonaktifkan pemeriksaan visibilitas hanya untuk memperbanyak hasil pencarian.
Periksa beberapa pola dan status keluar
Dengan beberapa pola, plocate mencari jalur yang memenuhi semuanya. GNU locate secara bawaan menerima jalur yang cocok dengan setidaknya satu pola, kecuali -A dipakai. Periksa aturan ini sebelum menggabungkan kata pencarian. Pada plocate, status 1 dapat berarti tidak ada kecocokan atau terjadi kesalahan; baca pesan kesalahan, bukan hanya status angkanya.
Untuk meneruskan nama jalur ke program lain, keluaran baris biasa tidak cukup bagi semua nama file. Pilih -0 dengan penerima yang mendukung NUL, yaitu byte bernilai nol, bila implementasi mendukungnya. Daftar hasil tidak boleh langsung dianggap sebagai perintah shell.
FAQ
Mengapa perintah locate tidak tersedia?
Sebagian distribusi tidak memasangnya secara bawaan. Periksa dokumentasi dan pengelola paket distribusi untuk implementasi yang didukung, seperti plocate; nama paket dan perintah dapat berbeda.
Mengapa file yang baru dibuat tidak ditemukan?
File mungkin belum masuk indeks, berada pada cakupan yang dikecualikan, tidak terlihat oleh pengguna, atau tidak cocok dengan pola. Untuk pemeriksaan langsung pada direktori tertentu, gunakan find.
Apakah updatedb selalu memerlukan sudo?
Basis data sistem biasanya dikelola dengan hak administrator, tetapi sebagian implementasi mendukung basis data pengguna. Ikuti opsi implementasi tersebut dan lindungi berkas indeks karena ia memuat nama jalur.
Mengapa jalur lama masih muncul setelah file dipindah atau dihapus?
Indeks mungkin belum mencerminkan perubahan. -e dapat menyaring jalur yang tidak lagi ada, sedangkan pembaruan indeks yang berhasil diperlukan untuk mencatat jalur baru dalam cakupan yang diindeks.




