Diese Seite ist statisches HTML und am besten betrachtet mit Java-Script eingeschaltet!

locate mit findutils richtig konfigurieren

 ·  ☕ 2 Min. Lesen  ·  🤖 SWU

In den aktuellen findutils fehlt /etc/updatedb, was tun?

In früheren Linuxen hatte ich das Paket mlocate installiert. Dort konnte man, wenn ich mich recht erinnere, in der /etc/updatedb.conf regeln, dass für cron und einen manuellen Aufruf von “sudo updatedb” festgelegt werden konnte, welche Verzeichnisse ausgelassen werden. Und das wollte ich auf einem neuen Linux nun mit dem Paket locate von findutils auch haben.

Wie wird locate und updatedb von findutils konfiguriert?

Nun, wie ich festgestellt habe, kann man updatedb zwar für cron konfigurieren, vermutlich weil es nicht interaktiv läuft. Wenn man in der Konfigurationsdatei von Cron für locate (eigentlich updatedeb) das Verzeichnis /home/user/geheim unberücksichtigt lässt, funktioniert das für den Cron Aufruf von updatedb, ein manueller Aufruf von “sudo updatedb” aber berücksichtigt das nicht. Selbst eine manuell angelegte Datei /etc/updatedb.conf bleibt unberücksichtigt.

Kann man etwas tun, um die gewünschte Situation herzustellen?

Man kann das natürlich einrichten. Das Werkzeug updateb berücksichgt zwar keine Konfigurationsdatei, hat aber Optionen die ausgewertet werden und man kann durch Umgebungsvariablen Optionen im Voraus festlegen. Umgebungsvariablen für Benutzer werden in Linux durch Konfigurationsdateien der Shell festgelegt. Meine Shell ist die Bash, dass betriff also ~/.bashrc - hier kann ich die Umgebungsvariable PRUNEPATHS für updatedb festlegten. Ja, aber meine Benutzer-Umgebung ist doch durch sudo gar nicht verfügbar, oder? Ja, das stimmt, sudo hat aber eine Option, die Benutzer-Umgebungvariablen alle oder eine Liste davon mitzunehmen. Ich lege also einen Alias an für sudo, damit meine neue Umgebungsvariable mitgenommen wird. Das funktioniert auch für Linuxe, die gar keinen root Benutzer haben!

Wie sieht das im Detail aus?

1
2
3
# soure /etc/updatedb.conf and export it
. /etc/updatedb.conf
export PRUNEPATHS
1
alias sudo="sudo --preserve-env=PRUNEPATHS"

Inhalt /etc/updatedb.findutils.cron.local

PRUNEPATHS="/home/user/geheim"

Und dann legen wir einen symbolischen Verweis an:

cd /etc
ln -s updatedb.findutils.cron.local updatedb.conf

Fazit

In einer neuen Shell wird die ~/.bashrc ausgewertet und wir erhalten die Umgebungsvariable PRUNEPATHS. Deren Inhalt durch die Datei /etc/updatedb.findutils.cron.local bestimmt, worauf /etc/updatedb.conf zeigt. Und es wird die Datei ~/.bash_aliases ausgewertet, wodurch die Eingabe von sudo durch sudo –preserve-env=PRUNEPATHS ersetzt wird - dadurch wird die Umgebungsvariable PRUNEPATHS in der sudo Umgebung verfügbar und wird berücksichtigt.

Ziel erreicht!

Ergebnis kontrollieren

Vergleiche alias sudo gegen sudo aus dem Pfad
sudo env
\sudo env


wüsti
Author
SWU
human