Pratique du shell Linux

💻 Travail n° 1 Options d’une commande Linux

Ce travail vise à vous faire découvrir les différentes façons de fournir des options aux commandes Linux

La commande uname de Linux va servir de base à ce travail. Cette commande fournit des informations basiques sur le système.

  1. Consulter Syntaxe générale des commandes

  2. Consulter la page de manuel de la commande uname

  3. Exécuter les commandes uname -p puis uname --processor. Que faut-il en déduire sur les 2 options ?

  4. Exécuter les commandes uname -o -n -p et uname -onp. Que faut-il en déduire sur les options courtes ?

  5. Exécuter la commande uname suivie de l’option --version qui est disponible pour une grande majorité des commandes. Que permet cette option ?

💻 Travail n° 2 Catégories de commandes

L’objectif de ce travail est de vous faire différencier les commandes intégrées au shell et celles implémentées dans leur propre fichier exécutable.

  1. Consulter Catégories de commandes

  2. Lancer un shell en tant que root (→ sudo su)

  3. La commande whereis avec l’option -b permet de localiser l’emplacement du fichier exécutable d’une commande.

    Localiser et relever l’emplacement de la commande ifuser en exécutant :

    whereis -b ifuser

    En déduire le type de la commande ifuser (→ interne ou externe ?)

  4. Localiser l’emplacement de la commande cd. Quelle différence faut-il noter par rapport aux résultats pour la commande précédente ?

    Que faut-il en déduire sur le type de cette commande (→ interne ou externe ?)

  5. Localiser l’emplacement de la commande mkdir.

    Que constatez-vous ?

    Afficher et relever les détails (→ ls -l <fichier>) des exécutables de la commande mkdir présents dans les répertoires affichés par la commande whereis précédente. Pouvez-vous donner une interprétation de ce qui est affiché ?

  6. Afficher et relever l’ensemble des répertoires contenus dans la variable d’environnement PATH.

    Faire la même chose mais cette fois-ci dans un shell d’un utilisateur standard.

    Que pouvez-vous en déduire du nombre de commandes accessibles pour chacun des ces utilisateurs (standard et root) ?

  7. La commande type -a suivie du nom d’une commande permet de savoir si celle-ci est une commande externe ou intégrée au shell (builtin).

    Déterminer le type des commandes suivantes :

    • history

    • halt

    • pwd. Quelle particularité présente cette commande ?

💻 Travail n° 3 Liens symboliques et matériels

L’objectif de ce travail est de vous faire prendre conscience des différences entre les 2 types de liens sur les fichiers existant sous Linux : liens symboliques et liens matériels

  1. Consulter Liens symboliques et matériels

  2. Dans votre répertoire utilisateur standard, créer un fichier foobar.txt qui contiendra le texte “Hello world”. Vous utiliserez à cet effet la commande suivante :

    $ echo "Hello world" > ~/foobar.txt
  3. Créer un lien symbolique sur ce fichier avec la commande :

    $ ln -s foobar.txt foobar_soft.lnk
  4. Lister le contenu du répertoire avec la commande ls -l et relever dans le compte rendu les 2 lignes dans lesquelles figurent le nom foobar.txt

  5. Créer à présent un lien matériel sur le fichier avec :

    $ ln foobar.txt foobar_hard.lnk
  6. Lister de nouveau le répertoire avec ls -l puis relever les 3 lignes associées au fichier foobar.txt et ses 2 liens (matériel et symbolique).

    Que constatez-vous au niveau de la représentation des liens au niveau de l’affichage ?

    Quelle différence pouvez-vous relever au niveau du nombre affiché entre les droits d’accès et le nom du propriétaire du fichier foobar.txt par rapport à celui présent avant la création du lien matériel ?

    Les droits d’accès d’un lien symbolique n’ont pas de valeur. Seuls les droits d’accès du fichier sur lequel il pointent doivent être considérés.

  7. Afficher le contenu de foobar.txt et de ses 2 liens (matériel et symbolique) avec la commande cat. Vérifier que le texte “Hello world” s’affiche à chaque fois.

  8. Executer la commande stat foobar.txt foobar_hard.lnk foobar_soft.lnk.

    Comparer les informations affichées et plus particulièrement les valeurs de “Size”, “Blocks” et “INode”.

    Les inodes

    Sous un système UNIX, un fichier quel que soit son type est identifié par un numéro appelé numéro d' inode. Un inode est une structure qui contient diverses informations sur le fichier auquel il est associé :

    • Type (fichier, répertoire…​) ;

    • Identité du propriétaire et du groupe ;

    • Droits d’accès ;

    • Date de modification ;

    • Emplacements des blocs de données du fichier sur le disque dur ;

    • …​

    Le numéro d’inode d’un fichier peut être obtenu avec la commande :

    $ ls -i mon-fichier

    Un répertoire n’étant qu’un fichier, il est lui aussi identifié par un inode. Au niveau du disque dur, un répertoire n’est qu’une liste associant des noms de fichiers à des numéros d’inode.

    La différence entre un lien matériel et symbolique se trouve au niveau de l’inode.

    Un lien matériel n’a pas d’inode propre : il partage l’inode du fichier vers lequel il pointe.

    Par contre, un lien symbolique possède son propre inode.

    À noter qu’on ne peut pas créer de liens matériels entre deux partitions de disque. Cette limitation n’existe pas avec les liens symboliques.

  9. Détruire le fichier foobar.txt et exécuter la commande stat foobar_hard.lnk.

    Que remarquez-vous au niveau de l’information “Links” ?

  10. Afficher le contenu des 2 liens (matériel et symbolique) avec la commande cat.

    Interpréter le résultat.

  11. Créer un répertoire dummy dans votre répertoire utilisateur et créer les 2 types de liens (matériel et symbolique) sur ce répertoire.

    Que pouvez-vous en déduire ?

Malgré ce qui vient d’être démontré sur l’impossibilité de créer des liens matériels sur des répertoires, les “raccourcis” . et .. sont en fait de véritables liens matériels vers les répertoires courant et parent.

💻 Travail n° 4 Caractères génériques

Ce travail vise à vous faire expérimenter l’utilisation de “jokers” (→ caractères génériques) dans les commandes pour cibler des ensembles de fichiers plutôt que de devoir tous les spécifier les uns après les autres.

  1. Consulter Caractères génériques du shell

  2. Afficher le type des fichiers (→ commande file) contenus dans votre répertoire personnel dont le nom débute par un point

  3. Afficher le type des fichiers du répertoire personnel dont le nom débute par ‘.’, se termine par ‘g’ et contient un ‘f’

  4. Afficher le type des fichiers de /etc/ dont la 3ième lettre du nom est un ‘u’

  5. Afficher le type des fichiers de /etc/ dont le nom se termine par ‘conf’

  6. Afficher le type des fichiers de /etc dont le nom comporte au moins 8 lettres et se termine par ‘s’

  7. Afficher le type des fichiers de ` /sys/devices/` qui comportent un chiffre dans leur nom

  8. Afficher le type des fichiers de /dev/ dont le nom se termine par 2 chiffres

  9. Afficher le type des fichiers de /dev/ dont le nom débute par ‘l’ mais qui ne se termine pas par 1 chiffre

💻 Travail n° 5 Redirections

Ce travail consiste à mettre en œuvre le mécanisme de redirection de Linux qui permet aux commandes d’envoyer leurs résultats vers un fichier ou d’obtenir leurs arguments depuis un fichier.

  1. Consulter Redirections

  2. Que produit la commande echo "Lorem ipsum" 1> foo.txt ? Conclure sur la signification de 1>.

  3. Que signifie selon vous &> dans la commande suivante ls /r* &> foo.txt ?

    Cette commande peut également s’écrire ls /r* > foo.txt 2>&1. La page de manuel de bash recommande malgré tout la 1ière syntaxe.

  4. Élaborer la séquence de commandes suivante :

    • Lister les répertoires de /var/log grâce à la commande find et son option -type (cf. page de manuel)

    • Rejouer la même commande mais en redirigeant uniquement STDOUT vers le fichier folders.txt

    • Rejouer la dernière commande en redirigeant STDERR vers le fichier spécial /dev/null et observer le résultat.

      Consulter la page de manuel de null (→ man null) et expliquer à quoi correspond le fichier /dev/null.

    • Afficher tout en majuscules le contenu de folders.txt via la commande tr vue plus haut

    • Modifier la commande pour qu’elle envoie le résultat dans un fichier plutôt qu’à l’écran.

      Que se passe-t-il si le même fichier est spécifié pour la redirection d’entrée et la redirection de sortie ?

💻 Travail n° 6 Tubes

L’objectif de ce travail est de vous faire manipuler les tubes (ou pipes) au niveau des commandes Linux

  1. Consulter Tubes

  2. Observer les derniers évènements du système en tapant la commande dmesg | tail qui envoie la sortie de dmesg sur l’entrée de tail.

    La commande tail permet de n’afficher que les dernières lignes d’un texte alors que la commande dmesg affiche l’ensemble des évènements détectés par le kernel ⇒ les 2 commandes combinées avec le pipe permettent donc de n’afficher que les derniers évènements.

  3. Visualiser page par page l’ensemble des évènements du système en tapant la commande dmesg | less.

    La commande less permet de naviguer à travers un document (‘q’ = quitter, ‘h’ = aide, ‘f’ ou <espace> = page suivante, ‘b’ = page précédente, ENTRÉE = ligne suivante …​)

  4. Élaborer une commande avec un pipe qui permettra en une seule ligne d’afficher en majuscules les répertoires de /var/log accessibles à l’utilisateur courant.

💻 Travail n° 7 Commandes réseau usuelles

  1. Consulter Gestion Réseau

  2. Utiliser la commande ip pour récupérer l’adresse IP ainsi que l’adresse MAC de votre interface réseau

  3. Déterminer avec la commande ip l’adresse IP de la passerelle

  4. Vérifier la liaison avec la passerelle avec la commande ping

  5. pinger” l’adresse 127.0.0.1. Comment expliquez-vous le fait que vous arriviez à joindre 127.0.0.1 alors que cette adresse n’est pas dans le même réseau que votre interface réseau ?

  6. Installer le paquet logiciel nmap depuis YaST

  7. Découvrir les hôtes présents sur le réseau 192.168.4.0/22 et déterminer ceux tournant sur Windows

💻 Travail n° 8 Gestion de processus

L’objectif de ce travail est de vous familiariser avec les commandes usuelles de Linux en rapport avec la gestion des processus.

  1. Consulter Gestion des processus

  2. Depuis le terminal, lancer 2 instances de la calculatrice en tapant les commandes

    $ kcalc& (1)
    $ kcalc& (1)
    1 le ‘&’ à la fin des commandes demande à Linux d’exécuter le programme en tâche de fond. Ceci permet de reprendre la main instantanément dans le shell plutôt que de devoir attendre la fin de chaque commande (ici, fermer la calculatrice)
  3. Saisir la commande permettant d’afficher les identifiants des processus en cours d’exécution (→ leurs PIDs)

  4. Tuer la 1ère instance de la calculatrice en lui envoyant le signal SIGKILL

  5. Relancer plusieurs instances de la calculatrice

  6. Saisir la commande unique qui permet de fermer toutes les instances de la calculatrice

  7. Relancer 2 instances de la calculatrice en tâche de fond

  8. Utiliser la commande top pour n’afficher les informations que sur les 2 instances de la calculatrice

  9. Quitter top

  10. Se renseigner sur les commandes kill -s stop <pid>, fg, bg et jobs puis les utiliser pour :

    1. suspendre l’exécution (→ kill -s stop <pid> depuis un autre shell)

    2. reprendre l’exécution en arrière plan (→ bg …​)

    3. reprendre l’exécution en 1er plan (→ fg …​)

    d’une commande Linux qui ne rend pas la main automatiquement comme la commande ping.

🞄  🞄  🞄