Jaký je základní rozdíl mezi locate
whereis
a which
příkaz.
Základní rozdíl, který jsem pozoroval, je ten locate
vyhledá všechny související názvy souborů v celém souborovém systému, zatímco whereis
a which
příkazy uvádějí pouze umístění (systémová/místní adresa souboru) nainstalované aplikace. Jak přesné je mé pozorování?
Jak jsou tyto příkazy interně implementovány. Proč locate
pracovat tak rychle ve srovnání s pomlčkovým vyhledáváním, zatímco locate
musí hledat konkrétní název souboru odpovídající cílovému řetězci v celé hierarchii souborového systému?
Přijatá odpověď:
which
najde binární spustitelný soubor programu (pokud je ve vaší PATH). man which
vysvětluje jasněji:
který vrací cesty k souborům (nebo odkazům), které by byly
spuštěny v aktuálním prostředí, kdyby jeho argumenty byly zadány jako příkazy v shellu striktně v souladu s POSIX. Provádí to hledáním spustitelných souborů v PATH, které odpovídají názvům argumentů. Nenásleduje symbolické odkazy.
whereis
najde binární soubory, zdrojové soubory a soubory manuálové stránky programu. Například
$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz
Další podrobnosti můžete získat předáním výstupu těchto příkazů jako argumentů do ls -l
nebo file
$ 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
locate
skutečně najde všechny soubory, které mají kdekoli ve svých cestách zadaný vzor. Můžete mu říci, aby našel pouze soubory a adresáře, jejichž názvy (spíše než úplné cesty) zahrňte vzor pomocí -b
možnost, což je obvykle to, co chcete, a poskytuje méně nepraktický seznam.
locate
je rychlý, protože používá binární databázi, která se pravidelně aktualizuje (jednou denně, pomocí cron
). Můžete jej aktualizovat sami, abyste zajistili nalezení nedávno přidaných souborů spuštěním sudo updatedb
Ještě jedna věc o locate
– nezáleží na tom, zda soubory stále existují nebo ne, takže abyste nenašli nedávno smazané soubory, použijte -e
. Často také používám potrubí na less
protože seznam může být dlouhý. Obvykle to dělám:
sudo updatedb && locate -b -e gimp | less
Zde je vysvětleno, jak Unity's dash funguje – používá Zeitgeist k indexování systémových souborů a učení se ze vzorců používání a umožňuje jiným aplikacím využívat tato data, takže dělá mnohem více práce než locate
.