Utiliser la multitude de commandes Unix

Une sélection de commandes utiles

Faire ls /bin ou ls /usr/bin permet de découvrir l'existence de quelques centaines de programmes présents par défaut sur un système Unix. On verra ci-dessous quelques uns. Pour continuer cette exploration après le TP, on peut lire les pages de man de chacune des commandes non vues en TP...

ls
Affiche la liste de fichier contenus dans un répertoire. Avec l'option -l affiche en outre diverses informations quant aux propriétés de ces fichiers.
cat, more, less, head, tail
Pour afficher tout ou partie du contenu d'un fichier texte.
wc
Compte les caractères, mots et lignes de fichiers texte.
man, whatis, apropos
Pour accéder à la documentation des commandes.
cp, mv, rm, mkdir, rmdir
Création, déplacement, destruction de fichiers ou de répertoires.
chmod, touch, chgrp, chown
Changement des propriétés d'un fichier.
df
Liste les partitions et leurs propriétés.
du
Place totale occupée par les fichiers contenus dans un répertoire.
ps, top
Liste les commandes en cours d'exécution, et quelques unes de leurs propriétés.
basename, dirname
À partir du nom complet d'un fichier, en extrait le nom de base ou le chemin d'accès.
cmp, diff
Compare le contenu de deux fichiers.
patch
Modifie un fichier en fonction de la liste des différences.
tr
Filtre pour un fichier texte, qui fait de la substitution caractère par caractère.
cut
Filtre pour un fichier texte, qui extrait un morceau de chaque ligne.
grep
Filtre pour un fichier texte, qui extrait les lignes vérifiant une certaine expression régulière.
uniq
Filtre pour un fichier texte, qui supprime les lignes consécutives en double.
sort
Filtre pour un fichier texte, qui en trie les lignes.
sed
Filtre pour un fichier texte, qui fait des substitutions dans chaque ligne.
awk
Filtre pour un fichier texte, utilisant un langage de programmation assez évolué.
dd
Recopie bit à bit de fichiers.
expr, bc, dc
Calculatrices.
sleep
Attente...
compress, uncompress, zcat, gzip, gunzip
Compression et décompression de fichiers.
uname, hostname
Nom et résumé des caractéristiques de la machine.
whoami, id, w, who, rwho, users, rusers, uptime, ruptime
Qui suis-je, qui sont les autres, que font-ils, où sont-ils ?
find
Recherche d'un fichier ayant certaines propriétés.
xargs, tee, od
Autres commandes utiles...

Un peu plus de perl

Motivations

Il s'agit d'apprendre à manipuler quelques structures de données de perl. On fera un programme de chiffrement par substitution alphabétique, puis on utilisera un dictionnaire pour faire un programme qui déchiffre un texte chiffré avec une clef inconnue.

Tous les programmes fonctionneront en filtres, c'est-à-dire qu'ils lisent leurs données sur l'entrée standard, que leur résultat est sur la sortie standard, et qu'ils peuvent admettre des options en ligne de commande.

Exercices

Chiffrement par rotation circulaire

Dans le texte, toute lettre dont le numéro dans l'alphabet est n est remplacée par la lettre n+3 (modulo la taille de l'alphabet, bien évidemment). Une variante du chiffrement de César est d'utiliser un entier quelconque au lieu de 3, ce qu'on appelle chiffrement par rotation circulaire.

  1. Faire un filtre à partir de la commande tr qui effectue le chiffrement de César. Faire aussi le filtre qui effectue le déchiffrement de César.
  2. corrigé
  3. Faire en perl un petit filtre rot qui a comme paramètre l'entier qui sert de décalage pour un chiffrement par rotation circulaire.
    corrigé
  4. Faire la même chose en shell, en utilisant tr et expr.
    corrigé ou corrigé ou corrigé

Substitution alphabétique

Une généralisation est de chiffer en utilisant une bijection de l'alphabet. En pratique, on se rappelle de cette bijection par une astuce mnémotechnique, qui sert de clef.

Par exemple, la clef est un mot quelconque. On en élimine les lettres doubles, puis on rajoute à sa suite les lettres de l'alphabet. (On suppose ici que l'alphabet a 25 lettres, le W reste inchangé et on écrit tout en majuscules.) qui ne sont pas dans ce mot, dans l'ordre alphabétique. On écrit ceci sur cinq ligne decinq caractères. On lit par colonnes pour obtenir la valeur de la permutation.

Exemple : la clef CRYPTOLOGIE donne le tableau ci-contre et donc le chiffrement correspond à la commande tr A-VXYZ COAJSRLBKUYGDMVPIFNXTEHQZ.
C R Y P T
O L G I E
A B D F H
J K M N Q
S U V X Z

  1. Faire en perl un filtre qui a comme paramètre la clef et qui fait un tel chiffrement.
    corrigé
  2. Faire la même chose en shell, en fabriquant les bonnes options pour tr.
    corrigé

Cryptanalyse

Ce genre de système se casse dès qu'on connait la langue utilisée. On utilisera par exemple les dictionnaires /usr/dict/words et /usr/local/util/lib/words.french pour connaître la fréquence des lettres et savoir quels sont les mots.
  1. Faire un premier programme qui calcule la fréquence des lettres dans le dictionnaire. NB : ceci n'est bien évidemment pas la même chose que la fréquence d'apparition des lettres dans un texte, mais cela servira de première approximation.
    corrigé
  2. Modifier ce programme pour en faire un programme de cryptanalyse qui calcule les fréquences des lettres dans le texte chiffré, les classe par fréquence décroissante et leur associe les lettres de l'alphabet par fréquence décroissante dans le dictionnaire. NB: on remarque bien évidemment que les fréquences dans le texte ne respectent quasi jamais les fréquences du dictionnaire.
    corrigé
  3. Modifier le programme ci-dessus pour choisir parmi les petites variations de l'ordre des fréquences celle qui fait apparaître dans le texte déchiffré le plus de mots du dictionnaire.