Commandes Unix

Alain Leroy


Syntaxe générale des commandes Unix

nom_de_commande  options  arguments

Les options sont généralement introduites avec le caractère moins (-).

Exemple :

ls -l /bin

Ici ls est le nom de la commande. l est une option, précédée du caractère "-", /bin est un argument, ici un nom de répertoire.

Les options possibles ne sont pas générales à toutes les commandes, elles leur sont propres. Il faut consulter le manuel de référence pour chaque commande pour connaître les options possibles.

Lancement d'une commande

Une commande n'est jamais transmise à UNIX directement par l'utilisateur. Si elle est frappée au clavier d'un terminal, elle est transmise à un intermédiaire qui l'interprète, éventuellement la complète et enfin la passe à UNIX. Cet intermédiaire est ce que l'on appelle un SHELL. C'est un programme qui s'exécute en étant associé au terminal de l'utilisateur et qui signale sa disponibilité en émettant une invite à l'écran: le prompt.

Si la commande est lancée via le système de multifenêtrage, par l'intermédiaire d'un gestionnaire de fichiers (comme sur MacIntosh ou Windows), c'est le gestionnaire de fichiers qui joue le rôle du Shell, mais le mécanisme est automatique est il est plus complexe de préciser les options désirées.

Dans ce qui suit nous supposerons que l'intermédiaire est un Shell et que nous entrons directement les commandes au clavier. Les commandes ne sont exécutées que lorsque le caractère <Return> est frappé.

Il existe plusieurs façons de lancer des commandes :

Directement
on tape la commande à l'invite du shell (le prompt). Le shell attend que la commande se termine pour rendre la main, il est bloqué pendant tout ce temps.
En arrière plan
(on dit aussi en background). Il suffit de placer le caractère & en fin de ligne de commande (le caractère "et commercial"). Le Shell lance la commande et rend la main immédiatement. La commande continue de s'exécuter en arrière plan. On ne peut pas lancer des commandes interactives (des commandes qui demandent qu'on rentre des caractères, qui posent des questions par exemple) de cette manière. Si toutefois on essaie, la commande se bloque.
En série sur la même ligne
On écrit une commande suivie cette fois par le caractère ; (point virgule) on peut faire suivre une seconde commande sur la même ligne. Il est possible d'entrer ainsi plusieurs commandes à la suite en les séparant par des ; qui jouent le rôle d'un caractère <Retour>. Les commandes sont exécutées successivement. Il est possible de les placer en arrière plan avec & en fin de ligne.
En chaînant, la sortie d'une commande constituant l'entrée d'une autre (tube de communication)
Les commandes sont alors séparées par le caractère | (barre verticale). On réalise alors un tube de communication entre les commandes. Les caractère de la première commande sont lus par la seconde. Les commandes sont exécutées simultanément.
En dirigeant la sortie d'une commande dans un fichier (direction de la sortie standard)
Les caractères sont écrits dans un fichier qui est créé si besoin. Si le fichier existait, son contenu est écrasé par les nouveaux caractères.

Exemples

Commande normale :

prompt% cp -r projet projet.sauv <Return>
.....la commande s'exécute, le Shell ne rend pas la main
prompt%         L'exécution est terminée

En arrière plan :

prompt% cp -r projet projet.sauv & <Return>
[1]  3426
prompt%

Le Shell lance la commande en background, indique le numéro du travail dans ce mode ainsi que le numéro du processus d'exécution puis rend la main.
On peut ne pas espacer le & du dernier caractère de la commande

En série sur la même ligne :

prompt% pwd; cd /usr; pwd <Return>
/users/dupont/affaire
/usr
prompt%

Les commandes s'exécutent les unes après les autres. Le caractère ";" est équivalent à un <Return>.

Tube de communication :

prompt% head -25 un_fichier | tail -1 <Return>
ceci est la 25 ieme ligne...
prompt%

Dans cet exemple, on lit les 25 premières lignes du fichier (commande head), au lieu qu'elles soient affichées à l'écran comme cela devrait être, les lignes sont dirigées vers l'entrée de la commande tail qui ne prend que la dernière de ces lignes. Le résultat affiché correspond à la 25ième ligne du fichier en question. Essayez sur un de vos fichiers. Les deux commandes s'exécutent simultanément.

Autre exemple plus courant cette fois: ls -l repertoire | more.

Redirection de la sortie standard :

prompt% ls -ld /usr   > liste_usr
prompt%

Le fichier liste_usr est créé, il contiendra le résultat de la commande ls -ld /usr, qui sans la redirection aurait été affiché à l'écran. Si le fichier existait, son contenu précédent est perdu.

Il est possible de rediriger la sortie standard en ajout avec les caractères >>, on aurait pu entrer la commande suivante : ls -ld ... >> liste_usr. Le fichier, s'il existe, n'est pas écrasé. Les caractères émis par la commande sont ajoutés en fin de fichier.

L'entrée standard peut aussi être redirigée avec le caractère < de la manière suivante :

commande < fichier