Interface en ligne de commande
Uneinterface en ligne de commandeouILC(en anglaiscommand line interface,couramment abrégéCLI) est uneinterface homme-machinedans laquelle la communication entre l'utilisateur et l'ordinateurs'effectue enmode texte:
- l'utilisateur tape une ligne decommande,c'est-à-dire du texte au clavier pour demander à l'ordinateur d'effectuer une opération;
- l'ordinateur affiche du texte correspondant au résultat de l'exécution des commandes tapées ou à des questions qu'un logiciel pose à l'utilisateur.
Une interface en ligne de commandes peut servir aussi bien pour lancer l'exécution de diverslogicielsau moyen d'uninterpréteur de commandes,que pour les dialogues avec l'utilisateur de ces logiciels. C'est l'interactionfondamentale entre un homme et un ordinateur (ou tout autre équipement informatique).
Lorsqu'une interface est prête à recevoir une commande, elle l'indique par uneinvite de commande.Celle-ci, parfois désignée par l'anglicismeprompt,consiste en quelques caractères, en début de ligne (généralement, le nom de compte de l'utilisateur, et/ou l'unité logiquepar défaut,et/ou le chemin par défaut, et/ou date…), se terminant par un caractère bien connu (souvent «]», «#», « $ » ou «>»),invitantl'utilisateur à taper une commande.
Historique
[modifier|modifier le code]L'interface en ligne de commande est la plus ancienne des interfaces conversationnelles développées sur des ordinateurs. Avant cela, les ordinateurs fonctionnaient entraitement par lots:on soumettait à l'ordinateur desdonnéesenregistrées sur une série decartes perforéesou une bande perforée. Ces données indiquaient à l'ordinateur quels programmes lancer et de quelles informations ces programmes disposaient pour s'exécuter. Le résultat dutraitement(réussi ou erroné) était imprimé sans qu'aucun dialogue avec l'utilisateur ne soit intervenu.
L'apparition destélétypesdans lesannées 1960,puis, plus tard desconsolesà partir desannées 1970,qui sont despériphériquesqui reçoivent et envoient des caractères à l'ordinateur, a permis le travail sur ordinateur sous la forme desessions.Le dialogue entre l'utilisateur et l'ordinateur s'effectuait alors en ligne de commandes.
À partir desannées 1980,l'apparition de terminaux enmode graphiqueet dessourisa permis le développement desinterfaces graphiques,plus appréciées du grand public, peut être parce qu'elles ne nécessitent pas d'apprendre les noms de différentes commandes avant d'utiliser un ordinateur. Ce changement de paradigme de l'interface en ligne de commande vers desinterfaces graphiques (GUI)est lié notamment à la mise sur le marché parAppleduLisaen,puis surtout duMacintoshen:ces deux modèles d'ordinateurs sont les premiers ordinateurs grand public à utiliser des interfaces de typeWindows, Icons, Menus and Pointing device(WIMP),manipulables à la souris et reprenant à l'écran lamétaphore du bureau[1].Néanmoins, tout particulièrement sur lessystèmes d'exploitationdérivés d'Unix,les interfaces en ligne de commandes restent encore de nos jours appréciées de certainsinformaticiens,étant donné la richesse de leurs possibilités.
L'interface en lignes de commandes sous Unix
[modifier|modifier le code]L'une des particularités du système d'exploitationUnix,dontLinuxest dérivé, est que, dès son origine, il a disposé de plus d'une centaine de logiciels, effectuant souvent des traitements très simples, tous utilisables en ligne de commandes.
Syntaxe générale des commandes
[modifier|modifier le code]Les commandes élémentaires sous Unix sont de la forme:
$> commande options fichiers_ou_données
La commande apparaissant en début de ligne est presque toujours le nom d'un programme. Ce programme peut être une commande du système d'exploitation, un logiciel écrit par un utilisateur (souvent enlangage C) ou unshell.Quelques rares commandes comme la commandecd(changement dedossier /répertoire) ne peuvent pas être traitées correctement par un logiciel spécifique. Elles sont dans ce cas directement exécutées par l'interpréteur de commandes.
Certaines de ces commandes peuvent s'exécuter en tapant au clavier seulement leur nom. Mais la plupart des commandes acceptent des options (un tiret suivi d'une ou plusieurs lettres) qui permettent d'utiliser la commande autrement que dans son mode de fonctionnement par défaut. Enfin, bon nombre de commandes sont suivies d'un ou plusieurs noms defichier,répertoire ou autre, avec lesquels elles vont travailler. Toutes les informations séparées par desespacesà droite du nom de la commande sont appeléesarguments de la ligne de commandes.
$>cat-efichier1
cat
permet d'afficher le contenu defichier1
sur la sortie standard. L'option-e
va également permettre d'afficher les caractères non imprimables et en particulier un signe$
à chaque saut de ligne.Lelangage Ca été conçu pour permettre de récupérer facilement les arguments de la ligne de commandes depuis le logiciel qui les utilise.
Enfin, afin de savoir comment employer un logiciel, une documentation (Man pages) est à la disposition de l'utilisateur. Elle s'emploie en faisant précéder la commande parman.
Option
[modifier|modifier le code]Uneoption en ligne de commandeou plus uneoption(que l’on appelle aussi parfois unflag) modifie le fonctionnement d'une commande. L’effet de l’option dépend de la commande. Généralement, les options suivent immédiatement le nom de la commande sur la ligne de commande et sont séparées entre elles par des espaces.
Le format des options est très variable. Le plus souvent, la syntaxe utilisée repose sur une convention plutôt que sur une exigence du système d’exploitation. Le plus souvent, sous Unix, les options sont introduites par-et sont sensibles à la casse. Les monogrammes sont fréquents, mais les programmes récents ont tendance à proposer des options dont les noms sont longs et plus clairs.
Il est impossible de savoira prioriquelles options un programme reconnaît, à moins de consulter sa documentation. Cependant, il est d’usage courant (mais pas systématique) qu’un programme affiche un résumé de ses options lorsqu’il est lancé en ligne de commande avec l’une des options suivantes:?;-?;-h;/?;/h;-help;ou--help.
Les redirections d'entrées/sorties
[modifier|modifier le code]Par défaut, les commandes conversationnelles récupèrent les données tapées par l'utilisateur au clavier. Le résultat de leur exécution s'affiche à l'écran. En cas d'erreur à l'exécution, les messages d'erreur apparaissent aussi à l'écran.
Il est possible d'indiquer à l'interpréteur de commandes que des données en entrée ou en sortie doivent être récupérées/stockées dans des fichiers plutôt qu'au clavier et à l'écran. Pour cela, différents types de redirection des entrées/sorties sont disponibles[2]:
- < entreesignifie que les données de la commande seront lues dans le fichier de nomentreeplutôt qu'au clavier;
- > sortiesignifie que les données générées par la commande seront écrites dans le fichier de nomsortieplutôt qu'à l'écran. Si le fichiersortieexistait déjà, son ancien contenu est effacé, sinon ce fichier est créé au lancement de la commande;
- >> sortiesemblable au cas précédent sauf que si le fichiersortieexistait déjà, son ancien contenu est conservé et les nouvelles données sont copiées à la suite;
- 2> erreursignifie que les messages d'erreur générés par la commande seront écrits dans le fichier de nomerreurplutôt qu'à l'écran. Si le fichiererreurexistait déjà, son ancien contenu est effacé, sinon ce fichier est créé au lancement de la commande;
- 2>> erreursemblable au cas précédent sauf que si le fichiererreurexistait déjà, son ancien contenu est conservé et les nouveaux messages d'erreur sont copiés à la suite;
- 2>&1les messages d'erreurs sont fusionnés avec les données en sortie;
- 1>&2les données en sortie sont fusionnés avec les messages d'erreurs (cas rare).
Exemples:
sort monfichier
affiche à l'écran les lignes du fichiermonfichierclassées par ordre alphabétique. Si le fichiermonfichiern'existe pas, unmessage d'erreurapparaît à l'écran.
sort monfichier > resultat 2> problemes
mémorise dans le fichierresultatles lignes du fichiermonfichierclassées par ordre alphabétique. Si le fichiermonfichiern'existe pas, un message d'erreur apparaît dans le fichierproblemes.
Enchaînement des commandes
[modifier|modifier le code]Les systèmes d'exploitation detype Unixpermettent d'enchaîner l'exécution de plusieurs commandes. Les données en sortie d'une commande sont utilisées en entrée de la commande suivante sans qu'il soit nécessaire de recourir à des fichiers intermédiaires.
La syntaxe générale est:
commande1 options arguments | commande2 options | commande3...
Exemple:
find / -size +1000k -mtime -7 | sort | tee trace | less
- la commandefindrecherche dans tous les répertoires de l'ordinateur les fichiers de plus de 1000 kilooctets modifiés durant les 7 derniers jours et affiche leurchemin d'accès;
- la commandesortfait un tri alphabétique des données reçues en entrée;
- la commandeteeenvoie à la fois à l'écran et dans le fichiertraceles données reçues en entrée;
- la commandelesspermet de visualiser un texte trop long pour tenir en entier à l'écran. On peut se déplacer dans ce texte en utilisant le clavier.
En une seule ligne de commandes, la commande ci-dessus recherche dans tous les répertoires de l'ordinateur les fichiers de plus de 1000 kilooctets modifiés durant les 7 derniers jours, en affiche page par page avec possibilité de se déplacer dans la liste les chemins d'accès triés par ordre alphabétique, et mémorise également ces chemins d'accès dans le fichiertrace.
Les métacaractères
[modifier|modifier le code]Des métacaractères peuvent être utilisés dans les lignes de commandes pour exprimer des noms de fichiers qui possèdent une partie commune:
- ?signifie n'importe quel caractère, une seule fois;
- *signifie n'importe quel caractère, 0, une ou plusieurs fois;
- [c1-c2]signifie n'importe quel caractère de l'ensemble ordonné commençant par le caractèrec1et finissant par le caractèrec2.Il peut aussi y avoir une liste de caractères entre les [ ];
- \signifie que le caractère qui le suit ne doit pas être traité comme un métacaractère;
- le caractère.en première position doit être précisé explicitement.
Exemples:
- *signifie tous les fichiers du répertoire courant (sauf ceux dont le nom commence par un point);
- /usr/bin/vi*signifie tous les fichiers du répertoire/usr/bindont le nom commence parvi;
- /dev/hd[abcd][0-9]signifie tous les fichiers du répertoire/devdont le nom commence parhda,hdb,hdc,hdd,suivi d'un chiffre unique;
- ?a?signifie tous les fichiers du répertoire courant dont le nom comporte 3 caractères avec unaau milieu (et pas de point au début).
Utilisation du résultat d'une commande comme argument d'une autre
[modifier|modifier le code]Les`entourant une commande permettent d'utiliser le résultat de cette commande comme argument(s) dans la ligne de commande.
Exemples:
$> echo "Nous sommes le" `date +%d/%m/%y` "et il est" `date +%H:%M:%S`
affiche une phrase contenant la date et l'heure courante. Pour cela, la commandedateest exécutée deux fois avec un format de sortie différent.
$> echo "2 + 2 =" `expr 2 + 2`
affiche2 + 2 = 4après avoir fait le calcul.
Autres particularités
[modifier|modifier le code]- le;dans une ligne de commandes permet d'exécuter les unes après les autres, plusieurs commandes saisies sur la même ligne;
- la suite de caractères&&(qui signifientet) entre deux morceaux d'une commande, a pour conséquence que la partie droite de la commande s'exécutera seulement si la partie gauche s'est bien déroulée;
- les suites de caractères||(qui signifientou) entre deux morceaux d'une commande, a pour conséquence que la partie droite de la commande s'exécutera même si la partie gauche s'est mal déroulée. Selon la version d'Unix en vigueur, la partie droite pourra ne s'exécuter que si la partie gauche s'est mal exécutée (exemple de test: echo test1 || echo test2);
- le&à la fin d'une commande permet de lancer celle-ci entâche de fond.
L'interface en lignes de commandes MS/DOS
[modifier|modifier le code]MS-DOSa été créé au tout début desannées 1980.Il fonctionne en ligne de commandes avec le même genre de syntaxe que les commandes Unix. Mais la liste des commandes disponibles sous MS-DOS est beaucoup plus réduite.
Certaines commandes commesortjouent le même rôle sous Unix et sous MS-DOS.
D'autres commandes ont un nom différent dans les deux systèmes d'exploitation. Ainsi, la commandefind:
- permet de rechercher des fichiers sous Unix;
- permet de rechercher deschaînes de caractèresdans un fichier sous MS-DOS, ce que fait la commandefgrepsous UNIX (ougrep -fsous Linux).
Les lignes de commandes MS-DOS ont globalement la même syntaxe que les commandes Unix, mais les possibilités sont plus réduites.
MS-DOS permet:
- l'utilisation des métacaractères*et?;
- la redirection des entrées/sorties, sauf pour la sortie erreur;
- l'enchaînement des commandes grâce au|.
L'interface en lignes de commandes de Windows NT
[modifier|modifier le code]cmd.exeest l'interface en ligne de commande des systèmes d'exploitation de la familleWindows NT(incluantMicrosoft Windows 2000,Microsoft Windows XP,Microsoft Windows Vista…). C'est une évolution de l'interface deMS-DOS.
AvecWindows Vista,apparaît un nouvel environnement en ligne de commandeWindows PowerShell,fonctionnant également sous Windows XP SP2.
Notes et références
[modifier|modifier le code]- ThierryBenjamin,Donner à voir, permettre d'agir. L'invention de l'interactivité graphique et du concept d'utilisateur en informatique et en télécommunications en France (1961-1990),Paris (France),,1019p.(SUDOC176590951,lire en ligne),« L’interface graphique Wimp, nouveau paradigme dominant de l'interaction homme-machine »,p.604-605.
- Brian Kernighan et Rob Pike,L’environnement de programmation UNIX,InterEditions,(ISBN2729601309),« 1. Unix pour les débutant »,p.39-40.