Ö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-dseçeneğine izin verilir. Eklenen her-dseç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/mydbiçindefoodizesini arayacak ve ardından/var/db/locate.databaseiçinde arayacaktır.$ locate -d $HOME/lib/mydb::/cdrom/locate.database fooönce
$HOME/lib/mydbiçindefoodizesini arayacak, ardından/var/db/locate.databaseiçinde ve son olarak/cdrom/locate.databaseiçinde arayacaktır.$ locate -d db1 -d db2 -d db3 şablonşununla aynıdır:
$ locate -d db1:db2:db3 şablonveya
$ locate -d db1:db2 -d db3 şablonVeritabanı 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 - şablonBu, 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 yerinemmap(2)kullanır. Bu varsayılan davranıştır ve çoğu durumda daha hızlıdır.-s:mmap(2)yerinestdio(3)kütüphanesini kullanır.
Ortam
LOCATE_PATH: Ayarlanmışsa ve boş değilselocateveritabanının yolu;-dseçeneği belirtilmişse yoksayılır.
Dosyalar
/var/db/locate.database:locateveritabanı./usr/libexec/locate.updatedb:locateveritabanı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
locateprogramı, 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.plistgörevi tarafından haftada yalnızca bir kez yeniden oluşturulur. Daha geçici nitelikteki dosyaları bulmak için find(1) komutunu kullanın.locateveritabanı tipik olaraknobodykullanıcısı tarafından oluşturulur velocate.updatedb(8)yardımcı programı;nobodykullanıcısı,nobodygrubu veya herkes (world) tarafından okunamayan dizinleri atlar. Örneğin,HOMEdizininiz herkes tarafından okunabilir değilse, dosyalarınızın hiçbirisi veritabanında yer almaz.locateveritabanı 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. Mevcutlocateuygulaması, 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ş birlocateveritabanını okuyabilirsiniz.locateyardımcı programı çoklu baytlık (multibyte) karakterleri tanımaz.