J'ai d'abord pensé inclure dans ce document un aide-mémoire des commandes les plus courantes. Puis j'ai vu que pour les introduire il me fallait d'abord évoquer des notions de base concernant les fichiers, les utilisateurs, etc. Que tout cela ferait une très longue page... Pour simplement répéter ce qui est déjà écrit ailleurs, et mieux que je ne saurais le faire.
Finalement j'ai conservé le début de l'article, renvoyant pour une présentation générale de Linux, des différentes commandes et des tâches d'administration courante à des documents disponibles sur Internet. En somme cet article n'est rien d'autre qu'une introduction à ces documents — ainsi qu'une incitation à les lire --, destinée à une personne qui vient d'installer (ou de se faire installer) Linux sur sa machine et devient de facto l'administrateur de son système.
Quoi, pourquoi, pour qui ?
Cette page doit permettre aux drogués à la souris et linuxiens débutants de surmonter leurs appréhensions et réticences à utiliser un terminal pour y entrer des "lignes de commande". Ils pourront ainsi dialoguer directement avec leur machine et commencer à l'apprivoiser.
Un rappel historique de notions préliminaires (système d'exploitation, console, terminal, interfaces homme-machine textuel et graphique, niveaux d'exécution et interpréteur de commande) expliquera d'abord le vocabulaire en usage.
Puis nous introduirons les références aux documents qui nous semblent les plus utiles aux linuxiens débutants, pour peu qu'ils aient le désir de maîtriser réellement leur système et acceptent de consacrer un peu de temps à apprendre, afin d'en gagner beaucoup ensuite.
Dans ce document, les citations sont en caractères italiques.
Notions préliminaires
Systèmes d'exploitation, mode de connexion, administrateurs et utilisateurs
Pour fonctionner, chaque ordinateur comporte (au moins) un système d'exploitation. Ce terme désigne un ensemble de programmes permettant notamment aux autres logiciels (souvent appelés applications) de communiquer entre eux et avec les différents périphériques (voir cet article).
Gardons à l'esprit que Linux, est un système d'exploitation (plus précisément un noyau de système d'exploitation — voir ce lien) multi-utilisateurs, ce qui veut dire que plusieurs utilisateurs peuvent grâce à lui "se partager" l'ordinateur, ses ressources (processeurs, mémoire vive, supports de stockage ...) et les périphériques associés (imprimantes, notamment) .
Autrefois (cela existe encore dans les "grands" systèmes) chaque ordinateur comportait :
une "console", composée d'un clavier et d'un écran et/ou une imprimante, permettant à l'opérateur de commander l'ordinateur (typiquement : démarrer et arrêter le système, gérer les périphériques et les utilisateurs, effectuer des sauvegardes et restaurations de fichiers, plus généralement gérer les fichiers, lancer des applications temps-réel et des traitements par lots, ...) ;
des liaisons (souvent par lignes téléphoniques) avec des terminaux permettant aux utilisateurs de communiquer à distance avec l'ordinateur.
Autrefois en effet la plupart des utilisateurs se connectaient à un ordinateur par l'intermédiaire d'un terminal physique. c'est à dire, un clavier et un écran reliés à l'ordinateur par une ligne de télécommunication. Dans ce contexte "se connecter" veut dire : s'identifier auprès du système (typiquement en indiquant un nom d'utilisateur et un mot de passe), afin que celui-ci vous donne accès aux ressources et applications qu'il gère, en fonctions des droits qui vous ont été alloués sur celles-ci.
Ce mode d'accès "à distance" existe toujours. Cependant les utilisateurs d'un ordinateur de bureau ou d'un ordinateur portable se connectent le plus souvent "en local", c'est à dire qu'écran et clavier sont directement reliés à l'ordinateur par des câbles — ou même intégrés à celui-ci dans le cas d'un ordinateur portable.
La même personne peut ainsi jouer deux rôles :
celui d'opérateur du système ou "administrateur" (c'est le terme consacré ; dans la jargon Unix/*BSD/Linux on parle de "super utilisateur" ou de "root" pour désigner celui qui a tous les droits — et notamment celui de faire les plus grosses bêtises).
celui d'un "simple utilisateur".
Ces considérations préliminaires nous permettront de mieux comprendre le vocabulaire en usage.
Mode "environnement graphique" et mode "texte" — le modèle "client / serveur"
Les micro-ordinateurs qui fonctionnent grâce à Linux (c'est aussi vrai des autres systèmes actuels) peuvent être utilisés selon deux modes :
le mode "environnement graphique" (matérialisé par les "fenêtres" familières aux utilisateurs de Windows et de Mac, une par application ou document),
le mode "texte", dans lequel la totalité de l'écran affiche un texte (souvent les commandes tapées par l'utilisateur et les réponses de l'ordinateur)
Un environnement graphique est, en informatique, ce qui est affiché en mode pixel au moniteur d'ordinateur et sur lequel l'utilisateur peut agir avec différents périphériques d'entrée comme le clavier, la souris, la dictée vocale, etc. Des images, des animations (en 2 ou 3 dimensions), et même des vidéos peuvent être rendues à l'écran.
Ce type d'interface homme-machine s'oppose à la notion de ligne de commande où la majorité de l'interaction entre l'utilisateur et l'ordinateur se fait au clavier, sans visualisation élaborée, dans un terminal ou dans une fenêtre de terminal en mode texte, comme par exemple dans le cas de DOS. En anglais, GUI est l'abréviation de Graphical User Interface, soit « interface utilisateur graphique ». Elle s'oppose à CLI pour Command Line Interface, soit « interface en ligne de commande ».
La gestion de l'environnement graphique est effectuée par un logiciel spécial appelé serveur graphique. Celui habituellement utilisé en conjonction avec Linux est "X Window". Toujours selon Wikipedia :
X Window System (communément appelé X Window ou X11 ou plus simplement X) est un système qui gère l'interaction homme-machine par l'écran, la souris et le clavier de certains ordinateurs en réseau. C'est le système standard ouvert d'interaction graphique avec l'utilisateur sur les Unix, Linux et les *BSD. Le serveur X est optionnel sur Mac OS X et il est possible d'installer un serveur X sur la plupart des systèmes d'exploitation, dont Windows. On dit communément d'une application qu'elle tourne sous X lorsqu'elle est conçue pour l'environnement X Window.
X fonctionne suivant le modèle client/serveur :
le logiciel serveur X tourne sur une machine qui est dotée d'un écran, d'un clavier et d'une souris ; il reçoit et sert des requêtes d'affichage, d'entrées de texte et de déplacement de souris sur un port logiciel,
un logiciel client X (logiciel graphique) se connecte au serveur X et lui envoie ses requêtes d'affichages en utilisant le protocole X au travers de la bibliothèque X (Xlib).
Ajoutons quelques remarques et précisions à cette explication :
X gère à la fois clavier, écrans et périphériques de pointage comme les souris.
Dans notre cas (utilisation d'un seul micro-ordinateur, portable ou non) les logiciels serveur X et client X utilisés fonctionnent le plus souvent sur la même machine. Cependant, si deux ordinateurs A et B sont reliés par une ligne de télécommunications, le logiciel X client installé sur B peut par exemple "recevoir" les images fournies par le logiciel X serveur installé sur B.
Ce principe s'applique d'ailleurs aussi à d'autre types de logiciels. Ainsi un logiciel "serveur d'impression" comme CUPS permet de partager des ressources (imprimantes, dans ce cas) sur un réseau en gérant les files d'attente des travaux d'impression. Néanmoins il est souvent utilisé dans un contexte "mono-machine" et "mono-utilisateur". Qui peut le plus, peut le moins.
Un ordinateur sous Linux peut au choix démarrer en mode texte (dit encore "mode console") ou en mode environnement graphique (on dit couramment "sous X").
On peut aussi alterner entre les deux modes en cours d'utilisation. Ceci est permis notamment par la commande telinit.
La notion de niveau d'exécution et les terminaux virtuels
Au peut choisir de démarrer une machine sous Linux selon un des "niveaux d'exécution" (en Anglais "run levels") disponibles, désignés généralement par des numéros.
A chaque niveau d'exécution sont associés un état du système après démarrage et des choix dans plusieurs domaines :
les possibilités de connexion à la machine (un seul utilisateur — habituellement un administrateur — ou plusieurs)
les applications lancées ou non au démarrage (serveurs, en particulier)
l'utilisation du système en mode texte ou en mode graphique
La définition des niveaux varie selon les distributions (et d'ailleurs l'administrateur peut choisir les applications à lancer à un niveau d'exécution donné).
Par exemple dans le cas de la distribution Linux Slackware (toutes versions récentes) :
le niveau 0 correspond à l'ordre "arrêt du système"
le niveau 1 correspond à une utilisation en mode texte pour effectuer des tâches d'administration : un seul utilisateur, tous les programmes "serveurs" sont arrêtés.
le niveau 2 n'est pas utilisé (mais traité comme le niveau 3)
le niveau 3 correspond à une utilisation en mode texte (on dit aussi : en mode console) et multi-utilisateurs. Dans ce mode le système monte les systèmes de fichiers selon les indications du fichier /etc/fstab, démarre les applications demandées (principalement des serveurs qui se mettent "à l'écoute" de clients), puis invite l'utilisateur à s'identifier pour se connecter (il ne peut passer aucune commande avant de l'être). Ceci fait l'utilisateur peut s'il se souhaite passer au niveau 4 (en mode graphique) en passant la commande startx.
le niveau 4 correspond à une utilisation en mode environnement graphique et multi-utilisateurs. Dans ce mode le système, après avoir lancé les differents serveurs demandés (comme en mode 3), lance un "gestionnaire de sessions" (il en existe plusieurs, notamment "xdm" "kdm" et "gdm"). Ce terme désigne un programme en environnement graphique qui permet en général à l'utilisateur :
éventuellement, d'arrêter la machine, de la redémarrer ou de repasser en mode "texte" ;
sinon, de choisir l'environnement graphique qu'il préfère : choix du "type de session" correspondant à l'utilisation d'un des logiciels "gérants de fenêtres" ou "gérants de bureaux" disponibles sur sa machine (par exemple pour Slackware : KDE, XFCE, WindowManager, et quelques dérivés) ...
... puis de s'identifier pour se connecter (on dit aussi "ouvrir une session de travail") en indiquant son identifiant d'utilisateur (en Anglais : "login") et son mot de passe (en Anglais : "password"). Le gestionnaire de session vous ouvre alors une session dans l'environnement graphique choisi (cette session sera fermée quand on quittera cet environnement).
le niveau 5 n'est pas utilisé (mais traité comme le niveau 3)
le niveau 6 correspond à l'ordre "arrêter le système puis redémarrer la machine"
Remarques
En mode console multi-utilisateurs, le système propose à l'utilisateur plusieurs "terminaux virtuels". Cela veut dire qu'au moyen de touches de fonction (Alt+F1 à Alt+F6 pour Slackware) il peut "simuler" le passage d'un terminal physique à un autre (on utilise un seul clavier et un seul écran physique mais l'affichage est différent pour chaque "terminal virtuel" et sauvegardé lors de la transition de l'un à l'autre). A la première utilisation d'un terminal virtuel l'utilisateur doit s'identifier de nouveau (mais il peut choisir une identité différente pour chacun). Ce système permet de disposer simultanément de plusieurs "vues" sur et moyens d'action sur le système, sans avoir besoin de recourir à un environnement graphique.
En mode environnement graphique on peut aussi "ouvrir un terminal" (qui sera dans ce cas inclus dans une fenêtre). En première approche les commandes utilisables sont les mêmes (nous donnerons quelques précisions plus loin). En environnement graphique le nombre de terminaux ouverts en même temps n'est limité que par les ressources disponibles.
Nous présenterons plus loin les commandes (tapées dans une console ou dans un terminal) qui permettent d'arrêter ou de redémarrer le système ou de de changer de niveau d'exécution.
On peut paramétrer les terminaux virtuels pour les faire "ressembler à" (ou "simuler le comportement de") terminaux physiques (autrefois) en usage.
Les interpréteurs de commandes ou "shells"
On peut peut utiliser un terminal (virtuel ou non) pour lancer tous types d'applications, du moment qu'elles disposent d'une interface "en ligne de commande".
Cependant, on les utilise principalement pour administrer le système d'information. Ceci nécessite de transmettre au noyau les commandes tapées, et de restituer à l'écran les résultats de ces commandes. C'est le rôle des logiciels appelés "interpréteurs de commande" (il en existe plusieurs), ou "shells" (coquilles, en Anglais). Ce terme vient de ce que l'interpréteur est en quelque sorte une enveloppe qui masque la complexité des échanges d'information avec le noyau. On appelle parfois aussi "shell" une interface graphique ou GUI (Graphical User Interface) mais dans cet article ce terme sera toujours associé à un terminal virtuel (ou console) dans lequel on tape des commandes ou CLI (Command Line Interface).
Le rôle de l'interpréteur consiste donc principalement à :
interpréter ou décoder les commandes passées
puis, soit les exécuter directement ...
... soit les transmettre à un autre logiciel (application, ou utilitaire de gestion du système) ...
... dans l'un ou l'autre cas, afficher ensuite à l'écran du terminal les résultats des commandes.
Outre la capacité de traiter une par une les commandes au fur et mesure, le plus souvent ligne par ligne, certains shells — et notamment bash qui est le plus utilisé sous Linux — intègrent un véritable langage de programmation. Ceci permet, en plus de l'utilisation "en temps réel", de réaliser des "traitements par lots" : par exemple l'administrateur peut rédiger un programme (sous la forme d'un fichier texte communément appelé "script") qui sera "exécuté" par bash à la demande, pour des tâches d'administration comme des sauvegardes périodiques de tout un ensemble de fichiers ou le lancement de plusieurs applications qui utilisent les données les unes des autres.
Nous ne développerons pas cette possibilité de programmation ici, mais vous proposerons des documents de référence.
Pour les curieux bash est l'acronyme de Bourne Again SHell. Bash signifie aussi frapper ou cogner en Anglais (frappez les commandes au clavier mais ne me frappez pas avec lui).
Pour commencer, ouvrons un terminal
Dans ce qui suit nous supposerons que l'interpréteur de commandes utilisé est bash (il en existe bien d'autres et l'utilisateur peut en changer). Voici un article pour en savoir un peu plus. Pour en savoir beaucoup plus tapez la commande man bash et bonne lecture... Je vous suggère quand même de commencer par une introduction plus digeste (voir des références plus loin et dans les article cités de Wikipedia).
Pour utiliser bash il faut disposer soit d'une console ou terminal virtuel en mode console soit d'un terminal virtuel en environnement graphique :
si Linux s'exécute à un niveau associé à un mode console (pour Slackware, niveau 3 sauf cas exceptionnel où on utilise le niveau 1) on a forcément sous les yeux une console (qui occupe tout l'écran)
si Linux s'exécute en mode environnement graphique (pour Slackware, niveau 4), pour pouvoir utiliser la ligne de commande il faut commencer par "ouvrir" un terminal virtuel en mode graphique (c'est-à-dire dans une fenêtre) en "simulant" un terminal physique. Plusieurs logiciels pemettent de simuler un terminal physique, certains associés à un environnement graphique particulier et dotés de fonctions complémentaires (édition de texte, pas exemple). Pour l'utilisation comme support du shell bash, on peut utiliser xterm qui a l'avantage d'être "léger" (il consomme peu de ressources système) et disponible sous tous les environnements graphiques (KDE, GNOME, XFCE, WindowMaker, IceWM et autres). Le nom xterm nous rappelle qu'il s'agit d'un "terminal pour X" (le serveur graphique).
Même si cela ne change souvent pas grand chose, nous supposerons dans ce qui suit que vous avez ouvert un terminal xterm (en cliquant sur une icône ou dans un menu, ou en tapant (dans un champ destiné à recevoir des commandes) la commande xterm, ce qui à pour effet d'ouvrir un terminal éponyme (on dit en abrégé "un xterm").
Nota pour les utilisateurs de KDE : la combinaison de touches Alt + F2 fait apparaitre une petite fenêtre dans laquelle on peut taper une commande — par exemple la commande xterm.
Pour utiliser le xterm ainsi ouvert, il n'y a plus qu'à le sélectionner (par exemple en cliquant dessus) : vous êtes prêts à taper vos premières commandes.
Précision : puisqu'il est dans une fenêtre vous pouvez le déplacer ou modifier ses dimensions à votre convenance, voire lui faire occuper tout l'espace disponible sur l'écran.
Quels programme traite ma commande ?
Il n'est pas inutile — en tous cas pas inintéressant, à mon avis — de savoir si une commande tapée au clavier est :
traitée directement par bash (on parle de "commande interne" au "shell")
traitée par un utilitaire que l'on peut considérer comme faisant partie intégrante du système d'exploitation (on disait autrefois une commande "primitive" de ce système), communiquant le plus souvent avec le noyau
destinée à lancer une application "tierce partie" (non intégrée au système d'exploitation)
En somme il s'agit de commencer à comprendre "qui fait quoi" dans la machine.
Le noyau et un certain nombre de fichiers et programmes indispensables au fonctionnement du système sont pratiquement toujours présents dans une machine fonctionnant grâce à Linux.
D'autres fichiers et programmes sont en quelque sorte "facultatifs" (installés ou non au choix de l'administrateur). S'ils sont chargés de traiter certaines commandes (qui leur sont destinées), celles-ci ne fonctionneront bien sûr que s'ils sont installés.
En pratique, le plus souvent on installe fichiers et programmes non pas individuellement mais en les regroupant en "paquets" (en Anglais "packages") de taille plus ou moins importante selon la distribution utilisée (car le regroupement en paquets est arbitraire, c'est le résultat d'un choix du distributeur ou "empaqueteur"). Notons que la constitution et le mode d'installation de ces paquets varient aussi selon la distribution ; ce point ne sera pas développé ici.
Documents de référence
Maintenant que vous en savez assez pour taper vos premières commandes, je vous suggère d'investir un peu de votre temps dans quelques lectures qui — croyez-moi — vous en feront gagner bien davantage par la suite.
Ou trouver la documentation concernant Linux ?
La plupart des documents ici référencés se trouvent sur le site intitulé The Linux Documentation Project à l'adresse http://www.tldp.org/. Vous y trouverez des "comment faire pour ..." ou "How-to" ainsi que des "Guides" (en général plus développés). Dans chaque domaine, choisissez les documents les plus récents (la date de la dernière révision est toujours indiquée). Heureusement, les principaux documents que nous vous recommanderons sont assez récents. Sur le même site on trouve les pages du "manuel linux" (elles devraient aussi se trouver dans votre système).
Tous les documents présents sur ce site sont en Anglais.
Il existe aussi des versions françaises de certains de ces documents, malheureusement pas tous et pas toujours à jour. Pour les trouver vous pouvez suivre ce lien
Les URL des documents ici référencés sont toujours indiquées. Attention, elles peuvent changer! Dans ce cas, à partir du titre un moteur de recherche pourra souvent vous trouver la nouvelle adresse.
Si vous cherchez un guide pour installer ou configurer Linux ...
Je vous en recommande deux :
Le Guide de Survie du Débutant sous Linux de Gérard Delafond se trouve à l'adresse http://www.delafond.org/survielinux/. Il mérite bien son nom.
Le Guide d'installation et de configuration de Linux de Christian Casteyde est très complet et régulièrement mis à jour. Il propose souvent des explications approfondies. On peut peut-être lui reprocher d'être un peu verbeux, mais je le recommande vivement. Il est disponible à l'adresse http://casteyde.christian.free.fr/system/linux/guide/online/book1.html.
Vous voulez apprendre à utiliser la ligne de commande et peut-être aller plus loin avec bash
Je vous recommande de consulter les guides suivants (en Anglais), référencés sur la page "Linux Documentation Project Guides" à l'adresse http://www.tldp.org/guides.html. Comme les autres guides et how-to du "Linux Documentation Project" ils peuvent téléchargés en plusieurs formats et lus en ligne en une seule page ou une page par chapitre.
Commencez par "Introduction to Linux — a Hands on Guide" de Machtelt Garrels. Très progressif et pédagogique, avec des exercices à faire au fur et à mesure. Après ça, vous en saurez déjà beaucoup. Pour vous encourager à le lire, voici des liens directs vers les versions à lire en ligne : une page par chapitre et tout sur une page. Vous pouvez aussi le télécharger au format pdf.
Pour en savoir encore plus, ou disposer d'une liste des commandes expliquées et classées par fonction lisez le "GNU/Linux Command-Line Tools Summary" de Gareth Anderson. Il est très pédagogique également.
Si vous souhaitez approfondir certains points et/ou trouver des aides-mémoires des commandes, consultez l'annexe A.2. "Further reading" du "GNU/Linux Command-Line Tools Summary".
Enfin, si vous avez l'intention d'écrire des scripts, lisez un des guides suivants (ou les deux), eux aussi référencés sur la page http://www.tldp.org/guides.html.
"Advanced Bash-Scripting Guide" de Mendel Cooper (accessible malgré son titre après les lectures précédentes)
"Bash Guide for Beginners" de Machtel Garrels (à mon avis pour les "pas si débutants que ça").