Exercices sur la programmation des scripts Unix

1- TP unix - les droits d'accès aux fichiers commande - chmod - unmask

Commande chmod

  • Tapez ls -l dans le dossier Scripts-Unix/TD1. Observez les droits des fichiers et des dossiers. Ils sont classés dans l'ordre {utilisateur, groupe, autres}, r étant le droit de lecture, w le droit d'écriture et x celui d'exécution.
  • créez un fichier nomme test_2.txt à l'aide de la commande "touch test_2.txt"
  • Tapez chmod -r test_2.txt; ls -l test_2.txt; more test_2.txt. Restaurez l'ancien état avec chmod +r test_2.txt.
  • Tapez chmod -w test_2.txt; ls -l test_2.txt. Essayez de modifier le fichier via l'éditeur de texte. Restaurez l'ancien état par chmod +w test_2.txt.
  • Dupliquez le fichier test_2.txt, supprimez les droits d'écriture et supprimez le fichier avec la commande rm. Expliqez pourquoi les droits d'écriture n'empêchent pas la suppression.
  • Tapez chmod -w .; ls -l. Essayez de créez un nouveau fichier dans le dossier Test. Essayez de créez un nouveau fichier dans le dossier Nouveau_Tst. Restaurez l'ancien état par chmod +w .
  • ràf: Tapez chmod -x Nouveau_Tst; cd Nouveau_Tst.
  • Tapez less Nouveau_Tst/test_2.txt. Restaurez l'ancien état par chmod +x Nouveau_Tst.
  • Comment sont gérés les droits sur les liens physiques ?
  • Créez à votre racine un dossier incoming où n'importe quel membre de votre groupe puisse y déposer des fichiers mais sans pouvoir lire le contenu ni du dossier ni des fichiers déposés. Vous devez disposer de tous les droits sur ce dossier et les utilisateurs qui ne font pas partie de votre groupe ne doivent disposer d'aucun droit.

Commande umask

  • La commande umask contrôle les droits par défaut des fichiers crées. Sa syntaxe est umask 0ooo avec 0ooo un nombre octal commençant par un 0 et comprenant les droits ugo avec read=4, write=2, execute=1.
  • Tapez umask pour voir votre masque courant.
  • Tapez umask 124; mkdir T; ls -l.
  • Créez et sauvegardez un nouveau fichier texte avec un éditeur de texte lancé depuis le shell. Observez ses droits.
  • Créez et sauvegardez un nouveau fichier texte mais avec un éditeur de texte lancé depuis un autre shell. Que dire du umask dans ce cas ?
  • on souhaite que les fichiers créés aient par défaut comme droits: RXWR-----. Quelle valeur de umask doit-on prendre ?
  • Restaurez votre ancien masque (probablement par umask 022).

2- Exercice linux - Simulation de l’algorithme de Bar-Ilan et Zernick -

Le but de l’algorithme de Bar-Ilan et Zernick est de construire un arbre couvrant aléatoire d’un graphe de manière totalement décentralisée. Cet algorithme est basé sur la circulation aléatoire d’un jeton dans le graphe: le nœud qui crée le jeton est la racine de l’arbre couvrant. Lorsqu’un nœud du graphe reçoit le jeton pour la première fois, il marque l’émetteur du jeton comme étant son père dans l’arbre couvrant. L’algorithme se termine lorsque tous les nœuds du graphe ont été visités.

Chaque nœud possède une variable “visite” qui est initialisée à “faux” et une variable “pere” qui indique l’identité du nœud du père. À la réception du jeton J, l’algorithme suivant est exécuté:

algorithme 1 Réception d’un jeton J sur un site i provenant du nœud j

1
2
3
4
Si visite = faux alors
visite - vrai
pere - j
Fin Si

 

Envoyer J à k choisi uniformément au hasard parmi les voisins de i

1) Combien de types de nœud sont-ils nécessaires? Et de messages? Créez un simulateur “barilan” et configurez le “makefile”.

2) L’émetteur d’un message “MsgEvent *msg” peut être récupéré à l’aide de la méthode “getEmitter()”. Quelles sont les données nécessaires dans le jeton?

3) D’après l’algorithme de Bar-Ilan et Zernick, quelles sont les données nécessaires sur chaque nœud? Modifiez la (ou les) classes du (ou des) nœud(s).

Écrivez la méthode “MessageReception”.

4) Où créer le premier message? Modifiez le simulateur et exécutez-le.

5) À la fin de l’exécution, affichez l’arbre couvrant du réseau (indication: vous pouvez utiliser la structure “GraphTree”).

6) Afin de réaliser des statistiques sur le temps nécessaire à la couverture complète du réseau, faites apparaître dans le fichier de statistiques (fichier .sta) le temps nécessaire pour couvrir 25%, 50%, 75% et 100% du réseau.

3- TP Unix - Processus jobs - Entrée et sortie standard

Exercice 1 : 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, ce qui est affiché sur la console ; STDERR, la sortie d'erreur, qui 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.

La commande cat utilisées sans argument à pour comportement de recopier sur STDOUT ce qu'elle dans STDIN.

  1. Utilisez cat pour créer un fichier f1 contenant cinq ou six lignes de votre choix.
  2. Utilisez cat pour créer un fichier f3 contenant /etc/passwd, f1, puis encore /etc/passwd. Essayer de le faire en une seule commande.
  3. Créez un fichier contenant la liste de tous les fichiers se trouvant sous votre répertoire principal.
  4. Ajoutez au fichier précédent la sortie de la commande env.

Il existe un fichier spécial /dev/null agissant comme un puit sans fond pour les données vers lequel on redirige tout ce dont on veut se débarrasser.

  1. Exécutez cat /etc/passwd /etc/toto.
  2. Comment faire pour que cela n'affiche rien ?

Exercice 2 : Processus, jobs

On a vu jusqu'à présent des commandes s'exécutant rapidement. Certaines peuvent prendre du temps pour effectuer leurs tâches, et pour d'autres, on peut désirer qu'elles restent actives pendant toute la session.

  1. Lancez un autre terminal avec la commande xterm.
  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 ? Le signe & permet de lancer une commande en tâche de fond.
  4. Dans la fenêtre bloquée pressez [Ctrl Z], puis exécutez la commande bg. Que se passe-t-il ?
  5. Que se passe-t-il dans l'autre fenêtre si l'on n'a pas tapé bg.
  6. Visualisez l'ensemble des processus tournant sur la machine avec ps -Af. Puis en utilisant grep, vous pouvez sélectionnez les vôtres.
  7. En utilisant la fonction kill pidpid est le numéro du processus que vous voulez tuer (deuxième colonne dans ps -Af), supprimez tous vos xterms sauf un.

4- Exercices sur la commande grep

Exercice 1

Créer un répertoire essai-grep dans votre home directory. Dans ce répertoire créer les fichiers suivants:

tomate poire pomme cerise Fraise fraise courgette POMME3 afraise

Editez les fichiers (sortie de la commande ls redirigée vers grep) avec les critères sur leur nom suivant:

Critère 1 Le nom doit être Fraise ou fraise
Critère 2 se est en fin de nom
Critère 3 ai est présent dans le nom
Critère 4 Nom contenant un chiffre numérique
Critère 5 Nom contenant la chaîne mm ou MM

Exercice 2

Copiez le fichier /etc/passwd dans votre home directory. Editez la ligne commençant par votre nom de login.

Exercice 3

Dans le fichier passwd qui est dans votre home directory, éditez les lignes commençant par des noms de login ne contenant pas de chiffre.

Exercice 4

Editez les lignes du fichier passwd commençant par des noms de login de 3 ou 4 caractères. 


Correction : Exercices sur la commande grep

Exercice 1 

mkdir ~/essai-grep
cd ~/essai-grep
touch tomate poire pomme cerise Fraise fraise courgette POMME3 afraise
Critère 1 ls | grep "^[fF]raise$"
Critère 2 ls | grep "se$"
Critère 3 ls | grep "ai"
Critère 4 ls | grep "[0-9]"
Critère 5 ls | grep "[mM]\{2\}"

Nota:

Pour rediriger le résultat vers un fichier, vous pouvez faire, par exemple pour le critère 1:

grep "^[fF]raise$" mon-fichier

Exercice 2

cd
cp /etc/passwd ~
cat passwd | grep "^monnom"

avec login le nom de votre login ( 8 lettres)

 

Exercice 3

cat passwd | grep "^[^0-9][^0-9]*:"

ou

cat passwd | grep "^[a-z][a-z]*:"

Exercice 4

cat passwd | grep "^.\{3,4\}:"

5- Exercice commandes - processus - utilisateurs - fichiers - réseaux

Indiquer quelles sont les commande "ligne de commande" permettant de réaliser les opérations suivantes dans les environnement unix et windows NT:

  • Affichage de la liste des fichiers et/ou répertoires d'un répertoire.
  • Copie d'un fichier
  • Copie d'un répertoire.
  • Déplacement d'un fichier.
  • Effacement d'un répertoire.
  • Changement du nom d'un fichier.
  • Changement du nom d'un répertoire.
  • Effacement d'un fichier.
  • Effacement d'un répertoire.
  • Création d'un répertoire.
  • Affichage du répertoire implicite.
  • Changement du répertoire implicite.
  • Création d'un lien.
  • Affichage complet du contenu d'un fichier.
  • Affichage progressif du contenu d'un fichier.
  • Tri par ordre alphabétique des lignes d'un fichier texte.
  • Comparaison de deux fichiers.
  • Recherche d'une chaine de caratères dans un ou plusieurs fichiers.
  • Création d'un groupe d'utilisateurs.
  • Suppression d'un groupe d'utilisateurs.
  • Modification des caractéristiques d'un groupe d'utilisateurs.
  • Création d'un utilisateur.
  • Suppression d'un utilisateur.
  • Modification des caractéristiques d'un utilisateur.
  • Modification du mot de passe d'un utilisateur.
  • Modification des autorisations sur un fichier ou un répertoire.
  • Modification du propriétaire d'un fichier ou un répertoire.
  • Copie de fichiers ou de répertoires avec préservation des autorisations.
  • Copie de fichiers ou de répertoires avec préservation des propriétaires.
  • Copie de fichiers ou de répertoires avec préservation des informations d'audit.
  • Montage d'un répertoire réseau.
  • Création d'un partage réseau.
  • Vérification d'un système de fichiers.
  • Lancement de l'utilitaire de defragmentation.
  • Lancement de l'utilitaire de gestion des partition.
  • Lancement de l'utilitaire de création de systèmes de fichier.
  • Création d'une variable d'environnement.
  • Affichage de la date du système.
  • Affichage de l'heure du système.
  • Affichage de l'état instantané de la liste des processus en cours de fonctionnement.
  • Lancement d'un programme en tant que super-user.
  • Terminaison forcée d'un processus.
  • Lancement de commandes à l'heure indiquée.
  • Planification de commandes répétitives.
  • Arrêt du système.
  • Affichage de la configuration des interfaces réseau sous TCP/IP présentes dans la machine.
  • Interrogation d'un éventuel serveur DNS configuré sous TCP/IP.
  • Lancement d'un client ftp en ligne de commande.

 

6- Exercices scripts unix - redirection - enchaînements de commandes - filtres classiques

Exercice 1 : redirections

  1. sauvegardez la liste des fichiers présents dans /etc dans un dossier nommé /tmp/liste.txt
  2. ajoutez y la liste des fichiers présents dans /usr/bin et dans /var/log
  3. sauvez dans un fichier la liste des noms et espaces disques occupé du contenu de /var : une ligne par fichier contenu dans /var
  4. faites de même mais sauvez aussi dans /tmp/erreurs la liste des erreurs générée par votre commande

Exercice 2 : enchaîments de commandes, filtres

  1. que fait la commande suivante : "ls |wc -l"
  2. combien y a-t-il de comptes d'étudiants de l3 ? (ypcat passwd permet d'obtenir la liste totale des comptes utilisateurs du domaine)
  3. que fait la commande suivante: df -k . | tail -1|tr -s ' ' |cut -d ' ' -f 4
  4. liste des fichiers triès par taille: affichez la liste des fichiers d'un dossier triés par taille. L'affichage doit comprendre la taille du fichier puis son nom (regardez "ls -s")
  5. utilisateurs connectés: Écrire une commande qui liste les login des utilisateurs connectés sur la machine au moment où on lance la commande (regardez la commande who).

Exercice 3 : filtres usuels

Dans cet exercice, vous aurez à utiliser les filtres usuels (sort, uniq, tail, head, tr, grep, ràf) et, parfois à les enchaîner pour obtenir le résultat voulu. N'hésitez pas à consulter la page de manuel de ces outils pour y préciser/découvrir des options utiles.

  1. on travaille sur le fichier adresses.txt. Les lignes de ce fichier ont la structure suivantes: "Nom:Prénom:No tel:code postal:ville". Les champs sont séparés par le caractère ":".Affichez en une version triée dans l'ordre croissant des noms.
  2. affichez les 3 premières lignes du fichier
  3. affichez les 4 dernières lignes du fichier
  4. affichez les lignes 2 à 5 du fichier
  5. affichez en une version triée par prénoms croissants
  6. affichez en une version triée par nom et prénom croissants (en cas d'égalité du nom, les lignes sont par prénoms croissants) en enchaînant deux commandes sort.
  7. affichez la liste des noms triée par noms croissants
  8. affichez la liste des noms, prénom et code postaux triée par code postaux
  9. affichez la liste des noms sans doublons (si un nom apparaît deux fois, on ne veut le voir qu'une seule fois)
  10. affichez les noms qui apparaissent plusieurs fois dans la liste
  11. affichez la liste des noms sans doublons et indiquez devant chaque nom le nombre de fois il apparaît
  12. affichez la liste des noms et prénoms triés par nom et prénoms croissants
  13. affichez la liste des noms après les avoir passés en majuscule
  14. affichez la liste des noms et prénoms des personnes habitant Evry.
  15. affichez, par la même méthode, la liste des gens qui habitent Dreux