Prise en main des machines de l'ENSIIE


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.

Par ailleurs, les salles de TP sont équipées de postes 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 et le serveur des élèves (c'est un bon coin...)


N'hésitez pas à faire des remarques sur ce document.
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 connexions

Aujourd'hui, vous n'avez pas besoin de vous connecter. Dans d'autres circonstances, 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.

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 en cliquant sur le rectangle dans la barre en bas.

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. 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 dialog puis, après être sorti, man 3 dialog
  6. Que se passe-t-il si vous tapez man -a dialog ?


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 !


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.

4.1  Chemin d'accès (path)

Pour décrire comment se rendre à un répertoire ou un fichier donné (c.-à-d. 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). La commande pwd vous indique directement le chemin de la racine à l'endroit où vous êtes (répertoire courant). 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 /usr
    dans quel répertoire cela vous met-il ? Tapez maintenant cd share/doc. Quel est le chemin absolu du répertoire où vous êtes ?
  7. Essayez
    cd ../../lib/apt
    dans quel répertoire cela vous met-il ?
  8. Essayez
    cd -
    où êtes-vous ? Puis de nouveau
    cd -
    où êtes-vous ?
  9. Essayez
    cd ~
    dans quel répertoire cela vous met-il ?


Remarque 4   Lorsque l'on donne un chemin complet depuis la racine comme dans la question 1 de l'exo 4, 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.


5  Fichier

5.1  Lecture et impression

5.1.1  Lecture

Exercice 6   Positionnez-vous dans le répertoire /etc/profile.d, 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 vte-2.91.sh ?


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 /etc/passwd


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.


5.3  Archivage et compression

Au cours des différents projets que vous aurez à réaliser, vous devrez envoyer votre production à votre correcteur. Celle-ci contenant plusieurs fichiers (il y aura forcément au moins un fichier pour le code source et un rapport décrivant votre travail), il va falloir les regrouper dans un seul. Ce fichier s'appelle une archive, et en général, pour gagner de la place, cette archive est compressée.
Sous Unix, l'archivage se fait généralement à l'aide de la commande tar et la compression à l'aide d'outils externes comme gzip ou bzip2. Néanmoins, tar dispose d'options qui permettent d'appeler automatiquement ces outils externes, donc en pratique nous utiliserons uniquement la commande tar.
Les principales options de tar que vous avez à connaître sont :
Exercice 10.1  
  1. Créez deux fichiers sources.c et rapport.pdf dans le répertoire TP1.
  2. Placez-vous dans le répertoire TPS et entrez la commande suivante pour créer une archive :
    tar zcvf monarchive.tar.gz TP1/
  3. Listez le contenu de l'archive nouvellement créée à l'aide de la commande :
    tar ztf monarchive.tar.gz
  4. Créez un répertoire tmp dans votre répertoire personnel, rendez-vous y et décompressez l'archive à l'aide de :
    tar xzvf ~/TPS/monarchive.tar.gz
    Constatez la création d'un nouveau répertoire TP1 contenant sources.c et rapport.pdf.

Remarque 5   En général, on utilise l'extension .tar.gz, parfois abrégée en .tgz, pour les fichiers archivés avec tar et compressés avec gzip. On utilise .tar.bz2 pour ceux archivés avec tar et compressés avec bzip2.

Il existe également l'outil zip qui fait à la fois l'archivage et la compression. Attention, il utilise un format différent de celui de tar+(gzip|bzip2).


6  Édition de fichiers

On a déjà vu la commande touch qui permet de créer un fichier vide. 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 utiliserons en priorité Emacs. Pour Vi, la seule chose que nous vous apprendrons ici 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 jed, nedit ou kedit mais ils sont moins puissants.

Bref, 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/Vim est un excellent point de départ.

6.1  Emacs

Emacs n'est pas encore installé sur ces machines. Pour le faire, copiez-collez les commandes suivantes dans le terminal :
sudo su
export http_proxy=http://http-proxy:3128
apt-get -y install emacs
exit
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, ils se servent plutôt des très nombreux raccourcis clavier. C'est l'habitude qu'il faudra prendre, d'autant que par la suite vous pourrez en ajouter autant que nécessaire et redéfinir ceux qui existent à votre convenance. Pour aujourd'hui, pour découvrir l'éditeur, on utilisera aussi les menus mais dès que vous cliquez sur un menu regardez le raccourci clavier associé.
Vous pourrez trouver un rappel des principaux raccourcis d'Emacs en suivant ce lien : https://www.gnu.org/software/emacs/refcards/pdf/fr-refcard.pdf. N'hésitez pas à l'ajouter à vos favoris.

Important  Emacs permet d'éditer plusieurs fichiers au cours d'une même session, ne lancez pas un Emacs par fichier !

Exercice 11  
  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.

    Si vous avez oublié le &, pour récupérer la main dans le terminal, vous pouvez taper [C-z] puis entrer bg. (Cf. section 8.)

  2. Créez un nouveau fichier txt1.txt avec la commande [C-x][C-f] (ou pour débuter l'entrée
    Open file
    du menu File) 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é dans son état actuel sur le disque. Sauvegardez-le avec la commande [C-x][C-s] (ou l'entrée
    Save Buffer
    du menu File).
  4. Quelle est la différence entre
    Save Buffer
    et
    Save Buffer As
  5. Maintenant vérifiez que sans utiliser les menus (c.-à-d. avec les combinaisons de touches que vous venez d'apprendre), vous savez créer un autre fichier txt2.txt, y ajouter quelques lignes et le sauvegarder, en utilisant toujours les raccourcis claviers.
  6. Vous avez dans le menu Buffers une liste de tous les buffers d'édition 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 ce buffer (remarquez les raccourcis [C-x][C-b] et [C-x b]). 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 File (ou mieux avec la séquence [C-x 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 TP1.
  8. Modifiez le fichier courant sans le sauvegarder. Puis, dans le menu File choisissez
    Exit Emacs


6.1.1  Barre d'information et Mini-Buffer

Exercice 12  
  1. Lancez de 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 de nouveau sur la touche [Insert] pour revenir en mode normal.

    En dessous de la barre d'information se trouve le mini-buffer. Lorsque vous exécutez une commande Emacs, surveillez toujours cette ligne, 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, votre salut est dans [C-g] (deux fois) qui annule la commande en cours.


6.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->].

À l'aide de ces commandes, exercez-vous à vous déplacer rapidement dans le buffer courant.

Pour supprimer le caractère précédant le curseur, appuyez sur [Del] (ou [Suppr]), pour 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-/] ou [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-_].

6.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 File et supprimer une fenêtre en utilisant
Delete Frame
(vous ne pouvez pas supprimer la dernière fenêtre).

Exercice 13  
  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 File ?
Un autre moyen de voir plusieurs fichiers en même temps est de découper les fenêtres:
Exercice 14  
  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]


6.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 15  
  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 « en ». Vous noterez que la recherche est progressive. Quand vous arrivez sur la première occurrence de « en », tapez de 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 « ent » de « entre ». Ce mode de recherche s'appelle la recherche incrémentale.
  5. Trouvez toutes les occurrences de « en ». Quand vous arrivez à la fin, pour recommencer en haut du buffer, il faut presser de 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 16  
  1. Quelle est la combinaison la plus rapide pour remplacer tous les « en » par des « 3 », sauf le deuxième.
  2. Pouvez-vous revenir au texte tapé en (2) de l'exercice précédent en utilisant le undo ?

6.1.5  Copier et 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. C'est long et pénible.

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 ou [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]. La commande [M-y] juste après un [C-y] propose les morceaux coupés auparavant.

Exercice 17  
  1. Dans le texte tapé à l'exercice précédent, coupez le premier paragraphe à la souris et collez-le trois fois à la fin.
  2. À 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 uniquement.


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.

7  Utilisateurs et droits

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

Exercice 18   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 :
moi@lunix:~/TPS/TP1 $ ls -l durdur
ls: durdur: No such file or directory
moi@lunix:~/TPS/TP1 $ touch durdur
moi@lunix:~/TPS/TP1 $ ls -l durdur
-rw-r--r--    1 moi     prof            0 Sep 18 18:03 durdur
C'est-à-dire que l'utilisateur moi 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 19  
  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 :
moi@lunix:~/TPS/TP1 $  chmod g+w durdur
moi@lunix:~/TPS/TP1 $ ls -l durdur
-rw-rw-r--    1 moi     prof            0 Sep 18 18:03 durdur
Puis j'interdis la lecture aux autres :
moi@lunix:~/TPS/TP1 $ chmod o-r durdur 
moi@lunix:~/TPS/TP1 $ ls -l durdur
-rw-rw----    1 moi     prof            0 Sep 18 18:03 durdur
Enfin, je décide d'autoriser lecture et exécution à tout le monde :
moi@lunix:~/TPS/TP1 $ chmod a+rx durdur 
moi@lunix:~/TPS/TP1 $ ls -l durdur 
-rwxrwxr-x    1 moi     prof            0 Sep 18 18:03 durdur


Exercice 20  
  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.


7.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 crochets.
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 21  
  1. Positionnez-vous dans /sbin. 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. Comment utiliser echo pour afficher la liste des fichiers dans le répertoire courant ?

  3. Revenez dans votre répertoire de login. Comment afficher uniquement les fichiers cachés (leur nom commence par un . et ne sont visibles que si vous avez passé l'option -a à ls.

  4. (ne tapez pas la commande suivante !!!)
    Que pensez vous de la commande
    rm *
    (je répète, ne la tapez pas !!!)

  5. Copiez dans votre répertoire TP1 (en une seule commande) les fichiers de
    
    /etc/apt/apt.conf.d
    
    comportant un k.


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 exemple :
find /usr/lib/ -name deb* -print
cherche dans le répertoire /usr/lib/ les fichiers dont le nom commence par deb et affiche le résultat de la recherche.

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

7.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, cherchez 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 22  
  1. Cherchez les informations sur l'utilisateur principal (nommé root) qui apparaissent dans le fichier de mots de passe /etc/passwd
  2. Cherchez si ce fichier fait référence à Dieux ?
  3. Cherchez si ce fichier fait référence à root ?
  4. 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).

8  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 23  
  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-F4], cela vous mettra dans un nouvel écran en mode console, logez vous, listez les processus, trouvez le responsable (souvent Firefox) et tuez-le. Pour revenir dans l'environnement graphique, tapez [C-Alt-F7]


9  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 /etc/apt dans un fichier toto.txt
moi@lunix:~/TPS/TP1 $ ls /etc/apt >toto.txt
moi@lunix:~/TPS/TP1 $ more toto.txt
apt.conf.d
listchanges.conf
preferences.d
sources.list
sources.list.d
trusted.gpg.d
moi@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 24  
  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 25   Exécutez cat /etc/passwd. Comment faire pour que cela n'affiche rien ?


9.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 26  
  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



D'autres filtres très puissants sont tr, sed etc. Lisez leur man.
1
En fait il existe de nombreux shell, citons sh, csh, zsh, 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 curieux !