Notes et transcriptions du cours “Administrez un système Linux” disponible sur la plateforme Openclassrooms.
Selon vos préférences vous avez peut-être déjà choisi votre émulateur de terminal et vous êtes prêt à exécuter vos premières actions d'administration. Mais pour cela, il va falloir parler le langage de Linux, c'est-à-dire utiliser un interpréteur de commandes, communément appelé shell.
Le shell est l'outil de communication privilégié entre l'administrateur et le système.
Mais c’est quoi exactement le shell ?
C'est un programme qui est exécuté lors de la connexion de l'administrateur sur une console ou un terminal. Il présente une interface en mode texte qui permet de saisir des commandes.
Le libellé shell, signifiant “coquille”, désigne probablement la première couche logicielle entourant le noyau, comme une coquille de noix entoure sa noix. L'utilisateur peut passer des commandes à partir du shell, qui est la première couche logicielle autour du noyau Linux
Le shell étant un programme en soi, il dispose de son propre protocole de communication, ainsi l'administrateur sera obligé de saisir les commandes sur un format qui est adapté et compréhensible par cet interpréteur de commandes.
Et à quoi ça sert, cet interpréteur de commandes ?
Le rôle principal du shell est d'exécuter les commandes saisies par l'administrateur lui permettant d'effectuer des appels systèmes vers le noyau.
Mais l'interpréteur de commandes fournit également d'autres fonctionnalités essentielles permettant de faciliter la tâche de l'administrateur.
Par exemple, la possibilité de traiter de manière automatique les résultats des commandes saisies, ou encore de rediriger ces informations dans des fichiers ou vers d'autres commandes. Nous reviendrons un peu plus loin dans ce chapitre sur les principales fonctionnalités du shell.
Le premier shell apparaît dans les années 70, suivant rapidement la création des premiers systèmes Unix. Ken Thompson, l'un des créateurs de Unix, invente son propre shell en 1971 et le nomme Thompson shell.
En 1977, Stephen Bourne écrit le Bourne shell qui devient une référence en matière d'interpréteur de commandes, avec des fonctionnalités très intéressantes dont les plus notables sont :
D'autres shells sont venus ensuite compléter la petite famille des interpréteurs de commandes pour systèmes Unix/Linux, je peux notamment citer :
Et moi sous Linux, je vais utiliser quel shell ?
Sous Linux, le shell standard est le Bash (pour Bourne Again Shell). Développé plutôt fin des années 80, cet interpréteur de commandes est un peu un condensé du meilleur de tous ses ancêtres.
Voyons tout de suite de quoi il est question !
Le shell exécuté lors de la connexion d'un utilisateur sur un terminal est configuré dans le fichier /etc/passwd.
Par exemple, pour afficher le shell utilisé par mon compte de connexion sur ma machine Linux, je peux lancer la commande suivante dans un terminal :
grep seb /etc/passwd
Le shell exécuté à la connexion de l'utilisateur est indiqué dans le champ numéro 7 (dernier champ) Les champs sont séparés par des “:”
Le shell exécuté à la connexion de l'utilisateur est indiqué dans le dernier champ (les champs sont séparés par des :).
/etc/passwd
et indiquer un interpréteur de commandes comme /usr/bin/nologin
ou /dev/zero
ou encore /dev/null
, garantit que l'utilisateur ne pourra jamais lancer de shell à la suite du processus d'authentification lors de la connexion.
Bash est un programme écrit en C, visant à respecter au maximum les standards POSIX concernant les interpréteurs de commandes. Il est livré en standard sur la plupart des distributions Linux SystemV/d (Les distributions BSD implémentent plutôt C Shell par défaut), il est compatible avec “presque toutes les versions de Unix” et est disponible également pour Windows !
Mais ça veut dire que je n’ai pas le choix du shell, finalement ? Et il a quoi de spécial par rapport aux autres ?
Si, vous avez le choix : souvenez-vous que Linux est plutôt du genre à ne rien imposer. C’est seulement que Bash est une variation avancée de Bourne shell ; toutes les fonctionnalités de son célèbre aïeul sont évidemment disponibles.
Mais… il propose également d'autres fonctionnalités dont vous ne pourrez plus vous passer :
$?
, ce mécanisme est très pratique pour interpréter le code et déterminer dans quelle condition le programme s'est terminé.Dans ce chapitre, vous avez :
Dans le chapitre suivant, je vous propose de mettre en pratique ces notions et de passer un peu de temps sous Bash pour effectuer vos premières actions d'administration. On y va ?