man/files
man · Dosyalar

$ locate

Bölüm 1 · Dosyalar

dosya adlarını hızlı bir şekilde bulur

Özet

locate [-0Scims] [-l sınır] [-d veritabanı] şablon ...

Açıklama

locate programı, belirtilen şablonla eşleşen tüm yol adları için bir veritabanını arar. Veritabanı periyodik olarak (genellikle haftalık veya günlük) yeniden hesaplanır ve halka açık olarak erişilebilen tüm dosyaların yol adlarını içerir.

Kabuk genel arama (globbing) ve tırnak içine alma karakterleri (*, ?, \, [ ve ]) şablonda kullanılabilir, ancak kabuktan kaçırılmaları (escaped) gerekecektir. Herhangi bir karakterin önüne ters eğik çizgi (\) getirilmesi, sahip olabileceği özel anlamı ortadan kaldırır. Eşleşme, eğik çizgiler (/) dahil olmak üzere hiçbir karakterin açıkça eşleşmesi gerekmemesi yönüyle farklılık gösterir.

Özel bir durum olarak, genel arama karakteri içermeyen bir şablon (foo), sanki *foo* şeklindeymiş gibi eşleştirilir.

Geçmişte locate yalnızca 32 ile 127 arasındaki karakterleri saklardı. Mevcut uygulama, satır sonu (\n) ve NUL (\0) hariç tüm karakterleri saklar. 8 bitlik karakter desteği, düz ASCII dosya adları için fazladan yer harcamaz. 32'den küçük veya 127'den büyük karakterler 2 baytta saklanır.

Aşağıdaki seçenekler mevcuttur:

  • -0: Yol adlarını varsayılan NL (satır sonu, karakter kodu 10) yerine bir ASCII NUL karakteri (karakter kodu 0) ile ayrılmış olarak yazdırır.

  • -S: Veritabanı hakkında bazı istatistikleri yazdırır ve çıkar.

  • -c: Normal çıktıyı bastırır; bunun yerine eşleşen dosya adlarının sayısını yazdırır.

  • -d veritabanı: Varsayılan dosya adı veritabanı yerine belirtilen veritabanında arama yapar. Birden fazla -d seçeneğine izin verilir. Eklenen her -d seçeneği, belirtilen veritabanını aranacak veritabanları listesine ekler.

    veritabanı seçeneği, iki nokta üst üste ile ayrılmış bir veritabanı listesi olabilir. Tek bir iki nokta üst üste işareti, varsayılan veritabanına bir referanstır.

    $ locate -d $HOME/lib/mydb: foo

    önce $HOME/lib/mydb içinde foo dizesini arayacak ve ardından /var/db/locate.database içinde arayacaktır.

    $ locate -d $HOME/lib/mydb::/cdrom/locate.database foo

    önce $HOME/lib/mydb içinde foo dizesini arayacak, ardından /var/db/locate.database içinde ve son olarak /cdrom/locate.database içinde arayacaktır.

    $ locate -d db1 -d db2 -d db3 şablon

    şununla aynıdır:

    $ locate -d db1:db2:db3 şablon

    veya

    $ locate -d db1:db2 -d db3 şablon

    Veritabanı adı olarak - verilirse, bunun yerine standart girdi okunacaktır. Örneğin, veritabanınızı sıkıştırabilir ve şu komutu kullanabilirsiniz:

    $ zcat database.gz | locate -d - şablon

    Bu, hızlı bir CPU'ya, az RAM'e ve yavaş G/Ç'ye (I/O) sahip makinelerde yararlı olabilir. Not: Standart girdi için yalnızca tek bir şablon kullanabilirsiniz.

  • -i: Hem şablondaki hem de veritabanındaki büyük/küçük harf ayrımlarını yoksayar.

  • -l sayı: Çıktıyı belirtilen sayıdaki dosya adıyla sınırlandırır ve çıkar.

  • -m: stdio(3) kütüphanesi yerine mmap(2) kullanır. Bu varsayılan davranıştır ve çoğu durumda daha hızlıdır.

  • -s: mmap(2) yerine stdio(3) kütüphanesini kullanır.

Ortam

  • LOCATE_PATH: Ayarlanmışsa ve boş değilse locate veritabanının yolu; -d seçeneği belirtilmişse yoksayılır.

Dosyalar

  • /var/db/locate.database: locate veritabanı.
  • /usr/libexec/locate.updatedb: locate veritabanını güncellemek için betik.
  • /System/Library/LaunchDaemons/com.apple.locate.plist: Veritabanının periyodik olarak yeniden oluşturulmasını başlatan macOS launchd görevi.

Ayrıca Bakınız

find(1), whereis(1), which(1), fnmatch(3), locate.updatedb(8)

Woods, James A., “Finding Files Fast”, ;login, 8:1, ss. 8-10, 1983.

Geçmiş

locate komutu ilk olarak 4.4BSD'de göründü. Birçok yeni özellik FreeBSD 2.2'de eklendi.

Hatalar

  • locate programı, mevcut olan bazı dosyaları listelemeyebilir veya sistemden kaldırılmış dosyaları listeleyebilir. Bunun nedeni, locate'in yalnızca veritabanında bulunan dosyaları bildirmesidir; bu veritabanı genellikle /System/Library/LaunchDaemons/com.apple.locate.plist görevi tarafından haftada yalnızca bir kez yeniden oluşturulur. Daha geçici nitelikteki dosyaları bulmak için find(1) komutunu kullanın.

  • locate veritabanı tipik olarak nobody kullanıcısı tarafından oluşturulur ve locate.updatedb(8) yardımcı programı; nobody kullanıcısı, nobody grubu veya herkes (world) tarafından okunamayan dizinleri atlar. Örneğin, HOME dizininiz herkes tarafından okunabilir değilse, dosyalarınızın hiçbirisi veritabanında yer almaz.

  • locate veritabanı bayt sırasından (byte order) bağımsız değildir. Veritabanlarını farklı bayt sırasına sahip makineler arasında paylaşmak mümkün değildir. Mevcut locate uygulaması, her iki mimari de aynı tam sayı (integer) boyutunu kullanıyorsa, ana makine bayt sırasındaki (host byte order) veya ağ bayt sırasındaki (network byte order) veritabanlarını anlar. Yani bir FreeBSD/i386 makinesinde (little endian), SunOS/sparc makinesinde (big endian) oluşturulmuş bir locate veritabanını okuyabilirsiniz.

  • locate yardımcı programı çoklu baytlık (multibyte) karakterleri tanımaz.