Locate / whereis / which arasındaki fark nedir


13

Arasındaki temel fark nedir locate whereisve whichkomut.

Gözlemlediğim temel fark locate, tüm dosya sistemindeki tüm ilgili dosya adlarını bulurken whereis, whichkomutlar yalnızca yüklü uygulamanın konumunu (dosyanın sistem / yerel adresini) verir. Gözlemim ne kadar doğru?

Bu komutlar dahili olarak nasıl uygulanır? Neden locateise, o kadar hızlı tire arama kıyasla çalışmalarını locatetüm dosya sistemi hiyerarşisinde hedef dizesini eşleşen belirli bir dosya adı aramak zorunda?


2
ve ne olacak type? : P
jamesmstone

@jamesmstone ne demek istiyorsun type, lütfen detaylandırın
Chinmaya B

2
Üzgünüm, sadece sorunuzu eklemeye çalışıyordum. type(gözlerime göre) bahsettiklerinize benzer bir şey yapan başka bir emirdir.
jamesmstone

@jamesmstone Sistemimde çalışan herhangi bir tür komut olduğunu düşünmüyorum. typeKomuta ilişkin el kitabını veya bilgi sayfasını bulamıyorum . Denedim man typeve info type.
Chinmaya B

Hmm Acaba neden ... Bash kullanıyor musunuz?
jamesmstone

Yanıtlar:


17

whichProgramın ikili yürütülebilir dosyasını bulur (eğer PATH'nizdeyse). man whichdaha açık bir şekilde açıklar:

geçerli ortamda yürütülecek dosyaların (veya bağlantıların) yol adlarını döndüren, argümanları tam olarak POSIX uyumlu bir kabukta komutlar olarak verildi. Bunu, PATH'yi bağımsız değişkenlerin adlarıyla eşleşen yürütülebilir dosyalar arayarak yapar. Sembolik bağlantıları takip etmez.

whereisbir programın ikili dosyasını, kaynağını ve kılavuz sayfası dosyalarını bulur. Örneğin

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

Bu komutların çıktısını argüman olarak ls -lveyafile

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locategerçekten de patikalarının yollarının herhangi bir yerinde belirtilmiş olan tüm dosyaları bulur. Yalnızca adları (tam yollar yerine) -b, genellikle istediğiniz şey olan seçeneğe sahip deseni içeren ve daha az kullanışsız bir liste veren dosyaları ve dizinleri bulmasını söyleyebilirsiniz .

locatehızlıdır, çünkü periyodik olarak güncellenen bir ikili veritabanı kullanır (günde bir kez, tarafından cron). Son eklenen dosyaların çalışmasını sağlayarak kendiniz güncelleyebilirsinizsudo updatedb

Bir şey daha var locate- dosyaların hala var olup olmadığını umursamıyor, bu nedenle son silinen dosyaları bulmaktan kaçınmak için kullanın -e. lessListe uzun olabileceğinden sık sık borularım . Genellikle yaparım:

sudo updatedb && locate -b -e gimp | less

Unity'nin çizgisinin nasıl çalıştığı burada açıklanmaktadır - Zeitgeist'i sistem dosyalarını endekslemek ve kullanım kalıplarından öğrenmek için kullanır ve diğer uygulamaların bu verileri kullanmasını sağlar, bu yüzden daha çok iş yapar locate.


tire karşılaştırması yapabilir ve komut performansını ve uygulama ayrıntılarını bulabilir misiniz? İkili veritabanının güncellenmesi, sistemde yeni bir dosya oluşturulduktan sonra yapılmalıdır, öyle değil mi? Bu süre süresiz olarak doğru olacak mı yoksa sistem süreçleri tarafından mı yönetilecek?
Chinmaya B

2
@Creator veritabanını otomatik olarak güncelleyerek günde bir kez cron tarafından yapılır. Dosyaları hemen bulamadığınız bir şeyi yüklediğinizde kontrol edebilirsiniz locate. Çizgi tamamen farklı bir dizin kullanıyor - daha yavaş çünkü daha yavaş (cevabımı düzenledim)
Zanna

1
Özetle özetlemek, hangisinin nerede veya nerede olduğundan daha yararlı ve daha güçlüdür, ancak çizgi daha güçlüdür ve makine öğrenimini uygular. ve teşekkür için sudo updatedbsenin komut çok yararlı olduğunu bilmiyordum rağmen düzenli -e kullandım.
Chinmaya B

@Creator yep you better phrased it better :) mutlu ki yardımcı oldu
Zanna

0

basitçe

$ which samba

hangi komut PATH ayarlarında listelenen programların listesini arar

$ whereis samba

whereis komutu, PATH ayarında bulunmayan programları da arar

$locate samba

Ayrıca dosyaları dosya adına göre bulur, ancak dizin yapısının kendisini aramaz, sadece updatedb tarafından hazırlanan bir veritabanını arar. Bu nedenle yer tespiti bulmaktan daha hızlıdır ancak daha az doğrudur. Örnekler:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.