CSC 3102 – Introduction aux systèmes d’exploitation

Portail informatique

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, 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 :

  • Pour les utilisateurs de WSL, vous pouvez installer dans votre « distribution Linux pour Windows » le paquet openssh de façon à pouvoir directement utiliser la commande ssh.
  • Sinon, vous pouvez installer et utiliser putty. 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é 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 trop de difficultés.

Néanmoins, nous ne pouvons que trop vous conseiller de profiter de ce TP pour vous familiariser avec un environnement Linux. Ce peut être via les machines de TP, ou via une installation en dual boot sur votre machine. Vous pourrez ainsi bénéficier d'une installation Linux complète tout en conservant une installation Windows. La procédure est cependant assez complexe, et nous vous conseillons de trouver conseil auprès d'autres étudiants.

Au secours, je ne retrouve pas mes fichiers !

Il semblerait qu'un terminal WSL se place par défaut dans le dossier C:\windows\sys32 plutôt que dans le répertoire de connexion de l'utilisateur. Nous vous conseillons donc de faire cd dès le lancement, ce qui vous placera dans votre répertoire personnel (C:\Users\monlogin).

Astuce 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. le module CSC3102 sont installées par défaut. 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).

Il faut toutefois savoir que la plupart de vos enseignants ne savent pas utiliser un macOS et qu'ils ne pourront donc pas vous aider si vous avez des problèmes spécifiques à macOS.

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 (d'autant plus que grâce à la première ligne #! /bin/bash de vos scripts, ceux-ci sont quand même 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).

Lorsque vous vous rendez compte que les options ne sont pas compatibles, il faut chercher les options équivalentes en utilisant les pages de man.

Entrer les caractères spéciaux utile 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). La touche Alt s'appelle option sur un clavier Mac.

  • Alt-n : ~
  • Shift-Alt-l : |
  • Shift-Alt-( : [
  • Shift-Alt-) : ]
  • Shift-( : {
  • Shift-) : }
  • Shift-Alt-/ : \

Questions 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 :

if [ $1 = "add" ]; then ... fi

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é en [ = "add" ], ce qui est une expression incorrecte. Il faut donc écrire le test de cette façon :

if [ "$1" = "add" ]; then ... fi

Dans cette expression, le test avec un argument vide est interprété en [ "" = "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é existe bel et bien, alors le problème est peut-être avec l'espace entre le crochet [ et la commande.

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.

Attention, cela peut aussi arriver après un tube | !

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

;; Désactiver la division de la fenêtre au démarrage (when (fboundp 'delete-other-windows) (delete-other-windows)) ;; Et pour éviter la création de la fenêtre *scratch* ou *fundamental* (setq inhibit-startup-buffer-menu t) (setq inhibit-startup-message t) ;;==================

Merci à Éric Lallet pour l'astuce.

Être efficace dans Bash

Complétion 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.

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 vers le 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é 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 bouton 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 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 Ctr-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 de commandes par défaut du système se trouvant dans le fichier /etc/bashrc.