1ere année version 14/09/2015 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 essentielles pour vous entrainer avec l environnement Linux. La dernière partie permet d aller plus loin, pour ceux qui vont vite. 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) 1
rendez-vous sur la page https://login.minatec.grenoble-inp.fr/ suivez les instructions pour changer votre mot de passe. Exercice 2 Webmail Phelma Votre adresse mail officielle à Phelma est de la forme <prenom>.<nom>@phelma. grenoble-inp. fr. La Scolarité et vos enseignants utiliseront cette adresse pour communiquer avec vous. Vous devez donc consulter régulièrement vos mai. 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/2015-2016/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 outi pédagogiques en ligne (Chamillo, etc), etc. https://prism.minatec.grenoble-inp.fr : site web du service informatique - avec la documentation de tous les outi informatiques généraux. Vous y trouverez 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 https://login.minatec.grenoble-inp.fr/ : changement de mot de passe 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 Le Terminal est l application qui permet de lancer des commandes en langage Shell. Dans le menu Outi de 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 (qui signifie list ), suivie d un retour chariot (Enter). 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. 3
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. Pour faciliter à l avenir son ouverture, faite glisser l icône du terminal du menu Outi de système dans la barre des tâches, en haut de l écran. 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 <nom de commande>. 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 Pour tester la commande man, découvrez rapidement (1 min max) toute l étendue des possibilités de la commande en tapant man. 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 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 ( Print Working Directory ) indique le répertoire courant. Exécutez 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 : cd tdinfo cd seance01 4
À 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 cd tdinfo/seance01 # retourne a la racine de votre compte ( Home Directory ) # le repertoire courant devient tdinfo/seance01 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 plusieurs compléments sont possibles, appuyer deux fois de suite sur tabulation affichera tous les compléments valables. 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 5
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 possible 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. Essayez ce qui suit (en utilisant l autocomplétion bien sûr) : cd /usr/include # chemin absolu. cd / # on se place a la racine du systeme de fichier Linux, "/" cd usr/include # chemin relatif depuis le repertoire courant, qui est la racine Linux "/" # on se retrouve bien au meme endroit! cd # retour a la maison! De nombreuses commandes acceptent un chemin en paramètre. Par exemple, avec : cd # retour a la maison /usr/include # chemin absolu. Affiche le contenu du repertoire sans changer le repertoire courant # Le repertoire courant n a pas change : on est toujours a la maison! cd / 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 / cd ~/tdinfo/seance01 # on est bien a la racine du systeme de fichiers Dans un chemin, le symbole.. ( point-point ) désigne le répertoire situé juste au-dessus dans l arborescence. Exécutez : cd cd tdinfo/seance01 cd.. # vous voila revenu dans le repertoire tdinfo Pour vous entrainer : 6
cd cd tdinfo/seance01 cd../seance02 # entre dans le repertoire seance01 # remonte d un niveau puis descend dans le repertoire seance02 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,. (avec le point) afficherait le contenu du répertoire courant ; ou encore cd./tdinfo serait équivalent à cd tdinfo (sans le point). Exercice 9 Lancement et arrêt d un programme Le Shell permet de lancer n importe quel programme. Essayez en tapant la commande xclock (qui affiche l heure). En retournant dans la fenêtre du Terminal (sans quitter xclock), vous constaterez que l invite de commande a disparu. 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 <CTRL>-C. Vous retrouvez l invite de commande, mais xclock a disparu : <CTRL>-C a tué le processus. Exercice 10 Lancement d un programme en tâche de fond Relancez xclock (en tapant xclock), puis, dans le Terminal, tapez <CTRL>-Z. Vous retrouvez l invite de commande, xclock existe toujours mais n est plus actif : le processus firefox a été suspendu. Dans le Terminal, tapez bg ( BackGround ). xclock redevient fonctionnel, mais s exécute désormais en background ( tâche de fond ) : vous conservez la main sur le Terminal. Quittez xclock. Important : il est possible de lancer un programme directement en background (tâche de fond) au moyen du symbole & (esperluette ou et commercial ). Essayez : xclock & firefox & # lance xclock en tache de fond # lance firefox en tache de fond # 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 gedit : cd cd tdinfo/seance01 # on se place dans le repertoire seance01 gedit # lancement de l editeur de texte gedit Tapez quelques mots et lignes dans gedit, puis, toujours dans gedit sauvez le fichier sous le nom test.txt, dans le répertoire tdinfo/seance01. Quittez gedit. Avec, 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). 7
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!) : gedit test.txt & # ouvre test.txt dans gedit en tache de fond evince /users/prog1a/c/librairie/seance01/tp1.pdf & # evince est le programme permettant d ouvrir un fichier pdf Enfin, notez au passage l existence de la commande more pour afficher le contenu d un fichier texte dans le Terminal sans avoir à ouvrir un éditeur de texte : more test.txt Exercice 12 Création / destruction de répertoire La commande mkdir <nomrep> (MaKeDirectory) crée un répertoire La commande rmdir <nomrep> (ReMoveDirectory) supprime un répertoire. Le répertoire doit être vide. Exécutez : cd cd tdinfo/seance01 mkdir unrep # le repertoire unrep a bien ete cree unrep # le repertoire est vide rmdir unrep # supprime le repertoire (il doit etre vide) # le repertoire a bien ete supprime Exercice 13 Copie, renommage, déplacement et suppression de fichiers La commande cp <source> <cible> (CoPy) copie le fichier source La commande mv <source> <cible> (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 avec le même nom. 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 etc. Enfin : La commande rm <fichier> (ReMove) supprime un fichier Exécutez : cd cd tdinfo/seance01 cp test.txt test2.txt mv test2.text test3.txt # copie test.txt (cree dans une question precedente) en test2.txt # renomme test2.txt en test3.txt 8
mkdir rep mv test.txt rep/ # deplace test.txt dans le repertoire rep en conservant le nom rep/ mv test3.txt rep/test2.txt # deplace test3.txt dans le repertoire rep en le renommant rep/ rm rep/test2.txt # supprime le fichier rep/test2.txt rep/ # il ne reste que le fichier test.txt cp rep/test.txt rep/test2.txt # copie test.txt dans le repertoire rep rep/ # il y a nouveau deux fichiers.txt dans le repertoire rep Exercice 14 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 gedit, les supprime. Pour finir, on supprime le répertoire rep. cd cd tdinfo/seance01 cd rep mv *.txt.. # notez le double point ".." : "deplacer dans le repertoire au-dessus" cd.. # on retourne dans seance01 gedit *.txt & # ouvre tous les fichiers.txt du repertoire courant dans gedit en tache de fond rm *.txt rmdir rep 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. 9
Exercice 15 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 gedit sur le fichier source C à crer, nommé first.c : gedit first.c & (Notez l emploi du & pour lancer gedit en tâche de fond, ce qui permet de garder la main sur le Terminal). Sauvez le fichier dans gedit, 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 Exercice 16 Écriture du code source Dans gedit, tapez le texte suivant (il s agit du code source en langage C) : #include <stdio.h> main() { printf("phelma est une ecole merveilleuse\n") } Sauvez votre production dans gedit. Note : ce code source est également disponible en téléchargement sur le site http: // tdinfo. phelma. grenoble-inp. fr. Exercice 17 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 gedit, mais est compréhensible par la machine et peut être exécuté dans le Terminal. Le compilateur C que vous utiliserez est le programme gcc. Pour compiler votre programme exécutez : gcc first.c -o first.exe Dans cette commande : gcc est le compilateur first.c est le fichier source à compiler -o est l option output (sortie) de gcc first.exe est le nom du fichier binaire que vous demandez à gcc de créer (l extension.exe est optionnelle) Voici le résultat que vous devriez obtenir lors de la compilation : 10
Les messages rapportés par gcc 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 gcc : first.c: In function main : l erreur de syntaxe est dans le fichier first.c, dans la fonction main first.c:4: : l erreur est à la 4ème ligne reste du message : il manque un point-virgule ; avant l accolade fermante }. A retenir : pour afficher les numéros de ligne dans gedit, allez dans le menu Outi/Préférence et, dans l onglet Affichage, cochez la case adéquate. Corrigez l erreur (en ajoutant le ; manquant dans le fichier source à la fin de la ligne 4), 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. Essayez d afficher le contenu de ce fichier dans more first.exe : comme il s agit d un fichier binaire (et non d un fichier texte), more n est pas capable de l afficher. Exercice 18 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 :./first.exe # execute le programme first.exe situe dans le repertoire courant (notez le "." : "dans le repertoire courant" Exercice 19 Un second programme Dans le répertoire /users/prog1a/c/librairie/seance01/convertisseur se trouve un programme C qui réalise la conversion de degrés Celcius en degrés Farenheit, suivant la loi de correspondance F arenheit = Celcius 9/5 + 32. Note : ce fichier est également disponible en téléchargement sur http: // tdinfo. phelma. grenoble-inp. fr/ 1AS1/ td1. html. Nous allons copier ce programme, le compiler, l exécuter, le tester, le corriger. 11
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 "."! # Pensez a utiliser l autocompletion! # On verifie que tout s est bien passe cd convertisseur # Le repertoire contient le fichier source d extension.c more celciustofarenheit.c # Affiche le contenu du fichier source dans le Terminal Pour compiler puis exécuter le programme : gcc celciustofarenheit.c -o convert./convert # Compile le fichier source et cree le fichier binaire "convert" # On verifie que le fichier convert existe bien # 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 gedit, recompilez, testez. Aide. En fait, le calcul ligne 14 est fait dans les nombres entiers et non pas dans les nombres rée (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) vaut le nombre entier 1. Pour que cette division soit effectuée dans les nombres flottant, il faut et suffit que l un des opérandes soit un nombre réel. Pour cela, remplacez 9 par 9.0 (la valeur 9 en nombre flottant). 4 Pour aller plus loin sur le Shell... Exercice 20 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 <CTRL+r>, vous pouvez taper le début de la commande à chercher dans l historique. Une fois le nom de la commande entrée, réutilisez <CTRL+r>, pour passer aux exécutions précédentes. Essayez ainsi de réexécuter l avant-dernière commande cd exécutée. Exercice 21 Actions récursive sur les répertoires Dans plusieurs commandes, l option -r indique que la commande est récursive : elle s applique à un 12
répertoire et à tout son contenu. Ainsi cp -r <repertoire> <nouveaunom> copie un répertoire complet rm -r <repertoire> supprime un répertoire et tout son contenu. Exécutez : cd cd tdinfo/seance01 mkdir rep gedit rep/test.txt cd.. rep cp -r rep rep2 rep2 rm -r rep rep2 # ecrivez quelque chose avec gedit, puis sauvez le fichier # on verifie qu on est bien dans seance01 # copie rep et tout son contenu # supprime les deux repertoires et leur contenu Exercice 22 Jeu de piste avec la commande d aide man Tapez les commandes suivantes et, à l aide du manuel de, retrouvez à quoi correspondent les options -l, -R et -a de la commande. man cd -l -R -a -al -lr (puis sortez du man) En utilisant le man : quelle est l option de la commande qui permet de trier par date et heure? quelle est l option de la commande qui permet d afficher seulement un fichier ligne par ligne? qui est l auteur de la commande? Exercice 23 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 gedit. Exercice 24 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 : 13
[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 *, [az], etc)... et contre d autre choses encore : aucune interprétation par le Shell de ce qui est entre guillemets simples. Exercice 25 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 ). 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 26 Processus : commandes ps top kill La commande ps permet de savoir que 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 : 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 -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 -lr. Au moyen de kill, envoyez le signal TERM au processus -lr pour l arrêter. Exercice 27 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) 14
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 liste (entre autre...) les droits d accès. Exécutez -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 ~<loginduvoisin >/bidon. Pourquoi cela ne marche-t-il pas? Vérifiez les droits d accès des Homes des autres utilisateurs, en tapant par exemple -l ~/.. (affichage détaillé des répertoires situés au-dessus de votre racine). Exercice 28 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 3. Essayer de lister le contenu du répertoire partage de votre voisin 4. Supprimer votre répertoire partage Exercice 29 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 <. Voici quelques exemples : > liste.txt # Redirige la sortie standard de vers le fichier liste.txt. cat liste.txt # Verifie le contenu du fichier avec cat liste.txt! >> liste.txt # Meme chose, mais sans ecraser le fichier. fsqgfdsq 2> error.txt # redirige la sortie d erreur de vers le fichier \tinline{error.txt} cat error.txt # verifie le contenu de error.txt 15
*.txt fsqgfdsq &> tout.txt # redirige les deux sorties STDOUT et STDERR de 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 : -1 wc -l # wc -l (word count) compte le nombre de lignes de texte). -1R ~/ > liste.txt -l > liste2.txt. > liste3.txt wc -l *.txt cat *.txt wc -l cat liste.txt liste2.txt liste3.txt *.txt more Exercice 30 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 i 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 31 Création d affilée 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 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 # creer un fichier archive.tar "seance01.tar" contenant tout le contenu du repertoire seance01 tar -cvf ceciestunfichierarchive.tar seance01 -l # suppression du repertoire seance01 rm -r seance01 -l # Compresser le fichier ceciestunfichierarchive.tar en creant un fichier ceciestunfichierarchive.tar.gz gzip seance01.tar -l # Decompresser le fichier ceciestunfichierarchive.tar gunzip ceciestunfichierarchive.tar.gz -l # Ouvrir une archive.tar et recreer le contenu 16
tar -xvf ceciestunfichierarchive.tar # recree le repertoire seance01 et tout son contenu! Exercice 32 D autres commandes... Partons à la découverte de quelques autres commandes... Comment compter le nombre de lignes d un fichier texte? wc -l <fichier> cat <fichier> 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 -l {} \; # Cherche recursivement tous les fichiers d extension.txt # a partir du repertoire courant (".") # et execute -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? 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 17
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. Entrer dans tdinfo/seance01. Avec gedit, 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