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
-
date
- cal
- 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 dialog puis, après
être sorti, man 3 dialog
- 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
-
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).
Deux options courtes peuvent parfois être concaténées.
Enfin l'ordre des options est en général indifférent. Par exemple cal -y -j est équivalent à cal -jy.
- 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 !
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
-
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 ?
Tapez maintenant cd share/doc. 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 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
le répertoire de login d'une autre
personne.
permet de revenir là où vous étiez avant le
dernier
cd
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.
5 Fichier
5.1 Lecture et impression
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]).
-
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 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.
-
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 /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 :
- t : liste le contenu de l'archive
- x : extrait le contenu de l'archive
- c : crée une archive
- z : compresse/décompresse l'archive en utilisant gzip
- j : compresse/décompresse l'archive en utilisant bzip2
- v : affiche le nom des fichiers ajoutés à/extraits
de l'archive
- f suivi d'un nom de fichier : utilise ce fichier
comme archive
Exercice 10.1
- Créez deux fichiers sources.c
et rapport.pdf dans le répertoire TP1.
- Placez-vous dans le répertoire TPS et entrez la
commande suivante pour créer une archive :
tar zcvf monarchive.tar.gz
TP1/ |
- Listez le contenu de l'archive nouvellement créée à l'aide de la
commande :
tar ztf monarchive.tar.gz |
- 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.
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
- 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.)
- Créez un nouveau
fichier txt1.txt avec la commande [C-x][C-f] (ou pour
débuter l'entrée
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éé ?
- 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
du menu
File).
- Quelle est la différence entre
et
- 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.
- 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.
- Vous pouvez fermer un buffer en sélectionnant
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.
- Modifiez le fichier courant sans le sauvegarder. Puis, dans le menu
File choisissez
6.1.1 Barre d'information et Mini-Buffer
Exercice 12
- Lancez de 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 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
du menu File et supprimer une fenêtre en utilisant
(vous
ne pouvez pas supprimer la dernière fenêtre).
Exercice 13
-
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 File ?
Un autre moyen de voir plusieurs fichiers en même temps est de découper les fenêtres:
Exercice 14
-
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]
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
-
Quelles sont les différences entre [C-s] et la commande
du menu
Search ?
- 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 « 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].
- 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.
- Trouvez toutes les occurrences de
« en ». Quand vous arrivez à la fin, pour recommencer en haut
du buffer, il faut presser de 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 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
-
Quelle est la combinaison la plus rapide pour remplacer tous les « en » par des « 3 », sauf le deuxième.
- 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
-
Dans le texte tapé à l'exercice précédent, coupez le premier paragraphe à la souris et collez-le trois fois à la fin.
- À 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 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
-
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 :
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
-
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.
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 “/”),
qui signifie :”un caractère parmi ceux donnés entre crochet” et
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 :
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
-
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).
- 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 (leur nom commence par un .
et ne sont visibles que si vous avez passé l'option -a
à ls.
- (ne tapez pas la commande suivante !!!)
Que pensez vous de la commande
(je répète, ne la tapez pas !!!)
- 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
- 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).
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
-
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-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
-
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 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
-
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
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 !