/usr/local ist für die Installation von lokal vom Administrator des Computers kompilierten Programmen gedacht. Einfache Programme gehen einfach in/usr/local/bin und werden von dort aus ausgeführt, indem/usr/local/bin in die Umgebungsvariable PATH
gesetzt wird. Dadurch kann der Administrator den Benutzern Zugriff auf zusätzliche Befehle geben, die nicht im Betriebssystem enthalten sind. Es gibt nichts, was root daran hindert, neue Dinge in/usr/bin zu installieren, aber die Konvention ist, dass/usr/bin von den Packaging-Tools des OS-Distributors verwaltet wird, und das Trennen von lokalem Material macht die Dinge etwas weniger verwirrend.
Manchmal benötigt ein lokales Programm eine Bibliothek, die nicht vom Betriebssystem-Distributor bereitgestellt wird, und die Bibliothek geht in/usr/local/lib und alles funktioniert.
Wenn es einen Versionskonflikt gibt - das Betriebssystem libz.so der Version X, aber ein lokales Programm benötigt libz.so Version X + 1 oder benötigt libz.so mit einer speziellen Option kompiliert werden - Dinge werden kompliziert. Die Installation der neueren Bibliothek in/usr/local/lib ist wahrscheinlich zunächst in Ordnung.
Jedes Programm sucht nach Bibliotheken, die auf /etc/ld.so.conf
basieren, und wenn/usr/lib dort Priorität erhält, finden die/usr/local-Programme nicht die neuere Bibliothek, die sie benötigen. So erhält/usr/local/lib normalerweise Priorität. Ältere Programme, die eine neuere Bibliothek finden, stellen normalerweise kein Problem dar, da die Bibliotheken abwärtskompatibel sind.
Jahre später, nach ein paar OS-Upgrades, ist die Bibliothek in/usr/lib jetzt Version X + 2 und die in/usr/local/lib ist immer noch Version X + 1, und jetzt Programme von/usr/bin lädt die alte/usr/local/lib-Version und benimmt sich schlecht. Dies kann möglicherweise durch Entfernen der alten Bibliothek behoben werden. Das Programm/usr/local/bin, das die Version X + 1 benötigt, findet die Version X + 2 in/usr/lib und funktioniert gut. Aber nur, wenn die Notwendigkeit einer neueren Version der Grund für die lokale Installation von Version X + 1 war.
Um nach möglichen Problemen zu suchen, bevor Sie das Entfernen durchführen, suchen Sie nach etwas unter/usr/local, das libz verwendet.
ldd /usr/local/bin/* /usr/local/sbin/* | less +/libz
Wenn Sie etwas finden, die Referenzen libz versuchen, es mit LD_LIBRARY_PATH=/usr/lib
laufen, um sicherzustellen, es funktioniert immer noch.Unter der Annahme, nichts bricht, entfernen Sie die lokalen libz Dateien (indem sie auf einen Backup-Speicherort zu bewegen, so dass Sie dies rückgängig machen können, wenn Sie müssen)
mkdir /root/local-libz-backup
mv /usr/local/lib/libz* /root/local-libz-backup
ldconfig
Warum haben Sie eine libz in/usr/local? Ist es vielleicht ein veraltetes Relikt, das Sie sicher entfernen können? –
Hm. Leider weiß ich nicht viel über Linux. Libs auf '/ usr/local' haben eine bestimmte Bedeutung? Es ist immer ein "Relikt", wenn es dort sitzt? – dmmd
Nun/usr/local bedeutet, dass es lokal kompiliert wurde, nicht von der Betriebssystemverteilung geliefert. Manchmal tun Leute das, weil sie eine neuere Version benötigen als das, was mit der Distribution kam, dann wird die Distribution auf etwas Neueres aktualisiert und das in/usr/local wird vergessen. Das war nur eine Vermutung. Wenn Sie zlib nicht selbst kompiliert haben, hat jemand anderes mit Root-Zugriff auf die Maschine das getan. Fragen Sie sie, warum ... und versuchen Sie vielleicht, LD_LIBRARY_PATH =/usr/lib git --version zu überschreiben, bis Sie eine Antwort erhalten. –