Festlegen von Umgebungsvariablen

227

Meine Variablen sind

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

Wie speichere ich diese Variablen dauerhaft?

user3021349
quelle
2
Die anderen Antworten auf dieser Seite sind großartig. Eine kleine Empfehlung wäre, /usr/lib/oracle/11.2/client64/libeine neue Datei unter dem /etc/ld.so.conf.d/Pfad hinzuzufügen . Dann brauchen Sie LD_LIBRARY_PATH nicht zu setzen, siehe auch hier .
Elliott Frisch
1
Vorsichtig, es gibt mehr in dieser Geschichte, als zunächst erscheint. Ich lade Sie ein, meine Antwort zu überprüfen.
Jasonleonhard

Antworten:

252

Sie können es der Datei .profileoder Ihrer Anmelde-Shell-Profildatei (die sich in Ihrem Ausgangsverzeichnis befindet) hinzufügen .

Um die Umgebungsvariable "dauerhaft" zu ändern, müssen Sie mindestens die folgenden Situationen berücksichtigen:

  1. Login / Nicht-Login-Shell
  2. Interaktive / nicht interaktive Shell

Bash

  1. Bash als Login - Shell lädt /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profilein der Reihenfolge
  2. Bash als nicht angemeldete interaktive Shell wird geladen ~/.bashrc
  3. Bash als nicht angemeldete nicht interaktive Shell lädt die in der Umgebungsvariablen angegebene Konfiguration $BASH_ENV
$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

zsh

$EDITOR ~/.zprofile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

ksh

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

bourne

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib     
     ORACLE_HOME=/usr/lib/oracle/11.2/client64
     export LD_LIBRARY_PATH ORACLE_HOME

csh oder tcsh

$EDITOR ~/.login
#add lines at the bottom of the file:  
     setenv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
     setenv ORACLE_HOME /usr/lib/oracle/11.2/client64

Wenn Sie es für alle Benutzer dauerhaft machen möchten, können Sie die entsprechenden Dateien unter /etc/, dh /etc/profilefür Bourne-ähnliche Shells, /etc/csh.loginfür (t) csh /etc/zsh/zprofileund /etc/zsh/zshrcfür zsh bearbeiten .

Eine andere Option ist die Verwendung /etc/environment, die auf Linux-Systemen vom PAM-Modul gelesen wird pam_envund nur einfache Zuweisungen unterstützt, keine Erweiterungen im Shell-Stil. (Siehe dazu Debians Leitfaden .)

Diese Dateien enthalten wahrscheinlich bereits einige Zuweisungen. Befolgen Sie daher die Syntax, die in Ihrer Datei bereits vorhanden ist.

Stellen Sie sicher, dass Sie die Shell neu starten und den Benutzer erneut anmelden, um die Änderungen zu übernehmen.

Wenn Sie eine systemweite Umgebungsvariable hinzufügen müssen, gibt es jetzt einen /etc/profile.dOrdner mit einem sh-Skript zum Initialisieren der Variablen.
Sie können Ihr sh-Skript mit allen exportierten Variablen hier platzieren.
Seien Sie vorsichtig, obwohl dies nicht als Standardmethode zum Hinzufügen von Variablen zu env unter Debian verwendet werden sollte.

Kiwy
quelle
Dies .profilein, /etc/aber ich weiß nicht, wie man die Variablen in diesem setzt, .profilebitte sagen Sie mir
user3021349
6
.profileist in Ihrem Heimatverzeichnis nicht/etc/
Kiwy
1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
user3021349
4
@ user3021349 Ich wollte nicht unhöflich sein, aber wenn Sie eine Sekunde überlegen, können Sie auch einen anderen Editor verwenden, den Sie beherrschen. :wqist der Befehl zum Schreiben einer Datei und zum Beenden in vi. Vergiss nicht, escvorher zu tippen
Kiwy
3
Sie müssen die Umgebungsvariablen in crontabSkripten berücksichtigen . Keiner dieser Speicherorte wird gesucht, wenn ein crontabSkript ausgeführt wird.
Yegle
71

Zu tun, wenn für alle Benutzer / Shells, abhängig von der Distribution, die Sie verwenden könnten /etc/environmentoder /etc/profile. Das Erstellen einer neuen Datei in ist /etc/profile.dmöglicherweise vorzuziehen, wenn diese vorhanden ist, da es weniger wahrscheinlich ist, dass es zu Konflikten mit Aktualisierungen kommt, die vom Paketsystem vorgenommen werden.

In /etc/environmentwerden Variablen normalerweise mit gesetzt name=value, zB:

ORACLE_HOME=/usr/lib/oracle/11.2/client64

In /etc/profilemüssen Sie verwenden, exportda dies ein Skript ist, zB:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

Gleiches gilt für eine Datei unter /etc/profile.d. Möglicherweise gibt es auch Benennungsbeschränkungen, die erfüllt sein müssen, damit die Datei funktioniert. Unter Debian muss die Datei die Erweiterung haben .sh(obwohl sie keine Bang-Line oder ausführbare Berechtigungen benötigt, da sie von einer Quelle stammt). Überprüfen Sie Ihre Distributionsdokumentation oder schauen Sie sich das /etc/profileSkript an, um zu sehen, wie diese Dateien geladen werden.

Beachten Sie auch, dass die LD_LIBRARY_PATHpermanente Einstellung möglicherweise problematisch ist , einschließlich eines Sicherheitsrisikos. Als Alternative würde ich vorschlagen, LD_LIBRARY_PATHfür jedes Programm, das es vor dem Ausführen benötigt , eine Möglichkeit zu finden, das vor dem Beginn der Befehlszeile zu setzen. Z.B:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib myprog

Eine Möglichkeit, dies zu tun, besteht darin, ein Wrapper-Skript zum Ausführen des Programms zu verwenden. Sie können diesem den gleichen Namen wie Ihrem Programm geben und es in /usr/local/binoder an einer beliebigen Stelle einfügen, die vor dem Speicherort Ihres Programms in angezeigt wird PATH. Hier ist ein Beispielskript (vergiss chmod +xdas Skript nicht):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"
Graeme
quelle
Also, wenn ich Wertepaare zu meiner environmentDatei hinzugefügt habe , was bewirkt, dass diese geladen werden? Zum Beispiel erwarte ich nach dem Verlassen des vi-Editors (Änderungen wurden erfolgreich geschrieben), dass sie geschrieben echo $MY_NEW_VARIABLEund
ausgedruckt werden
Unsicher, ob dies ein persönliches Problem ist oder was, aber ich musste mein Betriebssystem /etc/environmentneu starten, nachdem ich dies eingestellt hatte , selbst wenn ich das Bash-Terminal neu gestartet oder etwas eingegeben hatte source /etc/environment. Wenn Sie also Probleme haben, bei denen die Umgebungsvariable nicht aufrechterhalten wird, versuchen Sie einen Neustart.
Blairg23
@bkwdesign @ Blairg23, /etc/environmentist kein Skript, kann also nicht bezogen werden. Es wird zur Anmeldezeit (und einigen anderen Systemereignissen) von PAM geladen, sodass Sie sich entweder abmelden / anmelden oder eine neue Anmeldesitzung in einem Terminal ausführen können, indem Sie $ su <your username here>die neuen Werte in dieser isolierten Sitzung abrufen. Die Werte werden nach dem Beenden ausgeblendet, sodass es wahrscheinlich weniger fehleranfällig ist, sich nur vollständig abzumelden / anzumelden.
AaronDanielson
2

Bei der Installation von Orakel hat Orakel Sie aufgefordert, einige Skripte auszuführen, bevor Sie auf OK klicken. Dieses Skript hat eine Dummy-Einstellung in das .bash_profileAusgangsverzeichnis des Oracle-Benutzers eingefügt. Um die Datei anzuzeigen, ls -alwerden alle versteckten Dateien angezeigt.

Geben Sie ein nano bash_profile, um die Datei zu öffnen. Nehmen Sie Änderungen an der Datei vor, um Ihren Hostnamen und den entsprechenden SID-Namen wiederzugeben. Überprüfen Sie alle anderen Einstellungen, die geändert werden müssen. Drücken Sie zum Speichern die Taste x und geben Sie y ein, wenn Sie gefragt werden, ob Sie speichern möchten. Drücken Sie zum Speichern die Eingabetaste. Starte den Computer neu. Anmelden als Oracle-Benutzer. Starten Sie die Datenbank, indem Sie Folgendes eingeben

sqlplus / as sysdba

startup  
Frankfurt
quelle
Wie unterscheidet sich dies von der akzeptierten Antwort ?
Roaima