Portál AbcLinuxu, 25. dubna 2024 07:19
Dneska to bude stručné, ale zato apolitické. Příkaz locate
je jeden z klasických unixových příkazů a slouží k vyhledávání souborů na disku.
Je mnohem rychlejší než find
, protože pracuje nad svým indexem místo toho, aby postupně procházel všechny soubory a složky na disku.
Takže zadáme třeba locate wgetrc
a vzápětí nám to najde /etc/wgetrc
. To je skvělé, ne?
Taková jednoduchá indexace a vyhledávání se někdy hodí. Ale taky nám může pěkně zavařit. A to doslova.
Nedávno mi začal vytuhávat jeden server. Nejdřív jsem si říkal, že mi to asi nějaká verběž DoSuje.
Ale pak jsem zjistil, že se ten systém podělal sám od sebe. Bohužel i to se v GNU/Linuxu někdy stává.
Na tom serveru mám spoustu souborů (neptejte se proč) a taky spoustu snapshotů (tím se počet souborů ještě násobí, takže jich je ve výsledku fakt hodně).
Systém docela dlouho běžel, a pak se zadřel. Jednoduše proto, že došlo místo na disku.
Pomocí du -sh
jsem po pár krocích nalezl adresář /var/lib/mlocate/
, který měl desítky GB a vyplnil veškeré volné místo, takže se většina služeb zastavila a ani se nic nemohlo logovat. Ano, měl bych monitorovat volné místo na discích... třeba Zabbixem. Píšu si do TODO.
Příkaz locate
resp. balíček mlocate
je ve výchozím stavu instalován a pravidelně aktualizuje svůj index.
Většinou o tom ani nevíte a nijak to neškodí. Ale je to past.
Na tomhle systému jsem nikdy locate
nepotřeboval, indexace probíhala úplně zbytečně, což vedlo k výkonnostním problémům a nakonec k zadření serveru a výpadku služby.
Pokud tedy locate
vyloženě nepotřebujete, tak doporučuji preventivně udělat:
apt remove mlocate
Případně můžete vytvořit nějaký menší oddíl a připojit ho do /var/lib/mlocate/
. Pokud tam pak dojde místo, tak se zastaví jen indexace a nepožere vám to všechno volné místo, které potřebujete pro mnohem užitečnější služby a logy.
Tiskni Sdílej:
suggested
?
Pomocí du -sh jsem po pár krocích nalezl
ncdu
Případně můžete vytvořit nějaký menší oddíl a připojit ho do /var/lib/mlocate/.Správný způsob je v
/etc/updatedb.conf
nastavit adresáře, které se nemají indexovat - adresáře s velkým množstvím souborů, snapshoty…
locate -i nejakynazev
U snapshot, mails a jiných private souborů apod bych čekal, že hlavně nebudou přístupné, mlocate by se k nim přirozeně neměl vůbec dostat. Ale to je v článku utajeno.Update indexu běží pod rootem a hledání pak vlastně taky, protože ta binárka má SUID bit. Přijde mi to navíc jako zbytečné bezpečnostní riziko (jen kvůli hledání, které stejně většinou nepoužívám).
ncduTo si při plném disku těžko nainstaluji. Ten systém byl sotva použitelný, nefungovalo ani napovídání v Bashi
Správný způsob je v /etc/updatedb.conf nastavit adresáře, které se nemají indexovat - adresáře s velkým množstvím souborů, snapshoty…Dík, tohle je dobrá připomínka. Hledal jsem konfigurák s názvem locate nebo mlocate, což tam nebylo a neměl jsem chuť pátrat dál, tak jsem ten balíček prostě odinstaloval, protože ho stejně nepoužívám.
alias najdi="find | grep -i"Orientacne vzdy vim kde hledat tak i toto je rychly.
du -hc --max-depth=3 | sort -rh | head -20
du -hc --max-depth=3 | sort -rh | head -20
ncdu
mlocate has been replaced with plocate, which should result in even faster lookups with Catfish.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.