Solution des exercices
Solution de l'exercice 1
Il suffit d'utiliser les commandes décrites.
maranget@manche ~ > touch bidon
maranget@manche ~ > mkdir TD
maranget@manche ~ > cd TD
maranget@manche ~/TD > mkdir TD-0
maranget@manche ~/TD > cd TD-0
maranget@manche ~/TD/TD-0 >
Remarquons que pour retourner dans le répertoire personnel, on peut
utliser cd .. deux fois :
maranget@manche ~/TD/TD-0 > cd ..
maranget@manche ~/TD > cd ..
maranget@manche ~ >
Ou encore remonter deux crans d'un coup dand la hiérarchie des
fichiers :
maranget@manche ~/TD/TD-0 > cd ../..
maranget@manche ~ >
(Ça mérite bien trente secondes de réflexion.)
Solution de l'exercice 2
C'est la suite du précédent
maranget@manche ~/TD/TD-0 > cd
maranget@manche ~ > ls -F
TD/ bidon
Quelque mots sur ``-F'', c'est une option de la
commande ``ls'', c'est à dire une sorte d'argument qui se
siture avant les autres et qui commence par ``-''.
(Tout ça, c'est des conventions).
L'option modifie le comportement des commandes, ici, elle indique le
type des fichiers listés (comme on pourrait s'attendre ``/''
indique un répertoire.
Solution de l'exercice 3
On peut y aller directement :
maranget@manche ~ > cd /
maranget@manche / >
Ou par un certain nombre de ``cd ..''.
Soit en tapant les touches
cd_..
puis Ctrl-p, Ctrl-p, ...
maranget@manche ~ > cd ..
maranget@manche /users/profs/info > cd ..
maranget@manche /users/profs > cd ..
maranget@manche /users > cd ..
maranget@manche / > cd ..
maranget@manche / > cd ..
Noter que ça ne bouge plus à la fin.
Solution de l'exercice 4
Utilisez les commandes ``basename coucou'' et
``dirname coucou'',
pour vérifier que `basename coucou`/`dirname coucou`
est bien un chemin d'accès valide vers le fichier coucou du
répertoire courant.
Solution de l'exercice 5
-
On peut utliser le motif ``
*~
'' qui représente tous les
noms de fichier se terminant par ``~
''.
maranget@manche ~/TD/TD-0 > ls
a.c a.c~ coucou coucou~
maranget@manche ~/TD/TD-0 > rm *~
maranget@manche ~/TD/TD-0 > ls
a.c coucou
- Le danger peut venir d'un espace entre ``
*
'' et
``~
''.
On tente alors d'effacer alors tous les fichiers du répertoire
courant, plus ~
qui se trouve être un motif représentant le
répertoire de l'utlisateur :
maranget@manche ~/TD/TD-0 > ls
a.c a.c~ coucou coucou~
maranget@manche ~/TD/TD-0 > rm * ~
rm: /users/profs/info/maranget directory
maranget@manche ~/TD/TD-0 > ls
maranget@manche ~/TD/TD-0 >
Solution de l'exercice 6
-
maranget@manche ~/TD/TD-0 > touch '*'
maranget@mamche ~/TD/TD-0 > ls
maranget@manche ~/TD/TD-0 > ls
*
maranget@manche ~/TD/TD-0 > rm '*'
maranget@manche ~/TD/TD-0 > touch '"'
maranget@manche ~/TD/TD-0 > ls
"
maranget@manche ~/TD/TD-0 > rm '"'
Solution de l'exercice 7
-
maranget@manche ~/TD/TD-0 > cat >> coucou
Une ligne en plus
maranget@manche ~/TD/TD-0 > cat coucou
Une ligne
Encore une
On termine l'entree en tapant Control-d
Une ligne en plus
maranget@manche ~/TD/TD-0 >
(Le Control-d à emettre après ``Une ligne en plus'' n'est pas
représenté).
- Une première solution semble être d'utliser cat et une
redirection vers coucou.
maranget@manche ~/TD/TD-0 > cat coucou >> coucou
cat: coucou: input file is output file
maranget@manche ~/TD/TD-0 > cat coucou coucou > coucou
coucou: File exists.
Ça ne marche pas pour des raisons diverses.
On utlise donc un fichier intermédiaire :
maranget@manche ~/TD/TD-0 > cat coucou coucou > a
maranget@manche ~/TD/TD-0 > mv a coucou
Solution de l'exercice 8
Voici tfiles
#! /bin/sh
for i
do
tfile $i
done
On liste le répertoire courant par :
maranget@manche ~/TD/TD-0 > tfiles *
args*
tfile*
tfiles*
On liste un répertoire quelconque (par exemple ..
) par
maranget@manche ~/TD/TD-0 > tfiles ../*
../TD-0/
Solution de l'exercice 9
Voici une version un peu étendue de liste qui liste tous les
répertoires passés en argument.
#! /bin/sh
for dir
do
for file in $dir/*
do
echo $file
if test -d $file
then
liste $file
fi
done
done
On notera l'utilisation de test -d, ainsi que
l'appel récursif à liste.
Ce document a été traduit de LATEX par
HEVEA.