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.
-
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.
- corrigé
-
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é
-
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 |
-
Faire en perl un filtre qui a comme paramètre la clef
et qui fait un tel chiffrement.
corrigé
-
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.
-
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é
-
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é
-
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.