LINUX - PHELMA - Grenoble INP

 
CONTINUER À LIRE
LINUX - PHELMA - Grenoble INP
1ere année                                version 17/09/2018

                                    TP 1 : LINUX — SHELL
            Notions : Terminal et langage Shell sous Linux - premier programme en langage C

        Les trois premières parties de ce TP sont importantes pour vous entrainer avec
        l’environnement Linux. La dernière partie permet d’aller plus loin, pour ceux qui
        vont vite.
        30 min avant la fin de la séance, passer à la partie 3.

1       Première connexion - durée 10 mn

Exercice 1        Changement du mot de passe de votre compte Phelma
    Les données de votre compte informatique Phelma sont stockées sur un serveur central : vous y accéderez
    depuis n’importe quelle machine du réseau Phelma en vous connectant avec votre login.
    Le mot de passe que vous choisirez pour ce compte sera utilisé pour tous les services informatiques de
    Phelma : login sur toutes les machines, accès Intranet, ADE, Webmail, etc.
    Vous devez mémoriser ce mot de passe.
    Attention : vous êtes responsables des actions réalisées sur le réseau Phelma en utilisant votre compte. Vous
    ne devez donc jamais communiquer votre mot de passe.

     À faire :
     — démarrez votre machine en choisissant le système d’exploitation Linux (dans le menu qui s’affiche
         au bout de 10s)
     — connectez-vous avec le mot de passe qui vous a été distribué
     — ouvrez un navigateur Internet (voir image ci-dessous).

     — rendez-vous sur la page https://prism.minatec.grenoble-inp.fr/, connectez-vous, et, dans le
       menu à gauche, choisissez “modifier mon mot de passe” - puis suivez les instructions pour changer
       votre mot de passe.

                                                           1
LINUX - PHELMA - Grenoble INP
Exercice 2     Webmail Phelma
 Votre adresse mail officielle à Phelma est de la forme .@phelma. grenoble-inp. fr .
 La Scolarité et vos enseignants utiliseront cette adresse pour communiquer avec vous. Vous devez donc
 consulter régulièrement vos mails.

   CET EXERCICE N’EST PAS A FAIRE DURANT LA SEANCE, mais plus tard, de chez soi ou dans
une salle Informatique en accès libre.
  — allez sur la page https://webmail.minatec.grenoble-inp.fr
  — connectez-vous au Webmail
  — dans le menu Options / Préférences globales / Données personnelles (voir l’image ci-dessous),
    vérifiez les champs Nom du compte, Votre nom complet, Votre adresse email. En bas de la page,
    cliquez sur Enregistrer les options.
  — Pour tester votre email, envoyez un mail à votre voisin.

 Pour info, notez que le code d’activation de votre carte pour la restauration vous sera envoyé par mail.
 Surveillez !

Exercice 3     Quelques liens à connaitre
   CET EXERCICE N’EST PAS A FAIRE DURANT LA SEANCE, mais plus tard, de chez soi ou dans
une salle Informatique en accès libre.
  — https://edt.grenoble-inp.fr/2018-2019/etudiant/phelma : votre emploi du temps en ligne.
  — http://intranet.phelma.fr : intranet Phelma. Accès à de nombreuses données utiles pour votre
    scolarité : emploi du temps en ligne ADE, contacts, notes, accès aux outils pédagogiques en ligne
    (Chamillo, etc), etc.
  — https://prism.minatec.grenoble-inp.fr : site web du service informatique. Changement de
    votre mot de passe. Documentation de tous les outils informatiques généraux. Vous y trouve-
    rez notamment une “machine virtuelle Linux” à télécharger pour travailler chez vous depuis un
    ordinateur Windows.
  — help@phelma.grenoble-inp.fr : adresse mail à contacter en cas de problème avec les moyens
    informatique Phelma (machine ou imprimante en panne, problème avec votre compte, etc.).
  — http://tdinfo.phelma.grenoble-inp.fr/ : le site des modules d’informatique de Phelma. Cours,
    sujet de TP, adresses mail de vos enseignants, etc.
  — https://webmail.minatec.grenoble-inp.fr : mail Phelma

                                                       2
LINUX - PHELMA - Grenoble INP
2         Le Terminal et le langage Shell - durée 50 mn
    Le langage de script Shell permet d’interagir avec le système d’exploitation Linux.
    Le Shell donne accès à tout ce qu’il est possible de faire avec l’interface graphique, et à d’autres choses
    encore, en tapant et exécutant des commandes Shell plutôt qu’en utilisant la souris. Par exemple :
        — lister les fichiers d’un répertoire, renommer ou déplacer un fichier, créer des répertoires...
        — lancer une application, compiler un programme, ouvrir un fichier, ...
        — afficher le contenu d’un fichier, rechercher ou remplacer des caractères dans un fichier texte, créer des
           archives,...
        — configurer le système (date, heure, création d’utilisateurs...)
        — etc.
    Tout utilisateur sérieux de Linux, tout programmeur et tout étudiant Phelma 1A, doit connaitre les bases du
    langage Shell. En effet, pour de nombreuses choses, ce langage permet d’être beaucoup plus efficace et précis
    qu’une interface graphique.

Exercice 4        Ouverture du Terminal et commande ls
    Le Terminal est l’application qui permet de lancer des commandes en langage Shell.

Dans le menu Utilitaires (ou Outils système), sélectionnez “Terminal”.

    Lorsque le Terminal est lancé, une fenêtre apparait. Une “invite de commande” indique que le Terminal attend
    vos ordres.
    Exécuter une commande Shell, c’est taper le nom de la commande suivi de ses paramètres séparés par des
    espaces, puis appuyer sur la touche Enter (retour chariot).

     Tapez la commande ls (qui signifie “list”), suivie d’un retour chariot (Enter).
     ls

La commande est exécutée : la liste des fichiers et répertoires du “répertoire courant” s’affiche. Le
répertoire courant étant la racine de votre compte, vous retrouvez notamment Bureau, Document, etc.
    Note : pour annuler une commande sans l’exécuter et retrouver l’invite de commande, utiliser les touches
    Ctrl+c plutôt que de taper Enter.

    Conseil : le Terminal va devenir un de vos bons amis en cours d’informatique. Il peut être utile de faciliter son
    lancement. Pour savoir comment faire, consultez l’aide du bureau Linux (nommé Gnome).

                                                           3
LINUX - PHELMA - Grenoble INP
Exercice 5       La commande d’aide man
  La commande man (manuel) permet d’accéder aux pages de manuel de n’importe quelle commande en tapant
  man .
  Durant l’affichage d’une page de manuel avec man :
     — pour avancer : espace. Pour reculer : u
     — pour chercher une chaı̂ne de caractère, tapez / (slash) suivi de la chaine à chercher puis Enter
     — durant une recherche, pour passer à l’occurrence suivante, taper n
     — durant une recherche, pour passer à l’occurrence précédente, taper N
     — pour quitter la commande man, taper q

   Max 1 mn. Pour tester la commande man, découvrez rapidement (1 min max) toute l’étendue des
possibilités de la commande ls en tapant man ls.
    Max 1 mn. A l’aide du manuel de la commande ls, trouver comment afficher avec ls non seulement
les noms, mais aussi les permissions d’accès, le propriétaires, la taille (etc.) des fichiers du répertoire
courant. Tips : il s’agit du format “listing” de ls ; une recherche sur le mot clé “listing” dans le manuel
de ls serait donc bienvenu...
   Max 1 mn. Comment, avec la commande ls, afficher les fichiers triés par date de modification ? Une
recherche sur le mot clé “time” ou “sort” dans les man pages serait bienvenue...
  Note : de nombreuses commandes du Shell disposent une “aide en ligne” allégée avec l’option --help. Par
  exemple man --help.

Exercice 6       Commandes pwd et cd : répertoire courant et navigation dans les répertoires
  Sous Linux, les fichiers sont organisés dans une arborescence : un répertoire contient des fichiers et des
  répertoires, répertoires qui eux-mêmes contiennent fichiers et répertoires, et ainsi de suite.
  À tout instant, le Shell est positionné dans un et un seul répertoire, appelé le “répertoire courant”.
  Toutes les données de votre compte sont situées sous un répertoire appelé le “home directory”, qui porte le
  nom de votre login phelma.
  Lorsqu’on ouvre le Terminal, il se positionne dans votre “home directory”.

  La commande pwd (“Print Working Directory”) indique le répertoire courant.

    Exécutez pwd et vérifiez que le répertoire courant est bien votre “home directory” (répertoire qui porte
le nom de votre login Phelma).
  La commande cd (“Change Directory”), permet de changer le répertoire courant en se déplaçant dans
  l’arborescence des répertoires.

   Exécutez par exemple :
   ls
   cd tdinfo         # Nouveau repertoire courant : tdinfo
   pwd
   ls
   cd seance01
   pwd
   ls

  À savoir ! À tout instant, exécuter la commande cd sans argument retourne au répertoire racine de votre
  compte. Bien utile quand on est perdu dans l’arborescence !
  Il est possible de se déplacer de plusieurs niveaux en une seule commande.

   Essayez :
   cd                        # retourne a la racine de votre compte (‘‘Home Directory’’)
   cd tdinfo/seance01        # le repertoire courant devient tdinfo/seance01
   pwd

                                                           4
Exercice 7      Autocomplétion, copier-coller, et autres raccourcis
 Comme l’informaticien est un animal paresseux, le Terminal dispose de plusieurs mécanismes facilitant le
 travail.

Autocomplétion.
 Avec l’autocomplétion, le Terminal complète les mots que vous êtes en train de taper. L’autocomplétion
 s’active avec la touche tabulation du clavier       .

 Si un seul complément est possible, l’autocomplétion est immédiate.
 Si plusieurs compléments sont possibles, appuyer deux fois de suite sur tabulation affichera tous les
 compléments valables. Il suffit alors d’ajouter une lettre à la commande, puis de réappuyer sur tabulation,
 pour progressivement aboutir à la commande voulue.

   Placez-vous à la racine de votre compte en exécutant cd (sans paramètre).
   Pour rentrer dans le répertoire tdinfo/seance01 en s’aidant de l’autocomplétion :
   — tapez cd t
   — appuyez sur la touche tabulation (autocomplétion à cd tdinfo/)
   — tapez s,
   — appuyez sur la touche tabulation (autocomplétion à cd tdinfo/seance
   — tapez deux fois sur la touche tabulation (le Terminal vous indique toutes les possibilités de
       complétion)
   — tapez 01
   — appuyez sur Enter pour exécuter la commande ainsi complétée.
   Désormais, gardez toujours la touche tabulation à portée de main !
 Notez que l’autocomplétion fonctionne aussi avec les noms de commande - utile pour les noms de commande à
 rallonge.

Copier-coller.
 Sous Linux, tout texte sélectionné à la souris est automatiquement mis de côté et peut être “collé” en cliquant
 sur bouton central de la souris.

   Pour essayer :
   — sélectionnez dans ce document la commande ci-dessous avec le bouton gauche de la souris whoami
   — puis, dans le Terminal, appuyez sur le bouton central. Oh, miracle ! Le texte sélectionné est “collé”
      comme une nouvelle commande !
   — appuyez sur Enter pour exécuter la commande

Précédentes commandes. Pour retrouver une commande récemment exécutée facilement, il est pos-
sible de remonter/descendre d’un niveau dans l’historique avec les flèches haut et bas du clavier.
Essayez.

Bascule entre plusieurs applications Sous Linux, pour basculer d’une application à une autre (par
exemple : du Terminal à Firefox), utilisez la combinaison de touches Alt+Tab.

Exercice 8      Chemin absolu et chemin relatif
 Le “répertoire racine” est le sommet de l’arbre des répertoires. Ce répertoire racine est noté / (slash).
 Un fichier peut être désigné par un chemin absolu depuis la racine ou par un chemin relatif depuis le
 répertoire courant. Par exemple :
      — /usr/include/math.h est un chemin absolu : il commence par /
      — Si le répertoire courant est votre “home directory”, alors tdinfo/seance01 (sans / au début) est un
          chemin relatif vers le répertoire seance01.

                                                          5
Essayez ce qui suit (en utilisant l’autocomplétion bien sûr) :
   cd /usr/include    # chemin absolu.
   pwd
   cd /                # on se place a la racine du systeme de fichier Linux, "/"
   pwd
   cd usr/include      # chemin relatif depuis le repertoire courant, qui est la racine Linux   "/"
   pwd                 # on se retrouve bien au meme endroit !
   cd                  # retour a la maison !
   pwd

   De nombreuses commandes acceptent un chemin en paramètre. Par exemple, avec ls :
   cd                # retour a la maison
   ls /usr/include   # chemin absolu. Affiche le contenu du repertoire sans changer le repertoire courant
   pwd               # Le repertoire courant n a pas change : on est toujours a la maison !
   cd /
   ls usr/include    # chemin relatif depuis la racine. Il designe bien le meme repertoire.

   Le symbole ~ (tilde) désigne la racine de votre compte. Essayez :
   cd /
   pwd                      # on est bien a la racine du systeme de fichiers
   cd ~/tdinfo/seance01
   pwd
   ls

   Dans un chemin, le symbole .. (“point-point”) désigne le répertoire situé juste au-dessus dans l’ar-
borescence. Exécutez :
   cd
   cd tdinfo/seance01
   cd ..                     # vous voila revenu dans le repertoire tdinfo
   pwd

   Pour vous entrainer :
   cd
   cd tdinfo/seance01        # entre dans le repertoire seance01
   cd ../seance02            # remonte d’un niveau puis descend dans le repertoire seance02
   pwd

    Enfin, sachez que le symbole “.” (point) utilisé dans un chemin permet de désigner le répertoire
courant - on verra un cas où cela est utile plus tard. Ainsi, par exemple, “ls .” (avec le point) afficherait
le contenu du répertoire courant ; ou encore “cd ./tdinfo” serait équivalent à “cd tdinfo” (sans le point).

                                                      6
Exercice 9      Lancement et arrêt d’un programme
   Le Shell permet de lancer n’importe quel programme. Pour essayez, affichez une horloge avec la
commande “xclock -update 1”.
    En retournant dans la fenêtre du Terminal (sans quitter xclock), vous constaterez que l’invite de
commande a disparu - même si vous appuyez sur entrée, elle ne revient pas. En effet, le Terminal attend
la fin du programme pour redonner la main à l’utilisateur. Il n’est donc plus possible de lancer une
commande Shell.
    Dans le terminal, tapez -C. Vous retrouvez l’invite de commande, mais xclock a disparu : -C
a “tué” le processus. A retenir !

Exercice 10       Lancement d’un programme en tâche de fond
    Relancez xclock -update 1 (Tips : utilisez l’historique des commande, flèche haut), puis, dans le Termi-
nal, tapez -Z. Vous retrouvez l’invite de commande, sans pour autant avoir tué le processus xclock.
Mais observez l’horloge : elle n’est plus active : le processus xclock a été “suspendu”.
    Dans le Terminal, exécutez bg (“BackGround”). xclock redevient fonctionnel, mais s’exécute désormais
en “background” (“tâche de fond”) : vous retrouvez la main sur le Terminal et pouvez y lancer de nouvelles
commandes.
   Quittez xclock - avec la souris... ou, puisque le terminal devient votre ami, en tapant : killall xclock.
  Important : il est possible de lancer un programme directement en “background” (tâche de fond) au moyen du
  symbole & (éperluette ou “et commercial”).

Essayez :
   xclock -update 1 &      #   lance xclock en tache de fond.
                           #   Appuyer sur entree pour bien retrouver l invite de commande...
   firefox &               #   lance firefox en tache de fond
   oowriter &              #   lance Open Office, un logiciel similaire a Word, en tache de fond
   ls                      #   on peut bien toujours lancer des commandes dans le Terminal

Exercice 11       Éditeur de texte et ouverture d’un fichier
   Créez un fichier texte simple avec l’éditeur de texte atom :
   cd
   cd tdinfo/seance01      # on se place dans le repertoire seance01
   atom                    # lancement de l editeur de texte atom, que nous utiliserons cette annee

Tapez quelques mots et lignes dans atom, puis, toujours dans atom sauvez le fichier sous le nom “test.txt”
(depuis le menu fichier), dans le répertoire tdinfo/seance01 . Quittez atom.
   Avec ls, vérifiez que le fichier a bien été créé.
  Conseil : dans les noms de fichier, ne jamais utiliser de caractère spécial (espaces, &, * ~ par exemple).

   Depuis le Terminal, il est possible de réouvrir n’importe quel fichier avec un logiciel adapté. Par
exemple (n’oubliez pas d’avoir recours à l’autocomplétion pour vous faciliter la vie !) :
   atom test.txt &                 # ouvre test.txt dans atom en tache de fond
   evince /users/prog1a/C/librairie/seance01/tp1.pdf &    # evince est le programme permettant d ouvrir un
       fichier pdf. Utilisez l’autocompletion, bien sur, pour ecrire le chemin !

   Enfin, notez l’existence de la commande less pour afficher le contenu d’un fichier texte dans le
Terminal sans avoir à ouvrir un éditeur de texte : less test.txt

                                                            7
Exercice 12      Quelques mots sur atom
   Atom est un éditeur de texte, c’est à dire qu’il vous permet d’ouvrir, et de modifier, tous fichier
contenant du texte - et en particulier, cette année, des programmes écrits en langage C.
     Il s’agit un logiciel de conception assez récente, réputé puissant pour la programmation. Il aide à
écrire du code propre (par exemple : bien aligné, on parle d’indentation) dans de nombreux langages,
applique automatiquement une “coloration syntaxique” à votre code, etc.
    Atom permet d’installer de nombreuses extensions (nommés packages dans atom) qui, progressive-
ment, permettent de construire un outil évolué pour le développement et adapté à chacun. Vous en
découvrirez probablement quelques-uns durant l’année...
    A gauche de la zone d’édition, repérez la zone ”project” : elle liste l’ensemble des fichiers du répertoire
et permet de passer rapidement de l’un à l’autre. Pour afficher/cacher cette zone ”project”, cliquer sur
la flèche.
   Sur la page http://tdinfo.phelma.grenoble-inp.fr/1AS1/td1.html, vous trouverez la liste des
raccourcis clavier les plus utiles dans Atom.

    Notez qu’Atom, l’éditeur que nous recommandons cette année, n’est pas le seul éditeur de texte
réputé en programmation. Un autre éditeur que l’on peut vous conseiller, plus ancien mais extrêmement
puissant, extensible, et très utilisé, est emacs.

Exercice 13      Création / destruction de répertoire
      — La commande mkdir  (MaKeDirectory) crée un répertoire
      — La commande rmdir  (ReMoveDirectory) supprime un répertoire. Le répertoire doit être vide.

   Exécutez :
   cd
   cd tdinfo/seance01
   pwd
   mkdir unRep
   ls                #   le repertoire unRep a bien ete cree
   ls unRep          #   le repertoire est vide
   rmdir unRep       #   supprime le repertoire (il doit etre vide)
   ls                #   le repertoire a bien ete supprime

                                                        8
Exercice 14       Copie, renommage, déplacement et suppression de fichiers
      — La commande cp   (CoPy) copie le fichier “source”
      — La commande mv   (MoVe) déplace ou renomme le fichier “source”
  Pour ces deux commandes cp et mv, la cible peut être :
      — Soit un répertoire existant, auquel cas le fichier et copié (ou déplacé) dans ce répertoire.
      — Soit un nouveau nom de fichier, auquel cas le fichier et copié (ou renommé) sous ce nom.
  Ainsi par exemple   :
     — cp fichier     repertoire copie le fichier dans le répertoire en conservant le même nom pour le nouveau
         fichier
     — cp fichier     fichier2 copie le fichier, dans le même répertoire, sous le nouveau nom “fichier2”.
     — mv fichier     repertoire déplace le fichier dans le répertoire en conservant son nom
     — mv fichier     fichier2 renomme le fichier en “fichier2”, sans le changer de répertoire

  Enfin :
      — La commande rm  (ReMove) supprime un fichier

   Exécutez :
   cd
   cd tdinfo/seance01
   cp test.txt test2.txt        # copie test.txt (cree dans une question precedente) en test2.txt
   ls
   mv test2.txt test3.txt       # renomme test2.txt en test3.txt
   ls
   mkdir rep
   mv test.txt rep/              # deplace test.txt dans le repertoire rep en conservant le nom
   ls
   ls rep/
   mv test3.txt rep/test2.txt    # deplace test3.txt dans le repertoire rep en le renommant
   ls
   ls rep/
   rm rep/test2.txt              # supprime le fichier rep/test2.txt
   ls rep/                       # il ne reste que le fichier test.txt
   cp rep/test.txt rep/test2.txt # copie test.txt dans le repertoire rep
   ls rep/                       # il y a nouveau deux fichiers .txt dans le repertoire rep

Exercice 15       “Globbing” : expressions régulières *
  Il est possible en Shell de désigner plusieurs fichiers de façon concise au moyen d’expressions régulières.
  En particulier, le caractère * (étoile) désigne “n’importe quelle chaı̂ne de caractère” dans les noms de fichiers.
  Ainsi, par exemple, *.txt désigne “tous les fichiers dont le nom se termine par l’extension .txt dans le
  répertoire courant”.

    Testez l’exemple suivant (qui s’appuie sur l’exercice précédent) : il déplace tous les fichiers .txt du
répertoire “rep” dans seance01, ouvre tous ces fichiers dans atom, les supprime. Pour finir, on supprime
le répertoire rep.
   cd
   cd tdinfo/seance01
   pwd
   ls
   cd rep
   mv *.txt ..     # notez le double point ".." : "deplacer dans le repertoire au-dessus"
   ls
   cd ..           # on retourne dans seance01
   ls
   atom *.txt &   # ouvre tous les fichiers .txt du repertoire courant dans atom en tache de fond
   rm *.txt
   ls
   rmdir rep
   ls

                                                           9
3       Mes premiers programmes C
    L’objectif de cette partie est d’écrire un programme très simple en langage C, qui affiche “Phelma
est une école merveilleuse” dans le Terminal.
    Pour réaliser un programme C, il faut :
        — aller dans le répertoire dans lequel vous souhaitez travailler
        — écrire le fichier “source”, dont l’extension doit être “.c” : ce fichier contient le texte du programme
            écrit en langage C
        — compiler (et corriger si nécessaire) le fichier source
        — exécuter le programme et le tester.
    Si la compilation rapporte une erreur, ou si la compilation fonctionne mais le programme ne fonctionne pas
    comme attendu, il faut, en boucle, corriger le fichier source, recompiler, tester, etc.

Exercice 16         Création du fichier source
     Ouvrez un Terminal et :
     — Allez dans votre répertoire tdinfo/seance01 : cd tdinfo/seance01
     — Créez un répertoire pour le firstPrg : mkdir firstPrg
     — Allez dans cd répertoire : cd firstPrg
     — Ouvrir atom sur le fichier source C à créer, nommé first.c : atom first.c & (Rappel : notez l’emploi
       du & pour lancer atom en tâche de fond, ce qui permet de garder la main sur le Terminal).
     — Sauvez le fichier dans atom, ce qui a pour effet de créer le fichier (vide pour le moment)
     — dans le Terminal, vérifiez que le fichier a bien été créé avec ls

Exercice 17         Écriture du code source
     Dans atom, tapez le texte suivant (il s’agit du code source en langage C) :
     #include 
     int main() {
        printf("Phelma est une ecole merveilleuse\n")
     }

Sauvez votre production dans atom.

Exercice 18         Compilation du code
    Le fichier first.c est un programme écrit en langage C. Il s’agit d’un fichier texte (fichier source).
    Pour pouvoir exécuter un programme C, il faut d’abord compiler le fichier source. La compilation traduit le
    fichier source dans un fichier binaire dit “exécutable” : ce nouveau fichier n’est plus lisible dans atom, mais
    est compréhensible par la machine et peut être exécuté dans le Terminal.
    Le compilateur C que vous utiliserez est le programme clang.

     Pour compiler votre programme exécutez :
     clang first.c -o first.exe

    Dans cette commande :
       — clang est le compilateur
       — first.c est le fichier source à compiler
       — -o est l’option “output” (sortie) de clang
       — first.exe est le nom du fichier binaire que vous demandez à clang de créer (l’extension .exe est
           optionnelle)

                                                           10
Voici le résultat que vous devriez obtenir lors de la compilation (explications page suivante) :

    Les messages rapportés par clang indiquent que la compilation a échoué. Une “erreur de compilation”
signifie que le programme ne respecte pas la syntaxe du langage C.
   Apprenons à lire le message d’erreur donné par clang :
   — first.c: In function ’main’ : l’erreur de syntaxe est dans le fichier first.c, dans la fonction main
   — first.c:3: : l’erreur est à la 3ème ligne
   — reste du message : il manque un point-virgule ; à la fin de la ligne, avant l’accolade fermante }.
   Dans atom, corrigez l’erreur (en ajoutant le “;” manquant dans le fichier source à la fin de la ligne 3),
puis compilez à nouveau dans le Terminal, jusqu’à ce que la compilation réussisse.
   Vérifiez que le fichier first.exe a bien été créé avec ls.
    Essayez d’afficher le contenu de ce fichier dans le Terminal ( more first.exe) ou dans atom : comme il
s’agit d’un fichier binaire (et non d’un fichier texte), more et atom ne sont pas capables de l’afficher.

Exercice 19       Exécution du programme
  Un fichier binaire issu de la compilation est un fichier exécutable : ce fichier devient une nouvelle commande
  qu’on peut exécuter dans le Terminal, comme n’importe quelle autre commande Shell !

   Pour exécuter votre programme :
   ls
   ./first.exe    # execute le programme first.exe situe dans le repertoire courant (notez le "." : "dans
      le repertoire courant"

Exercice 20       Un second programme
    Dans le répertoire /users/prog1a/C/librairie/seance01/convertisseur se trouve un programme C dont
l’objet est de convertir des degrés Celcius en degrés Farenheit, suivant la loi de correspondance F arenheit =
Celcius ∗ 9/5 + 32.

   Nous allons, pour commencer, récupérer une copie de ce programme.
   cd
   cd tdinfo/seance01
   cp -r /users/prog1a/C/librairie/seance01/convertisseur . # Pensez a utiliser l’autocompletion !
                                                # Copie le repertoire et son contenu
                                                # dans le repertoire courant. Attention au point "." !

   ls                                                 # On verifie que tout s’est bien passe
   cd convertisseur
   ls                                                 # Le repertoire contient le fichier source d’extension .c
   more celciusToFarenheit.c                          # Pour se faire une premiere idee du contenu du fichier...

                                                          11
Pour compiler puis exécuter le programme :
   clang celciusToFarenheit.c -o convert         # Compile le fichier source et cree le fichier binaire "
      convert"
   ls                                          # On verifie que le fichier convert existe bien
   ./convert                                   # Execute le fichier binaire "convert"

   Exécutez plusieurs fois le programme de conversion.
   Essayez avec la valeur 10. Le programme devrait afficher 50.000000, mais affiche 42.00000. Aie !
   Le programme comporte donc une erreur, non plus de “compilation” (la syntaxe du langage C est bien
respectée puisque la compilation fonctionne), mais “d’exécution” (erreur dans la logique du programme).
   Cette erreur est expliquée ci-dessous.
   Corrigez cette erreur dans atom, recompilez, testez.
 Aide. En fait, le calcul ligne 38 est fait dans les nombres entiers et non pas dans les nombres réels (on dit
 “nombres flottant” en Informatique). En effet, dans ce calcul tous les opérandes sont entiers. C’est donc la
 division entière qui est utilisée. Ainsi, par exemple, le résultat de (9/5) a pour résultat le nombre entier 1 ,
 puisque 9 et 5 sont deux constantes entières.
 Pour qu’une division soit effectuée dans les nombres flottant, il faut et suffit que l’un des opérandes soit un
 nombre réel.
 Pour corrigez le programme, notez que, par exemple, la valeur ”neuf” en nombre flottant s’écrit 9.0 ...

                                                          12
4       Pour aller plus loin sur le Shell...

Exercice 21        Historique
    Le Shell enregistre toutes vos commandes exécutées dans un historique, accessible avec la commande history.

Tapez history (en utilisant l’autocomplétion : “his” puis tabulation) pour visualiser l’historique.
    Avec , vous pouvez taper le début de la commande à chercher dans l’historique. Une fois le nom de la
    commande entrée, réutilisez , pour passer aux exécutions précédentes.

Essayez ainsi de réexécuter l’avant-dernière commande cd exécutée.

Exercice 22        Actions récursive sur les répertoires
    Dans plusieurs commandes, l’option -r indique que la commande est “récursive” : elle s’applique à un
    répertoire et à tout son contenu. Ainsi
         — cp -r   copie un répertoire complet
         — rm -r  supprime un répertoire et tout son contenu.

     Exécutez :
     cd
     cd tdinfo/seance01
     mkdir rep
     atom rep/test.txt          # ecrivez quelque chose avec atom, puis sauvez le fichier
     pwd                         # on verifie qu’on est bien dans seance01
     ls
     ls rep
     cp -r rep rep2              # copie rep et tout son contenu
     ls
     ls rep2
     rm -r rep rep2              # supprime les deux repertoires et leur contenu
     ls

    Notez que rm -r doit être utilisée avec beaucoup de précaution... Car vous risquez de supprimer par erreur de
    très nombreux fichiers, sans espoir de récupération (il n’y a pas de ”poubelle”) !

Exercice 23        Jeu de piste avec la commande d’aide man
     Tapez les commandes suivantes et, à l’aide du manuel de ls, retrouvez à quoi correspondent les options
-l, -R et -a de la commande ls.
     man ls    (puis sortez du man)
     cd
     ls -l
     ls -R
     ls -a
     ls -al
     ls -lR

     En utilisant le man :
     — quelle est l’option de la commande ls qui permet de trier par date et heure ?
     — quelle est l’option de la commande ls qui permet d’afficher seulement un fichier ligne par ligne ?
     — qui est l’auteur de la commande pwd ?

                                                          13
Exercice 24        Commandes less, more et cat
   Les commandes cat et less permettent d’afficher le contenu d’un fichier texte dans le Terminal sans
avoir à ouvrir un éditeur de texte :
   cat test.txt
   more test.txt
   less test.txt

    Quelle est la différence entre more et cat ? Essayez donc sur un gros fichier texte (e.g. plus de 100
lignes), après l’avoir (rapidement...) créé avec par exemple atom.

Exercice 25        “Globbing” : compléments sur l’expansion des noms de fichiers
    Vous savez déjà que le caractère * désigne “n’importe quelle chaı̂ne de caractère” dans un nom de
fichier.
   En fait, d’autres moyens sont disponibles pour désigner aisément plusieurs fichiers. En particulier :
   — [a-z] désigne un caractère parmi ceux listés entre les crochets (ici : “a” à “z”)
   — [!A-Z] tout caractère sauf ceux listés entre crochets (“A” à “Z”)
   — ? désigne un caractère quelconque
   À savoir Comment éviter que l’expansion des noms de fichiers ait lieu, c’est-à-dire que par exemple
que “*” soit interprété comme “un nom de fichier avec n’importe quel chaı̂ne de caractère” ?
   — l’anti slash \ bloque l’interprétation du caractère suivant. Exemples : \* \? etc.
   — les guillemets doubles, e.g. "bla*bla", protègent contre le “globbing” (pas de substitution de *,
       [a-z], etc).
   — les guillemets simples, e.g. ’bla*bla’, protègent contre le “globbing” (pas de substitution de *,
       [a-z], etc)... et contre d’autre choses encore : aucune interprétation par le Shell de ce qui est entre
       guillemets simples.

Exercice 26 Globbing - à vous de jouer !
  — Listez tous les fichiers commençant par “.” dans votre home (c’est ce qu’on appelle des “fichiers
     cachés”. Voir aussi l’option -a de la commande ls).
  — Créez un répertoire nommé temp, et entrez dans ce répertoire
  — Dans le répertoire temp, créez (avec la commande touch, voir man touch) en une commande les
     fichiers suivants : annee1 Annee2 annee4 annee45 annee41 annee510 annee saucisse banane
  — Créez le répertoire Year dans le répertoire temp.
  — En une commande déplacez les fichiers précédemment créés dans le répertoire Year.
  — Dans le réperoire Year, listez tous les fichiers :
     — se terminant par 5
     — commençant par annee4
     — commençant par annee4 et de 7 lettres maximum
     — commençant par annee avec aucun chiffre numérique
     — contenant la chaı̂ne ana
     — commençant par a ou A
  — Copiez les fichiers dont l’avant-dernier caractère est un 4 ou 1 dans le répertoire /tmp en une
     seule commande.
  — Retournez à la racine de votre compte et supprimez, en une seule commande rm, le répertoire temp
     et tout son contenu (... attention en exécutant cette commande !)

Exercice 27        Processus : commandes ps top kill
   La commande ps permet de savoir quels sont les processus (programmes) en cours d’exécution. La
commande top permet d’avoir une idée de la charge de la machine. Essayez :

                                                      14
ps
   ps -a
   top       # taper q pour sortir

   À votre avis, la commande kill a-t-elle pour fonction de tuer un processus ?
    Dans le Terminal, lancez la commande ls -R /. L’exécution de cette commande est très longue puisque
elle cherche à lister tous les fichiers du système Linux.
    Dans un autre Terminal, avec ps, repérez le numéro du processus ls -lR. Au moyen de kill, envoyez
le signal TERM au processus ls -lR pour l’arrêter.

Exercice 28      Droits d’accès
   Un fichier ou un répertoire, sous Linux, est associé à des droits d’accès.
   Il existe trois types de droits d’accès :
   — r : lecture (fichier). Listage (répertoire)
   — w : écriture (fichier). Ajout/suppression de fichiers (répertoire)
   — x : exécution (fichier). Entrée, avec par exemple cd (répertoire)
   Chacun de ces droits r, w, x, peut être donné, ou non, à trois niveaux :
   — u : l’utilisateur (le propriétaire)
   — g : groupe d’utilisateurs propriétaires du fichier
   — o : tout le monde (other )
   Des droits d’accès complets peuvent ainsi prendre la forme rwxr-wr-- (droits de l’utilisateur, du groupe,
puis pour tout le monde).
    L’option -l de la commande ls liste (entre autre...) les droits d’accès. Exécutez ls -l dans votre home
et lisez les droits d’accès.
   Essayez de créer un répertoire nommé bidon dans le Home de votre voisin avec mkdir ~/bidon.
       Pourquoi cela ne marche-t-il pas ?
   Vérifiez les droits d’accès des Homes des autres utilisateurs, en tapant par exemple ls -l ~/.. (affi-
chage détaillé des répertoires situés au-dessus de votre racine).

Exercice 29      Droits d’accès - chmod
  La commande chmod permet de changer les droits d’accès. Ainsi, par exemple, avec un fichier nommé
monfichier.txt :
   # Donner tous les droits ("+wrx" => ecriture, lecture, execution) a tout le monde ("a" => all)
   chmod a+wrx monfichier.txt
   # Enlever les droits d’ecriture ("-w") a tout le monde sauf a moi ("o" => others)
   chmod o-w monfichier.txt
   # Me donner les droits d’execution sur le fichier monfichier.txt (dont je suis l’utilisateur possesseur
      )
   chmod u+x monfichier.txt
   # Donne les droits d’acces (entree dans le repertoire) a tout le monde sur le repertoire unrep
   chmod a+x unrep

   Pour vous entrainer :
    1. Créez un répertoire nommé “partage” dans votre Home et modifiez ses droits :
       mkdir ~/partage
       chmod a+rw ~/partage

    2. Essayer maintenant de créer un fichier dans le répertoire “partage” de votre voisin

                                                      15
3. Essayer de lister le contenu du répertoire “partage” de votre voisin
    4. Supprimer votre répertoire “partage”

Exercice 30      Redirections et pipes
   Avant de tester les exemples suivantes, placez-vous dans le répertoire tdinfo/seance01.
   Sous Linux, un processus (une commande, un programme) définit 3 flux standards :
   — STDIN (numéro 0) : entrée standard. Clavier par défaut.
   — STDOUT (numéro 1) : sortie standard. Écran (terminal) par défaut.
   — STDERR (numéro 2) : sortie d’erreurs. Écran (terminal) par défaut.
   Il est possible de changer les comportements par défaut en redirigeant ces flux standards avec les
symboles >, >> et  liste.txt    # Redirige la sortie standard de ls vers le fichier liste.txt.
   cat liste.txt     # Verifie le contenu du fichier avec cat liste.txt !
   ls >> liste.txt   # Meme chose, mais sans ecraser le fichier.
   ls fsqgfdsq 2> error.txt # redirige la sortie d’erreur de ls vers le fichier \lstinline{error.txt}
   cat error.txt            # verifie le contenu de error.txt
    ls *.txt fsqgfdsq &> tout.txt # redirige les deux sorties STDOUT et STDERR de ls vers fichier tout.txt
   cat < tout.txt # l’entree standard est lue dans le fichier tout.txt (au lieu du clavier).

   Il est également possible d’envoyer la sortie standard d’un processus (e.g. d’une commande Shell)
vers l’entrée standard d’un autre processus avec le symbole | (“pipe”). Essayez donc :
   ls -1 | wc -l          # wc -l (word count) compte le nombre de lignes de texte).
   ls -1R ~/ > liste.txt
   ls -l       > liste2.txt
   ls .        > liste3.txt
   wc -l *.txt
   cat *.txt | wc -l
   cat liste.txt liste2.txt liste3.txt *.txt | more

Exercice 31      Redirections et pipes - à vous de jouer !

    1. Copier le fichier /etc/passwd dans votre home. Visualiser le contenu du fichier dans le Terminal.
    2. Avec head et tail afficher les 10 premières puis 10 dernières lignes du fichier. Conserver à la fois
       les 10 premières et les 10 dernières lignes dans un autre fichier.
    3. Calculer le nombre de login présent dans /etc/passwd en utilisant le pipe (|) et wc.
    4. Avec cut, comment extraire la première colonne ? La cinquième ? Les 4 premières colonnes ? En
       utilisant cat, cut, le pipe et la redirection, créer un nouveau fichier contenant les 4 premières
       colonnes du fichier d’origine.
    5. Il se peut que certains noms soient présents plusieurs fois. Comment résoudre ce problème en
       utilisant la commande uniq ? Sauver le résultat dans un nouveau fichier.
    6. En imaginant qu’ils existent mille fichiers /etc/passwd_0001 ... /etc/passwd_1000 comment créeriez
       un fichier de noms triés avec l’ensemble des résultats (avec une seule ligne de commande) ?

Exercice 32      Création d’archives et compression
   Une archive est un fichier dans lequel on a regroupé plusieurs répertoires ou fichiers. Sous Windows,
vous êtes sans doute familiarisé avec le format .zip. Sous Linux, on préfère utiliser :
   — le format .tar (Tape ARchive) pour concaténer plusieurs répertoires ou fichiers dans un seul fichier

                                                     16
— puis le format .gz pour compresser un fichier (par exemple... une archive .tar).
  Pour vous entrainer, exécutez les commandes suivantes :
  cd ~/tdinfo   # entree dans le repertoire tdinfo
  ls

  # creer un fichier archive .tar "seance01.tar" contenant tout le contenu du repertoire seance01
  tar -cvf ceciEstUnFichierArchive.tar seance01
  ls -l

  # suppression du repertoire seance01
  rm -r seance01
  ls -l

  # Compresser le fichier ceciEstUnFichierArchive.tar en creant un fichier ceciEstUnFichierArchive.tar.gz
  gzip seance01.tar
  ls -l

  # Decompresser le fichier ceciEstUnFichierArchive.tar
  gunzip ceciEstUnFichierArchive.tar.gz
  ls -l

  # Ouvrir une archive .tar et recreer le contenu
  tar -xvf ceciEstUnFichierArchive.tar   # recree le repertoire seance01 et tout son contenu !

Exercice 33     D’autres commandes...
  Partons à la découverte de quelques autres commandes...
  — Comment compter le nombre de lignes d’un fichier texte ?
     wc -l 
     cat  | wc -l

  — Comment savoir si un fichier texte contient une chaı̂ne de caractères donnée ?
     grep "chaine cherchee" fichier

     Notez que la commande grep accepte l’option -R (recherche recursive) :
     grep -R "main" *        # recherche recursive de la chaine "main" :
                             # dans tous les fichiers du repertoire courant et des sous repertoires

  — Rechercher (récursivement) un fichier ; exécuter une commande sur tous les fichiers trouvés :
     cd                                     #   Retour a la maison !
     find tdinfo -name ’*.txt’              #   Cherche recursivement tous les fichiers d’extension .txt
                                            #   dans le repertoire tdinfo
     find . -name ’*.txt’ -exec ls -l {} \; #   Cherche recursivement tous les fichiers d’extension .txt
                                            #   a partir du repertoire courant (".")
                                            #   et execute ls -l sur ces fichiers
                                            #   notez l’option -exec de la commande find.
                                            #   Les accolades {} seront substitue par les fichiers trouves

     find . -name ’*.c’ -exec grep "main" {} \; # Liste toutes les occurrences de la chaine "main"
                                            # dans tous les fichiers d’extension .c trouves
                                            # dans ou sous le repertoire courant
     find . -name ’*.c’ -print | wc -l      # Compte le nombre de fichiers d’exension .c.
                                            # Remarquez le pipe "|"

  — Qui suis-je ? Sur quelle machine suis-je ?

                                                     17
whoami
   uname -a

— Quel est le type de ce fichier ? Quelle est la taille (en Mo) occupée par un fichier ou un répertoire ?
   file ~/Desktop
   file ~/.bashrc
   du -sh ~/Desktop

— Comment créer un fichier vide / changer la date d’un fichier ?
   touch monFichier.txt    # cree un fichier vide, ou change la date du fichier s’il existe deja

— Comment comparer deux fichiers texte ?
   diff premierfichier secondfichier

Pour vous entrainer avec quelques-unes des commandes précédentes :
— Quelle place (en Mo) occupe votre compte utilisateur sur le réseau de l’Ecole ?
— À l’aide du pipe (|) et de grep, extraire de l’historique (history) les occurrences de la commande
   ls.
— Entrer dans tdinfo/seance01.
— Avec atom, créer un fichier test.txt contenant plusieurs lignes
— La chaı̂ne caractère “abcdef” existe-t-elle dans le fichier test.txt ?
— Modifier une ligne de ce fichier et le sauver sous test2.txt
— Comparez les deux fichiers avec diff

                                                  18
Vous pouvez aussi lire