Ich denke, es ist nur an die aktuelle Sitzung angehängt, wenn Sie eine neue Sitzung im Terminal öffnen, würde es verschwinden
Haryono Sariputra
Antworten:
103
Wie auch /etc/profileandere erwähnt haben, verwenden einige Linux-Systeme jetzt ein Verzeichnis /etc/profile.d/. Alle .shDateien dort werden von bezogen /etc/profile. Es ist etwas ordentlicher, Ihre benutzerdefinierten Umgebungsdaten in diesen Dateien zu behalten, als sie nur zu bearbeiten /etc/profile.
Wenn alle Anmeldedienste PAM verwenden und alle Anmeldedienste session required pam_env.soin ihren jeweiligen /etc/pam.d/*Konfigurationsdateien enthalten sind, werden für alle Anmeldesitzungen einige Umgebungsvariablen festgelegt, die in pam_envder Konfigurationsdatei angegeben sind.
Bei den meisten modernen Linux-Distributionen ist dies standardmäßig alles vorhanden - fügen Sie einfach Ihre gewünschten globalen Umgebungsvariablen hinzu /etc/security/pam_env.conf.
Dies funktioniert unabhängig von der Shell des Benutzers und auch für grafische Anmeldungen (wenn xdm / kdm / gdm / entry /… so eingerichtet ist).
+1 Sie müssen auch neu starten, nachdem Sie eine Variable in pam_env.conf hinzugefügt haben, da sofort $ echo $ Variablenname nicht
9
Sie müssen nicht neu starten, sondern müssen sich erneut anmelden. (Kein Neustart kritischer Server für mich)
Lyndon White
Dies scheint nicht auf meine Distribution Mint 17.2 zuzutreffen. Die vorinstallierte Datei ist vollständig echo foo>/home/me/barauskommentiert. Wenn ich so etwas hinzufüge und neu starte (und mich erneut anmelde ), wird diese Datei nicht erstellt. (Es gibt wahrscheinlich eine elegantere Möglichkeit, dies zu testen, aber ich wollte sicher sein, bevor ich hier kommentiere.)
Michael Scheper
16
Erstaunlicherweise haben Unix und Linux keinen Platz zum Festlegen globaler Umgebungsvariablen. Das Beste, was Sie tun können, ist, dafür zu sorgen, dass eine bestimmte Shell eine standortspezifische Initialisierung erhält.
Wenn Sie es /etc/profileeingeben, wird dies für die meisten posix-kompatiblen Shell-Benutzer erledigt. Dies ist wahrscheinlich "gut genug" für unkritische Zwecke.
Aber jeder mit einer cshoder einer tcshShell wird es nicht sehen, und ich glaube nicht, dass cshes eine globale Initialisierungsdatei gibt.
/etc/environmentscheint tatsächlich Umgebungsvariablen für mich zu setzen, selbst als Root-Benutzer. Ich weiß, dass /etc/environmentdas auf Amazon Linux und Ubuntu ist. Ich konnte nicht überprüfen, ob es für csh, tcsh oder zsh funktioniert.
Jordan Stewart
Es ist nicht spezifisch für die Shell, die Sie verwenden, es ist wirklich global
Xerus
9
Einige interessante Auszüge aus der Bash-Manpage:
Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der --loginOption aufgerufen wird , werden zuerst Befehle aus der Datei gelesen und ausgeführt /etc/profile, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie nach ~/.bash_profile,
~/.bash_loginund ~/.profilein dieser Reihenfolge und liest und führt Befehle von der ersten aus, die vorhanden und lesbar ist. Die --noprofileOption kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu verhindern.
...
Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist, liest bash Befehle von
/etc/bash.bashrcund ~/.bashrc, falls diese Dateien vorhanden sind. Dies kann durch Verwendung der --norcOption verhindert werden. Das--rcfileDie Dateioption zwingt bash, Befehle aus der Datei anstelle von /etc/bash.bashrcund
zu lesen und auszuführen ~/.bashrc.
Schauen Sie sich also an /etc/profileoder /etc/bash.bashrc, diese Dateien sind die richtigen Stellen für globale Einstellungen. Fügen Sie so etwas ein, um eine Umgebungsvariable einzurichten:
Beachten Sie, dass auf klassischen Unix-Systemen sowohl die Bourne-Shell als auch die Korn-Shell auch / etc / profile lesen - dies ist wahrscheinlich der am häufigsten verwendete Speicherort für die Einstellung der Systemumgebung. Einige Versionen der C-Shell befinden sich in /etc/csh.cshrc und /etc/csh.login sowie in den Positionen der Benutzer. Andere verwenden keine Einstellungsdatei für die Systemumgebung.
Jonathan Leffler
Genial, genau das, wonach ich gesucht habe, um die Umgebung für Nicht-Login-Shell-Benutzer festzulegen.
David Mann
Entschuldigung, ich habe dies anscheinend versehentlich herabgestimmt, als die Pfeile für eine Weile nicht sichtbar waren. Würde es Ihnen etwas ausmachen, dies zu bearbeiten (z. B. Tippfehler "Umgebung" in der vorletzten Zeile), damit ich die Abwertung entfernen kann?
Jeder Prozess, der unter dem Linux-Kernel ausgeführt wird, erhält eine eigene, einzigartige Umgebung, die er von seinem übergeordneten Prozess erbt. In diesem Fall ist das übergeordnete Element entweder eine Shell selbst (das eine Sub-Shell erzeugt) oder das Anmeldeprogramm (auf einem typischen System).
Da jede Prozessumgebung geschützt ist, gibt es keine Möglichkeit, jedem laufenden Prozess eine Umgebungsvariable zu "injizieren". Selbst wenn Sie die Standard-Shell .rc / profile ändern, wird sie erst wirksam, wenn jeder Prozess beendet und neu geladen wird seine Starteinstellungen.
Suchen Sie in / etc /, um die Standardstartvariablen für eine bestimmte Shell zu ändern. Stellen Sie einfach fest, dass Benutzer sie in ihren individuellen Einstellungen ändern können (und dies häufig tun).
Unix wurde entwickelt, um dem Benutzer in Grenzen zu gehorchen.
NB : Bash ist nicht die einzige Shell auf Ihrem System. Achten Sie genau darauf, worauf der symbolische Link / bin / sh tatsächlich verweist. Auf vielen Systemen kann dies tatsächlich ein Bindestrich sein, der (standardmäßig ohne besonderen Aufruf) POSIXLY korrekt ist. Daher sollten Sie darauf achten, beide Standardeinstellungen zu ändern, da sonst Skripte, die mit / bin / sh beginnen, Ihre globalen Standardeinstellungen nicht erben. Achten Sie auch darauf, Syntax zu vermeiden, die nur Bash versteht, wenn Sie beide bearbeiten, auch bekannt als avoiding bashisms.
Antworten:
Wie auch
/etc/profile
andere erwähnt haben, verwenden einige Linux-Systeme jetzt ein Verzeichnis/etc/profile.d/
. Alle.sh
Dateien dort werden von bezogen/etc/profile
. Es ist etwas ordentlicher, Ihre benutzerdefinierten Umgebungsdaten in diesen Dateien zu behalten, als sie nur zu bearbeiten/etc/profile
.quelle
Wenn Ihr LinuxOS diese Datei hat:
Sie können es verwenden, um Umgebungsvariablen für alle Benutzer dauerhaft festzulegen.
Auszug aus: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
quelle
Mann 8 pam_env
Mann 5 pam_env.conf
Wenn alle Anmeldedienste PAM verwenden und alle Anmeldedienste
session required pam_env.so
in ihren jeweiligen/etc/pam.d/*
Konfigurationsdateien enthalten sind, werden für alle Anmeldesitzungen einige Umgebungsvariablen festgelegt, die inpam_env
der Konfigurationsdatei angegeben sind.Bei den meisten modernen Linux-Distributionen ist dies standardmäßig alles vorhanden - fügen Sie einfach Ihre gewünschten globalen Umgebungsvariablen hinzu
/etc/security/pam_env.conf
.Dies funktioniert unabhängig von der Shell des Benutzers und auch für grafische Anmeldungen (wenn xdm / kdm / gdm / entry /… so eingerichtet ist).
quelle
echo foo>/home/me/bar
auskommentiert. Wenn ich so etwas hinzufüge und neu starte (und mich erneut anmelde ), wird diese Datei nicht erstellt. (Es gibt wahrscheinlich eine elegantere Möglichkeit, dies zu testen, aber ich wollte sicher sein, bevor ich hier kommentiere.)Erstaunlicherweise haben Unix und Linux keinen Platz zum Festlegen globaler Umgebungsvariablen. Das Beste, was Sie tun können, ist, dafür zu sorgen, dass eine bestimmte Shell eine standortspezifische Initialisierung erhält.
Wenn Sie es
/etc/profile
eingeben, wird dies für die meisten posix-kompatiblen Shell-Benutzer erledigt. Dies ist wahrscheinlich "gut genug" für unkritische Zwecke.Aber jeder mit einer
csh
oder einertcsh
Shell wird es nicht sehen, und ich glaube nicht, dasscsh
es eine globale Initialisierungsdatei gibt.quelle
/etc/environment
scheint tatsächlich Umgebungsvariablen für mich zu setzen, selbst als Root-Benutzer. Ich weiß, dass/etc/environment
das auf Amazon Linux und Ubuntu ist. Ich konnte nicht überprüfen, ob es für csh, tcsh oder zsh funktioniert.Einige interessante Auszüge aus der Bash-Manpage:
Schauen Sie sich also an
/etc/profile
oder/etc/bash.bashrc
, diese Dateien sind die richtigen Stellen für globale Einstellungen. Fügen Sie so etwas ein, um eine Umgebungsvariable einzurichten:quelle
Die Verwendung von PAM ist hervorragend.
quelle
Jeder Prozess, der unter dem Linux-Kernel ausgeführt wird, erhält eine eigene, einzigartige Umgebung, die er von seinem übergeordneten Prozess erbt. In diesem Fall ist das übergeordnete Element entweder eine Shell selbst (das eine Sub-Shell erzeugt) oder das Anmeldeprogramm (auf einem typischen System).
Da jede Prozessumgebung geschützt ist, gibt es keine Möglichkeit, jedem laufenden Prozess eine Umgebungsvariable zu "injizieren". Selbst wenn Sie die Standard-Shell .rc / profile ändern, wird sie erst wirksam, wenn jeder Prozess beendet und neu geladen wird seine Starteinstellungen.
Suchen Sie in / etc /, um die Standardstartvariablen für eine bestimmte Shell zu ändern. Stellen Sie einfach fest, dass Benutzer sie in ihren individuellen Einstellungen ändern können (und dies häufig tun).
Unix wurde entwickelt, um dem Benutzer in Grenzen zu gehorchen.
NB : Bash ist nicht die einzige Shell auf Ihrem System. Achten Sie genau darauf, worauf der symbolische Link / bin / sh tatsächlich verweist. Auf vielen Systemen kann dies tatsächlich ein Bindestrich sein, der (standardmäßig ohne besonderen Aufruf) POSIXLY korrekt ist. Daher sollten Sie darauf achten, beide Standardeinstellungen zu ändern, da sonst Skripte, die mit / bin / sh beginnen, Ihre globalen Standardeinstellungen nicht erben. Achten Sie auch darauf, Syntax zu vermeiden, die nur Bash versteht, wenn Sie beide bearbeiten, auch bekannt als
avoiding bashisms
.quelle