Tux

Le système UNIX

TD 3 - Redirections, find et autre ...

C. Drocourt
I.U.T. Amiens
drocourt@iut-amiens.fr

Exercice 1 : Les redirections

Entrée standard et sorties standards
– Généralement, les commandes lisent l'entrée standard (entrée 0 stdin) et/ou écrivent sur la sortie standard (sortie 1 stdout) et la sortie d'erreur standard (sortie 2 stderr).
– Par défaut, l'entrée standard est le clavier. La sortie standard et la sortie d'erreur standard est l'écran.

Redirection
– La redirection permet de lire les données dans un fichier plutôt qu'au clavier (redirection de l'entrée standard) et/ou d'écrire les résultats dans un fichier plutôt qu'à l'écran (redirection de la sortie standard).
– Pour supprimer l'affichage de la sortie standard d'une commande, la rediriger sur la console nulle (null-device) correspondant au fichier /dev/null

Travail :
1 – Taper les commandes suivantes :
ls -l
ls -l > beurk
cat beurk
date > beurk
cat beurk
ls -i > beurk
cal >> beurk
cat beurk
Conclure sur les différences entre > et >>.

2 – Expérimenter les commandes suivantes:
ls 1>OK 2>pasOK
cat OK
cat pasOK
cat raminagrobis 1>OK 2>pasOK
cat OK
cat pasOK

Taper :
cat raminagrobis 1>OK 2>&1
cat OK
Conclure sur le rôle de 2>&1

3 – Taper :
cat $HOME/.bash_profile >/dev/null
Que penser de cette commande ?

Redirection globale d’un enchaînement
On peut rediriger les sorties d’un enchaînement de commande en prenant soin de parenthèser le groupe de commande.
4 – Essayer :
$(date; cat hydargos; echo fin de commande composée) 1>pre 2>err
Examiner le contenu des fichiers pre et err et conclure.

Exercice 2 : La commande find

find répertoire(s) condition(s)

Recherche dans toute l'arborescence de chaque répertoire spécifié les fichiers satisfaisant au(x) condition(s) donnée(s).
En faisant précéder la condition de \! on recherche les fichiers ne satisfaisant pas la condition donnée.
Quelques conditions possibles (plusieurs critères peuvent être combinés) :
-name 'fichiers' recherche fichiers de noms spécifiés
-user username fichiers appartenant à utilisateur username
-type type fichiers de type donné : d= directory, f= fichier, l= lien symbolique...
-mtime n fichiers modifiés depuis n jours
-perm nnn fichiers dont la protection est nnn (mode en notation octale)
-print retourne noms des fichiers et des répertoires satisfaisant condition(s) avec leur chemin complet
-exec commande {} \; applique commande sur tous les fichiers satisfaisant aux critères de recherche
-ok commande {} \; idem sauf qu'il y a demande de confirmation à l'utilisateur pour chaque fichier avant l'exécution de commande

Exemples:

find . -name '*.txt' -print
Inscrit à l’écran le nom des fichiers ayant l'extension .txt dans toute l'arborescence courante

find . -perm 0600 –print
Pour afficher la liste des fichiers associés à un code d'accès de type rw- pour l’utilisateur, dans le répertoire en cours.

Travail à faire :
1 – Rechercher à partir du répertoire /home tous les fichiers .bash_profile. Pourquoi apparaît-il des messages d'erreurs ? En utilisant une redirection, supprimer l'affichage de ces messages d'erreur.
2 – Créer dans le répertoire de connexion un répertoire essai. Créer dans ce répertoire courant quelques fichiers possédant l'extension .tmp (commande touch). Revenir au répertoire de connexion. Avec une commande find, retrouver et supprimer tous les fichiers .tmp.

Exercice 3 : La commande write et talk

La commande write permet d'envoyer un message à quelqu'un de connecté sur le système.
Pour envoyer un message à l'utilisateur gaston, taper write gaston ensuite tout ce que vous pourrez taper s'affichera sur son écran, tapez <ctrl>+<D> pour terminer le message.

La manipulation précédente pour s'avérer très vite énervante pour ceux qui reçoivent les messages. La commande mesg permet d'inhiber ou d'autoriser la réception des messages.
mesg n      pour interdire la réception des messages
mesg y      pour autoriser la réception des messages
mesg        pour savoir l'état de mesg

Travail :
Expérimentez cette commande en signalant à votre voisin que le TD est presque terminé.
Expérimentez maintenant la commande talk. Attention, il faut que l'autre personne accepte la connection en tapant la même commande, vous pouvez maintenant dialoguez en temps réel.