1. TP #1 de systèmes
Comme nous l'avons vu en cours, la commande find permet de
rechercher des fichiers en fonction d'un certain nombre de prédicats.
Nous allons l'utiliser ici dans un certain nombre de conditions.
1.1.1 Recherche de sushi
On appelle sushi un shell caché par un utilisateur
indélicat sous la forme d'un fichier de nom quelconque et lui permettant
d'exécuter ces ordres comme s'il s'agissait de l'administrateur
système root.
Il est toutefois possible de reconnaître assez facilement ce genre
de fichiers gràce à leurs permissions et leur propriétaire
- Le propriétaire est nécessairement soit root,
soit bin
- Le fichier possède le mode suid enclenché, de
manière à ce que les ordres s'exécutent en tant que
root
- Le fichier doit être exécutable par tous les
utilisateurs
A partir de ces caractéristiques, effectuez les actions
suivantes :
- Rechercher tous les fichiers possédant ces
caractéristiques
- Les effacer à l'aide du prédicat exec de
find
Tout un chacun aura bien entendu compris qu'il est vital
pour un administrateur de vérifier très
régulièrement la présence de tels sushi sur son
système.
1.1.2 Utiliser conjointement find, tar et
xargs
La commande tar permet de rassembler plusieurs fichiers dans
une archive. Celle-ci peut, bien entendu, être envoyée sur un
périphérique spécialisé dans l'archivage (genre
DAT) mais se retrouve le plus souvent dans un fichier auquel l'on accolle
traditionnellement (bien que rien ne nous y oblige) l'extension .tar .
La syntaxe générale pour l'utilisation avec les fichiers
est la suivante :
tar commande fichier.tar fichiers à
archiver
où commande contient automatiquement la lettre
f associée au mode "fichier".
Les caractères de commande peuvent être :
t |
Vérification (liste des fichiers) de l'archive |
r |
Ajout de fichiers dans une archive existante |
c |
Création d'une archive et ajout de fichiers |
x |
Extraction de fichiers |
Il existe également un certain nombre d'options, les plus
courantes sont :
v |
Mode verbeux : affichage de la liste
étendue des fichiers de l'archive |
p |
en mode extraction de l'archive : conserve les
permissions sur les fichiers d'origine. A mettre systématiquement |
Dans cet exercice, nous allons construire une liste de fichiers avec
find et créer une archive qui les contiendra. Pour ceci vous
créerez un script rudimentaire. Afin d'être sûr de
créer l'archive, on peut faire un rm -f sur le
fichier.tar. Il y a alors plusieurs solutions :
- Certaines versions de tar (mais pas celle de spe) permettent
de considérer un fichier vide comme une archive. Vous pouvez utiliser la
commande touch fichier.tar pour créer un fichier nommé
fichier.tar et de contenu vide. Cette astuce exploite un bug de
touch qui le dévie de son but primaire mais qui est tellement
répandue que le bug n'a jamais été corrigé !
Ensuite, vous utilisez toujours tar avec la commande r !
- D'autres versions de tar (mais toujours pas celle de spe)
autorisent l'ajout de fichiers dans une archive inexistante. Il n'y a donc pas
de scrupules à avoir, après avoir détruit le fichier
originel, nous utilisez tar avec l'option r comme si de rien
n'était.
- Toujours d'autres versions de tar (non, non, toujours pas
celle de spe) permettent de créer une archive à contenu vide mais
fonctionnelle ! (spe permet de la créer vide mais après, on
ne peut rien en tirer) juste en utilisant tar cvf fichier.tar. Vous
utilisez ensuite tar avec l'option r
- Finalement l'astuce la plus sympa consiste à utiliser un
fichier script intermédiaire appliquant tar avec l'option
r si le fichier .tar existe et l'option c autrement.
Voici donc le travail à faire :
- Constituer une liste de fichier avec find, en utilisant les
critères suivants :
- Fichiers .c ou .h
- Fichier véritable
- Date de modification supérieure à 30 jours
- Date de changement supérieure à 6 jours. Pour vous
constituer un ensemble de fichiers probants, il est possible de faire varier
indépendamment la date de changement de la date de modification en
utilisant diverses options de la commande touch à
vérifier en consultant man touch.
- Vous les assemblez dans une archive nommée archive.tar avec
les méthodes suivantes :
- Utilisation des backquote
- Utilisation pure de find avec prédicat
exec
- Utilisation conjointe de find et xargs
- Quelle méthode vous paraît préférable ?
- Utilisez un script avec des arguments pour passer
- Le nom de fichier archive a créer
- Le nom du répertoire de base
- Le nom des fichiers. Attention aux quotes pour empecher
l'evaluation par le shell !
Vers la solution !
Certaines commandes Unix opérant traditionnellement sur des
fichiers proposent néanmoins la possibilité de travailler sur
stdin ou stdout en utilisant le caractère -
(moins) sur la ligne de commande.
Par exemple, il est possible de l'utiliser avec tar. L'exemple
suivant envoie sur stdout le résultat de l'archivage de tous
les fichiers .c du répertoire courant.
tar cvf - *.c
Hors, les commandes de compression permettent également
d'utiliser - pour travailler sur stdin/stdout ! Par
exemple, la commande suivante compresse le résultat de ps vers
le fichier processus.Z à l'aide de la commande standard
compress
ps -elf | compress - > processus.Z
Travail à effectuer :
- Créez une commande permettant de créer une archive d'un
répertoire rep et de la compresser à la volée en
une seule opération
- Enfoncez le clou et complétez la commande
précédente en appliquant uuencode au fichier
compressé ainsi créé avant de l'envoyer par mail
à l'un de vos camarades. Bien entendu, il est obligatoire de tout faire
tenir en une seule ligne à l'aide de tuyaux ! (Bien entendu,
l'utilisateur averti aurait utilisé gzip ou le tout nouveau
bzip2 pour compresser plus efficacement !)
- Créez une commande permettant de recopier un répertoire
en utilisant uniquement la commandetar et le connecteur de tube.
- Travail personnel : recherchez d'autres commandes acceptant un
- sur la ligne de commande
Vers la solution !
Rechercher le mot (au sens de la langue Française)
"lapin" dans le texte suivant :
Le lapin était un chasseur
Les lapinos sont de sortie !
lapin, est ce un mot ?
Elle m'a posé un lapin.
Un autre lapin
Lapin qui s'en dédie !
alapin, il manque un espace
quel animal était-ce (lapin)
Conseil : il faut utiliser egrep et suivre les conseils
suivants
- Le mot lapin peut commencer par une majuscule ou une
minuscule, toutes les autres lettres étant en minuscules (ceci pour vous
ôter l'envie d'utiliser l'option -i permettant de ne pas
distinguer majuscules de minuscules, il faudra utiliser une classe !)
- Il peut être précédé d'un espace ou d'un
caractère de ponctuation (incluant le début de ligne)
- Il peut également être suivi d'un espace ou d'un
caractère de ponctuation (incluant la fin de ligne)
Vers la solution !