Oli'yi sevdiğim kadar (bu çok fazla!) Komutada onunla aynı fikirde değilim find
. Beğenmedim
find
komut üç dakikadan fazla sürüyor
Örneğin bu basit komutu ele alalım:
$ time find / -type f -name "mail-transport-agent.target"
find: ‘/lost+found’: Permission denied
find: ‘/etc/ssmtp’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
(... SNIP ...)
find: ‘/run/user/997’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied
real 3m40.589s
user 0m4.156s
sys 0m8.874s
Bu devraldı üç dakika boyunca find
gelen her şeyi başlangıç aramak için /
. Varsayılan olarak, hata iletilerinin bir kısmı görünür ve aradığınızı bulmak için aralarında arama yapmanız gerekir. Yine de 53 saatgrep
süren bir dizgede tüm sürücüyü aramaktan daha iyidir : bir dizgede tüm dosyaları greplemek uzun zaman alır
Daha iyi çalışmasını sağlamak için find komutunun parametrelerini öğrenebileceğimi biliyorum, ancak buradaki mesele, çalışması için gereken zaman miktarı.
locate
komut bir saniyeden daha az sürer
Şimdi kullanalım locate
:
$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target
real 0m0.816s
user 0m0.792s
sys 0m0.024s
Bulun komutu, bir saniyeden daha kısa sürer!
updatedb
yalnızca varsayılan olarak günde bir kez çalıştır
Konum bulma veritabanınıupdatedb
güncelleyen komutun varsayılan olarak yalnızca günde bir kez çalıştırıldığı doğrudur . Kullanarak yeni eklenen dosyaları aramadan önce manuel olarak çalıştırabilirsiniz:
$ time sudo updatedb
real 0m3.460s
user 0m0.503s
sys 0m1.167s
Bu işlem 3 saniye sürecek olsa da, find
komutun 3+ dakikasına kıyasla küçük .
Satırıma sudo crontab -e
en alt çizgiyi ekleyecek şekilde güncelledim :
# m h dom mon dow command
0 0 1 * * /bin/journalctl --vacuum-size=200M
*/5 * * * * /usr/bin/updatedb
Şimdi her beş dakikada updatedb
bir çalıştırılıyor ve locate
komutlar veritabanı neredeyse her zaman güncel.
Fakat hiçbir özellik yok mu?
Sen boru can locate
diğer komutlara çıktı. Örneğin, dosya özelliklerini kullanmak istiyorsanız:
$ locate mail-transport-agent.target | xargs stat
File: '/lib/systemd/system/mail-transport-agent.target'
Size: 473 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 667460 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 18:11:55.091173104 -0600
Modify: 2017-10-27 04:11:45.000000000 -0600
Change: 2017-10-28 07:18:24.860065653 -0600
Birth: -
özet
Kullanım hızını ve kolaylığını göstermek için bu cevabı gönderdim locate
. Diğerleri tarafından gösterilen bazı kısa açıklamaların bazılarını ele almaya çalıştım.
find
Komut dosyaları bulabilmek için tüm dizin yapısını çapraz gerekiyor. locate
Komut kıyasla Bu yıldırım hızıyla verir, bu kendi veritabanına sahiptir.