Exercices d'introduction à Unix - Commandes de base


Avant-propos

Ces exercices (http://dgrwww.epfl.ch/SIDGR/guide_unix/exercices_unix.html) sont basés sur la matière traitée dans l'aide-mémoire "Unix - Tour d'horizon rapide" (http://dgrwww.epfl.ch/SIDGR/guide_unix/introd_unixR.html).

Sur station de travail (environnement de travail graphique multi-fenêtres), la plupart des manipulations ci-dessous peuvent être réalisées de plusieurs manières différentes, notamment depuis le "shell" par des commandes Unix (c'est-à-dire dans une fenêtre d'émulation terminal) ou à l'aide des divers outils CDE (dotés d'une interface-utilisateur graphique conviviale dans le style Macintosh ou Windows) notamment le gestionnaire de fichiers (dtfile)... Ces exercices Unix n'abordent que l'aspect commandes.

Commencez donc par ouvrir une fenêtre d'émulation terminal. Il y a plusieurs façons de procéder :


1. Déplacements dans une arborescence de répertoires et listage du contenu

1

  • Quel est votre répertoire courant ?
  • Placez-vous dans votre répertoire principal (si ce n'est pas déjà le cas)
  • Affichez le contenu de votre répertoire principal
  • Indication du répertoire courant : pwd
  • Aller dans son répertoire principal : cd
  • Affichage court : ls
  • Affichage long : ls -al (y compris fichiers/dossiers "invisibles", c-à-d. dont le nom commence par ".")
  • 2

  • Affichage récursif du contenu d'une arborescence : expérimentez-le p.ex. pour les arborescences .dt (tous les fichiers de paramètres de CDE, ne pas y toucher !) et wabi (fichiers propres à l'émulation Wabi, ne pas y toucher non plus !)
  • Affichage long en contrôlant le défilement à l'écran avec la commande more
  • Reprendre cette dernière commande mais en envoyant le résultat sur un fichier (donnez-lui le nom toto) plutôt que sur l'écran
  • Affichage récursif : ls -R .dt
    respectivement : ls -R wabi
  • ls -lR .dt | more
  • ls -lR .dt > toto
  • 3

  • Examinez le contenu du premier niveau de l'arborescence Unix
  • Commande : ls /
    ou : cd / puis ls
  • 4

  • Examinez le contenu du répertoire principal de votre voisin
  • cd /USERS/username
    puis : ls
  • 5

  • Utilisation de l'aide en ligne : consultez le manuel en ligne pour voir les différentes options de la commande ls
  • man ls
  • Les étudiants de toutes les volées ENAC-SSIE sont dans le même "groupe" d'utilisateurs Unix. Les "protections" par défaut des répertoires et fichiers vous permettent d'examiner le contenu des répertoires de vos camarades et lire ou copier leurs fichiers, mais pas d'écrire des fichiers dans d'autres répertoires que les vôtres. Pour modifier ces protections par défaut, utilisez la commande chmod.


    2. Création et manipulation de répertoires

    1

  • Replacez-vous dans votre répertoire principal et créez un sous-répertoire d'exercice de nom ex_unix
  • cd
    puis : mkdir ex_unix
  • 2

  • Descendez dans ce répertoire et créez-y deux sous-répertoires dir1 et dir2
  • cd ex_unix
    puis : mkdir dir1 dir2
  • 3

  • Déplacez dans le répertoire dir2 le fichier toto créé précédemment
  • Vérifiez qu'il se trouve au bon endroit
  • depuis ex_unix : mv ../toto dir2
    ou, depuis répertoire principal : mv toto ex_unix/dir2
    ou, depuis répertoire dir2 : mv ../../toto .
  • ls ~/ex_unix/dir2
  • 4

    Détruisez le répertoire dir2. Opération qui se fait en deux étapes (à moins d'utiliser la commande rm -r) :
  • destruction des fichiers se trouvant dans le répertoire
  • destruction du répertoire proprement dit
  • cd ~/ex_unix/dir2
    puis : rm *
  • cd ..
    puis : rmdir dir2

  • 3. Manipulation et visualisation de fichiers

    1

    Génération de divers fichiers d'exercice :
  • placez-vous dans votre sous-répertoire ex_unix
  • créez 4 fichiers-texte par redirection sur fichiers de l'aide en-ligne relative aux commandes ls, cd, mkdir et rmdir
  • cd ~/ex_unix
  • man ls > 1.txt
    man cd > 2.txt
    man mkdir > 3.txt
    man rmdir > 4.txt
  • ls
  • 2

  • Expérimentez les différentes commandes de visualisation de fichiers-texte que sont : cat, more, head et tail
  • cat 1.txt
  • more 1.txt
    puis utiliser <cr> pour avancer d'une ligne, <espace> pour avancer d'une page, <q> pour sortir
  • head -5 *.txt (affiche les 5 premières lignes de tous les fichiers de nom *.txt)
  • tail -5 1.txt (affiche les 5 dernières lignes...)
  • 3

  • Concaténez tous vos fichiers texte sur un seul fichier de nom visu.txt
  • Vérifiez le résultat en affichant le fichier ainsi créé
  • cat 1.txt 2.txt 3.txt 4.txt > visu.txt
  • more visu.txt
  • 4

  • Déplacez dans le sous-répertoire dir1 tous les fichiers créés à l'exception du fichier visu.txt
  • et contrôlez
  • mv ?.txt dir1
  • ls (il ne reste plus que visu.txt dans ex_unix)
  • ls dir1 (les fichiers 1.txr, 2.txt, 3.txt, 4.txt sont bien dans dir1)
  • 5

  • Dans le répertoire dir1, recherchez quels sont les fichiers qui contiennent la chaîne de caractère rmdir
  • cd dir1
    puis : grep 'rmdir' *.txt
  • 6

  • Affichez la place-disque occupée par vos fichiers en utilisant les commandes ls et du
  • ls -l (affichage de la taille en Bytes)
  • du -ak (affichage de la taille en KB)
  • 7

  • Affichez l'espace-disque occupé par tous vos répertoires
  • La même chose, mais en triant les répertoires selon leur taille dans l'ordre inverse (les plus gros répertoires d'abord, les plus petits finalement)
  • La place totale occupée correspond-elle à ce qu'indique la commande quota ?
  • du -k ~
  • du -k ~ | sort -nr
  • quota -v
  • 8

  • Faites une copie du fichier visu.txt sous le nom vis2.txt
  • Compressez le fichier vis2.txt et voyez quel est le gain de place
  • Décompressez le fichier vis2.txt et vérifiez qu'il est bien identique à visu.txt
  • cp visu.txt vis2.txt
  • compress vis2.txt
    puis : ls -l vis* (comparez la place occupée par visu.txt , respectivement vis2.txt.Z)
  • uncompress vis2.txt.Z
    puis : diff visu.txt vis2.txt
  • 9

  • Comment retrouver, dans votre arborescence, dans quel sous-répertoire se cache un fichier de nom donné (p.ex. visu.txt) ?
  • du -ak ~ | grep visu.txt
    ou (mais cela n'a pas été vu dans le cours) :
  • find ~ -name "visu.txt" -print

  • 4. Processus et jobs

    1

  • Affichez la liste de tous les processus qui vous appartiennent
  • ps -ef | grep votre_username
  • 2

  • Ouvrez une fenêtre horloge avec la commande xclock -update 2 (vous constatez que l'horloge tourne mais que le shell est suspendu)
  • puis suspendez-la (vous constatez que le processus horloge ne tourne plus, mais que le shell est revenu en avant-plan)
  • voyez l'état de ce processus avec la commande jobs
  • relancez-le en arrière-plan (les aiguilles tournent à nouveau)
  • et vérifiez avec la commande jobs
  • puis tuez-le
  • xclock -update 2
  • <ctrl-Z>
  • jobs
  • bg
  • jobs
  • kill -9 %1
  • 3

  • Relancez cette horloge, mais cette fois-ci directement en arrière-plan (c'est-à-dire de façon détachée du shell)
  • Comment tuer ce processus horloge depuis une autre fenêtre terminal (c'est-à-dire depuis un autre shell, où la commande jobs ne voit pas le processus en question ?)
  • xclock -update 2
  • puis, dans nouvelle fenêtre terminal :
    ps -ef | grep xclock (relever processID)
    kill -9 processID

  • 5. Alias

    1

  • Définissez un alias dir qui réalise la même chose que la commande ls -alF
  • et vérifiez que cet alias fonctionne
  • alias dir 'ls -alF'
  • dir
  • 2

  • Faites un alias qui affiche avec more la taille occupée par tous vos répertoires (voir ex. plus haut)
  • et testez cet alias
  • alias size 'du -k $HOME | sort -nr | more'
  • size
  • 3

  • Faites un alias qui affiche la liste de tous les processus qui vous appartiennent (voir ex. plus haut)
  • et testez cet alias
  • alias psme 'ps -ef | grep $USER | grep -v grep'
  • psme
  • 4

  • Définissez l'alias dir au niveau de votre fichier prologue-utilisateur ~/.cshrc
  • et vérifiez, en ouvrant p.ex. une nouvelle fenêtre terminal, que cet alias est désormais accessible de façon générale
  • si vous n'avez pas encore de fichier .cshrc dans votre répertoire principal, créez-le
  • introduisez dans ce fichier .cshrc , avec l'éditeur de votre choix, les 2 lignes suivantes suivie d'une ligne vide :
    echo "Exécution prologue utilisateur..."
    alias dir 'ls -alF'
  • ouvrez une nouvelle fenêtre terminal, et vérifiez que votre alias dir est bien utilisable

  • 6. Shell-scripts

    Pour pouvoir exécuter vos scripts, n'oubliez pas de leur mettre le mode eXecute avec la commande : chmod u+x fichier

    1

  • Réalisez un shell-script qui demande interactivement le nom d'un fichier-source Pascal, vérifie que ce fichier existe, puis le compile
  • #!/bin/sh
    while [ ! -r $source -o -z source ]
    do
     # le fichier en question n'existe pas ou n'est pas lisible
     # ou la variable "source" n'est pas définie
     echo "Fichier Pascal à compiler ? \c"
     read source
    done
    executable=`basename $source .p`
    pc $source -o $executable.exe

    2

  • Réalisez un shell-script qui, en fonction de l'heure courante (retournée par commande date) affiche "Bonjour" entre 0h et 12h, "Bon après-midi" de 12h à 17h, et "Bonne soirée" de 17h à 24h
  • #!/bin/sh
    heure=`date | awk '{print $4}' | awk -F: '{print $1}'`
    if [ $heure -lt 12 ]
    then
     echo "Bonjour !"
    elif [ $heure -lt 17 ]
    then
     echo "Bon après-midi !"
    else
     echo "Bonsoir !"
    fi

    3

  • Réalisez un shell-script qui convertit la date courante en format anglais (retournée par la commande date) en une date en format français du type "jeudi 10 novembre 1994 14:04:45". Indication : utiliser la structure de contrôle case-esac
  • #!/bin/sh
    set `date`
    # décompose date en champs $1 $2 ...
    case $1 in
     Mon) j=lundi ;;
     Tue) j=mardi ;;
     Wed) j=mercredi ;;
     Thu) j=jeudi ;;
     Fri) j=vendredi ;;
     Sat) j=samedi ;;
     Sun) j=dimanche ;;
    esac
    case $2 in
     Jan) m=janvier ;;
     Feb) m=février ;;
     Mar) m=mars ;;
     Apr) m=avril ;;
     May) m=mai ;;
     Jun) m=juin ;;
     Jul) m=juillet ;;
     Aug) m=août ;;
     Sep) m=septembre ;;
     Oct) m=octobre ;;
     Nov) m=novembre ;;
     Dec) m=décembre ;;
    esac
    echo $j $3 $m $6 $4


    J.-D. Bonjour / ENAC-IT / 3.3.97