So fügen Sie einen Pfad zum System $ PATH für die Nicht-Login-Shell aller Benutzer für Debian hinzu

7

Nach der Installation einiger Programme /opt/xxx/binmöchte ich das /opt/xxx/binSystem $PATHfür die Nicht-Login-Shell aller Benutzer hinzufügen . Was sollte ich tun?

Yang Bo
quelle

Antworten:

8

Auf Debian und anderen Systemen, die PAM verwenden (was heutzutage die meisten von ihnen sind), können Sie Umgebungsvariablen (einschließlich PATH) in festlegen /etc/environment. Dies funktioniert für alle Anmeldemethoden, die das pam_envModul verwenden (entweder im authAbschnitt oder im sessionAbschnitt). unter Debian sollten das alle sein (zumindest diejenigen, die Möglichkeiten zum Anmelden und Ausführen von Befehlen bieten).

Gilles 'SO - hör auf böse zu sein'
quelle
2

Der Standardpfad könnte /etc/profilewie in Joe, aber auch in festgelegt werden $HOME/.profile. Ich habe auch viele Pakete, die ich selbst kompiliert habe (mit dem üblichen Verfahren ./configure --prefix=/opt/<name>), installiert /opt. Um die Binärdateien /opt/<name>/binohne zusätzlichen Aufwand auszuführen , habe ich hinzugefügt

OPTDIR=/opt

for i in $OPTDIR/* ; do
    BINDIR=$i/bin
    if [ -d $BINDIR ] ; then
        if [ -z $PATH ] ; then
            PATH=$BINDIR
        else
            PATH=$BINDIR:$PATH
        fi
    fi
done

export PATH

zu meinem $HOME/.profilewas in deinem Fall wäre /etc/profile. Selbst wenn ich /optin Zukunft Pakete unter installiere, muss ich mich nicht um den Zugriff auf die zugehörigen Binärdateien kümmern, /opt/.*/binda der Pfad automatisch hinzugefügt wird $PATH.

Da die zusätzliche Software nicht erforderlich ist stabil bevorzugen i $HOME/.profileüber /etc/profile.


Eine kleine Bemerkung: wird /etc/.profilejeweils $HOME/profilenicht von Ihrer Standard-Shell ausgeführt, sondern von dash. Eine leichte Variante bash, die die Last während des Startvorgangs reduziert.

user1146332
quelle
Weder /etc/profilenoch ~/.profilewird nicht von einer Nicht-Login-Shell ausgeführt.
Yang Bo
Sie haben Recht, meine Antwort hängt nicht vollständig mit Ihrer Frage zusammen. Ich habe gerade beschrieben, was ich getan habe, um die Dinge zum Laufen zu bringen. Wenn Sie X nicht verwenden, macht mein Ansatz das, was Sie wollen, da jede Nicht-Login-Shell ein untergeordneter Prozess der Login-Shell ist. Wenn Sie X verwenden, können Sie das kleine Skript, das ich in der Init-Datei Ihres Display-Managers veröffentlicht habe, (in den meisten Fällen Xsession) als Quelle verwenden . Jetzt hat jeder untergeordnete Prozess des Display-Managers die definierte $PATHVariable. In den beiden beschriebenen Fällen funktioniert mein Ansatz definitiv und Sie können auf alle Binärdateien unter zugreifen /opt/.*/bin.
user1146332
1

Ich habe die beste Antwort auf Serverfehler von Gilles gefunden :

Wie wird PATH für alle Benutzer in Debian festgelegt?

Der erste Ort, an dem PATH gesetzt ist, ist /etc/login.defs. Es gibt eine Einstellung für root und eine Einstellung für alle anderen.

Ein weiterer Ort, an dem Sie Umgebungsvariablen definieren können, ist /etc/environment. Diese Einstellungen gelten für alle (Sie können dort keinen beliebigen Shell-Code schreiben).

Ein dritter Ort, an dem Sie Umgebungsvariablen definieren können, ist /etc/profile. Dort können Sie beliebigen Shell-Code schreiben. Wenn Sie eine benutzerspezifische Einstellung wünschen, gibt es die entsprechende Datei pro Benutzer ~www-data/.profile. Dies gilt jedoch nur für interaktive Konsolenanmeldungen. Insbesondere gilt dies nicht für Cron-Jobs, es sei denn, sie stammen explizit /etc/profile.

Wenn Sie diese PATHEinstellung nur in einer Benutzer-Crontab benötigen, können Sie sie am Anfang der Crontab schreiben. Beachten Sie, dass Sie die vollständige Liste ( PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/zend/bin) benötigen. Sie können keine Variablensubstitution verwenden ( PATH=$PATH:/usr/local/zend/binfunktioniert dort nicht).

Käfer
quelle
0

Der Standardpfad kann in / etc / profile festgelegt werden

Aber ich habe nur auf mein Ubuntu-System geschaut und es befindet sich in / etc / environment

Joe
quelle
2
/etc/profilewird nicht von einer Nicht-Login-Shell ausgeführt.
Yang Bo