PREMIERE PARTIE : MANIPULATION DES FICHIERS ET REPERTOIRES
Utilisation de la commande ls
Ces exercices sont presque tous des questions de cours : les solutions se trouvent toutes dans les pages de man des commandes en question. Testez les commandes sur des fichiers et répertoires d'essai pour vous faire la main et comprendre ce qui se passe …
- À quoi sert l'option -R de ls ?
Cette option permet d'afficher une liste récursive, c'est-à-dire une
liste qui indique le contenu des répertoires listés, ainsi que de leurs sous-répertoires. Si vous tapez ls -R dans votre répertoire personnel, vous aurez une liste de tout ce que vous avez chez vous.- Dans quel ordre les fichiers et répertoires sont-ils classés par défaut? Quelles sont les options qui peuvent servir à modifier ce critère de classement ?
Pour savoir cela, il faut chercher le mot sort dans le man de ls. La première occurence vous dit que par défaut le résultat est trié par ordre alphabétique, selon la première lettre des fichiers. De façon plus précise, l'ordre est le suivant : ponctuations, chiffres, majuscules, minuscules, selon l'ordre défini par la table des caractères ASCII.
En continuant à chercher, vous trouvez des options intéressantes : -r (reverse), qui inverse l'ordre de classement, -t (time) qui trie en fonction de la date de dernière modification.
- Affichez le contenu de votre répertoire courant de telle sorte que les fichiers modifiés récemment apparaissent en premier.
ls -t
si vous voulez juste modifier le critère de tri, sans plus de renseignements; ou encore
ls -lt
si vous voulez une longue liste.
- Quels sont les droits de votre répertoire Mail ? Qu'est-ce que cela signifie ?
La ligne ressemble à ceci :
drwx------ 2 toto litt98 512 Apr 2 19:02 Mail
Le d indique qu'il s'agit d'un répertoire (directory). Suivent ensuite neuf caractères, allant par trois; r, w, x correspondent aux droits que vous avez sur le répertoire (ou le fichier) : r (read) pour le droit de lecture, w (write) pour le droit d'écriture, x (execute) pour le droit d'exécution.
Les six tirets qui suivent correspondent aux droits qu'ont le groupe (ici litt98) puis le reste des utilisateurs. Ici il y a des tirets, ce qui signifie qu'ils n'ont aucun droit sur ce répertoire.
Cela veut dire que seul le propriétaire a le droit de lire et écrire dans son répertoire Mail/, ainsi que d'y accéder. Les répertoires et les fichiers de courrier sont protégés contre les indiscrétions.
Un fichier de texte standard a les droits suivants :
-rw-r--r--
Il y a un tiret tout au début, ce qui signifie que c'est un fichier normal; vous avez le droit d'écrire et de lire (rw-), votre groupe et les autres utilisateurs ont le droit de lire le fichier (r--).
La commande chmod permet de changer ces droits, si l'on veut restreindre la lecture, ou rendre un fichier exécutable.
- Décrivez le résultat de la commande ls -l.
· -rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux
Les dix premiers caractères détaillent les droits du fichier. Le premier caractère identifie le type du fichier : ici, rien n'est spécifié, c'est donc un fichier normal. L'exercice précédent détaille la signification des lettres suivantes. Ce sont les droits normaux d'un fichier standard : tout le monde (propriétaire, groupe et autres utilisateurs) peut lire le fichier, seul le propriétaire peut écrire dedans.
· -rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux
Le chiffre indique le nombre de liens. Nous vous renvoyons aux exercices sur les liens pour plus d'explications (qui peuvent attendre à un niveau débutant...).
· -rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux
Le troisième champ donne le nom du propriétaire du fichier. Ici, il s'agit de l'utilisateur robin.
· -rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux
Ce champ indique le groupe de l'utilisateur. Ici, nous apprenons qu'Émilia est une littéraire de la promotion 1995.
· -rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux
Ce chiffre donne la taille en octets du fichier considéré. Ici, le fichier fait 754 octets, soit moins d'un Ko (1000 octets). C'est un petit fichier.
-rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux
Ce champ indique la date de dernière modification du fichier, ici le 22 mars de l'année courante, à 11h59. Quand le fichier date d'une année antérieure, celle-ci est indiquée et l'heure ne figure plus.
-rw-r--r-- 1 robin litt95 754 Mar 22 11:59 projet.aux
Vient enfin le nom du fichier. Le suffixe .aux montre qu'il s'agit d'un fichier produit par LaTeX lors de la compilation d'un fichier projet.tex.
- Comment afficher les droits d'un répertoire donné ?
Si on tape
ls -l repertoire/
C'est le contenu du répertoire qui s'affiche, et pas son statut à lui. L'option -d(directory) permet de lister le répertoire lui-même.
- Caractères identifiant les fichiers
Ce sont les caractères suivants :
slash
|
(/)
|
pour un répertoire
|
arobase
|
(@)
|
pour un lien symbolique
|
étoile
|
(*)
|
pour un exécutable
|
pipe
|
(|)
|
pour un pipe nommé
|
égal
|
(=)
|
pour un socket
|
C'est l'option -F qui permet de les afficher.
- Droits sur un répertoire
Avoir le droit d'«exécuter» un répertoire, c'est avoir le droit d'y accéder, de s'y déplacer; mais je n'ai pas le droit de «lire» son contenu. Donc, à moins d'en être propriétaire, je ne peux pas afficher le contenu d'un répertoire ayant comme droits :
Exercices 6 - Manipulation sur les répertoires
Commandes mkdir et rmdir
- Créez trois répertoires en une seule ligne de commande.
Si vous voulez créer trois répertoires bla, ble et bli, tapez
mkdir bla ble bli
- Effacez ces trois répertoires en une seule ligne de commande.
Il faut taper
rmdir bla ble bli
- Que se passe-t-il si vous tapez mkdir mkdir ?
Vous créez chez vous un répertoire appelé mkdir.
- Vous voulez détruire un répertoire bla/... mais ça ne marche pas.
ls vous dit qu'il est vide, et pourtant vous ne réussissez pas à l'effacer : c'est qu'il n'est pas vide. Il doit y avoir des fichiers cachés, commençant par un point, que vous ne voyez pas avec ls sans option. Il faut taper
ls -a
et effacer les fichiers trouvés.
- Est-ce que mkdir peut prendre des options ?
Oui, une : l'option -p
- À quelle condition est-ce que la ligne de commande «mkdir Rapport/annexes» peut fonctionner et créer effectivement ce sous-répertoire ?
Il faut que le répertoire Rapport existe, pour que l'on puisse y créer un sous-répertoire.
- Y a-t-il une option de mkdir qui permette de créer à la fois un répertoire et un sous-répertoire de ce répertoire ?
Oui, c'est l'option -p. Quand vous tapez
mkdir -p Rapport/annexes
un répertoire Rapport est créé, et dans ce répertoire un sous-répertoireannexes.
- Comment créer un répertoire en spécifiant des droits ?
On utilise l'option -m (mode) de mkdir. Par exemple :
Debian ~ $ mkdir -m 700 Mail
Debian ~ $ ls -ld Mail
drwx------ 2 robin litt95 2048 Jun 2 15:27 Mail/
- Quel est l'effet de la commande suivante :
rmdir -p toto/tata/tutu/
Cette commande efface toute la hiérarchie des répertoires, à condition qu'ils soient vides; si par exemple tutu/ est vide mais toto/ ne l'est pas, tutu/ sera effacé mais pas toto/, et le programme s'arrête.
- Création récursive sans message d'erreur
On achève avec ceci le tour de l'option -p... Si donc on tape
mkdir -p toto/tutu/
le sous-répertoire tutu/ est créé si toto/ existe déjà; et si toto/ n'existe pas, ce répertoire et son sous-répertoire sont créés. Il n'y a pas de message d'erreur.
Exercices 7 – Utilisation de cp et mv
Commande cp
- Est-il possible de faire une copie d'un répertoire et de l'ensemble de ses sous-répertoires en une seule ligne de commande ?
Oui, c'est à cela que sert l'option -r (recursive). Supposons que vous vouliez copier le répertoire Rapport et ses sous-répertoires dans le répertoire www. Il faut taper :
cp -r Rapport/ www/
ou
cp -R Rapport/ www/
- Que se passe-t-il si l'on veut faire une copie appelée tentative/ de son répertoire essai/, et que le répertoire tentative/ existe déjà ?
Quand on indique le nom d'un répertoire qui n'existe pas, cp considère qu'il s'agit du nom à donner à la copie du premier répertoire (ou fichier). Quand le répertoire existe déjà, cp considère qu'il s'agit de l'endroit où il faut placer la copie du premier élément (la «cible» : target).
Si donc on tape
cp -R essai/ tentative/
et que tentative/ existe déjà, on obtient une copie de essai/, également appeléeessai/, placée dans le répertoire tentative/.
- Que se passe-t-il si vous voulez faire une copie d'un fichier dans un répertoire où il existe déjà un fichier de ce nom ?
Le programme demande si vous voulez vraiment effacer le fichier déjà existant pour le remplacer par celui dont vous faites la copie.).
- Quel est l'effet de la commande de la ligne suivante :
cp fichier1 fichier2 fichier3 repertoire/
Les fichiers fichier1, fichier2 et fichier3 sont copiés sous leur nom dans le répertoire répertoire/, qui doit exister.
Commande mv
- Que se passe-t-il si le fichier «cible» existe déjà ?
Si vous avez un alias de mv sur mv -i (cas de la config conscrits), le programme demande si vous voulez réécrire le fichier cible en remplaçant son contenu par celui du fichier de départ :
Debian ~ $ ls
rapport.tex notes complements
Debian ~ $mv notes complements
mv: overwrite complements (yes/no)? y
Debian ~ $ls
rapport.tex complements
- Comment renommer un répertoire bla/ en blo/ ? Que se passe-t-il si le répertoire blo existe déjà ?
Il suffit de taper
mv bla/ blo/
Si jamais blo/ existe déjà, bla/ devient un sous-répertoire de blo/.
- Comment faire pour à la fois déplacer un fichier et changer son nom ? Que se passe-t-il si il existe déjà un fichier de ce nom dans le répertoire d'arrivée ?
Supposons que l'on veut amener Rapport.tex dans le répertoire courant, et l'appeler stage. On tape :
mv ../Rapport.tex stage
Rapport.tex est à la fois déplacé et renommé; vous pouvez vérifier qu'il n'est plus dans Rapport et qu'il y a désormais un fichier stage dans docs/.
Si le fichier d'arrivée existe déjà, on se retrouve dans le cas vu tout au début de cet exercice (remplacement ou non).
- Mêmes questions avec un répertoire.
Pour déplacer et renommer, la syntaxe est la même que pour un fichier :
mv ../bla ble/
déplace le répertoire bla/ du répertoire père dans le répertoire courant, et le renomme en ble/. Si jamais ble/ existe déjà, bla/ y est déplacé sous son nom, et devient un sous-répertoire de ble/.
- Que se passe-t-il si on lance mv avec les options -i et -f ensemble ? .
L'option -f (force) sert à renommer le fichier impérativement, même si le fichier cible existe déjà, sans demander confirmation. L'option -i (interactive) demande confirmation. Des deux options, c'est -f qui l'emporte :
Debian ~ $ ls
bla tutu Rapport/
Debian ~ $ alias mv
mv='mv -i'
Debian ~ $ mv bla tutu
mv: overwrite tutu (yes/no)? n
Debian ~ $ mv -f bla tutu
Debian ~ $ ls
tutu Rapport/
Exercices 8 – Expansion des noms de fichiers
1. Dans votre répertoire courant, créez en une commande les fichiers suivants:
annee1 Annee2 annee4 annee45 annee41 annee510 annee_saucisse banane
Solution:
touch annee1 Annee2 annee4 annee45 annee41 annee415 annee_saucisse annee_banane
2. Créer le répertoire Year dans votre répertoire courant, en une commande déplacez les fichiers précédemment créés dans le répertoire Year.
Solution:
mv [aA]nnee* ./Year
3. Lister tous les fichiers
Lister tous les fichiers
|
se terminant par 5
| ||
commençant par annee4
| |||
commençant par annee4 et de 7 lettres maximum
| |||
commençant par annee avec aucun chiffre numérique
| |||
contenant la chaîne ana
| |||
commençant par a ou A
| |||
Solution:
ls *5
|
ls annee4*
|
ls annee4?
|
ls annee[!0-9]*
|
ls *ana*
|
ls [aA]*
|
4. Copier les fichiers dont l'avant dernier caractère est un 4 ou 1 dans le répertoire/tmp en une seule commande.
Solution:
cp *[41]? /tmp
Exercices 9 - Options de la commande find
- Comment chercher tous les fichiers dont les noms commençent par un «a» majuscule ou une minuscule, suivi d'éventuellement quelques lettres ou chiffres, et se terminent par un chiffre entre 3 et 6 ?
C'est l'option -name qui permet de spécifier le nom du ou des fichiers recherchés. On peut indiquer le nom d'un fichier complet (bofichier.tex), ou utiliser des expressions régulières (celles du shell, pas celles de grep...) :
· L'étoile (*) désigne «un ou plusieurs caractères»;
· Le point d'interrogation remplace un (et un seul) caractère quelconque;
· Les crochets permettent de désigner une série de caractères au choix.
Dans notre cas, le premier caractère est un «a» ou un «A» ([aA]), suivi de quelque chose (*) et terminé par un chiffre entre 3 et 6 ([3456] ou [3-6]). On écrit donc :
find . -name '[aA]*[3-6]' –print
- Comment fait-on pour indiquer que le fichier recherché a été modifié il y a plus de 30 jours ? Il y a 30 jours ? Il y a moins de 30 jours?
C'est l'option -mtime qui permet de donner une indication en jours. La syntaxe varie selon ce que l'on souhaite :
· -mtime 30 : le fichier a été modifié il y a 30 jours;
· -mtime +30 : le fichier a été modifié il y a 30 jours ou plus;
· -mtime -30 : le fichier a été modifié il y a 30 jours ou moins.
·
- Comment faire pour dire que le fichier a été modifié plus récemment qu'un autre fichier donné ?
On utilise l'option -newer («plus récent»). Par exemple, on cherche un fichier.tex modifié plus récemment que bofichier.tex :
find . -newer bofichier.tex -name '*.tex'
On peut raffiner la demande, en combinant cette option avec l'option -mtime : cherchons les fichiers modifiés plus récemment que bofichier.tex, mais il y a plus de 5 jours :
find . -newer bofichier.tex -mtime +5 -name '*.tex'
- Comment fait-on pour spécifier que le fichier recherché est un répertoire ?
On utilise l'option -type pour spécifier le genre de fichier recherché : les principaux sont f (file) pour un fichier normal, et d (directory) pour un répertoire. On tape donc :
find . -type d
- Comment indiquer que le fichier recherché a une taille supérieure à une taille donnée ?
On utilise l'option -size, suivie d'un nombre et d'une lettre indiquant l'unité de mesure (c : octets, k : kilo-octets). Comme pour -mtime, on utilise +, - ou [rien]pour indiquer que la taille est, respectivement, supérieure, inférieure ou égale à la valeur donnée.
Par exemple, on recherche un fichier modifié il y a moins de 12 jours et dont la taille soit supérieure à 30 K :
find . -type f -size +30k -mtime -12 -print
DEUXIEME PARTIE : DROITS D’ACCES AUX FICHIERS ET REPERTOIRES
Exercice 1:
Dans votre répertoire courant, créez un répertoire courant essai_droit, par défaut ce répertoire est à 755 (rwxr-xr-x), quelles sont les commandes (en notation symbolique et en base 8) pour lui donner les droits suivant (on suppose qu'après chaque commande on remet le répertoire à 755:
propriétaire
|
groupe
|
les autres
| |||||||
droit en lecture
|
droit en écriture
|
droit d'accès
|
droit en lecture
|
droit en écriture
|
droit d'accès
|
droit en lecture
|
droit en écriture
|
droit d'accès
| |
commande 1
|
oui
|
oui
|
oui
|
oui
|
non
|
oui
|
non
|
non
|
oui
|
commande 2
|
oui
|
non
|
oui
|
non
|
oui
|
non
|
non
|
non
|
oui
|
commande 3
|
non
|
oui
|
non
|
non
|
non
|
oui
|
oui
|
non
|
non
|
commande 4
|
non
|
non
|
oui
|
oui
|
non
|
oui
|
non
|
non
|
non
|
Solution:
commande 1
|
chmod 751 essai_droit
| |
chmod o-rw essai_droit
| ||
commande 2
|
chmod 521 essai_droit
| |
chmod u-w,g-rx,g+w,o-r essai_droit
| ||
commande 3
|
chmod 214 essai_droit
| |
chmod u-rx,g-r,o-x essai_droit
| ||
commande 4
|
chmod 150 essai_droit
| |
chmod u-rw,o-rx essai_droit
|
Exercice 2:
Créez un fichier droit dans le répertoire essai_droit, par défaut ce fichier est à 644 (rw-r--r--).En partant du répertoire courant, pour chaque commande de l'exercice précédent, essayez d'accèder au répertoire essai_droit (commande cd), de faire un ls dans essai_droit et de modifier le fichier avec un éditeur quelconque (vi par exemple).
Solution:
commande 1
|
on peut accéder au répertoire (droit d'accès x) on peut faire ls (droit en lecture sur le répertoire r), et modifier le fichier (droit en écriture sur le répertoire w et le fichier w)
| |
commande 2
|
on peut accéder au répertoire (droit d'accès x), on peut faire ls (droit en lecture sur le répertoire r), et modifier le fichier (le droit en écriture sur le répertoire n'est pas pris en compte dès lors que vous avez le droit en écriture sur le fichier)
| |
commande 3
|
on ne peut pas accéder au répertoire (pas de droit d'accès x)
| |
commande 4
|
on peut accéder au répertoire (droit d'accès x), on ne peut pas faire ls (pas de droit de lecture), on peut éditer et modifier le fichier (droit en écriture sur le répertoire et sur le fichier).
|
Exercice 3:
Tapez la commande umask, de manière à ce que les fichiers lors de leur création aient par défaut les droits 640 (rw-r-----), et les répertoires 750 (rwxr-x---).
Solution:
Pour un fichier
masque maximum pour un fichier
|
666
|
rw-rw-rw-
| |
à retirer
|
026
|
----w-rw-
| |
droit par défaut
|
640
|
rw-r-----
|
Pour un répertoire
masque maximum pour un répertoire
|
777
|
rwxrwxrwx
| |
à retirer
|
027
|
----w-rwx
| |
droit par défaut
|
640
|
rwxr-x---
|
Soit la commande:
umask 027
(Pour un fichier retirer 026 ou 027 est équivalent)
Exercices 4 – Modifications droits fichiers et répertoires
6. Changez les droits d'un fichier fic1 pour que tous ceux de votre groupe puissent écrire dedans.
chmod g+w fic1
7. Donnez en une seule ligne le droit d'exécution à tous les utilisateurs d'un fichier script qui n'a jusqu'alors que des droits standards (-rw-r--r--).
chmod uog+x script
8. Le fichier toto a les droits suivants : -rwxr--r--. Modifiez-en les droits en une ligne de commande de sorte que le propriétaire n'ait plus que le droit de lecture.
chmod u-wx toto
9. Modifier les droits du fichier toto (-rwxr--r--) de sorte que le groupe et les autres utilisateurs aient les mêmes droits que le propriétaire.
chmod og+wx toto
10. Quelle option permet de modifier récursivement les droits d'un répertoire et des fichiers qu'il contient ?
C'est l'option -R. Par exemple, pour interdire tous les droits aux fichiers présents dans une branche du répertoire confidentiel, on peut faire :
chmod -R og-rwx confidentiel
11. Quelle option de mkdir permet de créer un répertoire en spécifiant les droits sur ce répertoire ?
C'est l'option -m qui permet de le faire. Par exemple, pour créer un répertoire en lecture interdite aux autres :
mkdir -m og-r repertoire
12. Affichez et interprétez les droits de /usr/sbin/mount.
Debian ~ $ ll /usr/sbin/mount
-r-xr-xr-x 1 root bin 27208 Jan 9 2000 /usr/sbin/mount*
Il s'agit d'un fichier éxécutable par tout utilisateur.
TROISIEME PARTIE : REDIRECTIONS AVEC LA COMMANDE CAT
- Comment visualiser deux fichiers l'un après l'autre à l'aide de la commande cat ?
Il suffit de taper les deux noms de fichiers à la suite; par exemple, pour visualierbla puis blo, on tape :
cat bla blo
- Comment faire une copie d'un fichier sans utiliser cp ni ouvrir d'éditeur de texte ?
On demande à cat d'afficher le contenu d'un fichier, puis de placer le résultat dans un fichier :
cat toto > copie
- Utiliser cat pour écrire un peu de texte et mettre le résultat dans un fichier notes.
On demande à cat de rediriger sa sortie dans un fichier, puis on n'a plus qu'à taper le texte et à indiquer la fin du texte avec ^D :
Debian ~ $ ls
maitrise.tex
Debian ~ $ cat > notes
Faire la bibliographie
Revoir le chapitre 1.
^D
Debian ~ $ ls
maitrise.tex notes
Debian ~ $ cat notes
Faire la bibliographie
Revoir le chapitre 1.
Debian ~ $
C'est bien sûr un moyen un peu spartiate pour écrire du texte, mais dans le cas de choses très courtes dans ce style, ce peut être plus rapide que de lancer un véritable éditeur.
- Quelle différence y a-t-il entre
cat bla blo > blu
et
cat bla blo >> blu
Que se passe-t-il, pour chaque ligne, selon que le fichier blu existe ou n'existe pas ?
cat bla blo > blu
concatène les deux fichiers bla et blo, et place le résultat dans un nouveau fichier appelé blu. Si blu existe déjà, le shell affiche un message d'erreur et ne fait rien.
cat bla blo >> blu place la concaténation de bla et blo à la fin d'un fichier blu déjà existant. S'il n'existe pas, le shell affiche un message d'erreur et en reste là, sans créer de fichier blu.
Les deux redirections ne sont donc pas du tout équivalentes, mais leur action dépend du shell, qui a des options qui modifie leur comportement par défaut.
- Comment obtenir un fichier blo qui corresponde à un fichier bla dont les lignes seraient désormais numérotées ?
Il faut utiliser l'option -n de cat. Par exemple :
Debian ~ $ cat bla
Pomme
Poire
Prune
Debian ~ $ cat -n bla > blo
Debian ~ $ cat blo
1 Pomme
2 Poire
3 Prune
Debian ~ $
Aucun commentaire:
Enregistrer un commentaire