[logoP5] [logoCDC]





Des questions, des incertitudes. Voici des éléments de réponse pour :


8.Le shell

Article écrit par : Laurent Moineau

8. Le shell

***************************************************


8. Le shell

L’interpréteur de commandes ou shell est l’interface entre le système et l’utilisateur : c’est lui qui permet à ce dernier de taper des commandes et de les exécuter. Certaines commandes, comme cd, alias ou umask sont directement intégrées au shell : elle sont exécutées par le shell lui-même, dans le même processus. La liste de ces commandes dépend du shell choisi.

  • 8.1. Les différents shells

-  Le Bourne-Shell

C’est le premier shell écrit pour Unix par S. R. Bourne, d’où son nom ! C’est le shell de base d’Unix.

-  Le C Shell

Le C-shell est issu de l’université de Berkeley. Une partie de sa syntaxe étant influencée par le langage C, à qui il doit son nom, certaines fonctionnalités ont été ajoutées au Bourne-shell. Il est le précurseur des nouveautés qui ont été ensuite intégrées au Korn Shell. Dans la même « famille » on trouve tcsh qui est le shell par défaut des systèmes du monde BSD, comme FreeBSD.

-  Le Korn Shell

Le Korn-shell est un interpréteur de commandes disponible en standard à partir d’UNIX System V.4. Il est doté d’un langage de programmation compatible avec le Bourne-shell. Il a repris et amélioré les innovations du C-shell, et dispose de nombreuses extensions, permettant d’accélérer la saisie des commandes. On trouve sous Gnu/Linux une version libre du Korn Shell appelée pdksh.

-  Bash

Le « Bourne-Again Shell » est la version GNU du Bourne-shell. Il incorpore de nombreuses fonctionnalités présentes dans d’autres shells, comme le Korn ou le C-shell. C’est le shell par défaut de GNU/Linux.

Dans ce document, on traitera uniquement de bash.

  • 8.2. Les variables d’environnement

Lorsqu’un utilisateur ouvre une session, le système ouvre un login shell qui appartient à l’utilisateur.

Ensuite, tout dépend du niveau de démarrage choisi : mode console (niveau 3) ou mode graphique (niveau 5).

-  Mode console

Le système exécute la commande login -- utilisateur qui lance un login shell appartenant à l’utilisateur. Ce shell particulier est préfixé (cf. commande ps) par le caractère « - » (processus -bash). Le fichier /etc/profile va d’abord être exécuté : ce script va notamment définir les variables d’environnement PATH, USER et LOGNAME avant d’exécuter chaque fichier situé dans /etc/profile.d qui a une extension .sh. Ces fichiers vont définir à leur tour d’autres variables d’environnement qui seront disponibles − si l’utilisateur ne les redéfinit pas − durant toute la session.

Prenons l’exemple du script /etc/profile.d/Java.sh :

CLASSPATH=.:/opt/j2sdk1.4/lib/tools.jar
JAVA_PATH=/opt/j2sdk1.4
JAVA_HOME=/opt/j2sdk1.4
PATH=$PATH:/opt/j2sdk1.4/bin
export CLASSPATH JAVA_PATH JAVA_HOME PATH

Ce script sert à initialiser par défaut les variables CLASSPATH, JAVA_PATH et JAVA_HOME. Il redéfinit en outre la variable PATH en ajoutant au chemin de recherche le répertoire /opt/j2sdk1.4/bin où se situe l’exécutable java.

C’est l’exécution du fichier printer.sh qui définit le contenu de la variable PRINTER qui contient le nom de l’imprimante par défaut.

Le login shell va ensuite tester la présence chez l’utilisateur des fichiers .bash_profile et .bash_login (ce fichier n’existe pas chez nous) et les exécuter. Le fichier .bash_profile exécute par défaut et si il existe le fichier .bashrc.

Par défaut, l’exécution du fichier .bashrc entraîne celle du fichier /etc/bashrc qui va définir des fonctions globales du système comme le umask par défaut ou la variable PS1 qui définit le format du prompt par défaut. Le fichier vérifie ensuite s’il est déclenché par un login shell. Si ce n’est pas le cas, alors il exécute les fichiers situés dans /etc/profile.d.

On l’a vu, le login shell est déclenché à l’ouverture de la session. Quand on ouvre un terminal (ou que l’on tape la commande bash), un nouveau processus bash appartenant à l’utilisateur est chargé en mémoire. Là, il ne s’agit pas d’un login shell et il est donc nécessaire d’exécuter le ficher .bashrc.

-  Mode graphique

Ici c’est le Display Manager (avec gnome, gdm) qui se charge d’ouvrir la session. Par défaut, le fichier /etc/X11/gdm/Sessions/GNOME est exécuté : il exécute à son tour le fichier /etc/X11/xdm/Xsession avec comme paramètre « gnome ».

Ce script va lancer ensuite avec les droits de l’utilisateur la commande :

exec -l $SHELL -c "$SSHAGENT gnome-session"

où la variable SHELL a pour valeur le shell de l’utilisateur (chez nous « bash ») et SSHAGENT a pour valeur « /usr/bin/ssh-agent », ce qui veut dire que les informations de connection sont potentiellement passées dans un tunnel crypté. Ce qui donne :

exec -l bash -c "/usr/bin/ssh-agent gnome-session"

Ce qu’il est important de noter, c’est que le shell bash est exécuté avec l’option « -l » : on a donc bien affaire ici à un login shell qui, comme en mode console, va lire le contenu de /etc/profile et des scripts situés dans /etc/profile.d

En outre, le système exécute le fichier /etc/X11/xinit/xinitrc qui déclenche l’exécution des fichiers situés dans /etc/X11/xinit/xinitrc.d. On peut initialiser dans ce répertoire des variables d’environnement qui ne seront disponibles que pour les applications graphiques lancées depuis un menu.

L’utilisateur peut aussi créer un fichier .Xclients pour choisir, par exemple, un autre gestionnaire de fenêtres que celui proposé par défaut.

Bien sûr, ce mécanisme dépend étroitement du mécanisme choisi par chaque distribution Gnu/Linux.

  • 8.3. Les aliases

Sous Unix, les aliases sont des pseudo-commandes qui servent à redéfinir le comportement de certaines commandes ou à en créer de nouvelles.

Dans le répertoire /etc/profile.d est situé un fichier aliases.sh que nous avons créé et dont voici le contenu :

alias mv='mv -i'
alias rm='rm -i'
alias cp='cp -i'
alias c=clear
alias j='jobs -l'
alias lt='ls -alt -r --color'
alias h=' history|more'
alias Rm='/bin/rm'
alias smbpasswd='/usr/bin/smbpasswd -r diamant'
alias mysql='mysql -h opale'

On redéfinit par exemple les commandes cp, mv et rm en leur donnant le paramètre « -i » qui signifie interactif : l’utilisateur doit ainsi valider la suppression d’un fichier s’il utilise la version « aliassée » de la commande rm. En revanche, s’il tape :

$ \rm fichier

alors c’est la « vraie » commande rm qui est exécutée et dans ce cas la suppression du fichier est irrémédiable.

Tout utilisateur peut créer un alias en l’ajoutant dans son fichier .bashrc.

exemple :

alias kv="a=`uname -r`;echo La version du noyau est : \"$a\""

Cet alias, disponible en tapant simplement :

$ kv

dans un terminal peut être décomposée comme suit :

  • on initialise une variable nommée « a » en lui affectant le résultat de la commande uname -r

  • puis on affiche le texte « La version du noyau est : » suivi de la valeur de la variable « a ».

Notez que l’on exécute en fait deux commandes séparées par le signe " ;".





Retour Haut de Page










Cours Linux :

Introduction à GNU Linux

1.Introduction à LINUX
2.Configuration multi-systèmes
3.Environnement graphique GNOME
4.Gestion de fichiers
5.Le gestionnaire de fichiers nautilus
6.Gestion de processus
7.Les applications réseaux
8.Le shell

Services réseau

1. Le démarrage des services réseau sous Gnu/Linux
2. Le service dhcp
3. DNS
4. Le service httpd et apache
5. Samba
6. Le service de messagerie
7. Les services cryptés



Autres Rubriques :

.Accueil
.Le Centre de Calcul
.Réseau de l’UFR
.Linux
.Windows

Liens dans l’UFR :

.Licence Professionnelle
.UFR de Mathématique et Informatique
.Connexions (SSH) et Messageries (IMP ou TWIG) sécurisées

Liens Internet :

.Linux France
.Da Linux French Page
.Léa-Linux(pour débutants)
.Distribution RedHat
.Distribution Mandrake














Site réalisé par Thierry LECHIEN avec SPIP logiciel libre sous licence GNU/GPL. Hébergement à Paris5