Yanıtlar:
man(kullanıcı değil komut) bir yardım uygulamasıdır. Uygulamalar paketlerinde man sayfaları sağlar ancak mannerede olduklarını ve ne gibi yardımlar sağladığını bilmeleri gerekir. İşleri hızlandırmak için - manyazarken tüm dosya sisteminde arama yapmaz man <command>- bu kılavuz sayfaları bir komutla bir veritabanına indekslenir mandb.
Ubuntu'da mandbdizinleri bir GNU gdbm veritabanında /var/cache/man/index.db(ve aynı dizinde birkaç dile özgü sürümde) depolar . Bu, memcache'ye benzemeyen bir anahtar-değer karma veri tabanı veya benzer fikirler üzerinde yüzlerce başka uygulamadır. İkili, hafif ve hızlı. Sonunda onunla nasıl oynanacağına dair bir örnek vereceğim.
Bu endekslemenin Ubuntu'da günlük olarak yapılması planlanıyor /etc/cron.daily/man-db. Komut dosyasının tamamı kök olarak çalışıyor ve önce biraz temizlik yapıyor, ancak sonunda kullanıcı mandbolarak çalıştırıldığını görüyoruz man:
# --pidfile /dev/null so it always starts; mandb isn't really a daemon,
# but we want to start it like one.
start-stop-daemon --start --pidfile /dev/null \
--startas /usr/bin/mandb --oknodo --chuid man \
$iosched_idle \
-- --no-purge --quiet
Değişen grup değil, bu yüzden tüm grup sahipliklerinin /var/cache/manhala kökleri var.
Peki neden mandbfarklı bir kullanıcı olarak çalışıyor? Belki de olduğu gibi çalışabilir ( rootancak) , çeşitli kaynaklardan gelen girdiyi işliyor (bakın manpath). Kendi kullanıcısı olarak çalıştırmak, sistemi fışkırtma sürecinden - daha da kötüsü - hatalı biçimlendirilmiş, bozuk ya da kötü niyetli adam sayfalarından yararlanarak izole eder.
Olabilecek en kötü şey yalnızca mansayfa dizinini etkiler . Boo hoo. Bunu şöyle bir şeyle onaylayabilirsiniz:
sudo -u man find / -writable 2>/dev/null
Ve bu yaklaşımı, herhangi bir kullanıcının sistemde ne kadar zarar görebileceğini görmek için kullanabilirsiniz. Dosya izinlerinizi denetlemek iyi bir fikirdir (örneğin herhangi bir kullanıcının tüm müzik koleksiyonumu silebileceğini öğrendim).
İle veritabanına göz atabilirsiniz accessdb. İşte birkaç rastgele kayıt:
$ accessdb | shuf -n3
fpurge -> "- 3 3 1380819168 A - - gz purge a stream"
fcgetlangs -> "FcGetLangs 3 3 1402007131 A - - gz Get list of languages"
ipython -> "- 1 1 1393443907 A - - gz Tools for Interactive Computing in Python."
Yukarıdan tamamen açık olmasa da, aslında sekme ile ayrılmış alanlar var:
<name> -> <ext> <sec> <mtime> <ID> <ref> <comp> <whatis>
Fiili alan içerikleri hakkında daha fazla bilgiyi teknik kılavuzda okuyabilirsiniz .