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.
Découvrez shell, ses origines, ses objectifs
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 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.
Découvrez les principaux shells sous Linux
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 :
L'écriture de fichiers contenant des suites de commandes, les fameux scripts sh (l'extension sh est un préfixe pour shell) ;
L'intégration d'un langage de programmation, avec des structures conditionnelles, itératives et la gestion des variables ;
La gestion des canaux d'entrée/sortie et des redirections via des tubes ;
La gestion de l'exécution de commandes en substitution avec les caractères back quotes : ``
Etc.
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 :
le C Shell, qui dispose d'un langage très proche du langage C (le langage natif des systèmes Unix/Linux) et donc très populaire pour cette raison ;
le KornShell, développé plus tard, début des années 80, apporte de son côté une amélioration du C Shell avec une intégration d'autres langages comme le Perl, le TCL par exemple, le support de tableaux associatifs, etc.
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 !
Découvrez Bash, le shell standard de Linux
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 dernier champ (les champs sont séparés par des :
).
Petite astuce : modifier le fichier /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. Et donc, il ne pourra pas faire grand chose… Mais chut ! Je ne vous ai rien dit… Revenons donc à Bash.
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 :
command linecompletion - Ce mécanisme permet à l'interpréteur de commandes de compléter automatiquement une saisie à partir des premiers caractères saisis. L'administrateur déclenche cette fonctionnalité en frappant la touche TAB pendant la saisie et Bash essaie de compléter la saisie en fonction de son sens : un chemin, une commande, un argument, une option, etc.
signal handling - Les signaux sont une forme de communication entre processus. Ils permettent d'émettre et de recevoir un ordre ou une information pendant leur exécution. L'exemple le plus connu est sûrement l'interruption clavier composée de la frappe des touches CTLR+C qui permet d'émettre le signal sigint (numéro 2). Si le processus écoute sur ce signal, il reçoit alors l'ordre d'interruption et se termine proprement.
exit code - L'interpréteur de commandes Bash permet de récupérer le code de sortie d'un programme dans une variable nommée
$?
, ce mécanisme est très pratique pour interpréter le code et déterminer dans quelle condition le programme s'est terminé.
En résumé
Dans ce chapitre, vous avez :
compris en quoi consiste un interpréteur de commandes,
découvert quelques shell connus,
appris que le shell exécuté après l’étape d’authentification est configuré dans le fichier
/etc/passwd
,et fait connaissance avec le shell standard de Linux : Bash.
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 ?