Spaceuit Logo Spaceuit Plateforme Éducative

Informatique Appliquée

Fillière Intelligence Artificielle

Hiver 2025

Ali El Hourch
[email protected]


Guide
Nouveau
Assistant AI
Visual Studio Code Google Classroom Whatsapp Whatsapp Discord Discord
Module 1: Probabilités Et Statistiques Module 2: Architecture Des Ordinateurs Module 3: Structure De Données En C Module 4: Système d'exploitation 1 Module 5: Programmation Web 1 Module 6: Langues Etrangéres Module 7: Compétences Culturelles & Artistiques

Semestres

Hiver 2025

Tronc Communs

Informatique Appliquée

Examen système d'exploitation 1 2020 SMI (S3) Normale


Examen PDF


Exercice 1: Commandes de base Unix


  • Nous supposons que votre répertoire de travail (˜) contient l'arborescence suivante : (les noms commençant par rep désignent des répertoires et ceux qui commencent par fich désignent des fichiers) :
  •                     |---rep1
                            |---fich11
                            |---fich12
                            |---rep2
                            |   |---fich21
                            |   |---fich22
                            |---rep3
                            |   |---fich31
                            |   |---fich32
    
  1. Créez, en utilisant que des chemins relatifs (dites pourquoi quand ce n'est pas possible) :
    1. Les deux répertoires rep4 et rep5 du même niveau que rep2 et rep3 dans rep1.
    2. Dans le répertoire rep1 les fichiers suivants fich1,fich2,fich11,fich12,fich1a,ficha1,fich33,.fich1,.fich2,toto,afich.
    Correction
      mkdir ./rep1/rep4 ./rep1/rep5
      touch ./rep1/fich1 ./rep1/fich2 ./rep1/fich1a ./rep1/ficha1 ./rep1/fich33 ./rep1/.fich1 ./rep1/.fich2 ./rep1/toto ./rep1/afich
      
    • touch fich11 fich12 ne sert à rien étant donné que fich11 et fich12 sont déjà présents dans rep1.
  2. Vérifiez l'arborescence en listant même les fichiers commençant par un point.
  3. Correction
      ls -a
      
  4. Déplacez-vous dans rep1
  5. Correction
      cd rep1
      
  6. Copiez le contenu du fichier /etc/passwd dans le fichier fich11 du répertoire rep1. Calculer le nombre de ligne et de mo fichier fich11.
  7. Correction
      # 2 méthodes pour copier le contenu de /etc/passwd dans fich11
      cp /etc/passwd fich11
      # Ou
      cat /etc/passwd >fich11
      
      # Calculer le nombre de ligne
      wc -l fich11
      
      # Calculer le nombre de mot
      wc -w fich11
      
  8. Listez les fichiers de rep1 :
    1. dont les noms commencent par fich ,
    2. dont les noms commencent par fich suivi d'un seul caractère,
    3. dont les noms commencent par fich suivi d'un chiffre,
    4. dont les noms commencent par . ,
    5. dont les noms ne commencent pas par f,
    6. dont les noms contiennent fich.
    Correction
      # commencent par fich
      ls fich*
      
      # commencent par fich suivi d'un seul caractère
      ls fich?
      
      # commencent par fich suivi d'un chiffre
      ls fich[0-9]
      
      # commencent par .
      ls .*
      
      # ne commencent pas par f
      ls [!f]*
      
      # contiennent fich
      ls *fich*
      
  9. Comment déplacer toute l'arborescence rep3 sous le répertoire rep2 ? Supprimez tout sauf rep1, fich11 et fich12.
  10. Correction
      mv rep3 rep2
      rm -rf rep2
      rmdir rep4 rep5
      
  11. Nous supposons que le propriétaire de rep1 à juste l'accès en écriture, le groupe et les autres n'ont aucun accès.
    1. Modifiez ces droits (avec deux méthodes) pour que tout le monde ait les accès en lecture, le propriétaire peut exécuter aussi, le groupe et les autres n'ont aucun autre accès que la lecture.
    2. Correction
        cd ..
        
        # Méthode 1
        chmod u=r-x,g=r--,o=r-- rep1
        
        # Méthode 2
        chmod 544 rep1
        
    3. Donnez la signification de ces nouveaux droits pour le propriétaire sur rep1.
    4. Correction
      • Le propriétaire dispose de permissions r-x sans w (écriture). Sur un répertoire, céla signifie que r: le propriétaire peut lister le contenu du fichier rep1, pas de w signifie que le propriétaire ne peut pas créer de nouveaux fichiers ou sous-répertoires ni en supprimer dans rep1. Et le permission x signifie que le propriétaire peut accéder rep1 (cd rep1) et le parcourir.

Exercice 2: Shell Unix


  1. Écrivez un script permettant de compter le nombre de fichiers et la taille totale occupée pour chaque type de fichier (répertoire, fichier ordinaire, fichier en mode bloc, ficher en mode caractère) présent dans le répertoire courant. Les autres types de fichiers sont regroupés dans la catégorie "misc.".
    Exemple :
  2. > ./info_size.sh
    Misc. : 13 fichiers, 1192201 octets
    fichiers en caractères : 8 fichiers, 1039377 octets
    fichiers en mode bloc : 7 fichiers, 5238 octets
    fichiers ordinaires : 5 fichiers, 2908 octets
    répertoires : 1 fichier, 110065 octets
    
    Total : 34 fichiers, 2349789 octets
                        
    Correction
      #!/bin/bash
      
      # Compter le nombre de fichiers et leur taille dans la catégorie "Misc."
      MISC_COUNT=$(find . \( -type s -o -type l -o -type p \) | wc -l)
      MISC_TAILLE=$(find . \( -type s -o -type l -o -type p \) \
          -exec du -cb {} + | tail -1 | awk '{print $1}')
      
      # Compter les fichiers en mode caractère
      CHAR_COUNT=$(find . -type c | wc -l)
      CHAR_TAILLE=$(find . -type c -exec du -cb {} + | tail -1 | awk '{print $1}')
      
      # Compter les fichiers en mode bloc
      BLOC_COUNT=$(find . -type b | wc -l)
      BLOC_TAILLE=$(find . -type b -exec du -cb {} + | tail -1 | awk '{print $1}')
      
      # Compter les fichiers ordinaires
      ORD_COUNT=$(find . -type f | wc -l)
      ORD_TAILLE=$(find . -type f -exec du -cb {} + | tail -1 | awk '{print $1}')
      
      # Compter les répertoires
      REP_COUNT=$(find . -type d | wc -l)
      REP_TAILLE=$(find . -type d -exec du -cb {} + | tail -1 | awk '{print $1}')
      
      # Afficher les résultats
      echo "Misc. : $MISC_COUNT fichiers, ${MISC_TAILLE:-0} octets"
      echo "fichiers en caractères : $CHAR_COUNT fichiers, ${CHAR_TAILLE:-0} octets"
      echo "fichiers en mode bloc : $BLOC_COUNT fichiers, ${BLOC_TAILLE:-0} octets"
      echo "fichiers ordinaires : $ORD_COUNT fichiers, ${ORD_TAILLE:-0} octets"
      echo "répertoires : $REP_COUNT fichiers, ${REP_TAILLE:-0} octets"
      echo ""
      
      # Afficher le total
      echo "Total : $(( MISC_COUNT + CHAR_COUNT + BLOC_COUNT + ORD_COUNT + REP_COUNT )) fichiers, \
      $(( MISC_TAILLE + CHAR_TAILLE + BLOC_TAILLE + ORD_TAILLE + REP_TAILLE )) octets"
      
  3. Ecrire un script shell qui permet de calculer la factorielle d'un nombre donné en paramétre.
  4. Correction
      #!/bin/bash
      
      # Vérifier si un seul argument est fourni
      if [ $# -ne 1 ]
      then
          echo "ERREUR! Ce script doit être invoqué avec un seul argument"
          echo "Usage : ./factorielle [entier]"
          exit 1
      else
          if [ $1 -eq 0 ]
          then
              echo 1
          else
              echo $(( $1 * $( $0 $(( $1 - 1 )) ) ))
          fi
      fi
      
  5. Ecrire un script shell nommé calculatrice qui prend trois arguments: l'opérande opérateur1 opérateur 2. Le shell doit calculer le résultat selon l'opérande (+, -, *, /) sur les deux opérateurs et l'affiche sur l'écran.
  6. Correction
      #!/bin/bash
      
      # Vérifier si exactement 3 arguments sont fournis
      if [ $# -ne 3 ]
      then
          echo "ERREUR! La commande doit être invoquée par 3 arguments!"
          echo "USAGE: ./calculatrice.sh [OPERATEUR] [OPERANDE 1] [OPERANDE 2]"
          exit 1
      else
          echo $(( $2 $1 $3 ))
      fi