Linux Tutoriel de la commande Set Environment Variable
Le shell Bash est utilisé à diverses fins sous Linux. Comment puis-je personnaliser la variable d’environnement du shell sous les systèmes d’exploitation Linux ? Comment puis-je définir et afficher la variable d’environnement sous Linux ?
Vous pouvez utiliser les variables de l’interpréteur de commandes pour stocker des données, définir des options de configuration et personnaliser l’environnement de l’interpréteur de commandes sous Linux. Le shell par défaut est Bash sous Linux et peut être utilisé aux fins suivantes :
- Configurer l’apparence du shell.
- Configurer les paramètres du terminal en fonction du terminal que vous utilisez.
- Définir le chemin de recherche tel que JAVA_HOME, et ORACLE_HOME.
- Créer des variables d’environnement selon les besoins des programmes.
- Exécuter les commandes que vous voulez exécuter à chaque fois que vous vous connectez ou vous déconnectez.
- Mettre en place des alias et/ou une fonction shell pour automatiser des tâches afin d’économiser de la frappe et du temps.
- Changer l’invite bash.
- Définir les options du shell.
Deux types de variables shell
- Variables d’environnement (GLOBAL) : Typiquement, les utilisateurs finaux ne devraient pas s’embêter avec les variables d’environnement car elles sont disponibles à l’échelle du système, et les sous-shells et les processus enfants peuvent y accéder. Dans certains scénarios, nous pouvons les modifier en fonction de nos besoins. Par exemple, nous définissons un chemin d’accès à l’échelle du système pour l’application JAVA ou PATH pour la recherche de binaires. Dans presque tous les cas, nous utilisons la commande export pour définir ou modifier les variables d’environnement.
- Variables shell et définies par l’utilisateur (LOCAL) : Comme le nom l’indique, elles sont définies par les utilisateurs et s’appliquent actuellement à la session shell en cours.
Vous pouvez utiliser les commandes suivantes pour afficher et configurer l’environnement.
Afficher les variables d’environnement actuelles sur Linux
La commande printenv affiche toutes ou les variables d’environnement données. Ouvrez l’invite du terminal, puis tapez:printenv
printenv VAR_NAME
printenv PS1
printenv ORACLE_HOME
printenv JAVA_HOME
# use the grep command/egrep command to filter out variables #
printenv | grep APP_HOME
printenv | egrep 'APP_HOME|DOCKER_HOME|NIX_BACKUP_HOST'
commande env
La commande env exécute une commande Linux avec un environnement modifié. La syntaxe est la suivante :
env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1
Veuillez noter que si aucun nom de commande n’est spécifié à la suite des spécifications de l’environnement, l’environnement résultant est affiché à l’écran. Cela revient à spécifier la commande printenv comme indiqué précédemment. Par exemple :
envenv | moreenv | grep 'PS1'
Comment définir et lister les variables d’environnement sous Linux en utilisant la commande set
La commande env/printenv affiche uniquement les variables d’environnement du shell Linux. Et si vous avez besoin de voir une liste de toutes les variables, y compris les fonctions de l’interpréteur de commandes, de l’environnement, de l’interpréteur de commandes défini par l’utilisateur ? Essayez la commande set suivante pour imprimer les variables d’environnement:set
set | grep BASH
Voici ce que nous voyons:
BASH=/bin/bashBASH_ARGC=()BASH_ARGV=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=(="3" ="2" ="25" ="1" ="release" ="x86_64-redhat-linux-gnu")BASH_VERSION='3.2.25(1)-release'COLORS=/etc/DIR_COLORS.xtermCOLUMNS=237CVS_RSH=sshDIRSTACK=()EUID=0GROUPS=()G_BROKEN_FILENAMES=1HISTFILE=/root/.bash_historyHISTFILESIZE=1000HISTSIZE=1000HOME=/rootHOSTNAME=server3.www.p.cyberciti.bizHOSTTYPE=x86_64IFS=$' \t\n'INPUTRC=/etc/inputrcLANG=en_US.UTF-8LESSOPEN='|/usr/bin/lesspipe.sh %s'LINES=64LOGNAME=rootLS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'MACHTYPE=x86_64-redhat-linux-gnuMAIL=/var/spool/mail/rootMAILCHECK=60OPTERR=1OPTIND=1OSTYPE=linux-gnuPATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPIPESTATUS=(="0")PPID=35469PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'PS1='\$ 'PS2='> 'PS4='+ 'PWD=/rootSHELL=/bin/bashSHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitorSHLVL=1SSH_CLIENT='10.1.3.116 44212 22'SSH_CONNECTION='10.1.3.116 44212 10.10.29.68 22'SSH_TTY=/dev/pts/0TERM=xtermUID=0USER=root_=setconsoletype=ptytmpid=0genpasswd () { local l=$1; && l=16; tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs}xrpm () { && ( rpm2cpio "$1" | cpio -idmv )}
Le $PATH définissait le chemin de recherche des commandes. Il s’agit d’une liste de répertoires, séparés par deux points, dans lesquels le shell recherche des commandes. Le $PS1 définit vos paramètres d’invite.Consultez la liste de toutes les variables de l’interpréteur de commandes couramment utilisées pour plus d’informations. Vous pouvez afficher la valeur d’une variable à l’aide de la commande printf ou de la commande echo :
echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"
Sorties de la dernière commande affichant l’emplacement de mon répertoire personnel défini par la variable d’environnement $HOME sous Linux :/home/vivek
Définir les variables d’environnement sur la commande Linux
La syntaxe est assez simple :
# A variable may be assigned to by a statement of the form #VAR_NAME=valueVAR_STR="this is a string"VAR_NUM_TRY=5MY_OS="Ubuntu"DOMAIN_NAME="cyberciti.biz|nixcraft.com" # If value is not given, the variable is assigned the null string.is_backup_failed= # Empty variable sql_tables="" # Boolean (true or false)is_job_failed=false
Les points clés à retenir lors de la création ou de la configuration de variables d’environnement sur Linux lors de l’utilisation de bash:
- Ne pas mettre d’espace autour du symbole =.
- Comme les commandes Linux, les noms des variables bash sont sensibles à la casse. Typiquement, nous définissons les variables d’environnement dans des noms en MAJUSCULES uniquement et sont considérés comme une meilleure pratique, mais ce n’est pas obligatoire.
- Par défaut, la portée des variables Linux est LOCALE. Nous pouvons les rendre GLOBALES (ou variable d’environnement) en utilisant la commande export.
Imprimons les valeurs de nos variables VAR_NUM, VAR_NUM, MY_OS, et d’autres variables définies précédemment en utilisant diverses commandes :
echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed
Désinstallation / suppression de variables et de valeurs de l’interpréteur de commandes
Nous pouvons désactiver les valeurs et les attributs des variables et des fonctions de l’interpréteur de commandes en utilisant la commande unset :
unset var_nameunset MY_OSunset is_backup_failed
Comment définir des variables d’environnement en lecture seule sous Linux lors de l’utilisation de bash
Nous utilisons la commande readonly comme suit :
readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
.
Setting up unchangeable read-only bash variable sur mon bureau Ubuntu Linux
Accéder aux variables définies par l’utilisateur dans les sous-shells et autres instances
Démarrons une nouvelle instance de bash, entrons et essayons d’imprimer des valeurs comme suit :
# 1. Define mysql_bak_dest and _mysql_dump variables mysql_bak_dest="/aws/efs"_mysql_dump="/usr/bin/mysqldump" # 2. Print 'mysql_bak_dest' and '_mysql_dump' variablesecho "$mysql_bak_dest" echo "$_mysql_dump" # 3. start a new shell bash # 4. Can you print 'mysql_bak_dest' and '_mysql_dump' variables ?echo "$mysql_bak_dest" echo "$_mysql_dump" # 5. Exit and go back parent shell session and print 'mysql_bak_dest' and '_mysql_dump' variablesexit echo "$mysql_bak_dest" echo "$_mysql_dump" # 6. Can you use the printenv to print 'mysql_bak_dest', '_mysql_dump', 'HOME' variable ?printenv mysql_bak_destprintenv $_mysql_dumpprintenv HOME
Définir et lister les variables LOCALES d’environnement sous Linux
À l’étape # 4, la sortie est vide. Mais pourquoi ? Cela signifie que les variables que nous avons définies ne sont pas des variables d’environnement, et qu’elles sont LOCALES. Dans un sous-shell et d’autres nouvelles instances du shell, les valeurs des variables ne sont pas exportées. Par conséquent, nous utilisons la commande export pour les rendre GLOBALES ou variables d’environnement. Par exemple :
export var=value# make them GLOBAL or environment variable export mysql_bak_dest="/aws/efs"export _mysql_dump="/usr/bin/mysqldump"echo "$mysql_bak_dest" echo "$_mysql_dump"# Start a new sub-shell or instance by tping the 'bash' and try to access GLOBAL or environment vars bash -c "echo $mysql_bak_dest; echo $_mysql_dump"
.
Définir les variables d’environnement (GLOBAL) variables d’environnement (GLOBAL) sous Linux en utilisant export pour la session bash de l’utilisateur actuel et exporté
Commande export
Vous pouvez modifier chaque variable d’environnement ou de système en utilisant la commande export. Définissez la variable d’environnement PATH pour inclure le répertoire où vous avez installé le répertoire bin avec les scripts perl et shell :
export PATH=${PATH}:/home/vivek/bin
OR
export PATH=${PATH}:${HOME}/bin
Pour définir la variable d’environnement JAVA_HOME sur le répertoire où vous avez installé l’application J2SE SDK, entrez :
export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin
Vous pouvez définir plusieurs chemins comme suit :
export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin
Une note à propos de l’ env et la configuration des variables
Premièrement, définissez la variable NFS_ROOT sur /efs/ec2/wwwdata et exécutez le script perl appelé check_for_files.plenv NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
Dans cet exemple, exécutez ‘vim’ avec l’environnement contenant ‘LOGNAME=nixcraft’,et ‘DISPLAY=desktop2:0’:env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
Set FOO à bar et imprimez-le avec perl :env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
Nous ne pouvons pas voir $FOO depuis le shell car il n’a été défini que pour le code perl :echo "$FOO"
Comment faire pour que tous les paramètres des variables d’environnement soient permanents/persistants sous Linux ?
Le fichier ~/.bash_profile ($HOME/.bash_profile) ou ~/.profile est exécuté lorsque vous vous connectez en utilisant la console ou à distance en utilisant ssh. Tapez la commande suivante pour modifier le fichier ~/.bash_profile, entrez:$ vi ~/.bash_profile
Ajouter les paramètres $PATH, entrez:export PATH=${PATH}:${HOME}/bin
Enregistrer et fermer le fichier.
Définir le nom de l’instance IBM DB2
Tapez la commande suivante :
export DB2INSTANCE=prod_sales
A Note About /etc/profile File
/etc/profile ou /etc/profile.d/ contient l’environnement général du système Linux et les programmes de démarrage. Il est utilisé par tous les utilisateurs avec le shell bash, ksh, sh. Il est généralement utilisé pour définir la variable PATH, les limites de l’utilisateur et d’autres paramètres pour l’utilisateur. Il ne fonctionne que pour le shell de connexion. Si vous vouliez faire de grands changements ou des changements spécifiques à une application, utilisez le répertoire /etc/profile.d/ comme expliqué ici et ici.
Voir les ressources suivantes:
- Personnaliser les environnements de l’interpréteur de commandes bash à partir du wiki Linux shell scripting.
- UNIX Set Environment Variable
File | Purpose | Exemples (utiliser le cat pour visualiser un fichier) | |||
---|---|---|---|---|---|
/etc/environment | Configurer les variables d’environnement à l’échelle du système.variables d’environnement à l’échelle du système. |
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" |
L’ensemble du système Linux .fichier de profil pour l’interpréteur de commandes Bourne (sh) et les interpréteurs de commandes compatibles avec Bourne tels que bash, ksh, ash et autres. |
if ; then if && ; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if ; then . /etc/bash.bashrc fi else if ; then PS1='# ' else PS1='$ ' fi fifi if ; then for i in /etc/profile.d/*.sh; do if ; then . $i fi done unset ifi |
/etc/profile.d/ | Toute la grande personnalisation de l’environnement spécifique à l’utilisateur et au site doit être placée dans ce répertoire. Ceci est également valable pour tout le système. | $ ls -l /etc/profile.d/ $ cat /etc/profile.d/gawk.csh gawkpath_default () {unset AWKPATHexport AWKPATH=`gawk 'BEGIN {print ENVIRON}'`} gawkpath_prepend () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$*:$AWKPATH"} gawkpath_append () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$AWKPATH:$*"} gawklibpath_default () {unset AWKLIBPATHexport AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`} gawklibpath_prepend () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$*:$AWKLIBPATH"} gawklibpath_append () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$AWKLIBPATH:$*"} |
$HOME/.bash_profile | Le fichier d’initialisation personnel, exécuté pour les shells de connexion. |
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh |
|||
$HOME~/.bashrc | Le fichier de démarrage individuel par shell interactif. |
PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ 'umask 022export LS_OPTIONS='--color=auto'export PATH="$HOME:/home/vivek/bin"eval "`dircolors`"alias ls='ls $LS_OPTIONS'alias ll='ls $LS_OPTIONS -l'alias l='ls $LS_OPTIONS -lA'alias rm='rm -i'alias cp='cp -i'alias mv='mv -i' |
$HOME/.bash_logout | Le fichier de nettoyage individuel du shell de connexion, exécuté lorsqu’un shell de connexion se termine |
if ; then && /usr/bin/clear_console -qfi |
Résumé
Vous avez appris à définir et à lister les variables d’environnement sous Linux en utilisant bash :
Commande | Description | Exemple(s) |
---|---|---|
commandedeclare | Déclarer des variables bash et leur donner des attributs tels que integer, tableaux indexés, tableaux associatifs, readonly et ainsi de suite Si aucune variable ou option n’est donnée à déclarer, il affichera les attributs et les valeurs de tous (variables identiques à celles de l’ensemble courant) | Voir ‘help declare’
.
declaredeclare | grep BASHdeclare | grep function_name# Make sure str_size have the 'integer' attribute declare -i db_size=20echo $db_size # will print 20db_size="foo"echo $db_size # will print 0 # Set max size for linux container and make it read-only too declare -ir MAX_MEM_FOR_CONTAINER=4096 |
Commande env | Exécuter un programme dans un environnement modifié. Imprimez toutes les variables d’environnement. |
envenv | moreenv | grep SERVER_ROOT |
Commande d’exportation | Commande qui définit les variables d’environnement (GLOBAL) et exporte l’environnement vers un sub-shell ou d’autres instances. | export NFS_ROOT=/aws/ec2/efs |
Commande printtenv | Imprimer tout ou partie (donnée) des variables d’environnement sur Linux. |
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2' |
Commande readonly | Marquer les variables de l’interpréteur de commandes comme non modifiables c’est-à-dire. lecture seule ou variable d’interpréteur de commandes constante |
readonly K_VERSION="1.9.52" |
Commandeset | Set ou unset des valeurs des options d’interpréteur de commandes et des paramètres positionnels. Affiche également toutes les variables d’environnement. | Voir ‘aide set’
set | moreMY_DOMAINS="cyberciti.biz:nixcraft.com:cyberciti.com"IFS=':'set -- $MY_DOMAINSecho "$1"echo "$2"echo "$3"for d in $@do echo "Working on $d ..."done |
Commande unset | Supprime les variables du shell et de l’environnement. Toutes les variables ne peuvent pas être unset. Par exemple, les variables en lecture seule ne peuvent pas être unset. | unset FOO |
🐧 23 commentaires jusqu’à présent…. en ajouter un ↓
Catégorie | Liste des commandes Unix et Linux | Gestion des fichiers | cat |
---|---|
Firewall | Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20.04 |
Utilitaires réseau | dig – host – ip – nmap |
OpenVPN | CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04 |
Gestionnaire de paquets | apk – apt |
Gestion des processus | bg – chroot – cron – disown – fg – jobs – killall – kill – pidof. – pstree – pwdx – time |
Recherche | grep – whereis – which. |
Informations sur l’utilisateur | groupes – id – lastcomm – last – lid/libuser-.lid – logname – members – users – whoami – who – w |
WireGuard VPN | Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04 |