Prise en main des machines d'enseignement de l'ENSIIE

Olivier Pons


1  Les machines

Pour les enseignements, l'ENSIIE dispose d'un ensemble de machines de diverses architectures fonctionnant sous différents systèmes d'exploitation. Toutes ces machines sont interconnectées par le réseau.

Il y a des serveurs principaux que vous ne verrez pas, mais sur lesquels vous pouvez vous connecter.

Les deux plus utiles qui tournent sous Linux et sont visibles de l'extérieur de l'ENSIIE sont Par ailleurs, les salles de TP sont équipées de PC généralement nommés PCsalle-XX (salle étant le numéro de la salle et XX étant un numéro de machine). Ces machines peuvent tourner sous Windows ou différentes versions de linux le choix se faisant au démarrage de la machine (boot).

Il existe également d'autres serveurs mais dont vous n'avez pas à connaître l'existence pour l'instant.

La suite de ce document est une introduction minimale, essentiellement au travers d'exemples, à l'utilisation des machines tournant sous linux et unix. Pour en savoir plus sur les machines ENSIIE voyez aussi le serveur d'arise, le super guide de survie et le coin technique du serveur des élèves (c'est un bon coin..., il y aussi plein d'autres pointeurs pour devenir un vrai Droïd)

Enfin n'hesitez pas à vous reporter à la documentation de la distribution Yaka qui est développée à l'école.

N'hésitez pas à faire des remarques sur ce document. Avant de commencer, voici un point important :

Attention 1   En quittant les salles, n'oubliez jamais de vous déconnecter : tapez exit ou logout pour sortir d'un terminal et utilisez le bon menu si vous êtes dans un environnement graphique.


Remarque 1   On notera les appuis sur les touches par [Touche]. On notera [C-x] (se lit “Control X”) l'appui sur la touche [Ctrl] puis [x] sans relâcher [Ctrl] , [M-x] (se lit “Méta X”) l'appui sur la touche [Esc] suivi de l'appui sur la touche [x]. Enfin [C-y t] signifie appuyer simultanément sur la touche [Ctrl] et la touche [y], relâcher, puis appuyer sur la touche [t].


Remarque 2   Sous Unix le copier-coller est généralement différent de ce à quoi vous êtes habitué. Pour copier une zone de texte, on la sélectionne en maintenant appuyé le bouton gauche de la souris, puis pour la recoller on clique, le bouton du milieu si c'est une souris à trois boutons, ou les deux boutons en même temps s'il n'y a que deux boutons.


2  Les connections

Pour vous connecter, entrez un identifiant (votre login) et un mot de passe. (nous verrons plus tard la gestion des mots de passe). Si tout se passe bien, après avoir donné ces deux informations, vous êtes connecté (loggué).

Selon les machines, vous pouvez alors vous retrouver dans un environnement graphique ou en mode terminal (ou console).

Bien qu'il soit tout à fait possible de travailler en mode console, il est conseillé de travailler dans l'environnement graphique.

S'il ne s'est pas lancé, vous pouvez le démarrer en tapant par exemple startx-icewm suivi d' [Entrée].

Dans un tel environnement beaucoup de choses peuvent se faire en cliquant, en déroulant des menus, en remplissant des formulaires. Néanmoins, pour accéder à toute la puissance du système, l'interface textuelle (celle où l'on tape des commandes) est indispensable et c'est celle que nous allons apprendre à manipuler. Pour cela, s'il n'y en a pas déjà un à l'écran, il vous faut ouvrir un terminal virtuel. Cela se fait soit en cliquant sur la petite icône représentant un ordinateur ou sur le bouton nommé “Terminal” (en bas à gauche), soit à l'aide des menus qui apparaissent lorsqu'on clique sur les différents boutons de la souris.

Exercice 1   Essayez les menus, puis ouvrez deux terminaux dans lesquels nous travaillerons en mode texte.


3  L'interpréteur de commandes

Ces fenêtres disposent d'un interpréteur de commandes le shell1.

C'est un langage qui vous permet de dialoguer avec la machine. Vous verrez plus tard que c'est un vrai langage de programmation dans lequel on peut écrire des programmes, mais retenez pour l'instant qu'il propose un vaste panorama de commandes permettant de gérer la machine. (Vous en avez déjà utilisé lors de votre initiation au mail et quand vous avez appris à modifier vos mots de passe).

3.1  Premières commandes

Dans un des terminaux ouverts tapez les commandes suivantes (à chaque fois, pour qu'il se passe quelque chose, il faut valider la ligne en appuyant sur [Entrée])
Exercice 2  
  1. date
  2. cal
  3. quota
  4. uname
L'information fournie par les deux premières commandes est évidente, pour la dernière ça l'est peut-être moins. Tapez maintenant :
 
echo -n "Il y a de l'echo"
L'effet de la commande echo est évident mais qu'est-ce donc que ce -n ?


Pour le savoir, on va le demander au système. En effet, sur tous les systèmes dérivés d'Unix, on peut trouver la commande man permettant d'accéder à la documentation des commandes du système. La documentation est organisée en plusieurs sections (jusqu'à neuf, selon le système). Pour accéder à la documentation d'une commande nommée XXXX, on tape : man XXXX. Pour quitter le manuel, on tape juste [q].

Exercice 3  
  1. Trouvez la documentation de la commande echo.
  2. Après l'avoir lue, essayez de deviner (puis vérifiez) ce que fait echo -e "\tnord\nouest\t\test\n\tsud"
  3. Trouvez et parcourez (en diagonale !) la documentation de la commande man.
  4. À quoi sert l'option -a de la commande man ?
  5. Vérifiez (sans chercher à comprendre ces commandes) que le manuel est organisé en sections en tapant man printf puis, après être sorti, man 3 printf
  6. Que se passe-t-il si vous tapez man -a printf ?


Remarque 3   Les commandes sous Unix sont des programmes qui présentent une certaine unité de fonctionnement. En fait, une commande est une suite de mots arg0 arg1 ... argN. En général, on place les options avant les arguments propres. Mais la plupart des programmes acceptent n'importe quel ordre.


Maintenant, dès que nous introduirons une nouvelle commande ou dès que vous aurez un doute, ayez le réflexe man !

Remarque 4   Il existe une autre forme de présentation du manuel à travers la commande info.


4  Organisation des informations

Les informations (données, programmes, fichiers de configuration...) stockées sur les disques des machines sont organisées de façon structurée. Imaginez une grosse armoire contenant plein de tiroirs contenant chacun le dossier de chaque personne qui lui-même contiendrait des sous-dossiers etc.

Dans le monde Unix, on ne parle pas d'armoires, de tiroirs ou de dossiers mais de répertoires et de fichiers. Et tout cela est organisé de manière arborescente. La racine de l'arbre (l'armoire) est le répertoire /, ce répertoire contient des sous-répertoires qui eux-mêmes contiennent des sous-répertoire, etc. qui eux-mêmes contiennent des fichiers.

Il est un répertoire qui, pour vous, est particulier : c'est votre répertoire de login. C'est dans celui-là que vous serez quand vous ouvrirez un terminal. C'est dans celui-là que vous travaillerez par la suite en créant s'il le faut (et il le faut toujours !) des sous-répertoires pour organiser votre travail.

À titre d'exemple, l'organisation des différents répertoires de la machine lunix122 est présentée sur la figure ci-dessous


4.1  Chemin d'accès (path)

Pour décrire comment se rendre à un répertoire ou un fichier donné (i.e. exprimer des choses comme “dans le deuxième dossier du troisième tiroir de l'armoire”) on utilise une notion de chemin d'accès (path). Si vous regardez la figure précédente, vous devriez pouvoir en déduire le chemin d'accès à votre répertoire de login (il suffit de parcourir les noeuds de l'arbre), néanmoins la commande pwd vous épargnera ce mal. (N'oubliez pas le réflexe man...).

4.2  Quelques commandes sur les répertoires

La commande cd (là, le man n'est pas terrible !) permet de changer de répertoire (cd chemin vous positionne dans le répertoire correspondant à chemin) et ls permet (entre autres) de lister le contenu d'un répertoire

Exercice 4  
  1. Positionnez-vous dans le répertoire dont le chemin est /usr/lib/
  2. Avec quelle commande pouvez-vous vérifier que vous avez bien changé de répertoire et que vous êtes dans celui ou vous vouliez aller ?
  3. Essayez
    cd ..
    dans quel répertoire cela vous met-il ?
  4. Essayez
    cd .
    dans quel répertoire cela vous met-il ?


  5. Essayez
    cd
    dans quel répertoire cela vous met-il ?
  6. Essayez
    cd ~pons
    dans quel répertoire cela vous met-il ?
  7. Vous devriez être dans /home/prof/pons, tapez maintenant cd PUBLIC/ELisp. Quel est le chemin absolu du répertoire où vous êtes ?
  8. Essayez
    cd ../../PUBLIC2/RIEN
    dans quel répertoire cela vous met-il ?
  9. Essayez
    cd -
    où êtes-vous ? Puis de nouveau
    cd -
    où êtes-vous ?
  10. Essayez
    cd ~
    dans quel répertoire cela vous met-il ?


Remarque 5   Lorsque l'on donne un chemin complet depuis la racine comme dans le (1), on parle de chemin absolu (ils commencent tous par /), sinon on parle de chemin relatif.
..
désigne le répertoire père,
.
le répertoire courant,
~
votre répertoire de login et
~unNom
le répertoire de login d'une autre personne.
cd -
permet de revenir là où vous étiez avant le dernier
cd

4.2.1  Autres commandes sur les répertoires



Exercice 5  
  1. Créez un répertoire nommé TPS et vérifiez avec ls qu'il existe.
  2. Positionnez-vous dans ce répertoire et créez un répertoire ExoUnix, puis créez dans ExoUnix un sous-répertoire Aeffacer
  3. Revenez dans le répertoire TPS, essayez de supprimer le répertoire ExoUnix. Ça ne marchera pas, essayez de trouver une solution. Puis revenez dans votre répertoire de login.


4.3  Notions de disque et de partition, les machines de l'ENSIIE

Grossièrement, chaque machine dispose d'un (ou plusieurs) disque, pour faciliter la gestion (mise à jour ...) ou pour permettre à différents systèmes de cohabiter. Ces disques sont généralement découpés en partitions.

En fait, plusieurs machines peuvent partager des ressources avec d'autres machines du réseau. Pour cela, il existe un protocole (NFS) qui permet d'exporter une partition d'une machine vers une autre. Cette exportation est transparente pour l'utilisateur pour qui tout se passe comme si la partition était sur le disque de la machine sur laquelle il travaille. Ainsi, tous les comptes des élèves sont stockés sur une partition située sur un disque d'une machine dont vous ignorez l'existence, mais vous pouvez utiliser vos comptes sur toutes les autres machines. Les commandes liées à la gestion des partitions sont l'apanage du super user (root), généralement vos ingénieurs systèmes (dont il faut prendre soin !). C'est souvent NFS qui explique les lenteurs du réseau...le confort se paye...

5  Fichier

5.1  Lecture et impression

5.1.1  Lecture

Exercice 6   Positionnez-vous dans le répertoire /home/prof/pons/PUBLIC2, listez son contenu puis appliquez les commandes suivantes sur les fichiers qu'il contient. (On quitte more et less en tapant la touche [q]).
  1. cat
  2. more ou less (s'il existe, less est plus puissant)
  3. head
  4. tail
Trouvez différentes options de ces commandes et jouez avec. Comment trouver les 5 dernières lignes du fichier texte1.txt ?


5.1.2  Imprimer

On ne les essaiera pas en TP... vous êtes trop nombreux, mais voici les commandes de base :

Pour imprimer un fichier texte :
a2ps -PuneImprimante unFichierTexte
Pour imprimer un fichier au format Postscript (avec l'extention .ps)
lpr -PuneImprimante unFichier.ps
Pour contrôler la queue de l'imprimante et éventuellement supprimer des impressions en attente :
lpq -PuneImprimante
lprm -PuneImprimante unJob
Les Imprimantes
Pour connaître les imprimantes disponibles sur un système, vous pouvez lister le fichier /etc/printcap. Il contient la liste des imprimantes connues et leurs paramètres de configuration. Il y a pour l'instant 3 imprimantes : im,am,oum, mais cela peut évoluer en cours d'année.

5.2  Manipulation de fichiers

On va maintenant commencer à remplir vos répertoires. Pour que cela reste ordonné, créez dans votre répertoire TPS un sous-répertoire TP1 et mettez-vous dedans.

Exercice 7  
  1. Copiez le fichier /etc/passwd dans TP1. Copiez-le une deuxième fois sous le nom pirate.
  2. Renommez pirate en passwd. Listez le répertoire.

  3. Supprimez ce fichier.
  4. Comment simuler mv avec cp et rm ?
Attention rm peut être très dangereux, on peut perdre de nombreux fichiers à cause d'une mauvaise utilisation. Donc, lisez bien le man (les options -i -f et -r).

La commande touch unNOM permet, entre autres, de créer le fichier unNOM.

Exercice 8   Créez dans TP1 un répertoire poubelle dans lequel vous créerez deux ou trois fichiers. Vérifiez que les fichiers ont été crées, puis effacez le tout avec rm -ri poubelle (vous devez être dans le répertoire  /TPS/TP1). Vérifiez ensuite que les fichiers ont bien été effacés.


Exercice 9   Trouvez à quoi sert la commande wc et utilisez-la pour connaître le nombre de lignes dans le fichier /home/prof/pons/PUBLIC2/texte1.txt


La commande cp fait une copie des fichiers (c'est-à-dire que toutes les données qui étaient dans le fichier-source sont copiées dans le fichier-cible et sont donc dupliquées. Pour éviter cette duplication (entre autres) on utilise souvent la commande ln avec l'option -s
Exercice 10   Essayez cp /etc/passwd p1 puis ln -s /etc/passwd p2 puis comparez la façon dont ces fichiers apparaissent dans le répertoire lorsqu'on utilise l'option -l de ls.


6  Utilisateurs et droits

Chaque utilisateur d'un système possède un identificateur et un ou plusieurs groupes.

Exercice 11   La commande id permet de connaître votre identificateur et vos groupes. Quel est votre groupe ? Les commandes whoami et groups (si elles sont présentes) donnent aussi partiellement ces informations.
Sous Unix, les fichiers et les répertoires ont des droits; ces droits sont de trois sortes : lecture (r), écriture (w) et exécution (x) ; et ils concernent quatre catégories de personnes, l'utilisateur propriétaire du fichier (u), le groupe propriétaire du fichier (g), les autres (o) et tout le monde (a). On visionne les propriétaires et les droits d'un fichier avec ls -l. Par exemple, je suis positionné dans un répertoire initialement vide :
pons@lunix:~/TPS/TP1 $ ls -l durdur
ls: durdur: No such file or directory
pons@lunix:~/TPS/TP1 $ touch durdur
pons@lunix:~/TPS/TP1 $ ls -l durdur
-rw-r--r--    1 pons     prof            0 Sep 18 18:03 durdur
C'est-à-dire que l'utilisateur pons peut lire et écrire dans le fichier, que les membres du groupe prof peuvent lire ainsi que tous les autres utilisateurs. (au passage, vous avez revu la commande touch qui permet, entre autres, de créer un fichier vide).

Exercice 12  
  1. Quels sont les droits associés au répertoire /etc, au fichier /etc/passwd, au répertoire ~ , au fichier /bin/sh ?
  2. Que pouvez-vous faire de ces fichiers et répertoires si vous êtes le propriétaire, un membre du groupe (quel groupe ?) ou quiconque ? Essayez de copier un fichier dans /etc. Que se passe-t-il ? Pourquoi ?


On modifie les droits (sur les fichiers et répertoires dont on est propriétaire) par la commande chmod, on peut ajouter des droits avec “+” ou en enlever avec “-”. Par exemple, je décide de permettre aux professeurs d'écrire dans durdur :
pons@lunix:~/TPS/TP1 $  chmod g+w durdur
pons@lunix:~/TPS/TP1 $ ls -l durdur
-rw-rw-r--    1 pons     prof            0 Sep 18 18:03 durdur
Puis j'interdis la lecture aux autres :
pons@lunix:~/TPS/TP1 $ chmod o-r durdur 
pons@lunix:~/TPS/TP1 $ ls -l durdur
-rw-rw----    1 pons     prof            0 Sep 18 18:03 durdur
Enfin, je décide d'autoriser lecture et exécution à tout le monde :
pons@lunix:~/TPS/TP1 $ chmod a+rx durdur 
pons@lunix:~/TPS/TP1 $ ls -l durdur 
-rwxrwxr-x    1 pons     prof            0 Sep 18 18:03 durdur


Exercice 13  
  1. Créez un fichier toto dans TP1.
  2. Modifiez les droits de TP1 en r-x——
  3. Modifiez les droits de toto en rwxrwx—
  4. Effacez toto (enfin essayez !), que se passe-t-il, pourquoi ?


Remarque 6   Vous verrez plus tard que vous pouvez aussi utiliser une notation octale pour spécifier les droits2


6.1  Métacaractères

La plupart des commandes portant sur des fichiers peuvent prendre plusieurs arguments (rm, cp...). Pour ne pas avoir à taper tous les noms de fichiers, on utilisera des métacaractères, c'est-à-dire des symboles pouvant représenter diffèrents caractères. On utilisera principalement
*
(qui signifie :”n'importe quelle suite de caractères (sauf “.” en tête et “/”)”),
?
(qui représente n'importe quel caractère (sauf “.” en tête et “/”).),
[xyz]
(qui signifie :”un caractère parmi ceux donnés entre crochet”) et
[^azert]
(qui signifie : n'importe quel caractère, sauf ceux donnés entre crochet). Entre les crochets, on énumère des caractères et des intervalles :
[a-zA-Z13579]
signifie une lettre majuscule ou minuscule, ou un chiffre 1, 3, 5, 7 ou 9. ~est expansé vers le nom du répertoire de l'utilisateur.

Exercice 14  
  1. Positionnez vous dans /sbin (c'est juste pour avoir un répertoire contenant de nombreux fichiers). Essayez ls -d k*a* (ça vous donne les fichiers et répertoires dont le nom commence par un k et contient un a).

  2. Listez les fichiers du répertoire ~pons/PUBLIC/JOCKERS/ qui comportent au moins un chiffre dans le nom , puis deux chiffres. Puis ceux dont le nom ne commence pas par une minuscule.

  3. Comment utiliser echo pour afficher la liste des fichiers dans le répertoire courant ?
  4. Revenez dans votre répertoire de login. Comment afficher uniquement les fichiers cachés (leurs noms commencent par un . et ne sont visibles que si vous avez passé l'option -a à ls.
  5. Que pensez vous de la commande
    rm *
    (ne la tapez pas !!!)
  6. Copiez dans votre répertoire TP1 (en une seule commande) les fichiers de
    
    /home/prof/pons/PUBLIC2
    
    se terminant par txt (le suffixe .txt caractérise généralement les fichiers contenants du texte, par opposition aux programmes).


Les métacaractères permettent donc (entre autres) de rechercher des fichiers donnés dans un répertoire. Un moyen beaucoup plus puissant est la commande find. Par exemple3

:
find /usr/comps/lib/ -name list* -print
Cherche dans le répertoire /usr/comps/lib/ les fichiers dont le nom commence par list et imprime le résultat de la recherche.

Maintenant que nous savons rechercher des fichiers, nous allons voir comment rechercher du texte dans ces fichiers.

6.2  Recherche simple dans un fichier

La commande pour rechercher des mots, des chaînes de caractères, ou plus généralement des motifs dans un fichier est grep (ou sa variante egrep). C'est une commande très puissante dont nous ne verrons que l'utilisation basique, là encore lisez le man, chercher de la doc, des exemples sur le web, demandez de l'info, bref - pratiquez... La syntaxe de base est: grep motif fichier cela renvoie toutes les lignes dans lesquelles motif apparaît
Exercice 15  
  1. Chechez les lignes contenant grenouille dans ~pons/PUBLIC2/texte1.txt
  2. Cherchez les informations sur l'utilisateur principal (nommé root) qui apparaissent dans le fichier de mots de passe /etc/passwd
  3. Cherchez si ce fichier fait référence à Dieux ?
  4. Cherchez si ce fichier fait référence à root ?
  5. Cherchez quels utilisateurs utilisent bash ?


En pratique, egrep permet de chercher bien plus qu'un mot, là encore on dispose d'un langage spécial pour exprimer des choses comme rechercher “toutes les lignes commençant par un ou des chiffres suivis d'un blanc puis du mot francs”. Ce langage dit d'expressions régulières est vraiment très puissant mais compliqué et vous pouvez l'ignorer en première lecture. Pour ceux qui creuseraient, attention : les expressions régulières utilisent aussi * ? [...] ... mais leur signification ne sera pas la même que pour le shell).

7  Blocages, processus et jobs

On a vu jusqu'à présent des commandes s'exécutant rapidement. Certaines peuvent prendre du temps pour effectuer leurs tâches, et surtout on peut désirer que certaines commandes restent actives pendant toute la session.

Exercice 16  
  1. Tapez xterm, cela va ouvrir un nouveau terminal...
  2. Pouvez vous entrer des commandes dans la première fenêtre ?
  3. Dans la fenêtre acceptant les entrées, lancez maintenant un autre terminal, mais avec xterm &. Que se passe-t-il ?
  4. Le signe & permet de lancer une commande en tâche de fond.
  5. Dans la fenêtre bloquée pressez [C-z], puis exécutez la commande bg. Que se passe-t-il ?
  6. Que se passe-t-il dans l'autre fenêtre si l'on n'a pas tapé bg?

  7. En utilisant la fonction kill -9 pidpid est le numéro du processus que vous voulez tuer (deuxième colonne dans ps -Af), supprimez tous vos xterms sauf un.
  8. Lancez xclock, puis tapez [C-c]. Que se passe-t-il ?
  9. notez que la commande pkill nomDeLexecutable permet de tuer un executable sans chercher son pid.


En Résumé : De plus, il arrive parfois (vous le verrez en cours de système) qu'un programme ne puisse pas être interrompu par [C-z]ou [C-d] Les séquences de contrôle sont sans effet (ça arrive parfois quand Firefox craque), pour arrêter ce programme, il faut identifier le processus et le tuer avec kill

Remarque 7   Si c'est tout votre environnement graphique (X) qui se bloque, vous n'êtes pas obligé d'éteindre la machine (faites [C-Alt F2]) cela vous mettra dans un nouvel écran en mode console, logez vous, listez les processus, trouvez le responsable (souvent Netscape) et tuez-le. Pour revenir dans l'environnement graphique, tapez (Ctrl Alt F7)4


8  Entrée et sortie standard

La plupart des commandes utilisent trois flots d'entrée - sortie : STDIN, l'entrée standard, habituellement les caractères entrés au clavier ; STDOUT, la sortie standard, habituellement ce qui est affiché sur la console ; STDERR, la sortie d'erreur, qui généralement est également affichée sur la console. Il est possible de rediriger l'entrée standard d'une commande pour qu'elle lise un fichier en ajoutant < fichier à la fin de la commande ; et la sortie standard ou d'erreur pour qu'elles écrivent dans un fichier en ajoutant respectivement > fichier et 2> fichier qui créent un fichier ou effacent un fichier existant pour écrire dedans. Si l'on ne souhaite pas effacer le fichier, mais ajouter à la fin : remplacer > par >>. Note : Il ne faut pas confondre les arguments de la ligne de commande avec STDIN.

Par exemple, pour envoyer le résultat de ls ~pons/PUBLIC2 dans un fichier toto.txt
pons@lunix:~/TPS/TP1 $ ls ~pons/PUBLIC2 >toto.txt
pons@lunix:~/TPS/TP1 $ more toto.txt
RIEN
rfc1945.txt
texte1.txt
pons@lunix:~/TPS/TP1 $ 
La commande cat utilisée sans argument a pour comportement de recopier sur STDOUT ce qu'elle lit dans STDIN. En jouant avec les redirections, elle peut servir à créer des fichiers.

Exercice 17  
  1. Essayez cat sans argument. Coincé ? Pour sortir, tapez [C-d]
  2. Utilisez cat pour créer un fichier f1 contenant cinq ou six lignes de votre choix.
  3. Utilisez cat pour créer un fichier f3 contenant /etc/passwd, f1, puis encore /etc/passwd.
  4. Créez un fichier contenant la liste de tous les fichiers se trouvant sous votre répertoire principal.
  5. Ajoutez au fichier précédent la sortie de la commande env.


Il existe un fichier spécial /dev/null, agissant comme un puits sans fond pour les données, vers lequel on redirige tout ce dont on veut se débarasser.

Exercice 18   Exécutez cat /etc/passwd. Comment faire pour que cela n'affiche rien ?


8.1  Les tubes (pipes)

On a la possibilité de rediriger l'entrée et la sortie standard, non plus vers un fichier, mais vers un autre programme. Les programmes conçus pour être utilisés de cette manière sont appelés filtres. Nous en avons vu quelques-uns (cat, grep) qui peuvent être utilisés comme un filtre. Pour effectuer la redirection, on utilisera un pipe noté |. Par exemple, la ligne
cat /etc/services | grep pop | more 
permet d'afficher toutes les lignes de /etc/services contenant le mot pop.

Exercice 19  
  1. Lisez les pages de man des commandes wc, sort, uniq et, si besoin est, relisez cat et grep
  2. Quels sont les enchaînements de commandes (une seule ligne) nécessaires pour effectuer les opérations suivantes :
    1. Comptez le total des lignes des fichiers dans /etc
    2. Comptez le nombre de lignes contenant 25 dans /etc/services
    3. Triez le fichier /etc/hosts
    4. Affichez le nombre de répertoires n'appartenant pas à root dans /pub. (Bien que cela soit abusif, dans le cas présent, vous pouvez supposer qu'aucun nom de repertoire ne contient la chaine root et que si un fichier est dans le groupe de root il appartient aussi à root)



D'autres filtres très puissants sont tr, sed etc. Lisez leur man.

9  Édition de fichiers

On a déjà vu la commande touch qui permet de créer un fichier vide, et l'utilisation de cat qui est la manière la plus simple (mais pas la plus pratique) de créer un fichier. Néanmoins pour créer des fichiers de plus de quelques lignes, on utilise généralement un éditeur. Il en existe de très nombreux, mais les deux plus connus qui ont chacun leurs partisans et détracteurs sont Emacs et Vi. Nous apprendrons Emacs ! Pour vi, la seule chose que nous vous apprendrons ici c'est à en sortir mais rien ne vous empêche de l'apprendre par vous-même et de l'utiliser. C'est aussi très puissant mais il fallait bien faire un choix. Vous pourrez aussi utiliser des éditeurs plus simples et plus légers comme nedit ou kedit mais ils sont moins puissants.

Donc, si par mégarde vous avez ouvert un fichier avec vi, pour en sortir, tapez :

Esc puis :q! puis Return.

Et si l'aventure vi vous tente, la page http://fr.wikipedia.org/wiki/Vimst un excellent point de départ.

9.1  Emacs

En fait, pour des raisons historiques il existe deux variantes Emacs et XEmacs dont les différences sont vraiment mineures. Sachez seulement qu'Emacs est beaucoup plus léger pour les machines (ça se charge plus vite...) c'est donc lui qui a eté retenu à l'ENSIIE.

Emacs contient son propre tutoriel (en anglais) : voyez le menu help ou [C-h t]. Vous êtes encouragés à le survoler par vous même en dehors de ce TP.

En pratique, les utilisateurs d'Emacs n'utilisent jamais les menus, mais plutôt les très nombreux raccourcis clavier. C'est l'habitude qu'il faudra prendre, d'autant que par la suite vous pourrez en ajoutez autant que nécessaire et redéfinir ceux qui existent selon votre convenance. Pour aujourd'hui, pour découvrir l'éditeur, on utilisera aussi les menus mais dès que vous cliquerez sur un menu regardez le raccourci clavier associé.

Exercice 20  
  1. Positionnez vous dans le sous répertoire TP1 de TPS et exécutez la commande emacs & , de manière à ne pas monopoliser le terminal avec Emacs.
  2. En utilisant le menu, créez un nouveau fichier txt1.txt avec l'entrée
    Open file
    (qui, comme vous le voyez, peut être activé par la combinaison de touches ). Vous voyez en bas apparaître une ligne vous demandant le nom du fichier. Dans quel répertoire ce fichier va-t-il être créé ?

  3. Entrez une dizaine de lignes dans le buffer d'édition, vous remarquerez en bas de la page une barre noire avec au début **. Ces étoiles indiquent que le fichier n'est pas sauvegardé sur le disque. Sauvegardez-le avec l'entrée
    Save Buffer
    du menu
    File
    .
  4. Quelle est la différence entre
    Save Buffer
    et
    Save Buffer As
    ?
  5. Maintenant, sans utiliser les menus (i.e avec les combinaisons de touches que vous venez d'apprendre [C-x][C-f] ), créez un autre fichier txt2.txt, ajoutez-y quelques lignes et sauvegardez-le, toujours en utilisant les raccourcis claviers.
  6. Dans le menu
    Buffer
    , vous avez une liste de tous les buffers d'éditions ouverts, avec d'abord le nom du fichier édité, puis une étoile indiquant s'il n'est pas sauvegardé et enfin le répertoire de travail pour le buffer. En utilisant ce menu, passez à l'autre fichier, ajoutez-y quelques lignes et revenez à celui-ci.
  7. Vous pouvez fermer un buffer en sélectionnant
    Close (Current Buffer)
    dans le menu
    Files
    (ou mieux avec la séquence [C-x][C-k] . Supprimez le buffer txt2.txt. Dans le terminal, vérifiez avec les commandes Unix si le fichier txt2.txt existe dans le répertoire TP3.
  8. Modifiez le fichier courant sans le sauvegarder. Puis, dans le menu
    Files
    , choisissez
    Exit Emacs
    .
  9. quittez Emacs


9.1.1  Barre d'information et Mini-Buffer

Exercice 21  
  1. Lancez à nouveau Emacs en background.
  2. Chargez les fichiers que vous aviez crées, puis passez dans le buffer txt1.txt.
  3. Tout en surveillant la barre d'information, appuyez sur la touche [Insert]. Que se passe-t-il au niveau de l'affichage ? Quel est le changement au niveau du mode d'entrée des caractères? Appuyez à nouveau sur la touche pour revenir en mode normal.

    En dessous de la barre d'information se trouve le mini-buffer. Lorsque vous exécutez une commande Emacs, ayez toujours cette ligne à l'oeil, car c'est ici que l'on vous posera les questions ou que l'on vous signalera un problème. Si vous avez un doute sur ce que vous êtes en train de faire, faites [C-g] pour annuler.


9.1.2  Déplacement, suppression et Undo

Pour vous déplacer dans le buffer, utilisez les touches curseurs. Pour aller en début de ligne, utilisez [C-a], pour aller en fin de ligne [C-e]. Pour aller au début du buffer, utilisez [M-<] et pour la fin du buffer [M->].

A l'aide de ces commandes, exercez vous à vous déplacer rapidement dans le buffer Emacs.

Pour supprimer le caractère précédant le curseur, appuyez sur [Del] (ou [Suppr]), pour le le caractère suivant le curseur [Backspace] (la grosse flèche en haut a droite :-) (si cela ne marche pas, c'est une question de configuration du clavier) vous pouvez utiliser [M-x] puis taper delete-backward-char ou [C-d] . Pour supprimer une ligne à partir du curseur, tapez [C-k].

Pour annuler une modification du texte, vous pouvez taper [C-/]. Modifiez quelques lignes et annulez les modifications.

Supprimez une ligne et 2 ou 3 mots. Ajoutez d'autres mots. Revenez à l'état initial avec [C-/].


9.1.3  Multi-fenêtrage

Lorsque vous avez besoin de voir plusieurs fichiers à la fois, au lieu de lancer plusieurs fois Emacs (ce qui, rappelons-le, ne doit jamais se produire !) vous pouvez ouvrir une nouvelle fenêtre en utilisant la commande
New Frame
du menu
Files
et supprimer une fenêtre en utilisant
Delete Frame
dans le même menu (vous ne pouvez pas supprimer la dernière fenêtre).

Exercice 22  
  1. Mettez-vous dans le buffer txt1.txt
  2. Créez une nouvelle fenêtre. Sur quel buffer s'ouvre-t-elle ?
  3. Tapez quelques caractères dans une des fenêtres. Que se passe-t-il ?
  4. Fermez une des deux fenêtres. Qu'arrive-t-il dans le menu Files ?
Un autre moyen de voir plusieurs fichiers en même temps est de découper les fenêtres:
Exercice 23  
  1. Mettez vous dans le buffer txt1.txt et tapez [C-x 2]
  2. Sans toucher à la souris, écrivez deux ou trois mots, puis tapez [C-x o] et continuez à écrire.
  3. Utilisez le raccourci clavier pour ouvrir un fichier txtbis.txt
  4. Essayez [C-x 3], puis [C-x 1]


9.1.4  Rechercher et remplacer

Pour rechercher une chaîne de caractères dans un buffer, on utilisera les raccourcis clavier : [C-s] pour la recherche vers l'avant et [C-r] pour la recherche en arrière. Ces fonctions étant plus pratiques que leurs équivalents dans le sous-menu
Search
du menu
Edit
.
Exercice 24  
  1. Quelles sont les différences entre [C-s] et la commande
    Search
    du menu
    Search
    ?
  2. Recopiez (par copier-coller !) quelques lignes du début de cet énoncé dans un nouveau buffer que vous nommerez txt3.txt. Sauvegardez, puis placez-vous au début du buffer.
  3. Tapez [C-s] pour commencer la recherche et cherchez (si elle existe) la deuxième occurrence de “de”. Vous noterez que la recherche est progressive. Quand vous arrivez sur la première occurrence de “de”, tapez à nouveau [C-s] pour trouver la suivante. Quand vous l'avez trouvée, pressez [Enter].
  4. Maintenant, pressez deux fois [C-s]. Le texte recherché précédemment s'affiche. Tapez maintenant [c] pour arriver au ”dec” de ”DEC”. Ce mode de recherche s'appelle la recherche incrémentale.
  5. Trouvez toutes les occurrences de “de”. Quand vous arrivez à la fin, pour recommencer en haut du buffer, il faut presser à nouveau [C-s].
  6. Placez-vous maintenant à la fin du buffer. Pressez [C-r]. C'est le mode de recherche incrémentale en arrière. Les fonctionnalités de la recherche en arrière sont-elles les mêmes que pour la recherche en avant ?


Pour effectuer les remplacements, on utilisera la commande
Query Replace
du menu
Search
. Cette commande vous demande d'abord (dans le mini-buffer) la chaîne que vous voulez remplacer, puis la chaîne que vous voulez insérer. Ensuite à chaque occurrence vous pouvez soit taper [y] pour la remplacer, soit [n] pour ne pas la remplacer, soit [!] pour remplacer toutes les occurrences qui suivent, soit [q] pour arrêter.

Exercice 25  
  1. Quelle est la combinaison la plus rapide pour remplacer tous les ”de” par des “3”, sauf le deuxième.
  2. Pouvez-vous revenir au texte tapé en (2) en utilisant le undo ?


9.1.5  Copier Coller

Le copier-coller sous Emacs peut se faire à la souris ou au clavier. À la souris, on sélectionne le texte en cliquant et en tirant, puis on choisi Cut ou Copy dans le menu Edit, puis on place le curseur là où l'on veut coller (soit avec les touches de déplacement, soit avec le pointeur souris), et on exécute la commande Paste.

Au clavier, on amène le curseur au début de la zone à copier et on presse [C-Espace] pour marquer le début de la zone. On amène ensuite le curseur à la fin de la zone et on choisit [C-w] pour couper et [M-w] pour copier. On amène ensuite le curseur là où l'on souhaite coller et on presse [C-y]. Note : lorsque l'on a supprimé une ligne par [C-k], on peut la coller directement avec [C-y].

Exercice 26  
  1. Dans le texte tapé à l'exercice précédent, coupez le premier paragraphe à la souris et collez-le trois fois à la fin.
  2. A la souris, copiez le ”nouveau” premier paragraphe et collez-le à la fin.
  3. Avec undo, pouvez vous revenir à l'état initial ?
  4. Revenez (d'une façon ou d'une autre) à l'état initial et recommencez les mêmes opérations que ci-dessus au clavier.


Le Comportement d'Emacs est entièrement configurable. Ce qui vient d'être décrit correspond en principe à la configuration par défaut à l'ENSIIE.

En cas de proble de configuration (demander à l'enseignant) et récupérez au besoin mon fichier de configuration Emacs en copiant :
/home/prof/pons/.emacs dans votre repertoire de login


10  Utilisation des langages de programmation

10.1  Le langage C

Pour créer un programme en langage C, vous devez d'abord écrire le code source, à l'aide d'un éditeur, le sauvegarder dans un fichier, puis le compiler pour obtenir un code exécutable.

La commande du compilateur 'C' est "cc" ou "gcc". En général, "cc" est le compilateur 'C' du fabriquant de la machine et du système, "gcc" est un compilateur du domaine public. Sous Linux "cc" et "gcc" sont identiques.

Exercice 27  
  1. Créez dans votre répertoire TP1 un fichier hello.c et contenant le code ci-dessous. Compilez le (en tapant gcc hello.c).
    
    
    #include<stdio.h>
    #include<stdlib.h>    
    
    int main(){  
      printf("Bienvenue a l'ENSIIE, en C\n");
      return  EXIT_SUCCESS; 
    }
    
    Si la compilation produisait un message d'erreur (ça vous arrivera souvent), il faudrait la corriger en modifiant le code source (sans oublier de sauvegarder à nouveau !) puis recompiler et ainsi de suite jusqu'à ce qu'il n'y ait plus de message d'erreur.
  2. Vous ne connaissez pas encore le langage C, mais vous pouvez déjà expérimenter les messages d'erreur (pour cela, supprimez par exemple un point virgule dans le source du programme et essayez de recompiler.

  3. Lorsque la compilation se passe bien, un fichier binaire est produit. Utilisez ls pour trouver son nom et lancez-le.
  4. Ce nom est le nom donné par défaut au fichier binaire produit, vous pouvez choisir un autre nom en utilisant l'option -o.
    
    gcc -o leNomDuBinaire monSource.c
    
    Par ailleurs, pour des raisons que vous verrez plus tard, on utilise généralement les options -Wall et -ainsi

  5. Compilez le programme hello.c en donnant un joli nom au fichier binaire, puis exécutez ce dernier.


10.2  le langage Caml

On peut procéder comme en C, c'est-à-dire éditer,compiler,débugger,compiler,... exécuter. La seule différence et que la commande n'est plus gcc mais ocamlc et que les options -Wall et -ainsi n'existent pas.

Exercice 28  
  1. Créez dans votre répertoire TP1 un fichier hello.ml et contenant le code ci-dessous.
    
    let uneFonction()=
      print_string "Bienvenue a l'ENSIIE, en caml\n";;
    
    uneFonction();;
    


  2. Compilez le (en tapant ocmalc -o helloEnCaml hello.ml) puis essayez le.


Mais Ocaml peut aussi (et c'est là un de ses avantages non négligeables) fonctionner de manière interactive. Dans ce mode, on tape des expressions (très, très grossièrement - des morceaux autonomes de programme) qui sont évaluées au fur et à mesure. Chaque expression se termine par deux point virgule.
Exercice 29   Pour expérimenter le mode interactif, ouvrez un nouveau terminal, et tapez ocaml. Vous serez alors dans la boucle d'interaction d'ocaml. Maintenant, dès que vous tapez des lignes terminées par deux point virgule suivis d'un retour à la ligne elles sont évaluées. Pour sortir de la boucle, tapez [C-d] . Essayez (en copiant et collant successivement)

1+2;;
let laFonctionPlusUn n =n+1;;
laFonctionPlusUn 4;;
.....plus les exemples vu en cours...


Ainsi, quand on développe un programme Ocaml, on a généralement un éditeur où on tape le source et une fenêtre dans laquelle tourne la boucle d'itération et vers laquelle on fait du copier-coller. C'est pratique pour la mise au point, mais le copier-coller est parfois un peu lourd à gérer (on oublie facilement un bout...) et on aimerait s'en passer. Pour cela on peut utiliser un environnement de développement. C'est encore Emacs qui, correctement configuré 5 , va nous le fournir.

Exercice 30   Copiez dans votre répertoire le fichier

/home/prof/pons/TP/UNIX/exampleML.ml 
Ouvrez-le dans Emacs, appuyez sur la touche F1, un message appairait dans le mini-buffer, tapez return, vous devriez maintenant avoir deux fenêtres : celle du haut contenant votre fichier caml et celle du bas - une boucle d'interaction ocaml. Maintenant, à chaque appui sur F1 automatiquement l'expression courante est évaluée et le résultat apparaît dans la fenêtre du bas.

Ce mode Emacs pour caml comporte de très nombreuses autres fonctionnalités (le choix de F1 n'est pas standard et a été fait pour simplifier la tache au débutant). Amusez-vous avec le menu Tuareg pour les découvrir.


Ce document devrait être mis à jours de temps en temps : n'hésitez pas a réagir !


1
En fait il existe de nombreux shell, citons sh, csh, zsk, bash etc. C'est bash que vous devriez avoir par défaut. Après, à vous de choisir, mais pour ce TP ça ne changera pas grand chose.
2
Google est l'ami du lecteur curieu !
3
sur les machines YAKA, sur d'autres remplace par exemple /usr/comps/lib/ par /usr/lib/ocaml/3.08
4
Cela correspond au <<standard linux>> sur les YAKA la fenêtre graphique est en F2 donc inversez F2 et F7
5
Sur certaines machines les fichiers de configuration peuvent <<ne pas être conformes>>. Si rien ne se passe comme ci-dessous, quittez Emacs, télécharger le fichier de configuration et sauvegardez le dans votre répertoire de login , puis relancez Emacs

Ce document a été traduit de LATEX par HEVEA