Einstellen der PATH-Variablen in / etc / environment vs .profile

58

Wo ist der bevorzugte Ort, um die PATHUmgebung einzustellen?

~/.profileoder /etc/environment?

Was ist der Fall, wenn PATHan beiden Orten eingestellt ist? Ist das Endergebnis eine Verkettung beider Werte, die an diesen beiden Stellen festgelegt wurden?

Karamol
quelle
Die letzte Zuordnung zu PATH hat natürlich Vorrang. Die meisten Skripte setzen es explizit am Anfang des Skripts.
AlexP
3
Siehe help.ubuntu.com/community/… .
Edwinksl

Antworten:

69

Zusammenfassung:

  • Wenn Sie /your/additional/pathIhrer PATHVariablen einen Pfad (z. B. ) nur für Ihren aktuellen Benutzer und nicht für alle Benutzer Ihres Computers hinzufügen möchten , setzen Sie diesen normalerweise ~/.profilewie in einem dieser beiden Beispiele an das Ende von :

    PATH="/your/additional/path:$PATH"
    PATH="$PATH:/your/additional/path"
    

    Beachten Sie, dass die Pfadprioritäten von links nach rechts absteigend sind, sodass der erste Pfad die höchste Priorität hat. Wenn Sie Ihren Pfad links von hinzufügen $PATH, hat er die höchste Priorität und ausführbare Dateien an diesem Speicherort setzen alle anderen außer Kraft. Wenn Sie rechts Ihren Pfad hinzufügen, hat dieser die niedrigste Priorität, und ausführbare Dateien von den anderen Speicherorten werden bevorzugt.

  • Wenn Sie jedoch müssen diese Umgebungsvariable für alle Benutzer setzen, würde ich immer noch nicht berühren empfehlen /etc/environmentaber eine Datei mit dem Dateinamen endet bei der Schaffung von .shin /etc/profile.d/. Das /etc/profileSkript und alle Skripte in /etc/profile.dsind die globalen Äquivalente der persönlichen ~/.profileSkripte jedes Benutzers und werden von allen Shells während ihrer Initialisierung als reguläre Shellskripte ausgeführt.


Mehr Details:

  • /etc/environmentist eine systemweite Konfigurationsdatei, dh sie wird von allen Benutzern verwendet. Es gehört rootjedoch, so dass Sie ein Administrator Benutzer sein und verwenden müssen sudo, um es zu ändern.

  • ~/.profileist eines der persönlichen Shell-Initialisierungsskripte Ihres Benutzers. Jeder Benutzer hat einen und kann seine Datei bearbeiten, ohne dass dies Auswirkungen auf andere Benutzer hat.

  • /etc/profileund /etc/profile.d/*.shsind die globalen Initialisierungsskripten, die ~/.profilefür jeden Benutzer gleichwertig sind . Die globalen Skripte werden jedoch vor den benutzerspezifischen Skripten ausgeführt. und der main /etc/profileführt alle *.shSkripte /etc/profile.d/kurz vor dem Beenden aus.


  • Die /etc/environmentDatei enthält normalerweise nur diese Zeile:

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    

    Es setzt die PATHVariable für alle Benutzer im System auf diesen Standardwert, der nicht wesentlich geändert werden sollte. Zumindest sollten Sie keine der wichtigen Wege entfernen wie /bin, /sbin, /usr/binund /usr/sbinvon ihm.

    Diese Datei wird von jeder Shell jedes Benutzers als eine der ersten Konfigurationsdateien gelesen. Beachten Sie, dass es sich nicht um ein Shell-Skript handelt . Es ist nur eine Konfigurationsdatei, die irgendwie analysiert wird und möglicherweise nur Umgebungsvariablenzuweisungen enthält!

  • Die ~/.profileDatei kann viele Dinge enthalten, standardmäßig enthält sie unter anderem die folgende Überprüfung, ob ein ~/binVerzeichnis vorhanden ist, und fügt diese zu der vorhandenen PATHVariablen des Benutzers hinzu (in älteren Ubuntu-Versionen vor 16.04 - neuere Versionen fügen sie bedingungslos hinzu):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    

    Sie sehen, dass der alte Wert von PATHhier wiederverwendet wird und der neue Pfad nur an den Anfang angehängt wird, anstatt alles zu überschreiben. Wenn Sie manuell neue Pfade hinzufügen möchten, sollten Sie den alten $PATHWert auch immer irgendwo in der neuen Zeichenfolge belassen.

    Dieses Initialisierungsskript wird nur von den Shells des Benutzers gelesen, zu dem es gehört, aber es gibt eine andere Bedingung:

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    

    Wenn Sie also die Standard-Bash-Shell verwenden, sollten Sie sicherstellen, dass Sie keine haben, ~/.bash_profileoder ~/.bash_loginwenn die Änderungen in ~/.profileeine Auswirkung auf Ihren Benutzer haben sollen.


Informationen zu Umgebungsvariablen finden Sie unter https://help.ubuntu.com/community/EnvironmentVariables


Verwandte Frage: Unterschied zwischen bash.bashrc und / etc / environment-Datei

Byte Commander
quelle
2
Heutzutage ~/.profilewird nicht auf die Existenz von überprüft ~/bin, sondern es wird einfach die Zeile PATH="$HOME/bin:$HOME/.local/bin:$PATH"
angezeigt
1
@GunnarHjalmarsson "heutzutage" definieren, bitte? Ich laufe 16.04 und so sieht es dort aus.
Byte Commander
2
/etc/skel/.profilein 16.04 hat die von mir erwähnte zeile. Sie haben Ihren Benutzer anscheinend in einer früheren Version erstellt.
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Danke für die Info - bis vor ungefähr fünf Minuten dachte ich, dass die Standardeinstellung dies auch ~/.profilenoch hatte, aber Sie haben Recht - /etc/skel/.profileauf meinem aktualisierten 16.04-System (und einem Benutzerkonto, das bei der Installation von 16.04 erstellt wurde) ist sie nicht vorhanden eine andere Maschine hat es nicht in ihrer .profile).
Eliah Kagan
2
"... von allen Shells während ihrer Initialisierung als reguläre Shellskripte ausgeführt." Ich finde das irreführend. Könnte (einigen) nahe legen, dass durch einfaches Öffnen einer Terminal-Shell ohne Anmeldung über den GUI-Desktop / etc / profile ausgeführt wird, was nicht der Fall ist. askubuntu.com/questions/155865/…
Hawkeye Parker
22

Diese Antwort bezieht sich hauptsächlich auf die Reihenfolge, in der Umgebungsvariablen PATHzugewiesen werden, wenn sie in verschiedenen Konfigurationsdateien angegeben werden. Ich beschreibe auch, wo Sie sie normalerweise einstellen sollten, aber die folgende Liste listet die Dateien nicht in der Reihenfolge auf, in der Sie sie verwenden sollten. Für allgemeine Informationen zum Setzen PATHund zu anderen Umgebungsvariablen in Ubuntu empfehle ich auch, EnvironmentVariables und die anderen Antworten auf diese Frage zu lesen .

Der bevorzugte Einstellungsort PATHhängt davon ab, für welche Benutzer Sie ihn festlegen müssen und wann und wie er festgelegt werden soll. Ein Teil Ihrer Entscheidung wird sein, ob Sie eine Umgebungsvariable für alle Benutzer oder auf Benutzerbasis festlegen möchten. Wenn Sie sich nicht sicher sind, empfehle ich, die Einstellung nur für einen Benutzer (z. B. Ihr Konto) und nicht für das gesamte System vorzunehmen.

Wie AlexP sagt , hat die PATHUmgebungsvariable den Wert, dem sie zuletzt zugewiesen wurde . In der Praxis nehmen Sie die meiste Zeit, die Sie einstellen PATH, den alten Wert von PATHin den neuen Wert auf, sodass die vorherigen Einträge beibehalten werden.

Wenn also in der Praxis PATHmehrere Dateien festgelegt werden, enthält es normalerweise die Einträge, die in allen Dateien angegeben sind. Dies geschieht jedoch nur, weil alle Dateien, mit Ausnahme der ersten, auf die PATHVariable selbst verweisen , wodurch der alte Wert in den neuen Wert übernommen wird.

Daher fragen Sie tatsächlich nach der Reihenfolge, in der die PATHEinstellungen in verschiedenen Dateien wirksam werden.

Die allgemeinen Einstellungsorte PATHsind unten in der Reihenfolge aufgeführt, in der sie bei der Anmeldung eines Benutzers wirksam werden, nicht in der Reihenfolge, die Sie normalerweise in Betracht ziehen sollten . Jeder der unten aufgelisteten Orte ist PATH in manchen Situationen eine vernünftige Wahl , aber nur wenige sind die meiste Zeit eine gute Wahl.

In der folgenden Liste sehen Sie einige Verzeichnisnamen wie ~/.profile. Wenn Sie mit der Tilde-Erweiterung nicht vertraut sind , ~/beziehen Sie sich auf das Basisverzeichnis des aktuellen Benutzers. Ich benutze diese Syntax hauptsächlich aus Gründen der Kompaktheit. Es wird in Shell-Skripten unterstützt, jedoch nicht in PAM-Konfigurationsdateien.

1. Für alle Benutzer: /etc/environment

PAM unter Ubuntu bewirkt, dass die in aufgelisteten Umgebungsvariablen /etc/environmentgesetzt werden, falls diese Datei existiert, was standardmäßig der Fall ist. Auf diese Weise werden Umgebungsvariablen für alle Benutzer am häufigsten festgelegt.

$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Wenn Sie Umgebungsvariablen nicht nur für Ihr Benutzerkonto, sondern für alle Benutzerkonten festlegen müssen , ist es wahrscheinlich die beste Wahl, diese Datei zu ändern. Ich empfehle es zuerst zu sichern. Eine Möglichkeit zum Sichern dieser Datei besteht darin, Folgendes auszuführen:

sudo cp /etc/environment /etc/environment.orig

Die .origErweiterung ist nicht speziell erforderlich. Sie können der Sicherungsdatei einen Namen geben, der nicht verwirrend ist oder bereits verwendet wird. (Außer .orig, .old, .backupund .baksind häufig.)

Sie können diese Datei in beliebiger Weise bearbeiten Sie können jede andere Datei als Root - Benutzer bearbeiten ( sudoedit /etc/enviromnment, sudo nano -w /etc/environment, gksudo gedit /etc/environment, etc.)

/etc/environmentunterstützt nicht das automatische Einfügen des alten Werts einer Variablen. Dies ist jedoch in der Regel nicht erforderlich, da Sie die meiste Zeit durch Bearbeiten eine Umgebungsvariable für alle Benutzer festlegen /etc/environmentwürden, sollte dies ohnehin der Anfangswert sein, wenn sich der Benutzer anmeldet. Der Benutzer kann es dann nach Belieben ändern. In der Regel ist es gut für Benutzer, dies zu tun.

2. Für alle Benutzer: /etc/security/pam_env.conf

PAM liest Umgebungsvariablen für alle Benutzer aus /etc/security/pam_env.conf, die mit derselben Syntax wie in Benutzerdateien ~/.pam_environmentangegeben sind (siehe unten).

Wenn in beiden /etc/environmentund dieselbe Umgebungsvariable festgelegt ist /etc/security/pam_env.conf, wird der Wert in pam_env.confverwendet - auch wenn dieser Wert als DEFAULTund nicht als angegeben ist OVERRIDE.

Wenn Sie jedoch eine Zeile in environmentdurch eine in ersetzen pam_env.conf, können Sie den Inhalt des ersetzten Werts einschließen. Weitere .pam_environmentInformationen finden Sie im Abschnitt weiter unten (da dieselbe Syntax verwendet wird).

Das Bearbeiten ist normalerweise nicht erforderlich, pam_env.confund Sie sollten sehr vorsichtig sein , da eine fehlerhafte Zeile normalerweise verhindert, dass sich alle normalen Benutzerkonten überhaupt anmelden. Beispielsweise pam_env.confenthält der Standard die Zeilen:

#PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Dies wird als eines von mehreren Beispielen vorgestellt. Es zeigt unter anderem, wie Sie eine Zuweisung über mehrere Zeilen aufteilen können \. Angenommen, Sie möchten nur die erste Zeile auskommentieren, haben aber vergessen, die zweite Zeile auskommentieren:

PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Mach das nicht!

Ich habe das gerade selbst aus Versehen getestet und es hat verhindert, dass sich Benutzer erfolgreich anmelden konnten. Um das Problem zu beheben, musste ich im Wiederherstellungsmodus booten und es wieder ändern. (Zum Glück habe ich dies auf einer virtuellen Maschine gemacht, die ich nur zum Testen von Dingen verwende, sodass ich keine Probleme hatte.)

3. Für einen Benutzer: .pam_environmentim Basisverzeichnis des Benutzers

Eine der Möglichkeiten, eine Umgebungsvariable für einen einzelnen Benutzer festzulegen, besteht darin, dass dieser Benutzer die Umgebungsvariable in seinem Basisverzeichnis bearbeitet (oder erstellt) .pam_environment. In dieser Datei festgelegte Werte ersetzen die in der globalen /etc/environmentDatei festgelegten Werte .

.pam_environmentist nicht Teil des Gerüsts von Dateien, die beim erstmaligen Erstellen des Benutzerkontos in den Basisordner eines Benutzers kopiert werden. Wenn Sie diese Datei jedoch in Ihrem Ausgangsverzeichnis erstellen, können Sie damit Umgebungsvariablen wie festlegen PATH. Im Gegensatz zu /etc/environment(aber ähnlich /etc/security/pam_env.conf) unterstützen die benutzerspezifischen .pam_environmentDateien das Erweitern des alten Werts einer Umgebungsvariablen in einen neuen. Es handelt sich jedoch nicht um Shell-Skripte, und Sie müssen eine spezielle Syntax verwenden, um dies zu erreichen, die sich etwas von der Syntax unterscheidet, die Sie in einer Datei wie dieser verwenden würden .profile.

Wenn Sie beispielsweise ein bin2Verzeichnis in Ihrem Ausgangsverzeichnis hatten, das Sie am Ende von hinzufügen wollten PATH, können Sie dies tun, indem Sie diese Zeile hinzufügen zu .pam_environment:

PATH DEFAULT=${PATH}:/home/@{PAM_USER}/bin2

Siehe den ~/.pam_environmentUnterabschnitt von Environment (aus dem das obige Beispiel eng angepasst ist), man pam_envund man pam_env.conffür weitere Details.

Obwohl dies einst als bevorzugte Möglichkeit für Ubuntu-Benutzer angepriesen wurde, Umgebungsvariablen zu ändern oder hinzuzufügen, sollten Sie beim Bearbeiten vorsichtig sein.pam_environment . Wie bei systemweiten Änderungen /etc/security/pam_env.conf(siehe oben) verhindert eine fehlerhafte Zeile in der .pam_environmentDatei eines Benutzers, dass die Anmeldung erfolgreich ist. (I diese getestet haben -. Absichtlich dieses Mal) Informationen darüber , wie die Empfehlungen haben entwickelt , siehe Gunnar Hjalmarsson ‚s Kommentare unten und diese ubuntu-develDiskussion .

Ein solcher Fehler ist im Allgemeinen weitaus weniger schwerwiegend als ein fehlerhafter Line-In pam_env.conf, da er nur einen Benutzer betrifft. Bei einem Desktop-Ubuntu-System mit nur einem Benutzerkonto, das Anmeldungen zulässt, ist ein solcher Fehler beim Bearbeiten .pam_environmentjedoch genauso schlimm wie ein Fehler beim Bearbeiten pam_env.conf- wenn Sie nicht bereits angemeldet sind, können Sie dies nicht um es zu reparieren, ohne im Wiederherstellungsmodus zu booten (oder von einem Live-USB usw.).

(Wenn Sie über andere Benutzerkonten verfügen, können Sie sich als ein anderer Benutzer anmelden und das Problem beheben. Auch wenn Sie kein Administrator sind und sich nicht sudoals Root anmelden können , können Sie weiterhin ausgeführt werden und zur Eingabe Ihres (nicht ihres) Kennworts aufgefordert werden . Das Gastkonto kann dies jedoch nicht tun, da sie von der Verwendung verboten ist über die Identität eines anderen Benutzers zu übernehmen.)su your-accountsu

4. Für alle Benutzer: /etc/profileund Dateien darin/etc/profile.d/

Borowski-kompatible Shells (einschließlich bashder Standardbenutzershell in Ubuntu) führen die Befehle aus, /etc/profilewenn sie als Anmeldeshell aufgerufen werden.

Ubuntu /etc/profile.dendet mit:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Dies bewirkt, dass die Befehle in jeder Datei im /etc/profile.d/Verzeichnis, deren Name auf endet .sh, ebenfalls ausgeführt werden.

Die meisten Display-Manager führen die Befehle in /etc/profile(und damit die Dateien in /etc/profile.d) auch für grafische Anmeldungen aus. Dies ist jedoch nicht bei allen der Fall , und dies ist ein wichtiges Argument für die Verwendung der von PAM bereitgestellten Funktionen (siehe oben) - es sei denn, es werden niemals grafische Anmeldungen für dieses System vorgenommen, was beispielsweise der Fall sein könnte ein Server ohne GUI installiert.

Es ist traditionell, systemweite Umgebungsvariablen festzulegen /etc/profile, aber dies ist oft nicht mehr die beste Wahl. Wenn Sie keine Umgebungsvariable in /etc/environmentfestlegen können und diese für alle Benutzer festlegen müssen, ist es wahrscheinlich besser, eine neue Datei in /etc/profile.d/zu erstellen, als sich /etc/profileselbst zu bearbeiten . Ein Grund dafür ist, dass beim Upgrade von Ubuntu möglicherweise eine neue Standarddatei vorhanden /etc/profileist. Abhängig davon, wie Sie das Upgrade durchführen, wird entweder die alte Datei (mit Ihren Änderungen) beibehalten, die dieser bestimmten aktualisierten Konfigurationsdatei vorausgeht, oder Sie werden aufgefordert, die Situation zu behandeln.

Wann wird dieselbe Umgebungsvariable in beiden /etc/profileund einer oder mehreren Dateien in gesetzt /etc/profile.d? Was wird zuletzt ausgeführt? Dies hängt davon ab, ob die Befehle in /etc/profiledieser Gruppe vor oder nach der Quelle der Dateien profile.dangezeigt werden (gemäß dem oben angegebenen Code). Befehle in /etc/profilewerden in der Reihenfolge ausgeführt, in der sie erscheinen.

/etc/profileist ein Shell-Skript und seine Syntax stimmt nicht mit der der oben beschriebenen PAM-Konfigurationsdateien überein . Die Syntax entspricht der Syntax für die Benutzerdatei ~/.profile(siehe unten).

Wenn Sie Code schreiben müssen , die entscheidet , ob ein bestimmtes Verzeichnis hinzuzufügen PATH(und so für alle Benutzer zu tun), werden Sie nicht in der Lage sein zu verwenden /etc/environmentoder /etc/security/pam_env.confdas zu tun. Dies ist vielleicht die Hauptsituation, in der es besser ist, /etc/profileoder /etc/profile.d/stattdessen zu verwenden.

5. Für einen Benutzer: .bash_profileim Home-Verzeichnis des Benutzers

Wenn dies ein Benutzer hat ~/.bash_profile, verwendet bash es anstelle von ~/.profileoder ~/.bash_login(siehe unten). Sie sollten normalerweise kein .bash_profilein Ihrem Home-Verzeichnis haben.

Wenn Sie dies tun, sollte es normalerweise einen Befehl zur Quelle enthalten ~/.profile(z . "$HOME/.profile". B. ). Andernfalls wird der Inhalt der Benutzerdatei .profileüberhaupt nicht ausgeführt.

6. Für einen Benutzer: .bash_loginim Home-Verzeichnis des Benutzers

Wenn dies ein Benutzer ~/.bash_logingetan hat , verwendet bash es anstelle von ~/.profile(siehe unten), sofern ~/.bash_profilees nicht existiert. In diesem Fall wird keines der anderen verwendet, es sei denn, es wurde von ~ / .bash_login bezogen.

Wie bei .bash_profilesollten Sie normalerweise keine .bash_loginDatei in Ihrem Home-Verzeichnis haben.

7. Für einen Benutzer: .profileim Home-Verzeichnis des Benutzers.

Wenn eine Shell im Bourne-Stil als Anmeldeshell ausgeführt wird, werden die Befehle ausgeführt /etc/profile(einschließlich der Befehle, mit denen die Befehle in Dateien /etc/profile.d/ausgeführt werden - siehe oben). Danach werden die Befehle im Basisverzeichnis .profiledes Benutzers ausgeführt. Diese Datei ist für jeden Benutzer separat. (Bash wird tatsächlich ausgeführt .bash_profileoder .bash_loginstattdessen, wenn sie vorhanden sind. Für Benutzer auf einem Ubuntu-System sollten oder existieren diese Dateien jedoch nur selten. Einzelheiten siehe oben und 6.2 Bash-Startdateien im Bash-Handbuch .)

~/.profileDies ist der Hauptort, an dem Benutzer Befehle eingeben können, die bei der Anmeldung ausgeführt werden. PATHDies ist der traditionelle Ort, an dem Sie Ihre Einstellungen vornehmen können. Da Ubuntu das Modul pam_env unterstützt ~/.pam_environment, sollten Sie dies in Erwägung ziehen.

Wie bei führen /etc/profilenicht alle Display-Manager diese Datei für grafische Anmeldungen aus, obwohl die meisten dies tun. Dies ist ein Grund zu bevorzugen ~/.pam_environmentfür die Einstellung von Umgebungsvariablen (viel wie eine vielleicht lieber /etc/environmentzu /etc/profile).

Sie können Umgebungsvariablen erweitern, einschließlich PATHsich selbst, wenn Sie die Einstellung PATHin .pam_environment(siehe oben). Wenn Sie jedoch komplexere Einstellungen PATHvornehmen müssen, müssen Sie möglicherweise Ihre .profileverwenden. Wenn Sie insbesondere bei jeder Anmeldung eines Benutzers überprüfen möchten, ob ein Verzeichnis vorhanden ist, und es nur hinzufügen möchten, PATHwenn dies der Fall ist, können Sie Ihre .pam_environmentDatei nicht verwenden, um dieses Verzeichnis zu Ihrem hinzuzufügen PATH.

Zum Beispiel kann die Standard - pro-Benutzer - .profileDatei auf Ubuntu verwendet , um am Ende mit:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Siehe Gunnar Hjalmarsson ‚s Kommentar auf Byte Antwort des Kommandanten für weitere Einzelheiten.

Dies überprüft, ob Sie ein binUnterverzeichnis Ihres Home-Verzeichnisses haben. In diesem Fall wird dieses Unterverzeichnis an den Anfang Ihres Ordners angehängt PATH.

Diese Liste lässt einige Möglichkeiten aus.

Es gibt andere Möglichkeiten, wie Umgebungsvariablen beim Anmelden von Benutzern festgelegt werden, die stärker von der Art der Anmeldung abhängen. Beispielsweise können gelegentlich Umgebungsvariablen vorhanden sein, die nur für grafische Anmeldungen oder nur für SSH-basierte Remoteanmeldungen festgelegt werden. Die obige Liste deckt solche Fälle nicht ab.

Ich habe einige Dateien ausgelassen, in denen Benutzer manchmal Umgebungsvariablen definieren, wie z. B. ~/.bashrcund /etc/bash.bashrc, da diese Orte im Allgemeinen nicht empfohlen werden PATHund Sie sie selten für diesen Zweck verwenden sollten. Wenn Sie diese Dateien zum Hinzufügen von Verzeichnissen verwenden PATH, werden sie manchmal mehrmals hinzugefügt und sind bei der Prüfung sehr verwirrend $PATH. (In extremen Fällen kann dies die Arbeit verlangsamen, aber normalerweise geht es nur darum, alles sauber und verständlich zu halten.)

Da bashUbuntus Standard-Login-Shell für Benutzer ist und die meisten Benutzer sie oder eine andere POSIX-kompatible Shell verwenden, habe ich Informationen darüber weggelassen, wie Umgebungsvariablen in anderen, nicht Bourne-artigen Shells wie festgelegt werden tcsh.

Eliah Kagan
quelle
1
[Kommentar Nr. 1 von 2] Vielen Dank für diese ausführliche Beschreibung! (Ich habe eine geringfügige Änderung vorgenommen.) Ich habe jedoch Zweifel hinsichtlich der empfohlenen Methode (n). Vor ein paar Jahren Environment erwähnt /etc/environment/ ~/.pam_environmentals die empfohlenen Dateien. Nach Rücksprache mit den Entwicklern habe ich es so geändert, dass es zwischen PAM und /etc/profile.d/*.sh/ neutral ist ~/.profile, und ich sehe es immer noch so.
Gunnar Hjalmarsson
1
[Kommentar Nr. 2 von 2] Sie haben einige Argumente für PAM erwähnt. Wichtige Argumente für /etc/profile.d/*.sh/ ~/.profilesind, dass die Syntax einfacher ist und dass lightdm / gdm im Fehlerfall fehlerverzeiht (nicht einmal Syntaxfehler hindern Sie daran, sich einzuloggen, sondern führen lediglich zu Warnmeldungen).
Gunnar Hjalmarsson
Wenn du sagst pam_env.so, meintest du das pam_env.conf?
Johan Boulé
@ JohanBoulé Ja, ich meinte pam_env.conf. Vielen Dank! Ich habe es bearbeitet, um es zu beheben.
Eliah Kagan
3

Die Datei / etc / environment ist keine Skriptdatei, die Sie dort nicht exportieren können, und unterstützt keine Variablenerweiterung vom Typ $ HOME, sondern nur einfache Variablen = Wertepaare. Um diese Datei zu verwenden, müssen Sie lediglich Ihren Pfad an die vorhandene Definition anhängen, die speziell für systemweite Einstellungen von Umgebungsvariablen vorgesehen ist. eine pro Zeile. Insbesondere werden in dieser Datei die systemweiten Einstellungen für das Gebietsschema und den Pfad gespeichert.

~ / .profile - Diese Datei wird ausgeführt, wenn eine Bash-Shell ausgeführt wird. Dies wird normalerweise für Umgebungsvariablen empfohlen. Sie hat jedoch den Nachteil, dass sie nur von Login-Shells aufgerufen wird Um sich abzumelden und wieder einzuloggen - oder zumindest eine neue Login-Shell zu starten.

eGhoul
quelle
1

Der bevorzugte Ort zum Festlegen von Umgebungsvariablen hängt von mehreren Dingen ab:

  1. Verwenden Sie als einziger den Computer:
    • In diesem Fall wäre der beste Ort, um es einzustellen, /etc/environmentda keine Gefahr des unbefugten Zugriffs besteht.
  2. Wenn das System von vielen benutzt wird
    • Wenn auf die Variablen von allen zugegriffen werden soll, dann wäre der Ort /etc/environment, aber
    • wenn einzelne Benutzer Zugriff auf sie ausgewählt haben , sollten dann jeder sollte sie in dem festgelegt~/.profile , die jeden Benutzer des Systems betreffen , da es in jedem Benutzer Home - Verzeichnis befinden wird .

Das System liest /etc/environmentvor dem Lesen ~/.profile. Es findet keine Verkettung statt und wie Alex P sagte, ist die letzte Zuordnung zum Pfad maßgebend.

Sehen Sie sich hier und hier die Faktoren an, die bestimmen, wie ~/.profileund /etc/environmentmit welchen anderen Orten Sie spielen , da diese Faktoren Einfluss darauf haben, wie Sie diese Orte nutzen.

George Udosen
quelle