INF1013L LIFASR1 : UNIX

Déroulement de cette UE pas comme les autres...

Attention, elle représente environ 90 heures de travail de votre part, donc n'attendez pas le dernier moment pour commencer.

Prérequis

Pour pouvoir aborder cette UE en toute sérénité, il est nécessaire d'avoir quelques compétences préalables.

Cours

Il y a une unique séance de cours présentant l'organisation de l'UE, faisant une démonstration des différents outils, donnant des conseils pour l'apprentissage et vous indiquant comment ne pas perdre trop de temps.

Le support de cours est uniquement pour vous aider à réviser. Pour préparer l'UE il suffit de faire les TP MUNIX.

Le support de cours HTML contenant la concaténation des cours des différents modules «MUNIX». Avant d'imprimer (ce qui est une mauvaise idée), vérifiez sur l'aperçu d'impression que les textes et images ne sont pas tronqués.

Vous avez aussi un guide des caractères spéciaux.

TP 2024-2025

La présence aux séances de TP n'est pas obligatoire. Vous n'avez pas besoin de dispense d'assiduité. Les TP sont tous les jours de 13h à 14h.

MUNIX est une application en ligne vous permettra d'apprendre et vous entraîner tout au long du semestre (la note de l'UE ne tient pas compte du travail fait dans MUNIX), elle restera à votre disposition dans la suite de votre scolarité de licence en master. Cliquez sur le premier module pour démarrer :
Semaine Objectif «MUNIX»
1 Commencer ou continuer le Module 1
★★★★★
2 Obtenir 1 étoile au Module 1
★★★★
3 Obtenir 3 étoiles au Module 1
★★★★★
4 Commencer le Module 2
★★★★★
5 Obtenir 1 étoile au Module 2
★★★★
6 Obtenir 3 étoiles au Module 2
★★★★★
7 Relire le cours du Module 1
puis essayez d'obtenir 4 étoiles. Il faut cliquer sur «Autre question» puis «Autre version» afin de compléter le bord du disque.
★★★★
Vacances Automne
8 Obtenir 1 étoiles au Module 3
★★★★
9 Obtenir 3 étoiles au Module 3
★★★★★
10 Relire le cours du Module 2
puis essayez d'obtenir 4 étoiles.
★★★★
11 Obtenir 3 étoiles au Module 4
★★★★★
12 Relire le cours du Module 3
puis essayez d'obtenir 4 étoiles.
★★★★
13 Relire le cours du Module 4
★★★★
puis essayez d'obtenir 4 étoiles.
14 Relire le cours complet, le guide des caractères spéciaux,
s'entraîner sur les anciens sujets d'examens.
Vacances

Examen terminal papier portant sur le contenu de MUNIX début janvier.

La session 2 est fin juin/début juillet.

MUNIX

MUNIX contient le cours et les TP. Votre objectif est d'obtenir 4 étoiles à chaque module afin d'avoir une chance d'obtenir la moyenne à l'examen terminal. Chaque module utilise les connaissances acquises dans les modules précédents, il peut être nécessaire de retravailler les premiers modules si vous êtes bloqué. Toutes les informations nécessaires sont indiquées dans l'application, vous risquez de vous éloigner de la bonne réponse si vous cherchez sur le web.

Si vous êtes bloqué sur une question, expliquez votre problème dans le champ commentaire de MUNIX en bas à gauche et envoyez-le. Je recevrais alors un mail avec la question et vos différents essais, je pourrais alors facilement vous aider.

La médiane du temps de travail pour obtenir 4 étoiles est de 10 heures pour chacun des modules, attention, ¼ des étudiants mettent plus de 15 heures pour obtenir les 4 étoiles pour un seul module. Détails des statistiques.

Attention ces TP nécessitent beaucoup de concentration, et sont donc très fatiguants, il est donc recommandé de travailler régulièrement chaque jour car il ne faut pas espérer réussir à rester concentré 8 heures dans la même journée.

Votre progression est affichée dans TOMUSS chaque jour afin que votre enseignant référent puisse voir que vous travaillez régulièrement.

La note de l'UE ne tient pas du tout compte du temps passé ni du nombre d'étoiles obtenues sur MUNIX.

Notes

La notation de cette UE commence dès le lundi de la deuxième semaine de cours, avec le QCM qui vous posera des questions tous les jours jusqu'aux vacances de Noël.

Ce qui est affiché dans TOMUSS n'est pas mis à jour instantanément, il faut attendre le lendemain.

La note de l'UE est la moyenne pondérée de :
Type Poids
Contrôle continu 1/3 Un QCM avec 12 questions par jour, si vous ne répondez pas dans les temps vous avez 0 à la question. Vous répondez quand vous voulez. Toute tricherie sera punie.
Examen terminal 2/3 Examen papier portant exclusivement sur MUNIX avec une deuxième session.

Examen terminal (exclusivement sur MUNIX)

L'examen terminal sera un QCM papier à points négatifs avec environ 60 questions et de très nombreux choix, il durera 1 heure et sera sans documents. C'est une épreuve de vitesse, qui ne pourra être réussie que si vous pratiquez le shell tous les jours pour tous vos travaux sur machine.

Attention : Cela prend trop de temps de trouver la bonne réponse par élimination des mauvaises réponses car il y en a trop. Il est bien plus rapide d'imaginer la bonne réponse dans sa tête et de la chercher parmi les réponses possibles.

Pour vous entraîner :
Semestre Session Durée en minutes Nb questions Sujet Corrigé
Examen blanc 15 15 PDF PDF
2016 Printemps 1 60 49 PDF PDF
Printemps 2 60 35 PDF PDF
2017 Automne 1 60 60 PDF PDF
Printemps 1 60 50 PDF PDF
2019 Automne 1 60 49 PDF PDF
2020 Automne 1 60 49 PDF PDF
Printemps 2 60 49 PDF PDF

À la session 2 de 2020 plus de la moitié des étudiants a baissé sa note de session 1 alors que la difficulté de l'examen est la même.

Entre la dernière séance de TP et l'examen il ne sera répondu à aucune question concernant le contenu de l'UE. C'est au début de l'UE qu'il faut travailler, pas après la fin.

Voici les notes obtenues aux examens passés. Ne prenez pas peur en regardant ces chiffres car ils comptabilisent tous les étudiants. Et comme 50% des étudiants ont passé moins de 10 heures à préparer l'UE, ils se retrouvent avec 0 ou 1/20 à l'examen ce qui fait baisser la moyenne. La moyenne à l'examen terminal des étudiants travaillant entre 30 et 50 heures sur MUNIX est de 13/20.
CC Session1 Session2 %ADM %Acqc Nb étu-
-diants
Nb
mails
2016 Printemps 7.2 5.4 27% 21% 384 821
2017 Automne 7.5 8.8 28% 16% 333 905
Printemps 6.8 10.2 31% 36% 22
2018 Automne 11.3 7.0 5.3 36% 10% 251 972
Printemps 11.5 8.9 11.6 40% 15% 24
2019 Automne 9.6 8.1 3.4 239 811
Printemps 8.2 47
2020 Automne 10.2 9.0 7.0 206 1357
Printemps 6.9 6.8 7.8 113
2021 Automne 12.4 11.8 8.8 242 1357
Printemps 6.3 5.4 6.9 108
2022 Automne 9.5 9 7.7 356 1302
2023 Automne 10.6 9.3 6.6 347 1562

Statistiques année 2016-2017

Détail du temps de travail par module des TP.

Statistiques sur la session 1 de l'examen :

En rouge, les étudiants qui étaient bloqués.

Le trait vertical représente l'incertitude à 95% sur la moyenne. Quand ils se recouvrent, il n'y a aucune certitude sur les conclusions.

La note obtenue à l'examen est meilleure que le nombre d'étoiles obtenus pour les notes inférieures à 12.

A nombre d'étoiles identiques, les étudiants bloqués ont une meilleure note à l'examen.

Jusqu'à 16/20 à l'examen, la note est proportionnelle au nombre d'heures de travail.

Les étudiants bloqués ont moins travaillé en nombre d'heures que les autres pour une note équivalente.

Pour les notes d'examen entre 8 et 10, ceux qui ont été bloqués ont eu besoin de travailler 30% de moins.

Ce graphique représente le nombre de jours pendant lesquels les étudiants ont travaillé sur le questionnaire.

À part entre 10 et 14, les étudiants bloqués ont travaillé moins de jours.

Statistiques année 2023-2024

Le tableau suivant indique que ceux qui ont eu une note entre :

Vous devriez travailler 4 heures par semaine pour l'UE. Vous avez donc suffisamment de temps pour obtenir une excellente note.

Temps passé sur MUNIX
au QCMNote sur 20à l'examen terminal
2.5 heures2 … 42.7 heures
3.4 heures4 … 64.2 heures
4.8 heures6 … 87.7 heures
6.1 heures8 … 1010 heures
10.2 heures10 … 1212.8 heures
10.9 heures12 … 1411.9 heures
13.6 heures14 … 1618.7 heures
18.8 heures16 … 1820 heures
13.8 heures18 … 2031 heures

Evaluation de l'UE par les étudiants

Pour le printemps 2017 : synthèse faite par l'enseignant et les réponses détaillées.

Pour l'automne 2021 : synthèse faite par l'enseignant et les réponses détaillées.

Accéder à Unix

Tout d'abord, si vous avez un ordinateur vieux de 10 ans c'est le moment de le ressortir du placard pour installer Linux dessus. Si la machine à 2Go de RAM et a un processeur 64 bits je vous conseille Lubuntu. Si elle a moins, alors essayez «Puppy Linux» (je ne l'ai pas personnellement installé).

Petit lexique :

Voici quelques choix qui s'offrent à vous pour accéder à Unix :
Ordi en salle de TP Linux
Il faut être à la fac. Choisir Fedora au démarrage en utilisant le clavier.
Votre ordi Votre navigateur web Internet https://shell.univ-lyon1.fr/
Il faut Internet.Indiquer l'adresse web https://shell.univ-lyon1.fr/ à votre navigateur et vous pourrez vous connecter sous Unix avec les identifiants de l'université.

Attention cette machine est partagée par tous les étudiants, donc si quelqu'un crée «/tmp/toto» les autres ne pourront pas le modifier.

Votre ordi Votre OS Client SSH Internet Ordi linuxetu Linux
Il faut Internet.Installer un client SSH sur votre ordinateur. Puis :
  • Connectez-vous à linuxetu.univ-lyon1.fr avec votre login p9999999 (la première lettre est en minuscule). Si vous utilisez la commande ssh c'est :
    ssh p9999999@linuxetu.univ-lyon1.fr
  • La première fois, acceptez la clef.
  • Lisez ce qui est affiché et taper :
    ssh shell.univ-lyon1.fr
Votre ordi Linux
Tous les changements sont
perdus à chaque démarrage.
Démarrer votre ordinateur avec une clef USB contenant un Linux Live. Par exemple celui qui est dans les salles de TP : Fedora
Votre ordi Linux
Il faut de la place disque.
On risque de perdre des données.
Installer Linux sur votre ordinateur à coté de votre système habituel après avoir vérifié que le Linux Live fonctionne, notamment le wifi.
Votre ordi Windows WSL bash
Il faut une machine 64 bits.
Il n'y a pas le graphique.
Sous Windows : installez et lancez Windows Subsystem for Linux
Votre téléphone Android Linux
Il n'y a pas le graphique. Sous Android installez « termux »
Vous avez accès à plus de 1000 applications Unix pour programmer en langage C, en Python, Javascript...
Il est recommandé de connecter un vrai clavier à votre téléphone qu'il soit bluetooth ou USB avec un connecteur OTG.
Votre ordi Votre OS VirtualBox Linux
Légèrement plus lent. Lancer une machine virtuelle et installer Linux dessus. Par exemple VirtualBox. Regardez la notice explicative pour installer Fedora sur cette machine virtuelle.
Votre ordi Votre OS Votre Navigateur Web Machine virtuelle Linux
Ne permet pas de répondre
à toutes les questions.
Très très lent.
Il faut Internet
Cliquez sur JSLinux qui est une mini distribution Linux qui fonctionne dans le navigateur web.

S'acheter un ordi pour mettre Linux dessus

Vous pouvez utiliser n'importe quel ordinateur qui a moins de 20 ans. Linux fonctionnera dessus.

Voici quelques ordinateurs nus que vous pouvez acheter.
Pour travailler il faudra ajouter :

Cette liste a été faite en février 2024.

Prix CPU RAM HDMI Nbr ports USB Port Ethernet RJ45 Wifi Blue tooth Autre
Raspberry Pi 4 Model B 35€... ARM v8
4 coeurs 1.8GHz
1Go à 8Go 2 ports à 4K 2 USB2
2 USB3
1Gb/s IEEE 802.11ac 5.0 Port caméra
Orange Pi 3 Model B 30€...45€ ARM v8
4 coeurs 1.8GHz
2Go à 8Go 1 ports à 4K 3 USB2
1 USB3
1Gb/s 5.0 5.0 Port caméra

Les Banana Pi sont plus chers, mais c'est du open-hardware.

Voici une liste presque exhaustive des ordinateurs minimalistes

Fichiers de l'université

Voici quelques méthodes permettant de travailler avec les fichiers de l'université. Pour toutes ses méthodes il faut accepter le certificat lors de la première connexion et taper son mot de passe une ou plusieurs fois.

Les copier chez vous :

rsync --archive p1234567@linuxetu.univ-lyon1.fr:HOMELYON1/. HOMELYON1

Les utiliser comme s'ils étaient chez vous :

mkdir HOMELYON1 # Seulement s'il n'existe pas
sshfs p1234567@linuxetu.univ-lyon1.fr:HOMELYON1/ HOMELYON1

Récupérer un fichier perdu ou une vieille version :

Allez dans le répertoire qui vous intéresse, puis ensuite :

cd .snapshot
ls # Liste toutes les dates où il y a eu une sauvegarde de faite
cp hourly.2020-10-01_1405/toto ~/toto # Pour récupérer cette version

Dépassement de quota disque

Vous ne pouvez plus travailler car vous avez atteint la limite de votre espace de stockage. Voici comment résoudre le problème.

Exemples de script

Voici des exemples de commandes shell que j'ai utilisées.

# Le 17/12/2017
# Le répertoire courant contient des fichiers PDF de une page
# nommés 0.pdf 1.pdf ... 42.pdf ...
# Le script shell génère un unique fichier PDF nommé 'merged_tops.pdf'
# contenant le haut de chacune des pages des PDF, sans changer l'ordre.

# Les commandes utilisées viennent des paquets :
#     'libjpeg-progs', 'poppler-utils' et 'imagemagick'

I=0
while [ -f $I.pdf ]
do
        echo $I
        pdfimages $I.pdf xxx
        HEIGHT=$(pnmfile xxx-000.ppm | sed -r 's/.*by ([0-9]+).*/\1/')
        pnmcut -bottom $(expr '(' 10 '*' $HEIGHT ')' / 100) \
               xxx-000.ppm | cjpeg >$(printf 'xxxx-%04d.jpg' $I)
        I=$(expr $I + 1)
done
convert xxxx-*.jpg merged_tops.pdf
rm xxx*

Minis projets

Ces projets nécessitent que vous ayez terminé tous les modules MUNIX. Ils ne sont ni notés ni à rendre, c'est simplement pour vous donner des exemples de choses que vous êtes maintenant capable de faire en quelques lignes.

La zone de droite de la table donne la réponse, faites une sélection pour la voir.

Surveiller les changements d'un site web

Voici comment réaliser le projet en plusieurs étapes :

Commencez par faire un script qui affiche l'heure chaque fois que le contenu du fichier «toto» change.

  • Vous appellerez «toto~» l'ancien contenu du fichier.
  • Pour ne pas surcharger la machine, regardez seulement une fois par seconde s'il y a eu un changement en utilisant sleep pour attendre.
  • Pour tester si le contenu de deux fichiers est identique, utilisez la commande diff
  • Vous aurez aussi besoin de while, true, if, cp
while true
    do
     if ! diff toto toto~ >/dev/null 2>/dev/null
         then
             date
             cp toto toto~
         fi
     sleep 1
    done

Modifiez le script précédent pour conserver toutes les versions différentes du fichier toto

Pour cela il suffit d'ajouter la bonne option à la commande cp qui appellera alors les fichiers toto~.~1~ toto~.~2~ toto~.~3~ toto~.~4~ ...

while true
    do
        if ! diff toto toto~ >/dev/null 2>/dev/null
            then
                date
                cp --backup=numbered toto toto~
            fi
        sleep 1
    done

Modifiez le script précédent pour recopier dans le fichier «toto» le contenu de votre page web personnelle https://ma-page-web.mon-domaine.fr/

Pour récupérer le contenu du la page web, il suffit d'utiliser la commande wget en lui donnant les bonnes options pour qu'elle enregistre dans le fichier toto

Un message s'affichera donc chaque fois que la page web changera.

while true
    do
        wget https://www.univ-lyon1.fr/ -O toto 2>/dev/null
        if ! diff toto toto~ >/dev/null 2>/dev/null
            then
                date
                cp toto toto~
            fi
        sleep 60
    done

Si votre fournisseur d'accès Internet vous donne une URL vous permettant d'envoyer des SMS vous pouvez vous faire facilement envoyer un SMS à chaque changement de la page que vous surveillez.

Créer une page web index d'un fichier PDF

Voici comment réaliser le projet en plusieurs étapes :

Mettez vous dans un répertoire ne contenant que le fichier PDF pour lequel vous voulez créer l'index avec des vignettes.

Les vignettes seront affichées en 10 DPI (Dot Per Inch) et donc toute petites. Un écran classique est en 100 DPI et une imprimante en 300 DPI

Lancer la commande pdftoppm avec les bons paramètres afin de créer les fichiers xxx-01.png xxx-02.png xxx-02.png qui représenteront chacun une page du document PDF.

pdftoppm -png -r 10 *.pdf xxx

Générez la page web en créant un fichier index.html contenant : <img src="xxx-01.png"> <img src="xxx-02.png">

Vous faites une boucle !

Vous regardez le contenu de votre fichier en lançant :
xdg-open index.html

    for I in *.png
        do
            echo '<img src="'$I'">'
        done >index.html

On veut maintenant que quand on clique sur l'image en petit cela l'affiche en grand. Pour cela :

  • Générez les images contenues dans le PDF en 100 DPI et en les nommant grand-xxx au lieu de xxx
  • Générez la page web avec les liens de la forme : <a href="grand-xxx-01.png"><img src="xxx-01.png"></a>
pdftoppm -png -r 100 *.pdf grand-xxx
for I in xxx*.png
    do
        echo '<a href="grand-'$I'"><img src="'$I'"></a>'
    done >index.html

Jouer une playlist aléatoirement

Voici comment réaliser le projet en plusieurs étapes :

Mettez vous dans un répertoire contenant vos musiques.

Faites afficher chaque nom de fichier du répertoire courant en le précédent du contenu de la variable RANDOM du shell, sans oublier un espace après.

for I in * 
    do
        echo "$RANDOM $I"
    done

Piper le résultat de la commande précédente dans sort afin de trier en fonction du nombre affiché en début de ligne.

for I in * 
    do
        echo "$RANDOM $I"
    done | sort -n

Piper le résultat de la commande précédente dans sed afin d'enlever le nombre en début de ligne.

for I in * 
    do
        echo "$RANDOM $I"
    done | sort -n | sed 's/[0-9]* //'

Piper le résultat de la commande précédente dans une boucle while qui lance la commande cvlc (ou une autre) sur le fichier lu afin de le faire jouer.

Quand vous tapez Ctrl+C cela tue le processus cvlc et passe au morceau suivant.

for I in * 
    do
        echo "$RANDOM $I"
    done |
    sort -n |
    sed 's/[0-9]* //' |
    while read A ; do cvlc "$A" ; done

Pomper les images d'une page web et afficher leur copyright

Voici comment réaliser le projet en plusieurs étapes :

Enregistrez dans la variable URL l'adresse de la page web qui vous intéresse.

Enregistrez dans la variable URLBASE le contenu de URL en enlevant tout ce qu'il y a après le dernier /

Enregistrez dans la variable URLRACINE le contenu de URL en enlevant le troisième / et tout ce qu'il y a après.

Récupérez la page web dans le fichier page.html en utilisant la commande wget

URL="https://www.univ-lyon1.fr/universite"
URLBASE=$(echo "$URL" | sed 's/[^/]*$//')
URLRACINE=$(echo "$URL" | sed -r 's/(https*:\/\/[^\/]*).*/\1/')
wget -O page.html "$URL"

Faites afficher toutes les lignes de page.html contenant le texte src="

Au lieu de les afficher, piper les dans sed afin d'enlever src=" et tout ce qu'il y a avant ainsi que " et ce qui suit.

Au lieu des les afficher, piper les dans sort avec l'option pour éliminer les doublons.

grep 'src=' page.html |
    sed -e 's/.*src="//' -e 's/".*//' |
    sort -u

Piper ce qui précède dans un grep qui ne conserve que les lignes se terminant par gif ou png ou jpg

grep 'src=' page.html |
    sed -e 's/.*src="//' -e 's/".*//' |
    sort -u |
    grep -E '\.(gif|png|jpg)$'
          

Piper ce qui précède dans une boucle while contenant un case qui :

  • Si cela commence par http: ou https: affiche simplement l'adresse.
  • Si cela commence par / alors affiche l'adresse en ajoutant le contenu de URLRACINE devant le contenu de la variable URL
  • Dans les autres cas alors affiche l'adresse en ajoutant le contenu de URLBASE devant le contenu de la variable URL
grep 'src=' page.html |
    sed -e 's/.*src="//' -e 's/".*//' |
    sort -u |
    grep -E '\.(gif|png|jpg)$' |
    while read L
        do
            case "$L" in
                http:*|https:*) echo "$L" ;;
                /*) echo "$URLRACINE$L" ;;
                *) echo "$URLBASE$L" ;;
            esac
        done

Piper ce qui précède dans une boucle while qui pour chaque URL lue charge le fichier correspondant avec wget

grep 'src=' page.html |
          sed -e 's/.*src="//' -e 's/".*//' |
          sort -u |
          grep -E '\.(gif|png|jpg)$' |
          while read L
              do
                  case "$L" in
                      http:*|https:*) echo "$L" ;;
                      /*) echo "$URLRACINE$L" ;;
                      *) echo "$URLBASE$L" ;;
                  esac
              done |
          while read L ; do wget "$L" ; done

Maintenant on va afficher les copyrights de toutes les images du répertoire courant.

La commande exif --tag=Copyright permet d'afficher le copyright du fichier dont le nom est passé en paramètre.

for I in *
    do
        echo "$I $(exif --tag=Copyright $I 2>/dev/null | grep Value | sed 's/Value: / → /')"
    done

Trouver les fichiers identiques dans une hiérarchie de fichier

On suppose que les fichiers ont pu changer de nom. Voici comment réaliser le projet en plusieurs étapes :

Faites afficher les chemins de tous les fichiers.

find . -type f

Ajouter une checksum du contenu du fichier devant son nom. Pour calculer la checksum, faites une boucle while et utilisez md5sum qui donnera un nombre unique (on l'espère) pour chaque fichier.

find . -type f |
    while read L
        do
            md5sum $L
        done

Trier ce qui précède par checksum (ordre alphabétique classique)

find . -type f |
    while read L
        do
            md5sum $L
        done |
    sort

Afficher seulement les lignes pour lesquelles le checksum n'est pas unique, donc celles pour lesquelles le checksum suivant ou précédent est le même. Il faut faire une boucle while, un if et utiliser les variables suivantes :
CHECKSUM, FILENAME, LAST_CHECKSUM, LAST_FILENAME

Ce n'est pas grave s'il y a des lignes en double quand le fichier est répété 3 fois. Celui du milieu a un checksum identique au précédent et au suivant.

find . -type f |
    while read L
        do
            md5sum $L
        done |
    sort |
    while read CHECKSUM FILENAME
        do
            if [ "$CHECKSUM" = "$LAST_CHECKSUM" ]
                then
                    echo "$LAST_CHECKSUM $LAST_FILENAME"
                    echo "$CHECKSUM $FILENAME"
                fi
            LAST_CHECKSUM=$CHECKSUM
            LAST_FILENAME=$FILENAME
        done

Continuez le pipeline en enlevant les lignes en double avec uniq

Faites une boucle while qui va créer des fichier checksum.la-valeur-du-checksum qui contiendront la liste des fichiers avec le même checksum.

uniq |
    while read CHECKSUM FILENAME
        do
            echo "$FILENAME" >>checksum.$CHECKSUM
        done
          
Dernière vérification : est-ce que les fichiers dont les noms sont dans les fichiers checksum.???? sont bien identiques ?

Faites afficher les paires de noms de fichiers identiques en comparant chacun des fichiers au premier de la liste avec la commande cmp par exemple.

for I in checksum.*
    do
        (
        read FIRST_FILENAME
        while read FILENAME
            do
                if cmp "$FIRST_FILENAME" "$FILENAME"
                    then
                        echo "$FIRST_FILENAME === $FILENAME"
                    fi
            done
        ) <$I
    done
        

Génération de programmes C et leur compilation

Faites un script shell générant le fichier xxx.cpp de cette forme

using namespace std;
#include <iostream>
int main()
{
  cout << "Tailles en octets :";
  cout << " TYPE1=" << sizeof(TYPE1);
  cout << " TYPE2=" << sizeof(TYPE2);
  ...
  cout << " TYPEn=" << sizeof(TYPEn);
  cout << "\n";
}
            
Vous utiliserez une boucle for parcourant char short int long float double pour obtenir les noms des différents types.
(
  echo 'using namespace std;
  #include <iostream>
  int main()
  {
    cout << "Tailles en octets :";'
    for TYPE in char short int long float double
        do
            echo 'cout << " '$TYPE'=" << sizeof('$TYPE');'
        done
    echo 'cout << "\n";
  }'
) >xxx.cpp
          
Ajoutez les types long int, long long, long double et char* à la liste
(
  echo 'using namespace std;
  #include <iostream>
  int main()
  {
    cout << "Tailles en octets :";'
    for TYPE in char short int long float double 'long int' 'long long' 'long double' 'char*'
        do
            echo 'cout << " '$TYPE'=" << sizeof('$TYPE');'
        done
    echo 'cout << "\n";
  }'
) >xxx.cpp
          

Compilez xxx.cpp et exécutez le résultat seulement si la compilation n'a pas fait d'erreur.

Le compilateur est g++

Pour trouver le fichier exécutable créé, il suffit de lancer ls -lst pour afficher les fichiers triés par date.

Pour exécuter un fichier du répertoire courant il faut indiquer le chemin en commençant par ./

g++ xxx.cpp && ./a.out
Faites une boucle pour compiler et exécuter xxx.cpp en indiquant les options de compilation suivantes :
  • Aucune
  • -m96bit-long-double
  • -mlong-double-64
  • -m32
for OPTION in '' -m96bit-long-double -mlong-double-64 -m32
    do
        g++ $OPTION xxx.cpp && ./a.out
    done

Tricher à Worlde ou Sutom

Récupérez une liste de mots français contenant les verbes conjugués :

wget http://www.pallier.org/extra/liste.de.mots.francais.frgut.txt -O mots.txt
sed -i 's/.$//' mots.txt # Enlève le ^M (\r ou Return) en fin de ligne  

Il y en a 336531.

Listez tous les mots de 7 lettres. Il y en a 27945.

grep '^.......$' mots.txt

Complétez la commande pour enlever tous les mots contenant un «e». Il y en a 10162.

grep '^.......$' mots.txt | grep -v e 

Complétez la commande pour conserver les mots contenant les 2 lettres «k» et «l». Il y en a 18.

grep '^.......$' mots.txt | grep -v e |
    grep k | grep l

Complétez la commande pour ne conserver que les mots dont la deuxième lettre est un «l». Il y en a un seul et cela a un rapport avec les voitures.

grep '^.......$' mots.txt | grep -v e |
      grep k | grep l | grep '^.u'

Listez les mots dans lesquels on trouve a, b, c, d, e dans cet ordre. Il y en a 6.

grep 'a.*b.*c.*d.*e' mots.txt

Listez les mots identiques si l'on remplace «éèêë» par «e». Il y en a 11705.

sed 's/[éèêë]/e/g' mots.txt | sort >mots2.txt
uniq -d mots2.txt 

Informations historiques

Avant cette UE était en deuxième année de licence et s'appelait «Pratique d'UNIX»

Les notes de cours, elles ne sont pas utiles pour la nouvelle UE.

Il est conseillé de travailler sur les sujets d'examen avec correction de l'ancienne UE (en PostScript compressé) : 2005s1, 2005s2, 2006s1, 2006s2, 2007s1, 2007s2, 2008s1, 2008s2, 2009s1, 2009s2, 2010s1.

Notes sur 20 obtenues aux contrôles terminaux de l'UE pratique d'UNIX de 2008 à 2016 : 8.8, 9.6, 11, 8.3, 9, 8.9, 8, 10.6, 8.1, 10, 10.1, 7.2, 9.6, 7.8

Qu'est-ce qu'Unix ?

C'est un système d'exploitation standard permettant d'utiliser des ordinateurs.

Au coeur de Linux, Android, MacOS... on trouve Unix. Il est même caché à l'intérieur des processeurs Intel même quand vous utilisez Windows.

Il se cache dans les box internet, appareil photo, télé, borne wifi, disque dur réseaux, enceintes connectée, liseuse, aspirateur robot... Et on le trouve même sur la planète Mars.

Une distribution Unix c'est principalement 2 choses :

A quoi sert le shell ?

C'est un langage textuel permettant de travailler bien plus rapidement qu'en utilisant une interface graphique.

Son apprentissage est l'objectif principal de ce cours.

Exemples d'utilisation :

Mais il ne faut pas programmer avec.

PS : on apprend en faisant des erreurs.


Thierry EXCOFFIER