Comment définir de manière permanente des variables environnementales

227

Mes variables sont

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

Comment sauvegarder ces variables en permanence?

utilisateur3021349
la source
2
Les autres réponses sur cette page sont excellentes. Une petite recommandation serait d'ajouter /usr/lib/oracle/11.2/client64/libun nouveau fichier sous le /etc/ld.so.conf.d/chemin. Ensuite, vous n'avez pas besoin de définir LD_LIBRARY_PATH, voir aussi ici .
Elliott Frisch
1
Attention, cette histoire ne se résume pas à ce qu’elle semble au départ. Je vous invite à vérifier ma réponse.
jasonleonhard

Réponses:

252

Vous pouvez l'ajouter au fichier .profileou à votre fichier de profil de shell de connexion (situé dans votre répertoire personnel).

Pour modifier la variable environnementale "de manière permanente", vous devez au moins considérer ces situations:

  1. Shell de connexion / non-connexion
  2. Shell interactif / non interactif

frapper

  1. Bash shell de connexion chargera /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profiledans l'ordre
  2. Bash comme shell interactif non-login se chargera ~/.bashrc
  3. Bash en tant que shell non interactif non-login chargera la configuration spécifiée dans la variable d'environnement $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 ou 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

Si vous voulez le rendre permanent pour tous les utilisateurs, vous pouvez éditer les fichiers correspondants sous /etc/, c'est /etc/profile-à- dire pour les shells de type Bourne, /etc/csh.loginpour (t) csh /etc/zsh/zprofileet /etc/zsh/zshrcpour zsh.

Une autre option consiste à utiliser /etc/environment, qui sur les systèmes Linux est lu par le module PAM pam_envet ne prend en charge que les affectations simples, pas les extensions de style shell. (Voir le guide Debian à ce sujet.)

Ces fichiers sont susceptibles de contenir déjà certaines assignations, alors suivez la syntaxe que vous voyez déjà dans votre fichier.

Assurez-vous de redémarrer le shell et de reconnecter l'utilisateur pour appliquer les modifications.

Si vous devez ajouter une variable d'environnement système, il existe maintenant un /etc/profile.ddossier contenant le script sh pour initialiser la variable.
Vous pouvez placer votre script sh avec toutes les variables exportées ici.
Attention, cela ne devrait pas être utilisé comme un moyen standard d’ajouter une variable à env sur Debian.

Kiwy
la source
Ceci .profiledans /etc/mais je ne sais pas comment définir les variables dans ceci .profiles'il vous plaît dites-moi
user3021349
6
.profileest dans votre répertoire personnel pas/etc/
Kiwy
1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
user3021349
4
@ user3021349 Je ne voulais pas être impoli, mais si vous pensez une seconde, vous pouvez également utiliser un autre éditeur que vous maîtrisez. :wqest la commande pour écrire le fichier et quitter dans vi n'oubliez pas de taper escavant
Kiwy
3
Vous devrez tenir compte des variables d'environnement dans les crontabscripts. Aucun de ces emplacements ne sera recherché lorsqu'un crontabscript est en cours d'exécution.
Yegle
71

À faire si pour tous les utilisateurs / coques, en fonction de la distribution, vous pouvez utiliser /etc/environmentou /etc/profile. Créer un nouveau fichier dans /etc/profile.dpeut être préférable s'il existe, car il risquerait moins d'entrer en conflit avec les mises à jour effectuées par le système de conditionnement.

Dans /etc/environment, les variables sont généralement définies avec name=value, par exemple:

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

Dans /etc/profile, vous devez utiliser exportpuisqu'il s'agit d'un script, par exemple:

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

Il en va de même pour un fichier sous /etc/profile.d, il peut également y avoir des restrictions de nommage qui doivent être satisfaites pour que le fichier fonctionne. Sur Debian, le fichier doit avoir l’extension .sh(bien qu’il n’ait pas besoin d’une ligne éclatante ni d’autorisations exécutables car il provient de sources). Consultez la documentation de votre distribution ou consultez le /etc/profilescript pour voir comment ces fichiers sont chargés.

Notez également que ce paramètre LD_LIBRARY_PATHpermanent est potentiellement problématique , y compris par un risque de sécurité. Au lieu de cela, je suggérerais de trouver un moyen d’ajouter LD_LIBRARY_PATHau début de la ligne de commande pour chaque programme qui en a besoin avant d’être exécuté. Par exemple:

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

Une façon de procéder consiste à utiliser un script de wrapper pour exécuter le programme. Vous pouvez lui attribuer le même nom que votre programme et le placer à l’ /usr/local/binendroit où il apparaît avant l’emplacement de votre programme PATH. Voici un exemple de script (n'oubliez pas chmod +xle script):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"
Graeme
la source
alors, si j'ai ajouté des paires de valeur à mon environmentfichier, qu'est-ce qui provoque leur chargement? Par exemple, après avoir quitté vi editor (les modifications ont été écrites avec succès), je m'attends à l'écrire echo $MY_NEW_VARIABLEet à le voir imprimer - EDIT: je vois qu'elles sont là si je lance une nouvelle commande shell
bkwdesign le
Je ne sais pas s'il s'agit d'un problème personnel ou quoi, mais je devais redémarrer mon système d'exploitation après l'avoir défini /etc/environment, même si je redémarrais le terminal bash ou si je le tapais source /etc/environment. Donc, si vous rencontrez des problèmes où la variable d'environnement ne se perpétue pas, essayez de redémarrer.
Blairg23
@bkwdesign @ Blairg23, /etc/environmentn'est pas un script, il ne peut donc pas être recherché. Il est chargé au moment de la connexion (et de nombreux autres événements système) par PAM. Vous pouvez donc vous déconnecter / vous connecter ou exécuter une nouvelle session de connexion dans un terminal en $ su <your username here>sélectionnant les nouvelles valeurs de cette session isolée. Les valeurs disparaîtront une fois que vous aurez quitté, il est donc probablement moins sujet aux erreurs que de simplement vous déconnecter / vous connecter.
AaronDanielson
2

lors de l'installation d'Oracle, Oracle vous a demandé d'exécuter certains scripts avant de cliquer sur OK. Ce script place un paramètre factice dans le .bash_profilerépertoire personnel d’utilisateur Oracle. Pour voir le fichier, ls -almontrera tous les fichiers cachés.

tapez nano bash_profilepour ouvrir le fichier. Apportez des modifications au fichier pour refléter votre nom d’hôte et le nom de sid approprié. Vérifiez tous les autres paramètres qui nécessitent une modification. appuyez sur la commande x pour enregistrer et tapez y lorsque le système vous demande si vous souhaitez enregistrer. Appuyez sur la touche Retour pour enregistrer. Redémarrer le PC. Se connecter en tant qu'utilisateur Oracle. démarrez la base en tapant

sqlplus / as sysdba

startup  
Francfort
la source
Comment cela diffère-t-il de la réponse acceptée ?
roaima