LINUX - PHELMA - Grenoble INP
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
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
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
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
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