Trucs et astuces
Cette liste de trucs et astuces devrait vous aider à utiliser un peu plus efficacement votre terminal et le langage bash. Lisez attentivement cette page, surtout si vous ne travaillez pas sous Linux, car vous gagnerez beaucoup de temps par la suite !
Questions fréquentes
Comment me connecter aux salles de TP depuis chez moi ?
Sous Linux ou macOS, vous pouvez utiliser la commande "ssh identifiant@ssh.imtbs-tsp.eu". Nous vous invitons à faire l'exercice sur la commande ssh pour bien comprendre comment marche cette commande.
Depuis une machine Windows, il y a deux possibilités :
- sous WSL2, vous pouvez installer dans votre « distribution Linux pour Windows » le paquet openssh de façon à pouvoir directement utiliser la commande ssh ;
- vous pouvez installer et utiliser putty, directement dans Windows. La configuration de putty pour se connecter aux machines de TSP est expliquée dans la présentation des ressources informatiques que vous a faite la DISI.
Quelle distribution de Linux je peux installer sur ma machine ?
Nous ne vous conseillons pas une distribution plutôt qu'une autre, elles ont toutes des avantages et des inconvénients. La plus commune et grand public, et que MiNET vous a installée au début de l'année lors de leur install party, est Ubuntu. La page suivante présente un bon résumé des principales distributions Linux : Quelle distribution Linux choisir ?
Astuces pour Windows (WSL2)
Je suis sous Windows, comment je peux faire les TP ?
La version 2 de Windows Subsystem for Linux (WSL) vous permettra de faire tous les TP de ce module, en général sans difficulté.
Néanmoins, nous ne pouvons que trop vous conseiller de profiter de ce TP pour vous familiariser avec un véritable environnement Linux. Ce peut être via les machines de TP (possiblement via SSH, voir plus haut), ou via une installation en dual boot sur votre machine. Avec cette dernière possibilité, vous pourrez bénéficier d'une installation personnelle et complète de Linux, tout en conservant une installation Windows. La procédure est cependant assez complexe, et nous vous encourageons à trouver conseil auprès d'autres étudiants.
Astuces pour macOS
Je suis sous macOS, comment je peux faire les TP ?
Vous pouvez faire la plupart des TP directement sur un macOS à condition d'installer quelques programmes supplémentaires indiqués dans la suite de cette section. En effet, macOS étant un UNIX, les notions présentées et les commandes utilisées sont les mêmes, à quelques différences mineures près (options ou comportements légèrement différents) qui sont indiquées dans les sujets des TP.
Il faut toutefois savoir que la plupart de vos enseignants ne savent pas utiliser macOS et qu'ils ne pourront donc pas vous aider si vous avez des problèmes spécifiques à cet environnement.
Je n'ai pas les commandes du cours / Mes commandes ne font pas la même chose !
Votre shell par défaut n'est pas Bash, mais plutôt Zsh, cependant Zsh est compatible avec Bash et les différences ne sont pas perceptibles. Pensez bien à toujours écrire en première ligne de vos scripts #! /bin/bash, pour que ceux-ci soient forcément interprétés par Bash). Si des commandes vous manquent, vous pouvez essayer de les installer avec brew, ou bien via MacPorts (pour xeyes par exemple).
Si vous vous rendez compte que des options ne sont pas compatibles, il faut chercher les options équivalentes en utilisant les pages de man spécifiques aux versions installées sur macOS.
Entrer les caractères spéciaux utiles pour écrire des scripts bash
Vous devez aussi apprendre les raccourcis clavier permettant de taper les caractères couramment utilisés lorsqu'on programme en bash (et pas seulement).
- Option-n : ~
- Shift-Option-l : |
- Shift-Option-( : [
- Shift-Option-) : ]
- Shift-( : {
- Shift-) : }
- Shift-Option-/ : \
Erreurs courantes de syntaxe bash
bash: [: =: unary operator expected
Si vous avez l'erreur "bash: [: =: unary operator expected" alors que votre programme a l'air correct, c'est que vous avez oublié des guillemets autour d'une variable vide dans votre test. C'est typiquement le cas ici :
L'expression est correcte lorsque $1 n'est pas la chaîne vide. Mais si le script est lancé sans argument, $1 est la chaîne vide et le test est interprété comme [ = "add" ], ce qui est bien sûr une expression incorrecte. Il faut donc écrire le test de cette façon :
Dans cette expression, le test avec un argument vide est interprété comme [ "" = "add" ], ce qui est correct (mot vide en opérande gauche).
script.sh: line N: [ cmd: command not found
Pour cette erreur, si la commande cmd que vous avez tapée existe bel et bien, alors le problème vient peut-être de l'espace entre le crochet [ et cmd.
Sur un clavier AZERTY PC, vous utilisez Alt Gr pour taper un crochet, puis vous tapez l'espace. Si vous la tapez trop vite, vous risquez d'entrer Alt Gr + <espace>, ce qui produit une espace insécable. C'est techniquement un caractère différent de l'espace ASCII attendue par Bash. Ainsi, Bash considère la suite crochet-espace-cmd comme un seul mot, et donc comme la commande qu'il doit exécuter.
La correction du problème consiste simplement à retaper correctement l'espace !
Autour d'emacs
Comment utiliser emacs ?
Nous vous invitons déjà à faire un tutorial emacs (par exemple celui-ci, ou simplement en allant dans le menu Help -> tutorial dans emacs). Ensuite, les raccourcis essentiels sont :
- Ctrl-x Ctrl-s : sauvegarde le fichier
- Ctrl-x Ctrl-f : ouvre un fichier
- Ctrl-x Ctrl-b : bascule la fenêtre vers un autre fichier ouvert
- Ctrl-k : efface la fin de la ligne à partir du curseur
- Ctrl-a : déplace le curseur en début de ligne
- Ctrl-e : déplace le curseur en fin de ligne
- Ctrl-space : démarre une selection, vous pouvez vous déplacer avec les flèches
- Meta-w : copie la selection en cours (Meta = touche Alt ou Echap)
- Ctrl-y : colle une selection préalablement copiée
Comment empêcher emacs de diviser sa fenêtre en deux à l'ouverture d'un fichier ?
Si vous voulez éviter ce problème, ajoutez les lignes suivantes au fichier ~/.emacs (en l'ouvrant avec emacs, ce qui le crée s'il n'existe pas encore) :
Merci à Éric Lallet pour l'astuce.
Être efficace dans Bash
Complétion des commandes et des noms de fichiers
Pour utiliser la complétion automatique fournie par le shell, tapez les premières lettres de la commande ou du fichier et appuyez sur la touche Tab. Si le préfixe donné n'est pas ambigu, la complétion est faite automatiquement. Sinon, si vous appuyez une deuxième fois sur la touche tabulation, le shell vous propose une liste des complétions disponibles. Continuez à taper le préfixe pour résoudre l'ambiguité et appuyez à nouveau du Tab pour compléter automatiquement le mot.
Rappel des commandes précédentes
Pour rappeler des commandes précédentes dans votre fenêtre de terminal, vous pouvez presser la touche flèche du haut de votre clavier, une fois pour rappeler la commande précédente ou plusieurs fois pour rappeler une commande plus ancienne.
Lorsqu'une commande échoue, habituez-vous à utiliser l'historique pour la rappeler et la modifier au lieu de la retaper.
Vous pouvez aussi rechercher facilement une commande dans l'historique. Pour cela, il suffit de saisir la combinaison de touches Ctrl-r. Saisissez ensuite un des mots utilisés dans une ancienne commande, et la commande complète va apparaître.
Copier-coller
Pour copier une chaîne de caractères, sélectionnez-la avec le clic gauche de la souris : voilà, elle est copiée ! Pour la coller, cliquez avec le bouton du milieu. Le collage a lieu à la position courante du curseur.
Vous avez aussi un second presse-papier, aux raccourcis presque plus naturels : copiez avec Ctrl-Maj-C (attention à la touche majuscule, sinon vous allez interrompre la commande à l'avant-plan !), et collez avec Ctrl-Maj-V.
Autres raccourcis bash bien utiles
De nombreux raccourcis de vim et emacs fonctionnent aussi dans le terminal. En particulier :
- Ctrl-k : coupe du curseur jusqu'à la fin de la ligne.
- Ctrl-w : coupe du curseur jusqu'au début du mot précédent.
- Ctrl-y : colle le dernier texte coupé.
Ma commande est bloquée !
Lorsque votre commande est bloquée (typiquement, lors d'une boucle infinie), vous pouvez l'interrompre en utilisant la combinaison de touches Ctrl-c.
Mon terminal est bloqué !
Votre terminal est bloqué car un processus tourne au premier plan. Vous pouvez soit interrompre ce processus avec la combinaison de touches Ctrl-c (comme indiqué dans l'astuce précédente), soit passer ce processus du premier plan à l'arrière plan.
Pour cela, il faut d'abord saisir la combinaison de touches Ctrl-z dans le terminal. Cette combinaison de touches suspend le processus au premier plan. Ensuite, vous pouvez redémarrer ce même processus en arrière-plan avec la commande bg (comme background).
À propose de source script.sh et . script.sh
Vous pouvez inclure un script dans un autre à l'aide de la commande source script.sh (qui peut aussi s'écrire comme un point seul : . script.sh). À ce moment, bash exécute les commandes se trouvant dans script.sh, comme si elles avaient été écrites à la place de la ligne source script.sh.
Ce mécanisme est très différent du lancement d'une commande (sans source). En effet, sans source, bash lance un nouveau processus pour exécuter les commandes, alors qu'avec source, bash exécute le script passé en argument dans le processus courant.
La construction source n'est pas utilisée dans le cours. En revanche, si vous ouvrez votre fichier de configuration par défaut (.bashrc), il est probable que vous croisiez une ligne contenant . /etc/bashrc. Cette ligne permet d'exécuter l'ensemble des commandes par défaut du système se trouvant dans le fichier /etc/bashrc.