Portail informatique Année 2018 – 2019

CSC 3102 – Introduction aux systèmes d’exploitation

Pour faire les exercices, vous avez besoin de connaître le langage bash. Vous pouvez vous référer à l'annexe shell. Vous pouvez aussi trouver une liste d'astuces ici. Tous les exercices sont obligatoires, sauf les exercices notés « défi » ou « optionnel » qui sont optionnels. En particulier, les exercices notés « hors présentiel » sont supposés fait d'une séance sur la suivante.

Ce TP est axé sur l'utilisation des commandes de manipulation des fichiers.

Vous êtes libre d'organiser votre compte comme bon vous semble. Cependant, même si pour l'instant vous ne possédez que peu de fichiers, nous vous encourageons à organiser dès à présent vos fichiers en répertoire. Ainsi, nous vous suggérons de créer un répertoire par module de votre cursus, lui-même organisé par séance de TP.

Positionnez-vous dans votre répertoire de connexion. cd Créez un répertoire nommé CSC3102. mkdir CSC3012 Déplacez-vous dans ce répertoire. cd CSC3012 Si vous n'avez pas utilisé l'interface graphique de votre système d'exploitation afin de créer des répertoires spécifiques, les fichiers correspondant à la première séance de TP ainsi qu'au devoir hors présentiel se trouvent à la racine de votre compte.
  1. Créez un répertoire TP1_PremieresCommandes. mkdir TP1_PremieresCommandes
  2. Déplacez-y les fichiers correspondant. mv ~/bonjour.sh TP1_PremieresCommandes
    mv ~/bonjour_parametre.sh TP1_PremieresCommandes
  3. Créez un répertoire DM. mkdir DM
  4. Déplacez-y les fichiers correspondant. mv ~/calculette_uni_operation.sh DM
    mv ~/calculette_sans_priorite.sh DM
    mv ~/calculette.sh DM
Pour la séance de TP d'aujourd'hui, créez dans le répertoire CSC3102 un répertoire nommé TP2_FS. mkdir TP2_FS
Le but de cet exercice est de vous faire utiliser les commandes de base de manipulation de fichiers : cd, cp, mv, mkdir et rm. Positionnez-vous dans votre répertoire de connexion. cd Affichez le contenu du répertoire courant. ls Déplacez-vous dans le dernier répertoire créé, c.-à-d. celui correspondant au répertoire du TP2. cd CSC3102/TP2_FS Affichez le chemin du répertoire courant. pwd Affichez le contenu du répertoire parent du répertoire courant. ls .. À ce stade, vous devez vous trouvez dans le répertoire TP2_FS. Vérifiez que c'est bien le cas et déplacez-vous y le cas échéant. pwd
cd ~/CSC3102/TP2_FS
Sans vous déplacer, afficher le contenu de votre répertoire créé pour le TP1 en utilisant un chemin absolu. ls ~/CSC3102/TP1_PremieresCommandes
ls /[...]/<login>/CSC3102/TP1_PremieresCommandes
Sans vous déplacer, afficher le contenu de votre répertoire de connexion en utilisant un chemin relatif. ls ../TP1_PremieresCommandes Créez un répertoire nommé test dans le répertoire courant et déplacez-vous y. mkdir test
cd test
Copiez le fichier /etc/passwd dans le répertoire courant. cp /etc/passwd .
Attention, le « . » n'est pas optionnel ! Le deuxième argument de la commande cp spécifie le répertoire de destination de la copie. Dans le cas présent, vous copiez le fichier passwd sous le même nom dans le répertoire ., c.-à-d. dans le répertoire courant.
Dupliquez le fichier passwd dans le répertoire courant avec comme nouveau nom de fichier passwd2. cp passwd passwd2 Regardez les numéros d'inodes de ces deux fichiers avec l'option -i de la commande ls. Expliquez pourquoi ces numéros sont différents. ls -i passwd passwd2
Les numéros d'inodes de ces deux entrées sont différents car les contenus sont dupliqués lors de leur copie.
Renommez le dernier fichier passwd2 en dup. mv passwd2 dup Regardez le numéros d'inode du fichier dup et comparez-le à celui qu'avait le fichier passwd2. Expliquez pourquoi ces numéros d'inodes sont identiques. ls -i dup
Il s'agit toujours du même inode. Le changement de nom a été appliqué dans le tableau référençant les entrées du répertoire.
Supprimez le fichier passwd. rm passwd Supprimez le répertoire test. cd ..; rm -r test
Dans cet exercice, pensez à vérifier à chaque fois que nécessaire si les droits d'accès sont correctement positionnés à l'aide de la commande ls -l. Créez le répertoire tmp sous votre répertoire TP2_FS et positionnez les droits d'accès à « rwx r-x --- ». À quoi correspondent ces droits ? $ cd ; cd CSC3102/TP2_FS ; mkdir tmp $ chmod 750 tmp $ ls -l Droit en lecture/écriture/traversée (car répertoire) pour l'utilisateur, droit de lecture/traversée pour le groupe, aucun droit pour les autres. Copiez le fichier /etc/hosts sous tmp avec comme nouveau nom liste_hosts. Positionnez les droits d'accès à rw- r-- --- et lisez son contenu . $ cp /etc/hosts tmp/liste_hosts $ chmod 640 tmp/liste_hosts $ more tmp/liste_hosts ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost Pas de problème : on a le droit d'entrée dans tmp (droit x), le droit de lire son contenu (droit r) et le droit de lire le fichier tmp/liste_hosts (droit r). Retirez pour le propriétaire le droit en lecture de liste_hosts et essayez de relire son contenu. $ chmod u-r tmp/liste_hosts $ more tmp/liste_hosts tmp/liste_hosts: Permission denied On a perdu le droit de lire tmp/liste_hosts. Retirez pour le propriétaire le droit en écriture de tmp et essayez de détruire liste_hosts. $ chmod u-w tmp $ rm tmp/liste_hosts rm: tmp/liste_hosts: Permission denied On a perdu le droit d'écrire dans le répertoire tmp et on ne peut donc plus modifier son contenu. Retirez pour le propriétaire le droit en lecture de tmp et essayez de lister son contenu. $ chmod u-r tmp $ ls tmp ls: tmp: Permission denied On a perdu le droit de lire le contenu de tmp. En revanche, on peut toujours le traverser (cd tmp ne génère pas d'erreur). Retirez pour le propriétaire le droit en exécution (x) de tmp et essayez de vous positionner sur ce répertoire. $ chmod u-x tmp $ cd tmp bash: cd: tmp: Permission denied On a aussi perdu le droit de traverser le répertoire : impossible de se positionner dedans. Positionnez pour le propriétaire les droits d'accès rwx du répertoire tmp. chmod u+rwx tmp Effacez tout le contenu du répertoire tmp et le répertoire lui-même. rm -rf tmp Placez-vous dans le répertoire correspondant à la séance de TP2. cd ~/CSC3102/TP2_FS Copiez dans ce répertoire le fichier /etc/passwd et nommez-le my_passwd. cp /etc/passwd my_passwd Affichez le contenu du fichier my_passwd. Pour cela, utilisez la commande cat file qui permet d'afficher le contenu du fichier file sur le terminal. cat my_passwd Créez un répertoire nommé Liens dans le répertoire courant. mkdir Liens Déplacez-vous dans le répertoire Liens. cd Liens Sans vous déplacer, créez dans le répertoire Liens le lien direct lien.txt sur le fichier de votre répertoire courant my_passwd. ln ../my_passwd lien.txt Utilisez la commande ls pour afficher le numéro d'inode des fichiers my_passwd et lien.txt. Qu'observez-vous ? ls -i ../my_passwd lien.txt
Les inodes des deux fichiers sont identiques.
Avec la commande cat, affichez le contenu du fichier lien.txt. Cela doit afficher le même contenu qu'à la question c. more lien.txt Toujours sans vous déplacer, créez dans le répertoire Liens le lien symbolique lien_symb.txt sur le fichier my_passwd. Utilisez un chemin relatif pour référencer le fichier my_passwd. ln -s ../my_passwd lien_symb.txt Utilisez la commande ls pour afficher le numéro d'inode des fichiers my_passwd et lien_symb.txt. Qu'observez-vous ?. ls -i ../my_passwd lien_symb.txt Les inodes des deux fichiers sont différents. Affichez le contenu du fichier lien_symb.txt. more lien_symb.txt Déplacez le fichier my_passwd dans le répertoire Liens. mv ../my_passwd . Affichez le contenu des fichiers lien.txt et lien_symb.txt. Expliquez. more lien.txt # pas de problème : le numéro d'inode n'est pas modifié.
more lien_symb.txt # Msg d'erreur : "Aucun fichier ou dossier de ce type" ! Le chemin stocké dans le lien symbolique n'est plus valable puisque le fichier cible a été déplacé.

De façon générale, il vaut mieux éviter d'utiliser des chemins relatifs lorsqu'on crée un lien symbolique car tout déplacement du lien dans un autre répertoire rend le lien invalide. Toutefois, utiliser des chemins relatifs dans les liens symboliques est une pratique courante lorsque l'arborescence est stable et n'est pas supposée évoluer.
Le cas échéant, réparez les liens brisés. ln -s ~/CSC3012/TP2_FS/Liens/my_passwd lien_symb.txt Déplacez-vous à la racine de votre compte et affichez le contenu de lien_symb.txt. $ cd $ more CSC3102/TP2_FS/Liens/lien_symb.txt Sans vous déplacer, déplacez le fichier my_passwd dans son répertoire parent. mv CSC3102/TP2_FS/Liens/my_passwd .. Affichez de nouveau le contenu de lien_symb.txt. more CSC3102/TP2_FS/lien_symb.txt
Cet exercice a pour but de vous présenter la commande ssh. Cette commande vous permet de lancer un shell sur une machine distante de façon sécurisée. Elle vous sera utile pour travailler sur les machines de l'école lorsque vous n'y êtes pas physiquement. Le but de cet exercice n'est pas de vous faire un cours complet sur ssh, pour cela, nous invitons à consulter le cours se trouvant ici.

Les salles machines sont toutes connectées derrière une passerelle nommée ssh.imtbs-tsp.eu. Cette passerelle laisse passer toutes les connexions sortantes mais bloque les connexions entrantes. Dans ce TP, nous allons faire « comme si » nous étions à l'extérieur du réseau de l'école : nous allons nous connecter à la passerelle avant de nous connecter à une des machines. Ouvrez un terminal et lancez la commande hostname. Quel est le nom de votre machine ? $ hostname b02-08.int-evry.fr

Le b02 indique la salle et le 08 le numéro de machine

Avant d'aller plus loin, lancez la fabuleuse commande xeyes. Que fait cette commande ? Des yeux suivent la souris. Fermez le processus xeyes puis utilisez la commande ssh pour vous connecter à la passerelle. Pour vous guider, vous devriez écrire ssh mon-login@ssh.imtbs-tsp.eu pour vous connecter (pensez à utiliser la commande man pour savoir comment utiliser la commande ssh de façon plus avancée). Qu'affiche maintenant la commande hostname.

Cette remarque est importante, conservez ces informations quelques part, car vous en aurez très probablement besoin plus tard dans vos études ou votre vie professionnelle. Comme vous vous connectez pour la première fois à la passerelle, ssh vous pose une question. Avant de répondre « yes », lisez attentivement ce que vous raconte ssh. De façon générale, si l'authenticité d'une machine ne peut pas être établie, cela signifie que :
  • la machine sur laquelle vous vous connectez n'est pas celle que vous croyez. Le service qui trouve une machine à partir de son nom a très probablement été piraté. Si vous avez un doute, fuyez pauvres fous ! Contactez d'urgence l'administrateur de la machine et surtout, ne répondez pas yes aveuglément.
  • la machine sur laquelle vous vous connectez vient d'être mise à jour. Dans ce cas, son identité a changé. Après vous être assuré(e) que c'était le cas, vous pouvez détruire l'entrée correspondante dans le fichier ~/.ssh/known_hosts en lançant ssh-keygen -R hostname, où hostname est le nom de la machine sur laquelle vous vous connectez. Vous pourrez ensuite vous reconnecter comme si c'était une nouvelle machine;
  • vous vous connectez pour la première fois à la machine. Dans ce cas, vous pouvez répondre yes sans danger;
ssh ssh.imtbs-tsp.eu $ hostname elaphe.int-evry.fr Il est possible que hostname vous indique un autre nom de machine car, de façon à équilibrer la charge, plusieurs machines peuvent répondre au doux nom de ssh.imtbs-tsp.eu.
Lancez la commande xeyes. Que se passe-t-il ? La commande ne démarre pas et affiche un message d'erreur « Error: Can't open display: ». Techniquement, votre shell s'exécute sur l'une des passerelles du campus alors que votre écran est connecté à votre machine. Le shell de la passerelle est incapable de trouver le serveur graphique de votre machine, ce qui explique que la commande xeyes ne puisse pas se connecter.

Déconnectez-vous de la passerelle avec la commande exit, puis reconnectez-vous à la passerelle en utilisant l'option -Y de ssh. Cette option demande explicitement à ssh d'indiquer au shell de la passerelle où se trouve le serveur graphique.

Que se passe-t-il lorsque vous lancez xeyes ? $ ssh -Y thomas_g@ssh.imtbs-tsp.eu thomas_g@ssh.imtbs-tsp.eu's password: Last login: Tue Jun 28 13:44:53 2016 from 157.159.39.4 [thomas_g@elaphe ~]$ xeyes xeyes se porte maintenant comme un charme.
Demandez à votre voisin le nom de sa machine. À partir du shell s'exécutant sur la passerelle, connectez-vous (avec ssh -Y) sur la machine de votre voisin et lancez un xeyes à distance. Où apparaît xeyes ? Sur votre machine. Déconnectez-vous de la machine de votre voisin et de la passerelle en saisissant exit deux fois. Vous devriez donc maintenant travailler sur votre machine. Vérifiez que c'est le cas en lançant la commande hostname. Si vous voyez que vous n'êtes pas en train de travailler sur votre machine, saisissez exit autant de fois que nécessaire. $ exit $ exit $ hostname b02-08.int-evry.fr Nous allons maintenant apprendre à copier des fichiers d'une machine à une autre en utilisant le protocole ssh. Avant de commencer, de façon à vous remettre en jambe, copiez le fichier /etc/passwd de votre machine dans votre répertoire de connexion (répertoire « ~ ») en utilisant la commande cp. $ cp /etc/passwd ~ $ Pour copier un fichier d'une machine à une autre, il faut remplacer la commande cp par la commande scp. Cette commande fonctionne à peu près comme la commande cp mais permet de spécifier une machine cible ou une machine destination en préfixant un des chemins par « mon-login@nom-machine: » (par exemple, avec le chemin thomas_g@stromboli.telecom-sudparis.eu:~/movies/chat-noir-chat-blanc.avi).

Copiez le fichier /etc/passwd de la machine ssh.imtbs-tsp.eu dans votre répertoire de connexion. $ scp thomas_g@ssh.imtbs-tsp.eu:/etc/passwd ~ thomas_g@ssh.imtbs-tsp.eu's password: passwd 100% 2793 2.7KB/s 00:00 $
Ce qu'il faut retenir : lorsque vous travaillez à distance, vous devez d'abord vous connecter à une passerelle de l'école avec ssh -Y ssh.imtbs-tsp.eu. Si par hasard ssh vous indique que la machine ne peut pas être authentifiée alors que vous vous y étiez déjà connecté, méfiez-vous, l'identité de la machine a peut-être été usurpé. Ensuite, il vous est demandé de ne jamais travailler directement sur la passerelle de façon à ce qu'elle ne soit pas surchargée (imaginez 1000 étudiants en train de travailler sur la même machine). Connectez-vous donc à une autre machine, en sachant que les machines s'appellent salle-num, où salle est un numéro de salle et num un numéro de machine (par exemple b02-08).