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
-
lunix121.ensiie.fr
- lunix122.ensiie.fr
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
-
date
- cal
- quota
- 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
-
Trouvez la documentation de la commande echo.
- Après l'avoir lue, essayez de deviner (puis vérifiez) ce que fait
echo -e "\tnord\nouest\t\test\n\tsud"
- Trouvez et parcourez (en diagonale !) la documentation de la commande man.
- À quoi sert l'option -a de la commande man ?
- 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
- 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.
-
arg0 est le nom du programme de la commande.
- les autres arg1 ...argN sont séparés usuellement en deux classes :
-
Les options (ou switchs) :
Elles commencent en général par un "-" pour la version courte et
par "–" pour la version longue.
Elles modifient "légèrement" le fonctionnement du programme. Elles sont prédéfinies.
Chaque programme supporte un nombre fini d'options (pour les connaître man).
2 options peuvent être concaténées.
Enfin l'ordre des options est en général indifférent. Par exemple cal -y -j est équivalent à cal -yj.
- Les arguments propres :
Ce sont les arguments sur lesquels porte
le programme. Leur valeur n'est pas prédéfinie. Par exemple, dans
echo bonjour , bonjour est un argument tout à fait valide.
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
-
Positionnez-vous dans le répertoire dont le chemin est /usr/lib/
- 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 ?
- Essayez
dans quel répertoire cela vous met-il ?
- Essayez
dans quel répertoire cela vous met-il ?
- Essayez
dans quel répertoire cela vous met-il ?
- Essayez
dans quel répertoire cela vous met-il ?
- Vous devriez être dans /home/prof/pons, tapez
maintenant cd PUBLIC/ELisp. Quel est le chemin absolu du répertoire où vous êtes ?
- Essayez
dans quel répertoire cela vous met-il ?
- Essayez
où êtes-vous ? Puis de nouveau
où êtes-vous ?
- Essayez
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
le répertoire de login d'une autre
personne.
permet de revenir là où vous étiez avant le
dernier
4.2.1 Autres commandes sur les répertoires
-
mkdir permet de créer un répertoire.
- rmdir permet d'effacer un répertoire vide.
- ls permet (entre autres) de lister le contenu d'un répertoire.
Exercice 5
-
Créez un répertoire nommé TPS et vérifiez avec ls qu'il existe.
- Positionnez-vous dans ce répertoire et créez un répertoire ExoUnix,
puis créez dans ExoUnix un sous-répertoire Aeffacer
- 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
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]).
-
cat
- more ou less (s'il existe, less est plus puissant)
- head
- tail
Trouvez différentes options de ces commandes et jouez avec. Comment trouver les 5 dernières lignes du fichier texte1.txt ?
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.
-
cp source1 ... sourcen destination permet de copier des fichiers.
- mv source1 ... sourcen destination permet de déplacer des
fichiers ou répertoires, ou de renommer un fichier ou un répertoire.
- rm f1 ... fn permet d'effacer des fichiers
Exercice 7
-
Copiez le fichier /etc/passwd dans TP1.
Copiez-le une deuxième fois sous le nom pirate.
- Renommez pirate en passwd. Listez le répertoire.
- Supprimez ce fichier.
- 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
-
Quels sont les droits associés au répertoire /etc, au fichier /etc/passwd, au répertoire ~ , au fichier /bin/sh ?
- 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
-
Créez un fichier toto dans TP1.
- Modifiez les droits de TP1 en r-x——
- Modifiez les droits de toto en rwxrwx—
- 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 “/”).),
(qui signifie :”un caractère parmi ceux donnés entre crochet”) et
(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 :
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
-
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).
- 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.
- Comment utiliser echo pour afficher la liste des fichiers dans le répertoire courant ?
- 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.
- Que pensez vous de la commande
(ne la tapez pas !!!)
- 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
-
Chechez les lignes contenant grenouille dans ~pons/PUBLIC2/texte1.txt
- Cherchez les informations sur l'utilisateur principal (nommé root) qui apparaissent dans le fichier de mots de passe /etc/passwd
- Cherchez si ce fichier fait référence à Dieux ?
- Cherchez si ce fichier fait référence à root ?
- 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
-
Tapez xterm, cela va ouvrir un nouveau terminal...
- Pouvez vous entrer des commandes dans la première fenêtre ?
- Dans la fenêtre acceptant les entrées, lancez maintenant un autre terminal, mais avec xterm &. Que se passe-t-il ?
- Le signe & permet de lancer une commande en tâche de fond.
- Dans la fenêtre bloquée pressez [C-z], puis exécutez la commande bg. Que se passe-t-il ?
- Que se passe-t-il dans l'autre fenêtre si l'on n'a pas tapé bg?
- En utilisant la fonction kill -9 pid où pid est le numéro du processus que vous voulez tuer (deuxième colonne dans ps -Af), supprimez tous vos xterms sauf un.
- Lancez xclock, puis tapez [C-c]. Que se passe-t-il ?
- notez que la commande pkill nomDeLexecutable permet de
tuer un executable sans chercher son pid.
En Résumé :
-
[C-z]Interrompre la commande en cours.
- [C-c]Arrêter définitivement la commande en cours.
- fg Relancer la commande interrompue en avant-plan.
- bg Relancer la commande interrompue en arrière-plan.
- ps Lister les processus
- kill -9 pid Tuer le processus numéro pid
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
-
Essayez cat sans argument. Coincé ? Pour sortir, tapez [C-d]
- Utilisez cat pour créer un fichier f1 contenant cinq ou six lignes de votre choix.
- Utilisez cat pour créer un fichier f3 contenant /etc/passwd, f1, puis encore /etc/passwd.
- Créez un fichier contenant la liste de tous les fichiers se trouvant sous votre répertoire principal.
- 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
-
Lisez les pages de man des commandes wc, sort, uniq et, si besoin est, relisez cat et grep
- Quels sont les enchaînements de commandes (une seule ligne) nécessaires pour effectuer les opérations suivantes :
-
Comptez le total des lignes des fichiers dans /etc
- Comptez le nombre de lignes contenant 25 dans /etc/services
- Triez le fichier /etc/hosts
- 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.
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
-
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.
- En utilisant le menu, créez un nouveau fichier txt1.txt avec l'entrée
(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éé ?
- 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
du menu
.
- Quelle est la différence entre
et
?
- 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.
- Dans le menu
, 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.
- Vous pouvez fermer un buffer en sélectionnant
dans le menu
(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.
- Modifiez le fichier courant sans le sauvegarder. Puis, dans le menu
, choisissez
.
- quittez Emacs
9.1.1 Barre d'information et Mini-Buffer
Exercice 21
-
Lancez à nouveau Emacs en background.
- Chargez les fichiers que vous aviez crées, puis passez dans le buffer txt1.txt.
- 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
du menu
et supprimer une fenêtre en utilisant
dans le même menu (vous ne pouvez pas supprimer la dernière fenêtre).
Exercice 22
-
Mettez-vous dans le buffer txt1.txt
- Créez une nouvelle fenêtre. Sur quel buffer s'ouvre-t-elle ?
- Tapez quelques caractères dans une des fenêtres. Que se passe-t-il ?
- 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
-
Mettez vous dans le buffer txt1.txt et tapez [C-x 2]
- Sans toucher à la souris, écrivez deux ou trois mots, puis tapez [C-x o] et continuez à écrire.
- Utilisez le raccourci clavier pour ouvrir un fichier txtbis.txt
- 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
du menu
.
Exercice 24
-
Quelles sont les différences entre [C-s] et la commande
du menu
?
- 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.
- 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].
- 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.
- Trouvez toutes les occurrences de “de”. Quand vous arrivez à la fin, pour recommencer en haut du buffer, il faut presser à nouveau [C-s].
- 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
du menu
. 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
-
Quelle est la combinaison la plus rapide pour remplacer tous les ”de” par des “3”, sauf le deuxième.
- 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
-
Dans le texte tapé à l'exercice précédent, coupez le premier paragraphe à la souris et collez-le trois fois à la fin.
- A la souris, copiez le ”nouveau” premier paragraphe et collez-le à la fin.
- Avec undo, pouvez vous revenir à l'état initial ?
- 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
-
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.
- 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.
- Lorsque la compilation se passe bien, un fichier binaire est produit.
Utilisez ls pour trouver son nom et lancez-le.
- 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
- 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
-
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();;
- 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