M. Garrels. manuel bash

2.2. Variables d'environnement

Le système d'exploitation maintient un type spécial de ressource appelé Variables d'environnement (Variables d'environnement). Ces variables forment une paire NOM - VALEUR . Le nom peut commencer par une lettre et être composé de lettres, de chiffres et de traits de soulignement.

Pour substituer la valeur d'une variable sur la ligne de commande, le nom de la variable est précédé du signe $ :

$ echo $USER invité

Si la variable n'est pas définie, une chaîne vide est renvoyée.

Une instruction d'affectation est utilisée pour définir la valeur d'une variable (dans le cas des shells de type Bourne):

$ TEST=tester

ou l'instruction set intégrée (dans le cas de C-likes):

$ set TEST=test

La commande set sans arguments liste les valeurs de toutes les variables définies dans l'environnement :

$ set COLUMNS=197 CVS_RSH=ssh DIRSTACK=() EUID=1000 GROUPS=() G_BROKEN_FILENAMES=1 HISTFILE=/home/guest/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HOME=/home/guest HOSTNAME=monhôte HOSTTYPE=i686 IFS =$" \t\n" INPUTRC=/etc/inputrc KDEDIR=/usr KDEDIRS=/home/guest/.local/ KDE_IS_PRELINKED=1 KDE_NO_IPV6=1 LANG=ru_RU.UTF-8 LESSOPEN="|/usr/bin/ lesspipe.sh %s" LINES=65 LOGNAME=invité ....

Les variables peuvent être locales à un processus donné ou globales à une session. Vous pouvez définir des valeurs locales pour les variables en les faisant précéder de commandes :

$ TEST=test1 sh -c "echo $TEST" test1

Vous pouvez évaluer le contenu d'un ensemble de variables pour une session en appelant la commande intégrée de l'interpréteur env, dans le cas d'interpréteurs de type Bourne (sh, ksh, bash, zsh, pdksh...), et printenv dans le cas de l'utilisation d'interpréteurs de clones C-Shell (csh, tcsh...) :

$ env HOSTNAME=monhôte TERM=xterm SHELL=/bin/bash HISTSIZE=1000 KDE_NO_IPV6=1 SSH_CLIENT=172.16.0.9 50487 22 QTDIR=/usr/lib/qt-3.3 QTINC=/usr/lib/qt-3.3/include SSH_TTY =/dev/pts/6 USER=guest MOZILLA_CERTIFICATE_FOLDER=/home/guest/.evolution/ KDEDIR=/usr MAIL=/var/spool/mail/guest PATH=/usr/games:/usr/local/bin:/bin :/usr/bin:/home/guest/bin INPUTRC=/etc/inputrc PWD=/home/guest KDE_IS_PRELINKED=1 LANG=ru_RU.UTF-8 KDEDIRS=/home/guest/.local/ SSH_ASKPASS=/usr/libexec /openssh/gnome-ssh-askpass SHLVL=1 HOME=/home/guest LOGNAME=guest QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=172.16.0.9 50487 172.16.2.9 22 LESSOPEN=|/usr /bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env

Jeux de commandes Coquille peuvent être liés dans des fichiers de commandes appelés scripts, où la première ligne d'un type spécial de commentaire indique l'interpréteur de commandes pour exécuter cet ensemble. Par exemple, créons un fichier dans un éditeur de texte appelé test , avec le contenu suivant :

#!/bin/sh echo TEST variable : echo $TEST

Ce programme produira sortie standard le message textuel "Variable TEST : " et la valeur de la variable TEST, si elle est définie. Exécutez-le depuis ligne de commande Vous pouvez en le passant en paramètre au shell :

$ sh test Variable TEST :

Vous pouvez rendre une variable globale à l'aide de l'instruction export (Bourne) ou setenv (C-SHell) :

$ export TEST=test1 $ sh test Variable TEST : test1

Vous pouvez définir des valeurs locales de variables pour l'exécution de ce programme en les faisant précéder de commandes :

$ TEST=test2 sh test Variable TEST : test2

Les variables d'environnement sont supprimées à l'aide de l'instruction unset.

Les variables d'environnement sont des variables spéciales définies dans le shell et nécessaires aux programmes ou aux scripts au moment de l'exécution. Ils peuvent être définis par le système ou par l'utilisateur. Les variables définies par le système sont celles qui sont définies par le système.

Par exemple la commande personne handicapée est une variable système très courante utilisée pour stocker le répertoire de travail actuel. Les variables utilisateur sont généralement définies soit temporairement pour le shell actuel, soit de manière permanente. Tout le concept de configuration et de modification des paramètres d'environnement tourne autour d'un ensemble de fichiers et de quelques commandes et différents shells.

Plus précisément, une variable d'environnement peut être de trois types :

1. Variable d'environnement local

Il est défini pour la session en cours. Ces variables d'environnement sont utilisées pour la durée de la session en cours, qu'il s'agisse d'une session de connexion à distance ou d'une session de terminal local. Ces variables ne sont spécifiées dans aucun fichier de configuration et sont créées et supprimées à l'aide d'un ensemble spécial de commandes.

2. Variable d'environnement utilisateur

Il s'agit de variables spécifiques à l'utilisateur qui sont chargées chaque fois que l'utilisateur se connecte à l'aide d'une session de terminal local ou si cet utilisateur se connecte à l'aide d'une session de connexion à distance. Ces variables sont généralement définies et chargées à partir des fichiers de configuration suivants : .bashrc,.bash_profile,.bash_login,.profil, qui sont présents dans le répertoire personnel de l'utilisateur.

3. Variables d'environnement système

Il s'agit de variables d'environnement disponibles à l'échelle du système, c'est-à-dire pour tous les utilisateurs présents sur ce système. Ces variables sont présentes dans les fichiers de configuration à l'échelle du système qui se trouvent dans les répertoires et fichiers suivants : /etc/environnement,/etc/profile, /etc/profile.d/, /etc/bash.bashrc. Ces variables sont chargées chaque fois que le système est allumé et que les utilisateurs se connectent, localement ou à distance.

Présentation des fichiers de configuration partagés et à l'échelle du système

Ici, nous décrirons brièvement les différents fichiers de configuration répertoriés ci-dessus qui contiennent des variables d'environnement, à la fois système et utilisateur.

.bashrc

Ce fichier est un fichier utilisateur qui est chargé chaque fois que l'utilisateur crée une nouvelle session locale, c'est-à-dire en termes simples, ouvre un nouveau terminal. Toutes les variables d'environnement créées dans ce fichier prennent effet à chaque démarrage d'une nouvelle session locale.

.bash_profile

Les variables d'environnement listées dans ce fichier sont appelées à chaque fois qu'un utilisateur se connecte à distance, c'est-à-dire avec la commande chut. Si ce fichier n'existe pas, le système recherche les fichiers .bash_login ou .profil.

/etc/environnement

Ce fichier est un fichier système pour créer, modifier ou supprimer des variables d'environnement. Les variables d'environnement créées dans ce fichier sont disponibles dans tout le système, pour chaque utilisateur dans le monde, à la fois localement et à distance.

/etc/bash.bashrc

Fichier système bashrc. Ce fichier est téléchargé une fois par utilisateur, chaque fois que l'utilisateur ouvre une session de terminal local. Les variables d'environnement créées dans ce fichier sont disponibles pour tous les utilisateurs, mais uniquement via une session de terminal locale. Lorsqu'un utilisateur de cet ordinateur est supprimé via une session de connexion à distance, ces variables ne seront pas visibles.

/etc/profil

Toutes les variables créées dans ce fichier sont disponibles pour chaque utilisateur du système, mais uniquement si cette session utilisateur est appelée à distance, c'est-à-dire via une connexion à distance. Toute variable de ce fichier ne sera pas disponible pour la session de connexion locale, c'est-à-dire lorsque l'utilisateur ouvre un nouveau terminal sur son système local.

Note. Les variables d'environnement créées à l'aide de fichiers de configuration à l'échelle du système ou définis par l'utilisateur peuvent être supprimées, mais vous ne pouvez le faire qu'à partir de ces fichiers. Juste après chaque modification de ces fichiers, déconnectez-vous ou reconnectez-vous ou tapez simplement la commande suivante sur le terminal pour que les modifications prennent effet :

$ source

Définition ou suppression de variables d'environnement locales ou de session sous Linux

Les variables d'environnement locales peuvent être créées à l'aide des commandes suivantes :

$ var=valeur OU $ export var=valeur

Ces variables sont des variables de session et ne sont valides que pour la session de terminal en cours. Pour effacer ces variables d'environnement, vous pouvez utiliser les commandes suivantes :

1. Utilisation env

La commande par défaut est " env» répertorie toutes les variables d'environnement actuelles. Mais, si utilisé avec la clé " -je”, puis il efface temporairement toutes les variables d'environnement et permet à l'utilisateur d'exécuter la commande dans la session en cours en l'absence de toutes les variables d'environnement.

$ env -i ... arguments de commande ...

Ici var = valeur correspond à n'importe quel local variable d'environnement, que vous ne souhaitez utiliser qu'avec cette commande.

$ env -i bash

Nous démarrons le shell bash, dans lequel toutes les variables d'environnement seront temporairement effacées. Mais lorsque vous quittez le shell, toutes les variables seront restaurées.

2. Utiliser Annuler

Une autre façon d'effacer une variable d'environnement locale consiste à utiliser la commande non défini. Pour désactiver temporairement une variable d'environnement locale,

$unset

Où, nom-var est le nom de la variable locale que vous souhaitez supprimer ou effacer.

3. Définissez le nom de la variable avec valeur vide

Une autre méthode moins populaire consiste à définir le nom de la variable que vous souhaitez effacer sur une valeur vide, c'est-à-dire VAR=(il n'y a rien après égal - appuyez sur Entrée). Cela effacera la valeur de la variable locale pour la session en cours pour laquelle elle est active.

NOTE. VOUS POUVEZ MODIFIER LES VARIABLES SYSTÈME, MAIS LES MODIFICATIONS NE SERONT RÉFLÉCHIES QUE DANS LA SESSION EN COURS ET NE SERONT PAS PERMANENTES.

Apprenez à créer des variables d'environnement utilisateur et système sous Linux

Dans cette section, nous verrons comment définir ou désactiver les variables d'environnement locales, utilisateur et système sous Linux avec les exemples ci-dessous :

1. Définition et suppression de variables locales sous Linux.

a) Ici, nous créons une variable locale VAR1 et réglez-le sur n'importe quelle valeur. On utilise alors non défini et à la fin nous supprimons cette variable.

$ VAR1="TecMint est le meilleur site pour les articles Linux" $ echo $VAR1 $ unset VAR1 $ echo $VAR1

b) Une autre façon de créer une variable locale est d'utiliser la commande exporter. La variable locale créée sera disponible pour la session en cours. Pour désactiver une variable, définissez simplement la variable sur une valeur vide.

$ export VAR="TecMint est le meilleur site pour les articles Linux" $ echo $VAR $ VAR= $ echo $VAR

c) Ici, nous avons créé une variable locale VAR2 et définissez sa valeur. Ensuite, pour exécuter la commande, en effaçant temporairement toutes les variables d'environnement locales et autres, nous avons exécuté la commande " env -je". Cette commande ici a démarré un shell frapper, en effaçant toutes les autres variables d'environnement. Après être entré " sortie» dans le shell appelé frapper toutes les variables seront restaurées.

$ VAR2="TecMint est le meilleur site pour les articles Linux" $ echo $VAR2 $ env -i bash $ echo $VAR2

2. Définition et suppression des variables d'environnement utilisateur sous Linux.

a) Changer le fichier .bashrc dans votre répertoire personnel pour exporter ou définir la variable d'environnement que vous souhaitez ajouter. Après cela, exécutez le fichier pour que les modifications prennent effet. Ensuite, vous verrez la variable ("CD" dans mon cas) qui a pris effet. Cette variable sera disponible chaque fois que vous ouvrirez un nouveau terminal pour cet utilisateur, mais pas pour les sessions de connexion à distance.

$ vi .bashrc

.bashrc.

Exporter le CD="Ceci est TecMint Home"

Exécutez maintenant la commande suivante pour que les nouvelles modifications prennent effet et testez la variable.

$ source .bashrc $ écho $ CD

Pour supprimer cette variable, supprimez simplement la ligne dans le fichier. bashrc et rentrez dans la coquille.

b) Pour ajouter une variable qui sera disponible pour les sessions de connexion à distance, modifiez le fichier .bash_profile.

$ vi .bash_profile

Ajoutez la ligne suivante au fichier .bash_profile.

Exporter VAR2="Ceci est TecMint Home"

La variable sera disponible lors de l'exécution à distance en utilisant chut connectez-vous pour cet utilisateur, mais pas lors de l'ouverture d'un nouveau terminal local.

$ source .bash_profile $ echo $ var2

Ici VAR2 pas disponible initialement, mais lorsque vous vous connectez à distance à l'aide chut utilisateur sur hôte local, la variable devient disponible.

$ ssh $ écho $ var2

Pour supprimer cette variable, supprimez simplement la ligne dans le fichier .bash_profile que vous avez ajouté et relisez le fichier.

NOTE. Ces variables seront disponibles à chaque connexion pour l'utilisateur actuel, mais pas pour les autres utilisateurs.

3. Définition et suppression des variables d'environnement système sous Linux.

a) Pour ajouter une variable système sans connexion (c'est-à-dire une variable disponible pour tous les utilisateurs lorsque l'un d'eux ouvre un nouveau terminal, mais pas lorsqu'il y a accès à distance n'importe quel utilisateur de la machine) ajouter cette variable au fichier /etc/bash.bashrc.

Export VAR="Ceci est une variable à l'échelle du système"

Relisez ensuite le fichier.

$source /etc/bash.bashrc

Cette variable sera désormais disponible pour chaque utilisateur lorsqu'il ouvrira un nouveau terminal.

$ echo $VAR $ sudo su $ echo $VAR $ su - $ echo $VAR

Ici, la variable est disponible à la fois pour l'utilisateur root et pour l'utilisateur normal. Vous pouvez le vérifier en vous connectant en tant qu'utilisateur différent.

b) Si vous souhaitez qu'une variable d'environnement soit disponible lorsque l'un des utilisateurs de votre ordinateur s'est connecté à distance mais n'a ouvert aucun nouveau terminal sur ordinateur local, vous devez éditer le fichier − /etc/profil .

Export VAR1="Il s'agit d'une variable à l'échelle du système pour les sessions à distance uniquement"

Après avoir ajouté la variable, il suffit de relire le fichier. Ensuite, la variable sera disponible.

$source/etc/profil $echo $var1

Pour supprimer cette variable, supprimez la ligne du fichier /etc/profil et relisez-le.

c) Cependant, si vous souhaitez ajouter une variable à n'importe quel environnement où vous souhaitez être disponible à l'échelle du système, à la fois pour les sessions de connexion à distance et les sessions locales pour tous les utilisateurs, exportez simplement la variable vers /etc/environnement.

Export VAR12="Je suis disponible partout"

Après cela, relisez simplement le fichier et les modifications prendront effet.

$ source /etc/environnement $ echo $VAR12 $ sudo su $ echo $VAR12 $ exit $ ssh localhost $ echo $VAR12

Ici, nous pouvons voir que la variable d'environnement est disponible pour l'utilisateur normal, l'utilisateur root, ainsi que pour la session de connexion à distance.

Pour effacer cette variable, supprimez simplement l'entrée dans le fichier /etc/environnement et relire le fichier.

NOTE. Les modifications prennent effet lorsque le fichier est relu /etc/environnement. Mais si ce n'est pas le cas, vous devrez peut-être vous déconnecter et vous reconnecter.

Posez des questions sur l'article dans les commentaires ci-dessous.

Merci d'avoir pris le temps de lire l'article !

Si vous avez des questions, posez-les dans les commentaires.

Abonnez-vous aux mises à jour de notre blog et restez au courant de l'actualité du monde de l'infocommunication!

Pour en savoir plus et vous démarquer parmi la foule des informaticiens, inscrivez-vous aux cours Cisco de la Cisco Academy, aux cours Linux du Linux Professional Institute

  • Nous vous poserons des questions sur un moment opportun pour pratiquer et vous ajuster : nous comprenons qu'il n'y a pas assez de temps pour étudier.
  • Si vous souhaitez un horaire individuel, nous en discuterons et le mettrons en œuvre.
  • Nous fixerons des délais clairs pour l'auto-organisation. Un curateur personnel vous contactera pour répondre à vos questions, vous conseiller et vous motiver à respecter les délais de réussite aux examens.
  • Nous vous aiderons également :

    Les variables d'environnement sous Linux sont des variables spéciales définies par le shell et utilisées par les programmes lors de l'exécution. Ils peuvent être définis par le système et l'utilisateur. Les variables d'environnement du système Linux sont définies par le système et utilisées par les programmes au niveau du système.

    Par exemple, la commande PWD utilise une variable système pour conserver l'ancien répertoire de travail. Les variables d'environnement utilisateur sont définies par l'utilisateur, pour le shell courant, de manière temporaire ou permanente. Tout le concept d'ajout et de suppression de variables shell tourne autour de plusieurs fichiers, commandes et divers shells.

    Plus largement, une variable d'environnement peut être de trois types :

    1. Variables d'environnement locales

    Ces variables ne sont définies que pour la session en cours. Ils seront définitivement effacés après la fin de la session, qu'il s'agisse d'un accès distant ou d'un émulateur de terminal. Ils ne sont stockés dans aucun fichier, mais sont créés et supprimés à l'aide de commandes spéciales.

    2. Variables du shell utilisateur

    Ces variables shell Linux sont définies pour un utilisateur spécifique et sont chargées chaque fois que l'utilisateur se connecte à l'aide d'un terminal local ou se connecte à distance. Ces variables sont généralement stockées dans des fichiers de configuration : .bashrc, .bash_profile, .bash_login, .profile ou d'autres fichiers situés dans le répertoire de l'utilisateur.

    3. Variables d'environnement système

    Ces variables sont disponibles dans tout le système, pour tous les utilisateurs. Ils sont chargés au démarrage du système à partir des fichiers de configuration système : /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

    Fichiers de configuration des variables d'environnement Linux

    Ici, nous allons jeter un coup d'œil aux différents fichiers de configuration répertoriés ci-dessus, qui sont utilisés pour définir des variables d'environnement pour l'ensemble du système ou un utilisateur spécifique.

    .bashrc

    Il s'agit d'un fichier de variables spécifique à l'utilisateur. Il est chargé chaque fois que l'utilisateur crée une session de terminal, c'est-à-dire qu'il ouvre un nouveau terminal. Toutes les variables d'environnement créées dans ce fichier prennent effet à chaque démarrage d'une nouvelle session de terminal.

    .bash_profile

    Ces variables prennent effet chaque fois qu'un utilisateur se connecte à distance via SSH. Si ce fichier est manquant, le système recherchera .bash_login ou .profile.

    /etc/environnement

    Ce fichier sert à créer, modifier et supprimer toutes les variables d'environnement au niveau du système. Les variables d'environnement créées dans ce fichier sont disponibles pour l'ensemble du système, pour chaque utilisateur, et même lorsqu'il est connecté à distance.

    /etc/bash.bashrc

    Système bashrc. Ce fichier est exécuté pour chaque utilisateur, chaque fois qu'il crée une nouvelle session de terminal. Cela ne fonctionne que pour les utilisateurs locaux, lorsqu'ils sont connectés via Internet, ces variables ne seront pas visibles.

    /etc/profil

    Le profil de fichier système. Toutes les variables de ce fichier sont accessibles à tous les utilisateurs du système uniquement s'ils sont connectés à distance. Mais ils ne seront pas disponibles lors de la création d'une session de terminal local, c'est-à-dire si vous venez d'ouvrir un terminal.

    Toutes les variables d'environnement Linux créées avec ces fichiers peuvent être supprimées en les supprimant simplement à partir de là. Seulement après chaque modification, vous devez soit vous déconnecter et vous reconnecter, soit exécuter cette commande :

    nom du fichier source

    Ajout de variables d'environnement utilisateur et système sous Linux

    Maintenant que vous connaissez un peu la théorie, passons à la pratique. Les variables d'environnement locales sous Linux peuvent être créées avec les commandes suivantes :

    var=valeur
    $ export var=valeur

    Ces variables ne seront disponibles que pour la session de terminal en cours.

    Plusieurs commandes peuvent être utilisées pour supprimer les variables d'environnement :

    1. Utiliser env

    Par défaut, env peut être utilisé pour afficher toutes les variables d'environnement définies. Mais avec l'option -i, cela vous permet de supprimer temporairement toutes les variables shell et d'exécuter la commande sans variables.

    commande env -i

    Var est n'importe quelle variable que vous souhaitez transmettre à cette commande.

    Cette commande démarrera un shell sans aucune variable d'environnement :

    Après avoir démarré un tel environnement, aucune variable ne sera disponible, mais après la sortie, tout reviendra à sa place.

    2. Utiliser unset

    C'est une autre façon de supprimer les variables d'environnement Linux. Unset supprime une variable par son nom jusqu'à la fin de la session en cours :

    unset nom_variable

    3. Définissez la valeur de la variable sur ""

    C'est le moyen le plus simple de supprimer des variables d'environnement sous Linux, en définissant une variable pour qu'elle soit vide, vous la supprimez pour le reste de la session en cours.

    Remarque : à l'aide de ces méthodes, vous pouvez modifier les valeurs des variables système ou utilisateur, mais elles ne seront pertinentes que pour la session en cours.

    Création de variables d'environnement utilisateur et système

    Dans cette section, nous verrons comment définir et supprimer des variables système et utilisateur non seulement pour la session en cours, mais pour que l'effet persiste après un redémarrage.

    1. Définir et supprimer des variables locales sous Linux

    Créons une variable locale VAR et définissons-la sur n'importe quelle valeur, puis supprimons-la avec unset et assurons-nous qu'elle est supprimée :

    VAR1="Perte"
    $ écho $VAR1
    $ unset VAR1
    $ écho $VAR1

    Une autre façon de créer une variable consiste à utiliser la commande d'exportation. Supprimez-le en attribuant une valeur vide :

    export VAR="Perte"
    $ écho $VAR
    $var=
    $ écho $VAR

    Créons maintenant une variable VAR2 et donnons-lui une valeur. Et puis supprimez temporairement toutes les variables locales en exécutant env -i. Il démarrera le shell sans aucune variable. Après avoir tapé exit, toutes les variables seront restaurées.

    VAR2="Perte"
    $ écho $VAR2
    $ env -i bash
    $ écho $VAR2

    Définition et suppression de variables utilisateur

    Modifiez le fichier .bashrc dans votre répertoire personnel en ajoutant une commande d'exportation pour exporter la variable souhaitée. Exécutez ensuite la commande source pour appliquer les modifications. Créons, par exemple, une variable CD :

    Ajoutez cette ligne (o, puis coller, puis Esc et :wq) :

    export CD="Ceci est la maison perdue"

    Reste maintenant à mettre à jour la configuration :

    source .bashrc
    $écho $CD

    Pour supprimer cette variable, supprimez-la simplement de .bashrc.

    Ajoutons maintenant une variable d'environnement avec .bash_profile. Cette variable, comme vous le savez déjà, ne sera disponible que lorsque vous vous connecterez à distance :

    vi .bash_profile

    Ajouter une ligne :

    export VAR2="Ceci est la maison perdue"

    Et exécutez ces commandes pour appliquer les modifications et tester l'ajout de variable :

    source .bash_profile
    $ écho $VAR2

    La variable n'est pas disponible car vous avez créé une session de terminal local, connectez-vous maintenant via ssh :

    chut [courriel protégé]
    $ écho $VAR2

    Vous pouvez supprimer cette variable d'environnement de la même manière que dans le cas précédent en la supprimant du fichier.

    Commentaire: Ces variables sont toujours disponibles, mais pas pour tous les utilisateurs.

    Définition et suppression des variables d'environnement système

    Créons une variable accessible à tous les utilisateurs dans toutes les sessions de terminal, à l'exception des sessions distantes, en l'ajoutant à /etc/bash.profile :

    vi /etc/bash.profile

    export VAR="Ceci est une variable à l'échelle du système"

    Puis on met à jour :

    source /etc/bash.bashrc

    Cette variable est désormais disponible pour tous les utilisateurs, dans tous les terminaux :

    écho $VAR
    $ sudo su
    $ écho $VAR
    $su-
    $ écho $VAR

    Si vous souhaitez rendre la variable d'environnement accessible à tous les utilisateurs qui se connectent à cette machine à distance, modifiez le fichier /etc/profile :

    export VAR1="Il s'agit d'une variable à l'échelle du système pour les sessions à distance uniquement"

    Mettez à jour la configuration, et vérifiez la disponibilité de la variable, elle ne sera disponible qu'à distance :

    source /etc/profil
    $ écho $VAR1

    Si vous devez ajouter une variable d'environnement sous Linux afin qu'elle soit disponible à la fois pour les sessions distantes et locales, exportez-la vers /etc/environment :

    vi /etc/environnement

    export VAR12="Je suis disponible partout"

    Nous vérifions:

    source /etc/environnement
    $ écho $VAR12
    $ sudo su
    $ écho $VAR12
    $sortie
    $ ssh localhost
    $ écho $VAR12

    Variables d'environnement ( variable d'environnement) sont utilisés pour stocker les valeurs communes des variables dans les scripts et les programmes. Ces variables peuvent être définies pour une période de temps, par exemple, pour la période de fonctionnement d'un shell de terminal spécifique, ou pour la période d'une session utilisateur, ou vous pouvez définir une variable d'environnement au niveau global - pour l'ensemble du système .

    Variables d'environnement

    $MAISON
    La variable contient le chemin d'accès au répertoire personnel de l'utilisateur actuel. $USER
    Nom d'utilisateur actuel $PATH
    Liste des répertoires permettant au shell de rechercher des programmes exécutables. $PWD
    Le chemin d'accès au répertoire de travail actuel (ou pwd). Exemple : dir_path=$(pwd) . $SHELL
    Interprète par défaut $RANDOM
    Génère un nombre aléatoire 0..32767 à chaque accès à la variable. $SECONDES
    Temps en sec. depuis le début du shell. $ ? Le résultat de la commande précédente. $HOSTNAME
    Nom de l'ordinateur $HISTFILE
    Chemin d'accès au fichier d'historique de l'interpréteur $IFS
    Liste des caractères séparateurs pour les commandes, paramètres, éléments de tableau (par défaut : espace, tabulation, retour à la ligne) $PS1
    Modèle de chaîne d'invite d'interpréteur.

    Définir temporairement une variable d'environnement

    Définition d'une variable d'environnement pour la période de session :

    # Pour un nouveau processus env varname=value [commande] # Pour le shell actuel et tous ses sous-processus export varname=value [commande]

    La valeur de la variable est conservée jusqu'au redémarrage du système.

    Définition d'une valeur constante

    Les variables d'environnement au niveau du système sont définies via le fichier /etc/environment :

    ENVIRONNEMENT="dev"

    Définition d'une variable d'environnement spécifique à l'utilisateur via ~/.bashrc ou ~/.bash_profile :

    CHEMIN="$(CHEMIN):/home/utilisateur/bin :"

    Attention!

    Le fichier ~/.bash_profile sera exécuté au démarrage de l'interpréteur avec l'option -l. Lorsque vous êtes connecté localement, ce fichier n'est pas lisible !

    Vous devez également vous rappeler que les modifications ne prendront effet qu'après le redémarrage de la session !

    Affichage de la valeur d'une variable d'environnement

    Pour afficher la valeur d'une variable d'environnement, utilisez la commande printenv :

    Impressionv<имя_переменной>

    #shell, #bash, #environnement

    Lorsqu'il travaille avec le serveur, le shell compile de nombreuses informations qui déterminent son comportement et l'accès aux ressources. Certaines de ces options se trouvent dans les paramètres du shell, d'autres sont déterminées par l'entrée de l'utilisateur.

    L'un des moyens par lesquels le shell garde une trace de ces informations consiste à utiliser l'environnement. L'environnement est une zone contenant des variables définissant le système que le shell construit à chaque démarrage d'une session.

    Ce guide explique comment interagir avec l'environnement et lire ou définir des variables d'environnement et de shell de manière interactive et via des fichiers de configuration. Toutes les étapes sont effectuées sur un VPS Ubuntu 12.04, mais tout Répartition Linux devrait fonctionner de la même manière.

    Fonctionnement de l'environnement et de ses variables

    Chaque fois qu'une session shell est activée, un processus est démarré pour collecter et compiler les informations qui doivent être disponibles pour le shell et ses processus enfants. Le shell obtient ces données à partir de nombreux fichiers et paramètres différents sur le système.

    En général, l'environnement fournit un support de transmission qui collecte et spécifie paramètres nécessaires processus shell, qui à son tour les transmet à ses processus enfants.

    L'environnement se présente sous la forme d'une chaîne contenant des paires clé-valeur. Les valeurs multiples sont généralement séparées par un caractère deux-points (:). Chaque paire, en général, ressemble à ceci :

    KEY=valeur1:valeur2 :...

    Si la valeur contient des espaces, des guillemets doubles doivent être utilisés :

    KEY="valeur avec espaces"

    Dans ce cas, la clé désigne les variables de l'un des deux espèces existantes: variables d'environnement ou shell.

    Variables d'environnement sont des variables qui ont été définies pour le shell actuel et sont héritées par tous les shells ou processus enfants. Les variables d'environnement sont utilisées pour transmettre des informations aux processus démarrés à partir d'un shell.

    Variables d'interpréteur de commandes sont des variables qui sont contenues exclusivement dans le shell dans lequel elles ont été définies ou définies. Ils sont souvent utilisés pour garder une trace des données actuelles (comme le répertoire de travail actuel).

    En règle générale, ces variables sont désignées par des lettres majuscules. Cela aide les utilisateurs à distinguer les variables d'environnement dans d'autres contextes.

    Sortie des variables shell et d'environnement

    Chaque session garde une trace de son shell et de ses variables d'environnement. Il existe plusieurs façons de les faire sortir.

    Pour afficher une liste de toutes les variables d'environnement, utilisez les commandes env ou printenv. Par défaut, ils afficheront exactement le même résultat :

    printenv
    COQUE=/bin/bash
    TERME=xterme
    USER=désuser
    LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd= 40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:...
    MAIL=/var/mail/demouser
    CHEMIN=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
    PWD=/home/demouser
    LANG=en_US.UTF-8
    SHLVL=1
    HOME=/home/demouser
    LOGNAME=désuser
    MOINS OUVRIR=| /usr/bin/lesspipe %s
    MOINSCLOSE=/usr/bin/lesspipe %s %s
    _=/usr/bin/printenv

    Ceci est un exemple typique de la sortie des commandes printenv et env. Ces commandes ne diffèrent que par quelques fonctions individuelles. Par exemple, printenv peut demander les valeurs de variables individuelles :

    printenv SHELL
    /bin/bash

    La commande env vous permet de modifier l'environnement dans lequel les programmes sont exécutés en passant un ensemble de définitions de variables à la commande, quelque chose comme ceci :

    env VAR1="blablabla" command_to_run command_options

    Comme mentionné ci-dessus, les processus enfants héritent généralement des variables d'environnement du processus parent, ce qui permet de modifier des valeurs ou d'introduire des variables supplémentaires pour les processus enfants.

    Comme vous pouvez le voir dans la sortie de la commande printenv, de nombreuses variables d'environnement sont créées par les fichiers système et les processus sans intervention de l'utilisateur.

    Mais comment voyez-vous les variables shell ?

    La commande set est utilisée pour cela. Lorsqu'il est entré sans options supplémentaires, set répertorie toutes les variables shell, les variables d'environnement, les variables locales et les fonctions shell :

    ensemble
    BASH=/bin/bash
    BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
    BASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_CMDS=()
    . . .

    En règle générale, cette liste est assez longue. Pour l'afficher dans un format plus pratique, ouvrez-le avec un programme de téléavertisseur :

    Cette liste contient une énorme quantité d'informations supplémentaires qui ne sont pas nécessaires pour le moment (par exemple, certaines fonctions bash).

    Pour "nettoyer" la sortie, vous devez exécuter la commande set en mode POSIX, qui ignore les fonctions du shell. Cela doit être fait dans un sous-shell afin de ne pas modifier l'environnement actuel :

    (set -o posix; set)

    Cette action listera toutes les variables d'environnement et de shell.

    Vous pouvez également comparer ce résultat avec le résultat des commandes env/printenv et essayer de lister uniquement les variables shell, mais une telle liste ne sera pas idéale, car ces commandes impriment les informations différemment :

    com-23<(set -o posix; set | sort) <(env | sort)

    Très probablement, la liste contiendra plusieurs variables d'environnement, car la commande set imprime les valeurs entre guillemets, mais pas les commandes printenv et env.

    Cependant, c'est un excellent moyen d'afficher les variables d'environnement et de shell définies dans une session donnée.

    Ces variables sont utilisées à toutes sortes de fins. Ils offrent un autre moyen de définir des valeurs de session persistantes entre les processus sans avoir à apporter de modifications au fichier.

    Environnement de base et variables shell

    Certaines variables d'environnement et de shell particulièrement utiles sont très couramment utilisées.

    Voici une liste des principales variables d'environnement :

    • COQUILLE: décrit le shell qui interprète les commandes saisies. Dans la plupart des cas, bash est défini par défaut, mais cette valeur peut être modifiée si nécessaire.
    • TERME: spécifie le type de terminal émulé au démarrage du shell. Différents terminaux matériels peuvent être émulés en fonction des exigences opérationnelles. Généralement, vous n'avez pas à vous en soucier.
    • UTILISATEUR: utilisateur actuel.
    • personne handicapée: répertoire de travail courant.
    • OLDPWD: répertoire de travail précédent. Le shell le conserve au cas où vous exécuteriez la commande cd -.
    • LS_COULEURS: spécifie les codes de couleur utilisés pour coder en couleur la sortie de la commande ls. Une telle sortie aide l'utilisateur à lire plus rapidement le résultat de la commande (par exemple, pour distinguer rapidement les types de fichiers).
    • POSTER: chemin d'accès à la boîte aux lettres actuelle de l'utilisateur.
    • CHEMIN: Liste des répertoires auxquels accède le système lors de l'exécution des commandes. Lorsque l'utilisateur exécute la commande, le système vérifie ces répertoires dans l'ordre spécifié pour l'exécutable.
    • LANGUE: paramètres de langue et de localisation actuels, y compris l'encodage des caractères.
    • MAISON: répertoire personnel de l'utilisateur courant.
    • _ : dernière commande exécutée.

    Après avoir examiné la liste des variables d'environnement, examinez la liste des variables shell :

    • BASHOPTS: liste des options utilisées lors de l'exécution de bash. Cela peut être utilisé pour vérifier si l'environnement fonctionne correctement.
    • FRAPPER_VERSION: la version courante de bash sous une forme lisible par l'homme.
    • FRAPPER_VERSINFO: version bash au format lisible par machine.
    • COLONNES: définit la largeur de la sortie en colonnes.
    • DIRSTACK: la pile de répertoires disponibles pour les commandes pushd et popd.
    • HISTFILESIZE: Le nombre maximum de lignes contenues dans le fichier d'historique des commandes.
    • TAILLE D'HIST: Nombre de commandes à mémoriser dans la liste historique.
    • NOM D'HÔTE: nom d'hôte actuel.
    • IFS : Séparateur interne pour les champs de saisie sur la ligne de commande. La valeur par défaut est un espace.
    • PS1: définit la chaîne d'invite principale - l'apparence de la ligne de commande lors du démarrage d'une session shell. La variable PS2 définit la chaîne d'invite secondaire si la commande s'étend sur plusieurs lignes.
    • COQUILLES: options du shell qui peuvent être définies avec set.
    • UID: L'identifiant unique de l'utilisateur actuel.

    Définition des variables shell et d'environnement

    Vous trouverez ci-dessous quelques exemples pour démontrer la différence entre les variables shell et d'environnement et expliquer la syntaxe de définition de ces variables.

    Création de variables shell

    Vous devez d'abord définir les variables shell de la session en cours. C'est très simple, il vous suffit de fournir un nom et une valeur. Comme déjà mentionné, les majuscules sont utilisées pour écrire les noms de ces variables.

    TEST_VAR="Bonjour le monde !"

    Cet exemple utilise des guillemets car la valeur contient des espaces. De plus, les guillemets simples doivent être utilisés ici, car le point d'exclamation est un caractère spécial dans le shell bash qui fait référence à l'historique des commandes, sauf s'il est échappé ou entouré de guillemets simples.

    Ainsi, la variable shell résultante est valide dans la session en cours, mais n'est pas transmise à ses processus enfants.

    Pour vérifier cela, utilisez la commande grep sur le résultat de la commande set :

    ensemble | grep TEST_VAR
    TEST_VAR="Bonjour le monde !"

    Vous pouvez également vérifier que la variable donnée n'est pas une variable d'environnement en exécutant grep sur le résultat de la commande printenv :

    printenv | grep TEST_VAR

    Cette action ne produira aucun résultat.

    Cela peut être utilisé pour ouvrir la valeur de n'importe quelle variable de shell ou d'environnement.

    écho $TEST_VAR
    Bonjour le monde!

    Comme vous pouvez le voir, pour faire référence à la valeur d'une variable, vous devez utiliser le symbole $.

    Encore une fois, la variable résultante ne doit être transmise à aucun processus enfant. Pour tester cela, dans votre shell actuel, développez un nouveau shell bash :

    frapper
    écho $TEST_VAR

    Si vous développez un shell enfant et essayez d'ouvrir le contenu d'une variable, rien ne s'affichera. Cela signifie que tout fonctionne correctement.

    Pour revenir à votre shell d'origine, tapez exit :

    Création de variables d'environnement

    Essayez maintenant de transformer la variable shell en variable d'environnement. Cela se fait en exportant une variable. La commande qui effectue l'exportation a un nom correspondant.

    Cette commande transforme une variable shell en variable d'environnement. Pour vérifier si tout est fait correctement, vous pouvez revoir la liste des variables d'environnement :

    printenv | grep TEST_VAR
    TEST_VAR=Bonjour le monde !

    Maintenant cette variable est affichée dans cette liste. Vous pouvez également développer à nouveau le shell enfant :

    frapper
    écho $TEST_VAR
    Bonjour le monde!

    Super! Le shell enfant a obtenu la variable shell parent. Essayez d'exporter une autre variable avant de quitter le shell enfant.

    export NEW_VAR="Test d'exportation"

    Vérifiez si la variable a été exportée :

    printenv | grep NEW_VAR
    NEW_VAR=Test d'exportation

    Revenez maintenant au shell d'origine :

    Vérifiez si la variable donnée peut être ouverte :

    Le résultat n'est pas retourné

    En effet, les variables d'environnement ne sont transmises qu'aux processus enfants. Il n'existe aucun moyen intégré de définir les variables d'environnement du shell parent. Dans la plupart des cas, cela empêche les programmes d'affecter l'environnement d'exploitation à partir duquel ils ont été lancés.

    La variable NEW_VAR a été définie en tant que variable d'environnement shell enfant. Cette variable est valide pour ce shell et ses shells et processus enfants. Une fois que l'utilisateur est revenu au shell d'origine, cet environnement a été détruit.

    Déplacer et réinitialiser des variables

    La variable TEST_VAR est toujours une variable d'environnement. Pour en faire à nouveau une variable shell, tapez :

    exporter -n TEST_VAR

    Désormais, cette variable n'est plus une variable d'environnement :

    printenv | grep TEST_VAR

    C'est encore une variable shell :

    ensemble | grep TEST_VAR
    TEST_VAR="Bonjour le monde !"

    Pour réinitialiser complètement une variable, qu'il s'agisse d'une variable d'environnement ou d'un shell, utilisez la commande unset :

    Assurez-vous qu'il n'y a plus une telle variable :

    Le résultat n'a pas été affiché car la variable a été réinitialisée.

    Réglage automatique des variables d'environnement

    Comme déjà mentionné, de nombreux programmes utilisent des variables d'environnement pour déterminer comment ils doivent fonctionner. Définir les variables nécessaires à chaque fois qu'un nouveau shell est créé est plutôt gênant. De plus, de nombreuses variables sont définies immédiatement lors de la saisie. Comment définir des variables automatiquement ?

    C'est un peu plus compliqué qu'il n'y paraît au premier abord car le shell bash lit beaucoup de fichiers de configuration.

    Types de session shell

    Le shell bash lit différents fichiers de configuration en fonction de la manière dont la session a été démarrée. Les deux premiers types de sessions qui définissent un shell sont la session de démarrage et la session enfant.

    Coquille de départ ou initiale(shell de connexion) est une session shell qui s'ouvre après l'autorisation de l'utilisateur. Si l'utilisateur se connecte à un terminal ou se connecte via SSH, un shell de démarrage sera ouvert.

    Si une nouvelle session est démarrée à partir d'une session autorisée (démarrage) (comme un nouveau shell bash a été démarré plus tôt dans les exemples), cette session sera filiale (non-connexion coquille). Pour ouvrir cette session, vous n'avez pas besoin de passer par la procédure d'autorisation.

    De plus, les sessions shell sont interactives et non interactives.

    séance interactive shells (shell interactif) est une session attachée à un terminal. Une session shell non interactive est une session qui n'est pas attachée à un terminal.

    Ainsi, les sessions shell sont classées selon les aspects suivants : start-child, interactive-non-interactive.

    Une session normale ouverte avec SSH est généralement une session de démarrage interactive. Un script exécuté via la ligne de commande s'exécute généralement dans une session enfant non interactive. Une session de terminal est constituée de diverses combinaisons de ces deux propriétés.

    En classant une session comme session de démarrage ou session enfant, le système comprend quels fichiers lire pour initialiser la session shell.

    Ainsi, tout d'abord, la session de démarrage récupère les configurations à partir du fichier /etc/profile. Il recherche ensuite le fichier de configuration du shell de démarrage dans le répertoire personnel de l'utilisateur pour récupérer les configurations définies par l'utilisateur.

    Une telle session lit les fichiers ~/.bash_profile, ~/.bash_login et ~/.profile et ne lit pas les autres fichiers.

    La session enfant lit à son tour /etc/baash.bashrc puis le fichier ~/.bash.rc de l'utilisateur pour déployer l'environnement.

    Les shells non interactifs lisent la variable d'environnement BASH_ENV et le fichier spécifié pour créer un nouvel environnement.

    Comment définir des variables d'environnement

    Comme vous pouvez le voir, les configurations sont dispersées dans différents fichiers.

    Cela rend le système très flexible, ce qui est utile dans certaines situations où vous devez définir différentes options pour les shells de démarrage et enfant. Cependant, ces shells utilisent généralement les mêmes paramètres.

    Heureusement, la plupart des distributions Linux spécifient le fichier de configuration du shell enfant comme source des configurations du shell de démarrage. Cela signifie que vous pouvez définir des variables d'environnement pour les deux sessions dans les fichiers de configuration du shell enfant.

    Généralement, les deux shells utilisent des variables d'environnement spécifiées par l'utilisateur. Cela signifie que vous pouvez définir ces variables dans le fichier ~/.bashrc.

    Ouvrez ce fichier :

    Très probablement, il contient déjà certaines données. La plupart des valeurs données ici sont des options bash et n'ont rien à voir avec les variables d'environnement. Les variables de ce fichier sont définies de la même manière que dans la ligne de commande :

    exporter VARNAME=valeur

    Après avoir entré toutes les variables nécessaires, fermez le fichier. Au prochain démarrage d'une session shell, les variables définies ici seront lues et transmises à l'environnement shell. Pour indiquer à la session en cours de lire le fichier donné, tapez :

    source ~/.bashrc

    Pour définir des variables à l'échelle du système, ajoutez-les à /etc/profile, /etc/bash.bashrc ou /etc/environment.

    Résultats

    Les variables shell et d'environnement sont toujours présentes dans toutes les sessions shell, il est donc particulièrement utile de savoir comment les utiliser. Ils peuvent être utilisés pour transmettre des configurations de processus parent à des processus enfants, ainsi que pour configurer des paramètres en dehors des fichiers.

    Dans certaines situations, cela offre un certain nombre d'avantages. Par exemple, certains mécanismes de déploiement s'appuient sur des variables d'environnement pour configurer les informations d'authentification. C'est pratique, car ces données importantes ne seront stockées dans aucun fichier, ce qui signifie qu'elles seront protégées de manière fiable contre les étrangers.

    Il existe de nombreuses autres situations plus courantes dans lesquelles il peut être nécessaire de lire des variables ou de modifier l'environnement du système. Les outils et méthodes décrits dans ce didacticiel constituent une excellente base pour développer des compétences dans le travail avec des variables et les utiliser correctement.

    Mots clés: ,
    mob_info