PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfrage zu su, Problem mit gpg



an0nym
04.11.02, 19:04
Hallo,

ich hab mal ein paar Fragen betreffs su, und der PATH Variable:

Ich hatte bis heute gpg 1.0.7 und hab jetzt die 1.2.1 kompiliert. Als ich als normaler User gpg ausführte um nach dem
kompilieren zu überprüfen ob tatsächlich die alten binaries von den neuen überschrieben wurden, klappte alles.
Dann hab ich per su (!) zu user root gewechselt. Hier war aber immer noch die alte binary vorhanden.
Bei einer genaueren Suche viel mir auf das die alten binaries in /usr/bin, die neuen aber in /usr/local/bin liegen.

Wenn ich mich nicht per su als root einlogge, sondern mich direkt bei der Anmeldung als root einlogge, dann ist das neue
gpg verfügbar.

Ein Blick auf die Path Variablen sagt auch warum:

als root über Anmeldung

freshmeat:/# echo $PATH
/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/local/kde/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome2/bin:/opt/gnome/bin:/opt/kde3/bin:/opt/kde2/bin:/usr/lib/java/jre/bin:/opt/gnome/bin

als root über su

freshmeat:/ # echo $PATH
/usr/sbin:/bin:/usr/bin:/sbin:/usr/X11R6/bin


1. Wieso sind die PATH Variablen so verschieden für ein und denselben User?
2. Nimmt die bash automatisch die aktuellere Version einer binary? Oder woher weiß die bash im Fall "root über Anmeldung" das sie
die neue binary aus der /usr/local/bin nehmen soll?
3. Wie aktualisier ich den eigentlich die alten Binaries? Ich will sie nicht alle mühselig per Hand löschen ...

cirad
04.11.02, 22:54
> 1. Wieso sind die PATH Variablen so verschieden für ein und denselben User?

Vermutlich, weil du mit su zu einer Non-Login-Shell kommst und über das "normale" Login zu einer Login-Shell. Dementsprechend unterschiedliche Configs werden benutzt. Die beiden wichtigsten sind wohl ~/.bash_profile für eine Login-Shell und ~/.bashrc für eine Non-Login-Shell.

In der Regel will man aber ein und die selbe Config haben, daher richtet man sich meist seine ~/.bashrc vernünftig ein und in der ~/.bash_profile steht nichts weiter als:
[ -f ~/.bashrc ] && . ~/.bashrc
(gucke ob ~/.bashrc da ist und wenn sie das ist, führe sie aus)
Damit werden auch für Login-Shells automatisch die Einstellung von Non-Login-Shells übernommen.

Mit "su -" anstatt "su" solltest du übrigens ebenfalls eine Login-Shell erhalten und dann sollte es genauso wie beim normalen einloggen funktionieren.


> 2. Nimmt die bash automatisch die aktuellere Version einer binary? Oder woher weiß die bash im Fall
> "root über Anmeldung" das sie die neue binary aus der /usr/local/bin nehmen soll?

Es wird grundsätzlich immer die Binary genommen, die zuerst im Pfad gefunden wird. Würdest du /usr/local/bin ans Ende von PATH setzen, würde er dort auch zuletzt gucken. Findet er vorher eine Binary, guckt er in /usr/local/bin erst gar nicht nach.


> 3. Wie aktualisier ich den eigentlich die alten Binaries? Ich will sie nicht alle mühselig per Hand löschen ...

Komme auf die Distro drauf an. Bei Debian und RPM-basierte Distros (SuSE/Mandrake/Redhat) hast du ja deinen Paketmanager, mit dem du Pakete updaten kannst (deb und rpm).

an0nym
05.11.02, 00:06
Ah! Ok. Recht vielen dank!
Zu Punkt 3.

Eigentlich müsste es doch reichen wenn ich anhander der Binaries ein rpm erstelle und das dann zum updaten
nehme. oder?