========================== Séance 1 : Prise en main ========================== .. include:: commondefs.rst.inc .. ifslides:: .. include:: credits.rst.inc Pourquoi Linux ? ================ Open-source, et donc * moins cher, * plus sécurisé, * plus portable *(que des alternatives commerciales)*. Largement utilisé : * serveurs, équipements réseau * appareils Android * autres « petits » appareils (liseuses, raspberry pi...) .. index:: noyau, distribution Vocabulaire ----------- * Linux est en fait le nom du **noyau** du système d'exploitation (SE). * Un |SE| complet basé sur le noyau linux est appelé une **distribution** (ou *distro*). Exemple : .. hlist:: + `Debian `_ + `Ubuntu `_ (basée sur Debian) + `Fedora `_ + `Arch Linux `_ + `Slackware `_ + ... Pourquoi la ligne de commande ? =============================== * travail à distance * appareils peu puissants * productif * automatisable .. index:: shell, bash Le shell ======== * `shell`:eng: est le nom donné au programme qui gère la ligne de commande * il en existe plusieurs versions, mais ``bash`` est la plus utilisée .. nextslide:: * interaction typique avec le shell : + **affiche** une *invite* de commande (traditionnellement terminée par ``$`` ou ``#``) + **analyse** le texte tapé + **exécute** le(s) programme(s) demandé(s) (en lui/leur passant des arguments) + **attend** la fin de l'exécution, puis recommence .. _analyse_cli: .. index:: guillemets Analyse de la ligne de commande ------------------------------- * Le shell découpe la ligne de commande au niveaux des *espaces*. * Ce découpage donne une liste de chaînes de caractères : + la première est interprétée comme le nom du programme à exécuter, + les suivantes sont les arguments passés au programme. * Pour inclure une (ou plusieurs) espace(s) dans un argument, il faut encadrer cet argument par des guillemets (``"`` ou ``'``). .. code-block:: # exemple git commit --all -m "fixed bug #42" .. nextslide:: * Une alternative pour inclure une espace dans un argument consiste à la faire précéder par un anti-slash (``\``). .. code-block:: # exemple git commit --all -m fixed\ bug\ \#42 .. note:: Dans l'exemple ci-dessus, le caractère dièse (``#``) nécessite également un anti-slash, car lui aussi serait interprété par le shell (commentaire). Dans la suite, nous verrons d'autres caractères spéciaux utilisés par le shell pour analyser les lignes de commandes. `Cet outil développé par Thierry Excoffier`__ permet de bien comprendre les mécanismes en œuvre dans cette analyse. __ http://perso.univ-lyon1.fr/thierry.excoffier/MUNIX/test.html .. index:: argument Arguments d'un programme ------------------------ Les **arguments** d'un programme sont une liste de chaîne de caractères, passée à ce programme à son lancement. .. code-block:: c int main(int argc, char* argv[]) { /* ... */ } Le programme est libre d'interpréter ces arguments comme il le souhaite, mais il existe un certain nombre de *conventions*. .. index:: option Conventions courantes sur les arguments --------------------------------------- * Un paramètre démarrant par un tiret (`-`) est une **option**, qui altère le comportement du programme. * Une option commençant par un seul tiret est composée d'une seule lettre (exemple ``-h``, ``-V``). Les options plus longues commencent par deux tirets (exemple ``--help``, ``--version``). * Plusieurs options courtes peuvent être combinées après un seul tiret (exemple ``-la`` au lieu de ``-l -a``). * L'option ``--help`` sert à afficher une courte documentation de la commande. Quelques commandes de base ========================== .. contents:: :local: man [section] / man [options] ---------------------------------------- .. program:: man Affiche une page du "manuel" (documentation). .. describe:: La commande dont on souhaite afficher le manuel. .. describe:: [section] Éventuellement, le numéro de section du manuel. .. option:: -k, --apropos Liste toutes les pages du manuel contenant ``texte``. echo [options] -------------------------- .. program:: echo Affiche les arguments, séparés par des espaces. .. option:: -n N'affiche *pas* de retour à la ligne après les arguments. more [ficher] ------------- .. program:: more Affiche un fichier de manière paginée. * *entrée* ou *espace* avance d'une page * CTRL+C quitte le programme .. hint:: CTRL+C n'est pas une instruction spécifique à ``more``; cela interomp la plupart des programmes lancés en ligne de commande. id [options] [utilisateur] -------------------------- .. program:: id Affiche des informations sur un utilisateur. .. describe:: utilisateur Nom ou numéro d'utilisateur (défaut : utilisateur courant). .. option:: -u, --user Affiche uniquement l'identifiant de l'utilisateur. .. option:: -G, --groups Affiche uniquement les groupes auxquels appartient l'utilisateur. .. option:: -n, --name Affiche l'identifiant textuel au lieu de l'identifiant numérique (avec ``-u`` ou ``-g``). date [options] [+format] ------------------------ .. program:: date Affiche une date au format demandé. .. option:: -d, --date=STRING La date à afficher (défaut : date courrante) .. describe:: +format Format à utiliser pour l'affichage, cf. `man date`. Exemples : * ``"+%d/%m/%y"`` affiche jour/mois/année (sur 2 chiffres) * ``+%A`` affiche uniquement le jour de la semaine * ``+%W`` affiche le numéro de la semaine .. note:: La valeur passée à ``--date`` accepte de nombreux formats différents, y compris des expressions comme « `tomorrow`:eng: » ou « `2 years ago`:eng: ». Attention cependant au format ``xx/yy/zzzz``, il est généralement interprété à l'américaine : mois/jour/année. Il vaut mieux lui préférer le format ``aaaa-mm-jj``. Travaux dirigés =============== .. ifslides:: `Consultez les ici <../s1.html#travaux-diriges>`_ .. ifnotslides:: Lancement d'une machine virtuelle Linux --------------------------------------- * Ouvrir le fichier ``D:\VMWARE_images\PA.Champin\Ubuntu 19.10.ova`` avec `Vmware workstation`:eng:. * Choisissez comme répertoire destination un sous-répertoire de ``D:\`` (n'utilisez **pas** un répertoire réseau, cela serait beaucoup trop lent). * En cas d'erreur, cliquez sur *Retry*. * Le mot de passe est ``etudiant``. * Une fois la machine virtuelle démarrée, ouvrez un terminal en cliquant sur l'icône correspondante. .. figure:: _static/terminal.png Icône "Terminal" Utilisation de commandes ------------------------ * affichez avec ``more`` tout le contenu du fichier ``/etc/passwd`` * affichez avec ``more`` les premières pages du fichier ``/var/log/syslog``, puis quittez le programme * en utilisant ``echo``, affichez ``bonjour le monde`` * affichez maintenant ``bonjour le MONDE !`` (avec deux espaces avant et après « monde ») * en utilisant ``date``, affichez le jour de la semaine de votre jour de naissance Historique ---------- .. hint:: Avec les touches *haut* et *bas*, il est possible de naviguer dans l'historique des commandes tapées. Il est ensuite possible de modifier la ligne de commande de manière classique (flêche gauche et droite, retour arrière...). * affichez à nouveau ``bonjour le monde`` * en utilisant ``date``, affichez le jour de la semaine de votre jour de naissance * affichez maintenant le jour de la semaine de vos trois premiers anniversaires (utilisez le retour arrière dans l'historique pour éviter de retaper la commande à chaque fois) .. hint:: On peut effectuer une recherche dans l'historique des commandes, en tapant CTRL+``R``, suivi du texte à rechercher. En tapant à nouveau CTRL+``R``, on remonte dans l'historique au résultat suivant de la recherche. * affichez à nouveau le jour de la semaine de votre jour de naissance (utilisez CTRL+R pour rechercher votre année de naissance dans l'historique) * affichez à nouveau ``bonjour le MONDE !`` Édition avancée de la ligne de commande --------------------------------------- .. hint:: * Avec CTRL+*gauche* et CTRL+*droite*, on peut déplace le curseur mot par mot. * Avec CTRL+``K``, on peut supprimer tout ce qui est à droite du curseur. * Avec CTRL+``U``, on peut effacer la totalité de la ligne de commande. * affichez ``au revoir le monde`` * affichez ``Bonjour le MONDE !`` * affichez le jour de la semaine de votre quatrième anniversaires Répétition du dernier argument ------------------------------ * affichez à nouveau ``bonjour le monde`` * tapez ``echo au revoir le ``, puis la touche *echap*, puis ``.`` (NB: sur un clavier français, le `.` est obtenu avec SHIFT+``;``). Quel message s'affiche ? .. hint:: ESC+`.` ajoute le *dernier* argument de la précédente ligne de commande. .. _tab-complétion: Tab-complétion -------------- * tapez ``ec`` suivi de la touche *tabulation* (``→|``) ; que constatez vous ? videz ensuite la ligne de commande avec CTRL+C. * tapez ``e`` suivi de la touche *tabulation* ; que constatez vous ? tapez la touche *tabulation* à nouveau ; que constatez vous ? videz la ligne de commande avec CTRL+C. * tapez ``man`` suivi d'une espace, puis tapez *tabulation* deux fois ; que constatez-vous ? .. hint:: La touche *tabulation* déclenche ce qu'on appelle la `tab-completion`:eng:: le shell complète automatiquement le mot à gauche du curseur (qui peut être vide). Si plusieurs complétions sont possibles, le shell fait plusieurs propositions. Les proposition du shell dépendent du contexte; elle peuvent être * un nom de fichier (par défaut), * une option de la commande, * un nom d'utilisateur (e.g. pour la commande ``id``), * une sous-commande (e.g. pour la commande ``git``)... * tapez les caractères suivants: ``m``, ``o``, ``r``, *tabulation*, ``/``, ``e``, *tabulation*, ``p``, ``a``, ``s``, *tabulation*, *entrée* * combien y a-t-il d'entrées dans la section 3 du manuel ? * combien y a-t-il d'entrées commençant par ``pa`` dans la section 3 du manuel ?