1 00:00:00,000 --> 00:00:09,240 Bienvenue sur Parlons Linux FR, aujourd'hui nous allons parler des variables d'environnement, 2 00:00:09,240 --> 00:00:16,120 c'est VIP du terminal, tout d'abord une petite introduction, tu ouvres ton terminal, 3 00:00:16,120 --> 00:00:20,520 tu tapes une commande et ça marche comme par magie, mais c'est tu comment ton système 4 00:00:20,520 --> 00:00:24,320 sait où chercher tes programmes, dans quelle langue t'afficher les messages ou encore 5 00:00:24,320 --> 00:00:29,920 quel utilisateur tu es ? Et bien derrière tout ça il y a des petites ouvrières silencieuses 6 00:00:30,520 --> 00:00:34,800 les variables d'environnement, ce sont elles qui définissent le comportement de ton système 7 00:00:34,800 --> 00:00:39,760 et de tes logiciels sans que tu aies besoin d'y penser, mais alors comment fonctionne-t-elle 8 00:00:39,760 --> 00:00:46,800 ou les trouver, comment les modifier, c'est ce qu'on va voir ensemble. Qu'est-ce qu'une 9 00:00:46,800 --> 00:00:50,720 variable d'environnement ? Une variable d'environnement c'est une paire de clés 10 00:00:50,720 --> 00:00:56,640 valeurs qui stockent une information utilisée par le système ou les applications, on va prendre 11 00:00:56,640 --> 00:01:01,520 quelques exemples classiques, la variable USER qui contient le nom de l'utilisateur actuel, 12 00:01:01,520 --> 00:01:08,400 la variable HOME qui indique le chemin du dossier personnel, la variable LANG qui définit la 13 00:01:08,400 --> 00:01:13,800 langue du système, ou la variable SHELL qui indique quel interpréter de comment on est utilisé, 14 00:01:13,800 --> 00:01:22,400 si c'est du bash, du ZSH ou tout autre interpréteur ou émulateur. Chaque programme peut 15 00:01:22,400 --> 00:01:28,880 consulter ces variables pour adapter son comportement. Il existe des règles et conventions 16 00:01:28,880 --> 00:01:42,520 pour ces variables, notamment la sensibilité à la casse, une variable écrit en majuscule 17 00:01:42,520 --> 00:01:49,600 est différente de cette même variable écrit en minuscule, notamment en parlant de majuscule, 18 00:01:50,000 --> 00:01:53,920 c'est une convention pour les distinguer des variables de script. 19 00:01:53,920 --> 00:02:04,360 Les variables ne doivent pas utiliser d'espace dans leur nom, on utilise par exemple l'underscore (_) 20 00:02:04,360 --> 00:02:14,560 pour créer des espaces. Et également attention au conflit, modifier la variable PATH sans 21 00:02:14,560 --> 00:02:19,320 précaution peut empêcher le système de trouver ses commandes. On va y revenir sur cette 22 00:02:19,320 --> 00:02:25,400 fameuse variable un petit peu plus loin. Mais d'abord, où sont stockés ces variables ? Selon 23 00:02:25,400 --> 00:02:32,320 leur portée, les variables sont définies à différents endroits. Il y a d'abord les variables 24 00:02:32,320 --> 00:02:38,080 globales qui sont pour tous les utilisateurs, que ce soit des utilisateurs réels ou systèmes, 25 00:02:38,080 --> 00:02:47,080 elles sont généralement dans /etc/environnement ou /etc/profile, que je vous 26 00:02:47,080 --> 00:02:56,920 déconseille de modifier, nous le verrons par la suite, ou dans /etc/profile.d/ . Il 27 00:02:56,920 --> 00:03:02,760 y a également les variables spécifiques à un utilisateur, là ce sera dans votre dossier personnel 28 00:03:02,760 --> 00:03:10,640 ou dans le dossier personnel de l'utilisateur et elles seront soit dans le .bashrc ou dans 29 00:03:10,640 --> 00:03:17,120 le .bash_profile ou dans le .profile tout simplement. Et il y a également les variables 30 00:03:17,120 --> 00:03:23,680 de session uniquement, elles sont définies temporairement dans le shell avec la command export 31 00:03:23,680 --> 00:03:28,760 et si une variable est définie dans plusieurs fichiers, la dernière chargée l'emporte. 32 00:03:28,760 --> 00:03:40,440 Les variables critiques et notamment la variable PATH, PATH c'est où chercher les commandes. Le 33 00:03:40,440 --> 00:03:45,960 PATH c'est une variable essentielle qui définit où chercher les exécutables et donc vous le 34 00:03:45,960 --> 00:03:53,200 devinez un PATH mal configuré peut empêcher d'accéder aux commandes. Vous pouvez vérifier 35 00:03:53,200 --> 00:04:03,160 votre PATH avec la commande echo, $PATH, écrit en majuscule, c'est valable pour toutes les 36 00:04:03,160 --> 00:04:12,640 autres variables d'environnement, un echo $ vous permettra de récupérer l'information. Il y a 37 00:04:12,640 --> 00:04:20,280 des exemples dangereux à éviter, un exemple totalement aléatoire que je donne par exemple c'est de 38 00:04:20,400 --> 00:04:27,800 modifier la variable PATH en lui donnant comme valeur /tmp. Ici le système ne 39 00:04:27,800 --> 00:04:34,520 cherchera des commandes que dans /tmp et du coup ça risque de plus rien d'exécuter. En cas de 40 00:04:34,520 --> 00:04:42,200 manipulation hasardeuse de votre de vos variables vous pouvez les restaurer en faisant un source 41 00:04:42,320 --> 00:04:53,080 /etc/profile par exemple d'où l'intérêt de ne pas modifier ce dossier là ou du moins quand 42 00:04:53,080 --> 00:05:00,880 on est sûr de ce qu'on fait. Vous avez également les librairies partagées notamment les bibliothèques 43 00:05:00,880 --> 00:05:09,440 partagées du moins où il faut éviter de modifier par exemple ne pas ajouter de points au PATH sur 44 00:05:09,440 --> 00:05:18,440 une librairie partagée car ajouter le point c'est ajouter le dossier courant dans le PATH qui 45 00:05:18,440 --> 00:05:22,960 peut-être dangereux. Une commande d'exécuter dans un répertoire douteux pourrait remplacer une 46 00:05:22,960 --> 00:05:31,440 commande système par exemple et donc il faut préférer les chemins absolus par exemple / 47 00:05:31,440 --> 00:05:40,360 bin/ls /USER/bin/env. Voilà ça c'était pour les précautions d'usage 48 00:05:40,360 --> 00:05:47,440 et la nomenclature. Maintenant comment on fait pour manipuler ces variables d'environnement ? 49 00:05:47,440 --> 00:05:57,400 D'abord on va pouvoir les afficher donc comme je disais vous avez la commande echo quand vous 50 00:05:57,400 --> 00:06:02,920 connaissez les variables ou alors si vous voulez voir les variables qui sont disponibles pour 51 00:06:02,920 --> 00:06:08,680 l'utilisateur actuel celui que vous allez utiliser pour les commandes vous pouvez utiliser la 52 00:06:08,680 --> 00:06:18,120 commande env ou printenv. Ces deux commandes dans cet usage là font la même chose mais 53 00:06:18,120 --> 00:06:23,160 chacune de ces commandes a des options bien spécifiques et je vous invite à utiliser 54 00:06:23,160 --> 00:06:29,880 le manuel de ces commandes pour en apprendre plus. Vous pouvez également afficher une valeur 55 00:06:29,880 --> 00:06:35,760 spécifique. Vous verrez que le retour sera strictement le même en faisant un printen 56 00:06:35,760 --> 00:06:44,640 v USER. La seule différence c'est que le printenv USER, USER étant écrit en majuscule, 57 00:06:44,640 --> 00:06:53,040 il n'a pas besoin du dollar qui précède le nom de la variable là où quand on veut passer par 58 00:06:53,040 --> 00:07:01,680 echo il faudra utiliser le $USER le tout attaché. On peut définir une variable temporaire 59 00:07:01,680 --> 00:07:11,160 pour se faire c'est simple on utilise la commande export le nom de votre variable par exemple export 60 00:07:11,160 --> 00:07:20,200 pseudo= on ouvre les guillemets et on met un pseudo dans ces guillemets par exemple moi je vais 61 00:07:20,200 --> 00:07:28,680 mettre John. Une fois cela fait on tape entrée et puis on peut vérifier que cette variable est 62 00:07:28,680 --> 00:07:36,680 prise en compte en faisant echo dollar pseudo par exemple. Cette variable existera uniquement 63 00:07:36,680 --> 00:07:42,040 dans un section actuelle et là du coup vient la question mais comment on fait pour la ronde 64 00:07:42,040 --> 00:07:47,840 persistante pour qu'une variable soit conservée après le redémarrage il faut la stocker soit 65 00:07:47,840 --> 00:07:59,040 dans le point bas chrc ou dans le point profile. Comme je vous ai parlé de la méthode et que la 66 00:07:59,040 --> 00:08:09,600 commande source pour restaurer le passe je vous invite à utiliser plutôt le bas chrc au lieu 67 00:08:09,600 --> 00:08:16,960 du profile. Pour déteste cela fonctionne très bien et au moins au cas d'erreur vous pourrez 68 00:08:17,440 --> 00:08:26,000 ressourcer le point profile afin de récupérer un environnement utilisable. Il existe des variables 69 00:08:26,000 --> 00:08:43,280 internes. Ah non d'abord oui donc on peut faire echo simple guillemets export pseudo égal double 70 00:08:43,280 --> 00:08:53,360 guillemets dans mon cas John on ferme les guillemets double et les simples on fait un espace deux signes 71 00:08:53,360 --> 00:09:04,200 plus grand que puis point bas chrc ensuite nous pouvons sourcer c'est à dire recharger la configuration 72 00:09:04,200 --> 00:09:14,080 du bas chrc en faisant un source point bas chrc. Voilà votre variable est devenue persistante. Il y a 73 00:09:14,080 --> 00:09:23,440 des variables internes à bash. Ils en bash proposent ses propres variables internes qui 74 00:09:23,440 --> 00:09:29,640 influent son fonctionnement. Vous avez la variable random qui donne des chiffres aléatoires. Vous 75 00:09:29,640 --> 00:09:37,160 avez la variable second qui donne le temps écoulé depuis l'ouverture du shell. Vous avez la variable 76 00:09:37,160 --> 00:09:46,320 uid qui donne l'identifiant utilisateur à ne pas confondre avec la variable USER. La variable 77 00:09:46,320 --> 00:09:56,040 uid vous donnera des chiffres. Vous avez la variable pwd qui donne le répertoire actuel ou la variable 78 00:09:56,040 --> 00:10:08,680 old pwd tout attaché qui donne le répertoire précédent. Vous avez une commande qui vous permet 79 00:10:08,680 --> 00:10:15,600 de voir toutes ces variables qui sont internes à bash. La commande est un peu plus long. Vous 80 00:10:15,600 --> 00:10:29,920 les trouverez dans la note de l'émission qui est 7sct un espace tiré au posix point virgule 7. Le tout 81 00:10:29,920 --> 00:10:37,560 avec des parenthèses. Afin de consulter et de mieux comprendre et de conserver toutes ces variables 82 00:10:37,560 --> 00:10:43,420 pour des recherches, je vous invite à enregistrer ces variables dans un fichier texte pour les 83 00:10:43,420 --> 00:10:52,220 consulter plus tard, les trier, etc. Vous pouvez faire ceci en regardant les notes de l'émission qui 84 00:10:52,220 --> 00:11:03,640 sera plus parlant que ce que je vais dire à présent qui est parenthèse ou rentre 7 tiré au posix point 85 00:11:03,640 --> 00:11:10,820 virgule 7. Fermez les parenthèses un espace plus grand que votre nom de fichier texte variable 86 00:11:10,820 --> 00:11:21,820 bash.txt. Vous pouvez le vérifier que c'est bien enregistré en faisant un 4 variable.txt ou bien 87 00:11:21,820 --> 00:11:32,500 l'ouvrir avec votre éditeur de texte favori nano vim ou un éditeur de texte graphique. En 88 00:11:32,500 --> 00:11:36,980 conclusion les variables d'environnement sont la clé pour bien comprendre comment fonctionne un 89 00:11:36,980 --> 00:11:42,500 système Linux, elles permettent d'adapter son environnement à tes besoins et d'optimiser 90 00:11:42,500 --> 00:11:49,060 tes scripts. Bien les connaître, c'est éviter les erreurs et comprendre comment Linux gère son 91 00:11:49,060 --> 00:11:50,060 fonctionnement en coulisses.