2.4 - Découverte de l'environnement d'exécution (Shell)
Le terme anglais « shell » vient à l'origine de la terminologie employée avec les premiers systèmes d'exploitation de type Unix où il avait le sens plus spécifique de shell Unix. Cette appellation est une métaphore (on peut la traduire par coque en français) pour désigner la couche la plus haute des interfaces des systèmes Unix, par opposition à la couche de bas niveau, appelée noyau.
Les premiers concepteurs informatiques états-uniens avaient l’habitude de décrire les différentes couches logicielles d’un système par une analogie : celle du noyau et de la coque de noix.
En anglais, le mot « kernel » désigne le cerneau, la partie comestible du noyau de la noix. Il s’agit de la partie renfermée dans la coque. La coque étant la partie non comestible du fruit, appelée « shell » en anglais. L’idée sous-jacente étant que « pour accéder à la partie comestible (utile), il faut passer par la coque ».
L'expression très employée en anglais « in a nutshell » pour désigner l’essence d’un concept en un mot n’est pas étrangère à cette analogie.
Avec l'arrivée de la souris et des interfaces graphiques, cet anglicisme a fini par être démocratisé pour désigner tous les types d'interfaces entre l'homme et la machine (IHM) propre à chaque système d'exploitation, qu'elles soient textuelles ou graphiques. (source: Wikipedia)
2.4.1 - Environnement utilisateur
Au lancement d'un terminal, le shell (Bash, Zsh, Fish…) est exécuté et configuré au moyen de diverses variables d'environnement. Si vous ouvrez le manuel de bash (man bash) et que vous recherchez la chaine « FICHIERS » (/FICHIERS), vous trouverez la liste des fichiers dans lesquels sont déclarées ces variables qui influerons sur le comportement du shell.
Parmis ces fichiers, 2 en particulier sont manipulés par l'utilisateur pour adapter le shell à ces besoins :
- ~/.profile ou ~/.bash_profile qui sera exécuté dans tous les shells, au lancement.
- ~/.bashrc qui sera exécuté dans les shells interactifs.
Exemple : c'est l'endroit où vous pouvez configurer le prompt, c'est à dire la chaine de caractère qui vous invite à entrer une nouvelle commande. Le prompt est stocké dans la variable d'environnement PS1. Quelques lignes dans le fichier ~/.bashrc indique le prompt à utiliser et peuvent-êtres modifiées. Vous pouvez également modifier cette variable à chaud, interactivement.
Exemple :
# @client
# Sauvegarde du prompte actuel
PS1_backup="$PS1"
# On peut mettre n'importe quoi en guise de prompt
PS1='<3 '
# même le pire
PS1='C:\> '
# Retour à la normal
PS1="$PS1_backup"
👉 Il est important de noter qu'une variable est affecté sans le symbole dollar ($). Ensuite pour lire le contenu de la variable, il faut ajouter un dollar. (Ce n'est pas du PHP…)
⚠️ Dans les shells Unix, le nom de la variable, le signe égale et la valeur à affectée doivent être collés les uns aux autres ! Dans un shell, l'espace est vu comme la séparation entre une commande et un argument…
La variable IFS est très intéressante, c'est une chaine de caractère qui contient l'ensemble des caractères qui seront utilisés pour séparer des arguments. Par défaut, elle contient l'espace, la tabulation et le retour à la ligne. Il est pratique de modifier l'IFS pour lire des données.
Exemple :
# @client
# Affichage de la variable PATH brut
echo "$PATH"
# Sauvegarde de l'IFS actuel
IFS_backup="$IFS"
# Modification de l'IFS et parcours de la variable PATH
IFS=:
for addr in $PATH; do echo "- $addr"; done
# Restauration de l'IFS par défaut
IFS="$IFS_backup"
La variable PATH que l'on vient de parcourir contient l'ensemble des dossiers dans lesquels le shell essaiera de trouver les commandes que vous entrer sans préciser leurs chemins absolues. Ainsi, vous n'êtes pas obliger de saisir /usr/bin/ls mais simplement ls
👉 Pour connaitre l'adresse d'une commande, vous pouvez utiliser les commandes which ou command -v. Exemple : which firefox
Il y a beaucoup de variables d'environnement. Elles peuvent-être listées avec la commande env sans arguement.
2.4.2 - Alias
Lorsque l'on saisis régulièrement des commandes avec des arguments, ont peut s'épargner la peine de devoir tout saisir chaque fois avec des alias. Toujours dans le fichier ~/.bashrc il suffit d'ajouter des lignes de la forme : alias raccourci='une -commande -trop -longue -a -saisir'. Là aussi, un alias peut être défini à chaud.
Exemple :
alias ll='ls -lAh'
alias dstat='dstat -cdnt'
alias apti='sudo apt install'
alias aptr='sudo apt purge'
>>> Vous pouvez passer à l'installation du serveur Debian
