Skip to content
ermontPublic

About

BE 1 : Découverte de Linux et du Shell - Manipulation simple des processus

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Découverte de Linux et manipulation de processus

Travail préliminaire

Les fichiers nécessaires au déroulement du BE se trouvent sous Github. Pour les récupérer, exécutez la commande :

        git clone https://github.com/ermont/be1.git

Vous devriez obtenir un répertoire be1 dont l’arborescence est la suivante :

be1
├── Arbo.tar.gz
├── be1.pdf
├── processus.c
└── README.md

Découverte de Linux et de la ligne de commande Shell

Le système Unix est un système d’exploitation multi-utilisateurs, multi-tâches, ce qui signifie qu’il permet à un ordinateur (mono ou multi-processeurs) de faire exécuter simultanément plusieurs programmes par un ou plusieurs utilisateurs. Le Shell est l’interface de commande d’Unix. Ce système opératoire est aujourd’hui utilisé dans les milieux universitaires mais aussi dans de très nombreuses applications industrielles (standard Posix). Le système Linux n’a pas été développé dans un but commercial (source libre). Ainsi, tout le monde, depuis sa création, est libre de l’utiliser mais aussi de l’améliorer. Les systèmes Linux sont multi-utilisateurs et permettent de travailler en réseau.

Session/Compte

Les machines sont toujours allumées. Le système est opérationnel. Cependant pour les utiliser il faut se connecter et ainsi ouvrir une session de travail. Cela n’est possible que si vous êtes connu par le système, c’est à dire que vous disposer d’un compte sur celui-ci. C’est le même login/password pour Unix, Windows, Webmail, wifi, etc...
Ce couple est donc incessible.
Déroulement d’une session de travail Unix :

  • Ouverture de session

    Utilisez la fenêtre de login pour vous connecter. Le système va essayer de vous authentifier.
    Puis il va définir votre environnement de travail. Ce qui inclus :

    • le montage du répertoire de connexion (home directory),

    • le lancement d’un shell (vous êtes le propriétaire de ce processus).

  • Utilisation du système

  • Fermeture de session

Environnement de travail

Gestionnaire de fichiers de l’interface graphique.

L’environnement graphique propose un gestionnaire de fichier. Vous pouvez créer, déplacer, supprimer des fichiers ou des répertoires.

Exercice 1
Double cliquez sur l’icône Répertoire personnel de votre_login sur votre bureau. Visualisez le répertoire Desktop, Documents et MesDocs.

Première utilisation du shell.

Le shell est un interpréteur de commandes. Il sert d’intermédiaire entre l’utilisateur et le système d’exploitation.

Pour interagir avec la station Linux en ligne de commande, nous ouvrirons une fenêtre console ou terminal. Ce qui est saisi au clavier dans celle-ci est analysé par le shell puis exécuté.

Le premier mot de la ligne doit être une commande suivie éventuellement d’options et d’arguments.

Astuce : pour ne pas faire des erreurs de saisie et gagner du temps, utilisez la complétion des noms de commande ou de fichier avec la touche TAB.

Exercice 2 :

  1. Ouvrez une session graphique pour effectuer la suite du TP. Faire rapidement le tour de l’espace de travail.

  2. Trouvez comment lancer un terminal dans cet environnement graphique.

  3. Quelle est votre identité sur le système ? Utiliser la commande id.

  4. Comment savoir où vous êtes dans l’arborescence de fichiers ? Utilisez pwd.

  5. Qu’est ce que j’ai dans mon répertoire ? Testez ls, ls -a, ls -a|more.

  6. A quoi servent tous ces fichiers?

    • Les fichiers ou répertoires dont le nom commence par « . » permettent la configuration de votre environnement et de logiciels. Cet ensemble est appelé un profil. Celui-ci est identique sur toutes les machines car ces informations sont stockées dans votre espace personnel.

    • Identifiez avec l’intervenant le rôle de certains d’entre eux et retenez ceux qui sont indispensables au fonctionnement.

Découverte de l’arborescence de fichiers

Sous Unix, « tout est fichier ». Cela signifie qu’un disque, une mémoire, un lecteur de DVD, une clé usb, la sortie d’un processus sont tous vus par le système comme des fichiers. Il est donc fondamental que ces fichiers soient ordonnés.
Le système de fichiers sous Unix est organisé de manière arborescente. Vous vous déplacerez dans celle-ci en utilisant des chemins absolus (commençant par la racine : /) ou relatifs.

Exercice 3 : Déplacement dans l'arborescence
Lancez une console et effectuez les manipulations suivantes :
cd ../..
pwd
cd
pwd
Où êtes vous ?
Examinez le contenu du premier niveau de l’arborescence Unix avec les commandes suivantes:
ls / et ls -l /

Le fichier Arbo.tar.gz est une archive compressée d’un exemple de compte étudiant un peu désordonné. Pour désarchiver et décompresser le fichier faites :

tar zxf Arbo.tar.gz

Exercice 4 : Exploration du répertoire Arbo
Listez le contenu du répertoire Arbo en chemin relatif et chemin absolu.
Placez vous dans 2EA-S7. Lister le contenu de ce répertoire.
Afficher le contenu de Arbo en restant dans 2EA-S7.

Utilisation des commandes de base

Dans cette partie du BE vous allez travailler sur le répertoire Arbo qui contient un exemple d’arborescence. Celle-ci est composée de fichiers récupérés par un élève de 1TR sur l’intranet.

Vous pouvez faire tous les tests proposés même si cela provoque des erreurs.

Exercice 5 : Commandes ls, pwd et chemin absolu
Listez le contenu du répertoire Download avec ls depuis Arbo, puis en étant dans celui-ci. Placez vous à la racine de votre compte (cd sans arguments). Vérifiez (pwd). Lister à nouveau le contenu de Download, en indiquant son chemin en absolu puis en relatif. Pensez à utiliser l’astuce de la partie 2 pour gagner du temps et éviter les erreurs.

Exercice 6 : Commandes more, less, cat = visualiser des fichiers
En utilisant l’éditeur de texte gedit, créez un fichier premier dans le répertoire Arbo contenant une ou deux phrases. Visualisez ensuite son contenu sans l’éditer avec les commandes suivantes more, cat et less. Quelles différences observez vous?

Exercice 7 : Commande cp

  1. Placez vous dans le répertoire 3EA-S7/Systeme (cd). Vérifiez ou vous êtes (pwd).

  2. Utilisez la commande cp avec l’option -r pour copier le répertoire Arbo dans Systeme. Allez dans le répertoire Arbo.

  3. Que se passe-t-il si l’on veut faire une copie appelée BDE/ de son répertoire Prog/, et que le répertoire BDE/ existe déjà ?

  4. Que se passe-t-il si vous voulez faire une copie d’un fichier dans un répertoire où il existe déjà un fichier de ce nom ?

  5. Est-il possible de taper une ligne du genre de : cp tp-cesar.zip tp.tar Download/ ?

Quel est l’effet de cette ligne? Quel sera le nom des nouveaux fichiers?

Exercice 8 : Commande mv

  1. Changez le nom du répertoire Arbo source de la copie en Poubelle (mv).

  2. Que se passe-t-il si le répertoire existe déjà ?

  3. Comment faire pour à la fois déplacer un fichier et changer son nom ?

  4. Renommez en Introrezo.pdf et déplacez le fichier Arbo/IntroL4.pdf dans le répertoire Arbo/2EA-S7/Docs. Vérifiez avec ls.

  5. Que se passe-t-il si on lance mv avec les options -i et -f ensemble?

Astuce : ce que vous avez saisi sur la ligne de commande est mémorisé dans un historique. Utilisez les flèches haut et bas pour retrouvez vos commandes et évitez de les ressaisir. Pour en savoir plus sur le recours à l’historique info history.

Exercice 9 : Commande rm

  1. Vérifiez que vous êtes toujours dans le répertoire Arbo.

  2. Supprimez le fichier be1.pdf.

  3. Vous voulez détruire WEI, ls vous dit qu’il est vide. Cependant, quand vous tapez rm WEI, la machine vous répond : rm: impossible de supprimer «WEI»: est un dossier

Pensez à vérifier ce qui s’exécute derrière les commandes.

Des caractères bien utiles

L’utilisation de caractères spéciaux dans la ligne de commande, notamment pour les noms de fichiers, permet de désigner des ensembles. Voici ces caractères appelés aussi méta-caractères : , ? , [] et ^.

Syntaxe Signification
* remplace une chaîne de longueur qcq, même vide
? remplace un seul caractère qcq
[ar] [3-8] un caractère qcq de la liste ou de l'intervalle, pas d'espace dans les crochets
[^gtc] [^a-z] n'importe quel caractère sauf ceux de la liste, pas d'espace dans les crochets

C’est le shell qui interprète ces caractères. Pour que ceux-ci soient considérés seulement comme un caractère normal, il faut placer un $\backslash$ devant.

Il ne faut pas confondre ces méta-caractères permettant de désigner des ensemble de fichiers avec les expressions régulières utilisées par d’autres commandes telles que grep.

Le répertoire de travail est toujours Arbo. Vous avez remarqué que tout est en vrac. Les commandes ci-dessous vont vous permettre de ranger petit à petit ce répertoire.

Exercice 10

  1. Listez les fichiers commençant par tp ou td.

  2. Listez les fichiers finissant par .pdf.

Le Man

Les commandes qui fournissent de l’aide sont : man et info.

Ainsi si vous voulez savoir ce que fait la commande man, saisissez man man.

Pour vous en sortir vous devez apprendre à lire un man et notamment savoir lire le synopsis d’une commande.

Droits d’accès

Un fichier a un propriétaire, un groupe et un ensemble de droits d’accès définissant les possibilités de lecture, écriture et exécution du fichier pour les utilisateurs du système.

Il existe trois ensembles d’utilisateur :

  • le propriétaire du fichier

  • les utilisateurs du même groupe de travail que le propriétaire

  • les autres utilisateurs ayant accès au système

    Droits Signification pour un fichier Signification pour un répertoire
    Lecture (r) droit de lecture du contenu du fichier  droit de lecture du contenu du répertoire
    Ecriture (w) droit de modification du fichier droit de modif. du contenu du répertoire (suppression ou création de fichier)
    Exécution (x) droit d'exécuter le fichier droit de passage dans le répertoire

Exercice 11:

  1. Pouvez vous créer un répertoire sous /home ?

  2. Dans le répertoire Systeme, exécutez la commande mkdir repdroits pour créer un sous-répertoire repdroits. Quels sont les droits par défaut de ces répertoires ?

  3. Créez un fichier droit.txt (touch droit.txt pour créer un fichier vide sinon utilisez un éditeur de texte) dans le répertoire repdroits. Quels sont ses droits par défaut?

Connexion à distance

Les ordinateurs sous Linux offrent la possibilité de se connecter à distance (avec un environnement graphique) sur un autre poste.

Par exemple, la commande ssh nom_stationétablie une connexion sécurisée avec un autre ordinateur dont le nom est nom_station puis exécute un SHELL sur cet ordinateur.

La station à laquelle on désire se connecter peut avoir un nom de login différent. Aussi, il faudra le spécifier lors de la connexion : ssh login@nom_station!.

Enfin, il est possible aussi de « déporter » l’affichage, c’est-à-dire que l’affichage graphique d’une application lancée sur l’ordinateur auquel on s’est connecté se fera sur notre ordinateur :

ssh -X nom_station.

Éléments indispensables à connaître

  • Connaître l’arboresence du système de fichier

  • Savoir se situer et se déplacer à l’aide des chemins absolus et relatif

  • Comprendre à quoi servent les droits sur les fichiers et les répertoires

  • Maîtriser la visualisation et la modification de ces droits

  • Avoir une idée du fonctionnement de l’interpréteur de commande (alias, méta-caractères, path ...)

  • Pouvoir lire un man pour trouver la syntaxe correcte d’une commande

  • Visualiser les processus

Gestion des processus

L'objectif de cette partie est de comprendre le lancement de processus, la notion d'identifiant de processus, la notion d'état de processus, ...

On considère le programme processus.c donné par le listing 1. Ce programme est fourni, il n'est pas nécessaire de le réécrire, le copier/coller ou autre. Il suffit de l'éditer avec votre outil d'édition préféré (gedit, pluma, gvim, emacs, codium, ...)

Listing 1 - le programme processus.c fourni :

    int main(int argc, char *argv[]) {
        int tempsPere, tempsFils;
        pid_t pid_fork;

        tempsPere= 120;
        tempsFils= 60;

        pid_fork= fork();
        // bonne pratique : tester systématiquement le retour des primitives
        if (pid_fork == -1) {
            printf("Erreur fork\n");
            exit(1);
            /* par convention, renvoyer une valeur > 0 en cas d'erreur,
             * différente pour chaque cause d'erreur, ici 1 = erreur fork
             */
        }
        if (pid_fork == 0) {        /* fils */
            printf("fils: processus %d, de père %d et code du fork %d\n", 
                        getpid(), getppid(), pid_fork);
            sleep(tempsFils);
            printf("fin du fils\n");
            exit(EXIT_SUCCESS); 
            /*  bonne pratique : 
                terminer les processus par un exit explicite */
        }
        else {      /* père */
            printf("père: processus %d, de père %d et code du fork %d\n", 
                        getpid(), getppid(), pid_fork);
            sleep(tempsPere);
            printf("fin du père\n");        
        }
        return EXIT_SUCCESS; /* -> exit(EXIT_SUCCESS); pour le père */
    }

Exécution et état des processus

  1. Compilez le programme en utilisant gcc :

    > gcc processus.c -o processus
    

    Exécutez le : ./processus (Pourquoi faut-il ajouter ./ pour que cela fonctionne ?)

  2. Utilisez la commande ps -fjn dans un autre terminal et indiquez

    2.1. l'identifiant du processus et de son père. Est-ce que les valeurs fournies par la commande ps sont similaires à celles affichées par le programme ?

    2.2. l’état des processus (S : Sleeping, en attente ; R : Running, actif ; T : sTopped, terminé ; Z : Zombie, ...) :

    • après le lancement du programme ;

    • après la fin du processus fils.

  3. Modifiez le code en échangeant les valeurs de tempsFils et tempsPere et exécutez le programme. En utilisant la commande ps -fjn, que constatez-vous lorsque le processus père a terminé ?

Héritage des données

Modifiez le programme précédent avec :

  • variable= 10; au début du code du fils ;

  • variable= 100; au début du code du père.

Affichez variable à la fin du code du fils et à la fin du code du père. Que constatez-vous ?

About

BE 1 : Découverte de Linux et du Shell - Manipulation simple des processus

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages