Shell Linux
Shell Linux
Shell Linux
L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom
anglais «shell», qui signifie «coquille».
Définition
L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation (SE), d'où
son nom anglais «shell», qui signifie «coquille».
Un shell Unix permet d'accéder aux fonctionnalités internes du système d'exploitation. Il se présente
sous la forme d'une interface en ligne de commande accessible depuis la console ou un terminal.
L'utilisateur lance des commandes sous forme d'une entrée texte exécutée ensuite par le shell. Dans
les différents systèmes d'exploitation Microsoft Windows, le programme analogue est command.com,
ou cmd.exe.
Rôle
Son rôle consiste ainsi à lire la ligne de commande, interpréter sa signification, exécuter la commande,
puis retourner le résultat sur les sorties.
Différents Shell
Le shell est un fichier exécutable chargé d'interpréter les commandes, de les transmettre au système
et de retourner le résultat. Il existe plusieurs shells, les plus courants étant :
• sh
• bash
• csh
• Tcsh
• ksh
• zsh
Les interpréteurs disponibles sur un système donné sont listés dans le fichier /etc/shells.
Chaque utilisateur possède un shell par défaut, qui sera lancé à l'ouverture d'une invite de commande.
Le shell par défaut est précisé dans le fichier de configuration /etc/passwd dans le dernier champ de
la ligne correspondant à l'utilisateur.
Il est possible de changer de shell dans une session en exécutant tout simplement le fichier
exécutable correspondant, par exemple : /bin/bash
- Mode interactif : attend les commandes saisies par un utilisateur puis renvoie le résultat de ces
commandes et se place à nouveau en situation d'attente.
- Mode batch (script) : interprète un fichier texte contenant les commandes à exécuter.
Invite de commande
Le shell s'initialise en lisant sa configuration globale (dans un fichier du répertoire /etc/), puis en lisant
la configuration propre à l'utilisateur (dans un fichier caché,situé dans le répertoire de base de
l'utilisateur, c'est-à-dire /home/nom_de_l_utilisateur/.fichier_de_configuration ), puis il affiche une invite
de commande (en anglais prompt) comme suit :
utilisateur@nom-de-poste repertoire-courant$.
Par défaut dans la plupart des shells le prompt est composé du nom de l'utilisateur, suivi du caractère
arobas (@) et le nom de la machine, du répertoire courant, puis d'un caractère indiquant le type
d'utilisateur connecté :
Les commandes sont à entrer à la suite de ce prompt qui indique qu'un interpréteur de commande est
prêt à les exécuter.
Les fichiers cachés dans les systèmes Linux commence toujours par un point
Exemple: Les fichiers personnels de l'utilisateur "tux" se situent dans le répertoire /home/tux.
Syntaxe
Une ligne de commande est une chaîne de caractères constituée d'une commande, correspondant à
un fichier exécutable du système ou bien d'une commande du shell ainsi que des arguments
(paramètres) optionnels.
ls –a -l /home/widedi/
Types de commande
Il existe plusieurs types de noms de commande associés à différents degrés de priorité. En suivant
l'ordre décroissant des priorités, lors de l'interprétation de ce premier mot, on trouve :
• Les commandes primitives (builtin en anglais) du bash qu'on peut appeler aussi commandes
internes. Le code de ces commandes est encapsulé directement dans l'exécutable /bin/bash
et un appel d'une telle commande ne crée pas de processus fils du shell courant. La
commande help affiche les commandes internes du shell
• Les commandes externes qui sont des programmes exécutables stockés dans l'un des
répertoires du PATH (par exemple find qui se trouve dans le répertoire /usr/bin/). Lors de
l'appel de ces commandes, le shell courant crée un processus fils dans lequel la commande
en question sera exécutée.
PATH est un variable d'environnement contenant les chemins des commandes externes.
Les commandes externes, peuvent s'appeler par leur nom ou par leur chemin complet :
Le symbole "~" signifie que nous sommes dans le repertoire personnel de l'utilisateur.
Résolution d'une commande
Lors de l'appel d'une commande, la résolution se fait en plusieurs étapes, dans cet ordre :
1. le shell courant regarde dans la liste des alias, puis dans la liste des mots clé si la commande
existe, s'il ne trouve rien il passe à l'étape suivante;
2. le shell courant regarde dans la liste des fonctions shell si la commande existe, s'il ne trouve
rien il passe à l'étape suivante;
3. le shell courant regarde dans la liste des commandes internes si la commande existe, s'il ne
trouve rien il passe à l'étape suivante;
→ Si Bash ne trouve aucune correspondance dans les alias, les commandes internes ou les
commandes externes avec le premier mot de la ligne, il renvoie un message d'erreur en faisant
précéder command not found du mot tapé en tête de ligne.
Options
Une option est souvent représentée par une lettre précédée du caractère « - ». Plusieurs options
peuvent être séparées par des espaces mais peuvent être aussi rassemblées pour former un mot
précédé par le caractère « -» :
~$ ls -l
~$ ls -a -l
~$ ls –al
Pour chaque commande il existe généralement un certain nombre d'options pouvant être détaillées en
tapant une des commandes suivantes :
• commande --help
• commande -?
• man commande
Pour afficher la liste des options de la commande date il suffit de lancer la commande suivante:
~$ man date
Arguements
Un argument représente souvent le chemin dans l'arborescence du système de fichiers. Ce chemin
peut être relatif ou absolu :
• /home/wided/../shell
• ./wided/formation/se/linux/module1/shell
• ../formation/se/linux/module1/shell
Tous les chemins qui commencent ou contient le caractère point "." ou deux points ".." sont des
chemins relatifs.
Entrées-sorties standard
Généralement le shell a trois fichiers ouverts, correspondants à trois descripteurs (parfois appelés
canaux ou flux). Lors de l'exécution d'une commande, un processus est créé. Celui-ci va alors ouvrir
ces flux :
• Le descripteur 0 : stdin, appelé entrée standard, dans lequel le processus va lire les données
d'entrée. Par défaut stdin correspond au clavier ; STDIN est identifié par le numéro 0 ;
• Le descripteur 1 : stdout, appelé sortie standard, dans lequel le processus va écrire les
données de sortie. Par défaut stdout correspond à l'écran ; STDOUT est identifié par le
numéro 1 ;
• Le descripteur 2 : stderr, appelé erreur standard, ou sortie d'erreur dans lequel le processus va
écrire les messages d'erreur. Par défaut stderr correspond à l'écran. STDERR est identifié par
le numéro 2 ; [2]
Par défaut lorsque l'on exécute un programme, les données sont donc lues à partir du clavier et le
programme envoie sa sortie et ses erreurs sur l'écran, mais il est possible de lire les données à partir
de n'importe quel périphérique d'entrée, voire à partir d'un fichier et d'envoyer la sortie sur un
périphérique d'affichage, un fichier, etc.
Le trou noir: Même si cela ne traite pas directement des redirections, il est important de connaitre un
fichier spécial nommé null. Il permet de rediriger un descripteur de fichier vers un fichier qui
supprimera toutes les données qui lui seront ajoutées. Il porte le nom d'absorbeur de données. Si par
exemple vous ne voulez pas voir le résultat d'une commande, il vous suffit de rediriger stdout vers
/dev/null : "ls >/dev/null".
Exemple
La commande suivante est équivalente à une copie de fichiers :
L'emploi de la redirection «<<» permet de lire sur l'entrée standard jusqu'à ce que la chaîne située à
droite soit rencontrée. Ainsi, l'exemple suivant va lire l'entrée standard jusqu'à ce que le mot STOP
soit rencontré, puis va afficher le résultat :
Un tube, symbolisé par une barre verticale (caractère «|»), permet d'affecter la sortie standard d'une
commande à l'entrée standard d'une autre, comme un tuyau permettant de faire communiquer l'entrée
standard d'une commande avec la sortie standard d'une autre.
Ainsi dans l'exemple suivant, la sortie standard de la commande ls -al est envoyée sur la commande
sort chargé de trier le résultat par ordre alphabétique:
ls -al | sort
Il est possible de cette façon de chaîner un certain nombre de commandes par tubes successifs.
Dans l'exemple suivant la commande affiche tous les fichiers du répertoire courant, sélectionne les
lignes contenant le mot "zip" (grâce à la commande grep) et compte le nombre de lignes total :
ls -l | grep zip | wc -l
La commande tee
La commande tee duplique le flux de données en sortie : elle copie la sortie dans un fichier (simple
redirection) et, en même temps, affiche le résultat sur la sortie standard, et permet donc de le renvoyer
à une autre commande.
La commande de l'exemple ci-dessous affiche à l'écran les lignes du fichier /etc/passwd et, en même
temps, les redirige dans le fichier le_fichier.
Méta-caractère
Un méta-caractère est un caractère qui possède une signification autre que sa signification littérale. «
* » ne représente pas pour Bash le caractère étoile, il le lit comme représentant n'importe quelle suite
de caractère ou une absence de caractère.
Les méta-caractères se divisent en deux classes, ceux qui se substituent à d'autres caractères et ceux
qui permettent de protéger des caractères. Ces derniers, employés seuls comme dans le cas de
l'antislash, ou par paires, forcent Bash à lire des caractères de façon littérale, c'est-à-dire que s'il est
protégé, le caractère « * » perd son statut de méta-caractère pour redevenir une « étoile ».
• ` : les guillemets inversés (backquotes, touches AltGr+7 sur un clavier français) provoquent une
interprétation de la chaîne de caractères incluse entre deux de ces caractères comme une
commande. Exemple : for file in `ls` ;
• ' : tous les caractères inclus entre deux de ces caractères sont interprétés comme du texte.
Introduction
Le manuel Linux ne fait pas que référencer les commandes classiques. C'est un manuel bien plus
complet que ça.
Les commandes simples, celles d'administration, les fichiers de configuration, les périphériques, les
appels systèmes, les fonctions de programmation de divers langages, et bien d'autres choses encore,
peuvent y être référencés. C'est pourquoi le manuel est composé de plusieurs sections distinctes.
Por la commande man qui affiche plusieurs pages, on peut se déplacer grâce aux touches de
directions, ou Espace et Entrée pour avancer, rechercher un mot avec la touche / suivi du mot, et on
sort avec la touche Q.
La commande apropos (ou whatis, si il y a eu un makewhatis) : apropos commande affiche une ligne
d'information sur l'objectif de la commande en question.
La commande info: Commande plus récente, elle permet, d'accéder à l'aide, hypertextuelle et parfois
encore plus complète que man.
Pour la commande info qui affiche plusieurs pages, le curseur vous permet de vous déplacer sur des
mots clefs (précédés d'une étoile), de valider pour afficher la page correspondante, n et p pour les
pages suivantes et précédentes (Next et Previous), espace et backspace pour avancer et reculer dans
la page, et q pour quitter l'aide.
Le --help : en général, les programmeurs ont prévu une aide succincte dans la commande, accessible
par l'option --help (ou -?)
les HOWTO : sont des description assez complètes d'ordre générique (comment fonctionne le SCSI,
qu'est-ce qu'un File System, comment graver des Cds, etc.).
Glossaire
/A-OPQ-Z
/
/etc/passwd
/etc/shells
Les interpréteurs disponibles sur un système donné sont listés dans ce fichier.
/home/
A-O
alias
mots définis comme synonymes d'un autre (groupe de) mot(s). Exemple ceux définies dans
.bashrc
builtin
commande
Une commande informatique est un mot ou une phrase, répondant à une syntaxe précise,
qui, entrée dans l'interface en ligne de commande d'un système d'exploitation, indique à ce
dernier une suite d'ordres et d'actions à exécuter.
P
path
PATH est un variable d'environnement contenant les chemins des commandes externes.
pipe
Un tube, symbolisé par une barre verticale (caractère «|»), permet d'affecter la sortie standard
d'une commande à l'entrée standard d'une autre, comme un tuyau permettant de faire
communiquer l'entrée standard d'une commande avec la sortie standard d'une autre.
prompt
Invite de commande
Q-Z
root
administrateur Linux
shell
tee
La commande tee duplique le flux de données en sortie : elle copie la sortie dans un fichier
(simple redirection) et, en même temps, affiche le résultat sur la sortie standard, et permet
donc de le renvoyer à une autre commande.
tube
Les tubes (en anglais « pipes », littéralement tuyaux) constituent un mécanisme de
communication propre à tous les systèmes UNIX.
Un tube, symbolisé par une barre verticale (caractère «|»), permet d'affecter la sortie standard
d'une commande à l'entrée standard d'une autre, comme un tuyau permettant de faire
communiquer l'entrée standard d'une commande avec la sortie standard d'une autre.
Abréviations
alias : mots définis comme synonymes d'un autre (groupe de) mot(s). Exemple ceux définies
dans .bashrc
API : application program interface: Interface de programmation
bash : Bourne again shell
csh : C Shell
ksh : Korn shell
SE : Système d'exploitation
sh : Bourne shell
tcsh : Tenex C shell
zsh : Zero shell