Shell Linux

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 9

Introduction

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

Leur nom correspond généralement au nom de l'exécutable.

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

Le fichier de configuration /etc/passwd contient la liste des utilisateurs


Mode de fonctionnement
Un shell qui peut être utilisé généralement soit en mode interactif, soit en mode batch :

- 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.

Dans ce module, nous nous intéressons au mode interactif seulement.

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é :

• «$» indique qu'il s'agit d'un utilisateur normal

• «#» indique qu'il s'agit de l'administrateur, appelé «root»

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

Le repertoire de base d'un utilisateur se situe généralement dans le répertoir /home/nom-utilisateur.

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.

commande [options] [arguments]

soit la ligne de commande suivante:

ls –a -l /home/widedi/

Dans la commande ci-dessus :

• ls : commande qui permet l'affichage de continue d'un répertoire

• -l : option pour affichage détaillé

• -a : option pour l'affichage des fichiers cachés

• /home/widedi/ : repertoire (argument)


Présentation
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.

Une commande peut :

• n'avoir ni option ni argument : ls

• être suivie par une ou plusieurs options : ls –a -l

• posséder un ou plusieurs arguments : ls /dev/

• être suivie d'une combinaison d'options et d'arguments : ls –a –l /dev/

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 définies par une fonction shell ou par un alias.

• 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.

La commande help affiche seulement les commandes internes du shell.

Appel d'une commande


Les fonctions, les alias et les commandes internes s'appellent directement par leur nom:

• ~$ mon_alias arg1 arg2

• ~$ commande_interne arg1 arg2

Les commandes externes, peuvent s'appeler par leur nom ou par leur chemin complet :

• ~$ commande_externe arg1 arg2

• ~$ /usr/bin/commande_externe arg1 arg2

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;

4. le shell courant regarde dans le PATH si la commande correspond à un programme, s'il ne


trouve rien il passe à l'étape suivante;

5. le shell provoque une erreur du genre " commande: commande introuvable".

→ 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 :

• Chemin absolu c'est le chemin complet à partir de la racine

• Chemin relatif c'est le chemin par rapport au répertoire actuel

Le chemin suivant est absolu:


• /home/wided/formation/se/linux/module1/shell

Les chemins suivants sont relatifs:

• /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 :

cat fich1 > fich2

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 :

cat << STOP


Pipes
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.

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 wc permet de compter des lignes, des mots, ..

avec l'option "-l" elle permet de compte les lignes.

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.

ls -l /etc/passwd | tee le_fichier | wc -l

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 ».

Il y a deux méta-caractères de substitution :

• *: correspond à aucun caractère, n'importe quel caractère ou un ensemble de caractères ;

• ? : est équivalent à un caractère quelconque.

Il y a trois moyens pour protéger un caractère ou une chaîne de caractères :


• \ : empêche l'interprétation spéciale d'un méta-caractère ;

• ` : 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.

Les commandes d'aides


La commande man: man commande permet d'avoir accès à l'aide sur cette commande : toujours
présenté selon une norme (NOM, SYNOPSYS, DESCRIPTION, OPTIONS, BUGS), elle est assez
complète.

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

Le fichier de configuration qui contient la liste des utilisateurs.

/etc/shells
Les interpréteurs disponibles sur un système donné sont listés dans ce fichier.

/home/

Répertoir contenant les fichiers personnels des utilisateurs

A-O
alias

mots définis comme synonymes d'un autre (groupe de) mot(s). Exemple ceux définies dans
.bashrc

builtin

les bultins sont les commandes internes

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

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.

prompt

Invite de commande

Q-Z
root

administrateur Linux

shell

interpréteur de commande Linux

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

Vous aimerez peut-être aussi