Table des matières

Linux sur les postes de TPs

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.

Le logiciel libre

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.

Linux et la ligne de commande

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.

Ouvrir un shell

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 :

Maintenant que vous avez accès à votre terminal, voici les quelques notions de base.

Les commandes

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

Les variables

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 :

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.

Personnaliser son Shell

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.

Utilisation avancée des variables

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 :

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

Trucs et astuces

Changer la disposition du clavier

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

FIXME Compléter cette page (problèmes courants)