Linux est le système privilégié à l'UFR IM2AG pour l'enseignement. Actuellement les salles de TP sont équipées avec le système Linux Ubuntu version 18.04 LTS.
Pour information, Linux est un kernel libre (et gratuit) écrit en 1991 par Linus Torvalds, son dictateur bienveillant, pour lutter contre la fermeture croissante des logiciels industriels à cette époque. Couplé avec quelques outils supplémentaires (souvent la suite GNU, d'où l'amalgame courant GNU/Linux pour décrire la combinaison des deux), il donne accès aux même fonctionnalités que Windows ou Mac, mais souvent sous une forme plus anarchique et plus configurable.
Il existe à ce jour de nombreuses implémentations différentes de Linux (souvent appelées distributions), chacune possédant son propre fonctionnement et sa propre culture. Ici à l'IM²AG, nous employons essentiellement des Debian et dérivés (Ubuntu, par exemple), qui sont parmi les Linux les plus faciles à appréhender. Vous pourrez observer que nous utilisons des Debian sur nos serveurs, et vous trouverez des Ubuntu dans les salles de TP.
Contrairement à tous les systèmes grand public, Linux est doté d'une philosophie et d'une intention de partage. Car en effet, aux débuts de l'informatique, comme la plupart des programmes ne marchaient guère, et le reste moins encore, c'était pratique courante que de s'échanger de petits bouts de code avec le labo d'à côté.
Pour pallier ce “défaut” du logiciel libre, les premiers vendeurs de logiciels ont trouvé la parade : ils distribuent le logiciel compilé, ainsi qu'un manuel d'utilisation, mais gardent le code (et les possibilités d'amélioration de ce dernier) à leurs comptes.
Heureusement, certains (dont Linus Torvalds et également Richard Stallman) se sont insurgés contre cette atteinte à leur liberté créatrice et ont décidé d'écrire leurs propres logiciels et de les redistribuer à qui voudra (code source compris) selon les quatres libertés fondamentales :
Ces quatres libertés forment la philosophie du logiciel libre (“Free Software” en anglais) et permettent à GNU/Linux de rivaliser en qualité avec des logiciels propriétaires avec une fraction des moyens dont disposent ces derniers.
Comme partager nos idées sans encombres est une étape indispensable du processus de recherche scientifique, Linux et les logiciels libres accompagnent admirablement les enseignements dispensé ici à l'UFR.
Vous trouverez de nombreux tutoriels sur le Web expliquant comment faire obéir votre Linux, et le sujet est trop vaste pour être traité ici. Par contre, je peux vous assurer qu'à un moment ou l'autre, vous allez tomber sur une explication commençant par “ouvrez une invite de commandes et entrez …”, contrairement à Windows et Mac qui font tout à votre place.
La ligne de commande a la réputation d'être austère, difficile à maîtriser et peu “user-friendly”, et est souvent vue comme un reliquat des années 80 que l'on devrait s'empresser d'abandonner au profit d'interfaces plus visuelles. Pour moi, la différence entre la ligne de commande et les GUI et la même qu'entre les livres et les films. Si je veux juste me distraire entre deux activités, je regarderai un film, mais si je veux rentrer dans les détails d'un univers, je me procurerai plutôt un livre.
Similairement, la ligne de commande, bien que moins rapide, permet bien plus de précision et de clarté que les interfaces graphiques, car il y a un véritable langage qui se cache derrière (communément appelé le Shell), contrairement à ces dernières qui sont trop souvent conçues informellement et manquent parfois de composabilité et de réutilisabilité.
Pour vous aider à tirer parti du pouvoir et de l'expressivité du Shell, voici une explication sommaire des utilisations diverses de la ligne de commande. Les exemples seront en bash
, l'un des shells les plus courants sous Linux, BSD et MacOS.
Le plus important, avant d'apprendre le langage, est de pouvoir tester ce que l'on apprend, bien sûr Pour ouvrir un shell sous Linux, il y a une myriade de façons différentes :
<alt>-t
ou <ctrl>-<alt>-t
ouvre un terminal (un autre nom de l'invite de commande) dans une nouvelle fenêtre.<f12>
et avoir un terminal persistant.<ctrl>-<alt>-<f1..f6>
Maintenant que vous avez accès à votre terminal, voici les quelques notions de base.
Les commandes sont l'objet le plus simple que l'on peut écrire en Shell. Une commande s'écrit de la forme suivante :
<fonction> <param1> <param2>...
où la fonction et les paramètres sont des mots comme ls
, html
ou “Coucou à toi !”
. Notez que si on veut donner des espaces à un
mot, il faut l'entourer de guillemets, car sinon il est lu comme deux
mots côte à côte.
Ensuite, la fonction est éxécutée avec tous ses paramètres et le résultat est écrit à l'écran.
C'est la forme la plus courante d'expression que vous retrouverez dans
le Shell (tous les git commit
, ls -la foobar
, mkdir x
sont
des commandes simples, par exemple).
Chaque commande dans le Shell est appelée dans un certain contexte (que l'on appelle l'environnement) qui définit un certain nombre de variables (dites variables d'environnement). On peut faire deux choses avec des variables : lire et écrire.
Pour écrire dans une variable, on fait comme suit
variable=valeur
Pour lire une variable, on l'écrit $variable
ou encore
${variable}
(nous verrons plus tard en quoi la seconde formulation
peut être utile).
Certaines variables sont prédéfinies par le Shell lui-même et permettent d'obtenir des informations sur l'utilisateur actuel, le dossier de travail ou encore le nom de l'ordinateur. Certaines de ces variables peuvent être modifiées pour étendre la fonctionnalité de votre Shell. Voici une liste abrégée des variables les plus courantes :
PWD
(Process Working Directory, ou Répertoire de Travail du Processus) : contient le chemin du dossier dans lequel on se trouve (peut être modifié)USER
: votre nom d'utilisateurHOME
(le Foyer) : nom du dossier personnel (équivalent de C:/Users/<utilisateur>
sous Windows)SHELL
: chemin du programme qui interprète les commandes que vous tapez (souvent /bin/bash
ou /usr/bin/zsh
)PATH
: liste de chemins, séparés par des :
, où le Shell va chercher les programmes que vous lui demandez d'éxécuter.LANG
: votre langue préférée (si cette variable n'a pas de valeur, vous aurez la langue par défaut du système). Cette variable doit avoir un format tout particulier (si vous voulez qu'elle ne soit pas ignorée) : si vous préférez le français, il lui faut fr_FR.UTF-8
, et si c'est la langue de Shakespeare que vous convoitez, ce sera en_US.UTF-8
PS1
(Prompt String #1 ou Invite Principale) : le texte qui est ajouté au début de chaque ligne de commande interactive. Dans les salles de TP et sur certains serveurs, la PS1
par défaut est colorée et contient pas mal d'informations. Si cela ne vous sied pas, vous pouvez lui rendre son aspect original en entrant export PS1='\u@\h\$
'Pour récapituler par exemple, voici une commande qui permet de changer temporairement la langue employée par le Shell à votre égard :
export LANG=en_US.UTF-8
Le export
indique au Shell que tous les programmes appelés
héritent de cette variable, pas seulement la session courante.
Lorsque vous ouvrez une console interactive, votre Shell éxécute automatiquement un script dans votre HOME avant de vous donner la main. Cela vous permet de surcharger le comportement du système pour l'adapter à vos besoins.
Par exemple, si vous installez vos propres programmes dans
$HOME/.bin
, vous pouvez les rendre accessibles en ajoutant ce
dossier à votre PATH. En Bash, cela donne la ligne suivante à ajouter
au .bashrc
:
PATH="$HOME/.bin${PATH:+:}$PATH"
Le bout de code bizarre en sandwich est l'un des intérêts des accolades autour du nom de la variable qui permettent non seulement de délimiter son nom, mais aussi d'y appliquer certaines transformations.
Dans le cas présent, cette petite astuce permet de gérer correctement le cas où le PATH serait vide avant l'ajout du nouveau chemin.
En effet, en écrivant simplement $HOME/.bin:$PATH
, cela donnerait
un PATH de $HOME/.bin:
. Pour éviter les deux points
supplémentaires à la fin, il faut dire à Bash de les écrire seulement
si le PATH n'est pas vide. Par chance, c'est exactement ce que veut
dire ${PATH:+:}
.
On peut également appliquer bien d'autres transformations lorsque l'on accède à une variable de cette façon. En voici une liste sommaire :
${variable:+texte}
vaut texte
si la variable n'est pas vide et ne vaut rien sinon${variable:-texte}
vaut la valeur de la variable si elle n'est pas vide, et texte
sinon (en gros, ça fait de texte
la valeur par défaut de variable
)${variable:=texte}
fait la même chose que ${variable:-texte}
, mais modifie la variable si elle est vide${variable#préfixe}
et ${variable##prefixe}
renvoient la valeur de la variable privée respectivement des préfixes le plus court et le plus long qui correspondent au motif donné${variable%suffixe}
et ${variable%%suffixe}
agissent de la même façon que ${variable#…}
et al., à partir de la fin de la variable${variable/recherche/remplacement}
renvoie la valeur de la variable où recherche
aura été remplacée par remplacement
à la première occurence${variable//recherche/remplacement}
remplace toutes les occurences de recherche
par remplacement
${variable,}
, ${variable,,}
, ${variable^}
et ${variable^^}
mettent la variable respectivement en minuscules et en majuscules, sans changer les autres caractères. Avec un seul suffixe, cela transforme le premier caractère de la chaîne. Avec deux suffixes, cela transforme toute la chaîne.Ne fuyez pas tout de suite, tout est plus compréhensible avec des exemples. Vous pouvez copier-coller ce code dans votre terminal pour voir ce que tout celà ceut dire :
cat > script.sh <<EOF foo=a/b.E/C.d echo foo="\$foo" echo '\${foo#*/}'="\${foo#*/}" echo '\${foo##*/}'="\${foo##*/}" echo '\${foo%.*}'="\${foo%.*}" echo '\${foo%%.*}'="\${foo%%.*}" echo '\${foo/./_}'="\${foo/./_}" echo '\${foo//./_}'="\${foo//./_}" echo '\${foo^^}'="\${foo^^}" echo '\${foo,,}'="\${foo,,}" EOF bash script.sh
Attention: Depuis Ubuntu 13.10, la disposition du clavier peut aléatoirement revenir en QWERTY à chaque fois que les système redémarrent. La section qui suit permet de rétablir l'agencement initial si cela vous arrive sur nos machines.
Comme presque tout sous Linux, on peut changer la disposition du
clavier depuis la ligne de commandes, en utilisant le programme
setxkbmap
(“Set X KeyBoard Map”). Par exemple, pour passer en
QWERTY, on écrit
setxkbmap en
Pour repasser en AZERTY, il suffit de taper
setxkbmap fr
Alternativement, on peut utiliser IBus, la technique Ubuntienne de changement des langues du clavier. Avec IBus, passer en Azerty se fait de la façon suivante :
ibus engine xkb:fr::fra
et repasser en Qwerty se fait avec
ibus engine xkb:us::eng
Compléter cette page (problèmes courants)