TP1 : environnement de travail
D. La gestion des fichiers en ligne de commandes Linux (40 min)
a) Intérêt de la ligne de commande
Il est possible de gérer les fichiers avec des commandes entrées par le clavier au lieu d'utiliser la souris et une interface graphique. L'intérêt d'utiliser un interpréteur de commandes est multiple :- un utilisateur expérimenté est plus rapide avec la ligne de commande,
- il est possible de faire des opérations complexes sur plusieurs fichiers à la fois,
- on peut enregistrer un ensemble d'opérations à effectuer dans un fichier texte (= un script) si on veut l'utiliser plusieurs fois, ou bien la transmettre à quelqu'un qui cherche à effectuer les mêmes opérations,
- une liste d'opérations à effectuer peut donc se transmettre par une suite de commandes à effectuer au lieu d'instructions (menus, clics, etc) qui dépendront de l'apparence du système (utile pour dépanner quelqu'un par courriel, même s'il ne parle pas la même langue),
- on peut effectuer facilement des opérations sur les fichiers à distance (protocole SSH),
- les opérations sont enregistrées dans un historique, elles peuvent être retrouvées et répétées,
- l'interface de la ligne de commande demande beaucoup moins de ressources (microprocesseur, mémoire vive) qu'une interface graphique,
- le texte blanc sur fond noir est moins fatiguant pour notre système visuel qu'un texte noir sur fond blanc,
- ...
Remarque sur le terminal : pour
l'ouvrir depuis l'interface graphique, Menu des programmes →
Accessoires → Emulateur de terminal.
Pour utiliser la ligne de commande,
soit on se connecte directement en mode texte
comme vu dans un cadre pour approfondir ci-dessus,
soit, depuis l'interface graphique, on ouvre un terminal.
b) Apparence du terminal
Qu'y lisez-vous ?
- votre login tout d'abord
- un arobase "@" qui signifie "at" en anglais, c'est à dire que A@B indique une localisation de A dans/chez/sur B.
- le nom de la machine sur laquelle vous travaillez
- le nom du dossier courant dans lequel vous êtes situés. Quand le terminal vient d'être lancé, c'est généralement votre dossier personnel, ou home, donc "~".
c) Généralités pratiques sur la ligne de commande
Avant de passer à l'utilisation, quelques principes pratiques.
Comme toutes les commandes doivent être tapées
au clavier, des raccourcis ont été mis en place pour être plus rapide et efficace.
Ainsi :
- en tapant sur la touche tabulationsur la gauche du clavier, elle est parfois étiquetée par une flèche vers la gauche et une vers la droite juste en dessous après avoir écrit le début d'une commande ou d'une adresse de fichier ou dossier, il y a auto-complétion : le système essaie de compléter la suite de la commande ou de l'adresse. S'il y a plusieurs possibilités, il arrive qu'on doive appuyer à nouveau sur tabulation pour afficher la liste des diverses suites possibles (puis entrer la lettre suivante, puis appuyer encore sur tabulation...).
- en utilisant la touche flèche du haut, on peut retrouver les commandes précédemment tapées pour les réutiliser au lieu de les retaper. Les touches flèches du haut et du bas permettent de naviguer dans cet historique.
-
Remarque sur les adresses relatives : un fichier peut avoir plusieurs adresses relatives. Par exemple, si l'élève de login fpignon est placé dans le dossier /auto_home/fpignon/GLIN102 qui contient le dossier MP3 et le fichier bonjour.txt, ce dernier, d'adresse absolue /auto_home/fpignon/GLIN102/bonjour.txt a pour adresses relatives :plutôt que de taper l'adresse absolue d'un fichier qui peut être très longue, il est possible d'utiliser des adresses raccourcies appelées adresses relatives, qui dépendent de l'état courant du terminal :
- ~/GLIN102/bonjour.txt
- ./bonjour.txt
- ../GLIN102/bonjour.txt (un peu tordu et pas vraiment utile, mais bon ça marche)
- ./MP3/../bonjour.txt (encore plus tordu et moins utile, mais ça marche toujours)
- si vous voulez désigner votre répertoire personnel ou home, vous pouvez le faire avec le caractère tilde "~Pour taper le caractère ~, appuyez simultanément sur ALTGr et 2". Par exemple pour désigner le fichier info.txt situé dans le home de l'élève qui a pour login fpignon, cet élève peut utiliser l'adresse absolue /auto_home/fpignon/info.txt, ou l'adresse relative ~/info.txt
- si vous voulez désigner le dossier dans lequel vous êtes placé, ou dossier courant utilisez le point ".". Par exemple, si vous êtes dans le dossier /net/commun/2015/Remediation/TP1, vous pouvez désigner le fichier bonjour.txt qui s'y trouve par son adresse absolue /net/commun/2015/Remediation/TP1bonjour.txt ou bien par l'adresse relative ./bonjour.txt.
- si vous voulez désigner le dossier parent de celui où vous êtes placé, utilisez les caractères : "..". Par exemple si vous êtes dans le dossier /net/commun/2015/Remediation/TP1MP3 et que vous voulez désigner le fichier /net/commun/2015/Remediation/TP1bonjour.txt, vous pouvez utiliser l'adresse relative ../bonjour.txt.
- Si un processus est bloqué, vous pouvez le forcer à s'arrêter (le "tuer") en appuyant simultanément sur CTRL et C. Vous pouvez aussi le mettre en arrière plan avec CTRL Z (on "zombifie" le processus) puis taper "bg" (pour "background"). Une autre façon de pouvoir continuer à utiliser le terminal en laissant s'exécuter une commande en arrière plan est de penser à la lancer en la faisant suivre de " &". Cela permet de reprendre la main sur la ligne de commandes.
- I1Ouvrez un terminal (Menu des programmes → Accessoires → Emulateur de terminal).
- I2Tapez la lettre "g", puis appuyez sur Tab jusqu'à ce que s'affiche la liste des commandes qui commencent par un "g".
- I3Ajouter la lettre "e", puis appuyez sur Tab jusqu'à ce que s'affiche la liste des commandes qui commencent par "ge" (il y en a moins).
- I4En utilisant Tab et en ajoutant quelques lettres supplémentaires, utilisez la complétion automatique pour écrire "gedit", puis tapez sur Entrée. gedit se lance.
- I5Revenez à la fenêtre de terminal et essayez de taper une commande. Ce n'est pas possible. Commencez par I6tuer le processus gedit en appuyant simultanément sur CTRL et C depuis le terminal.
- I7Relancez gedit depuis le terminal avec la commande gedit & de manière à pouvoir continuer à utiliser le terminal alors que gedit est lancé.
d) Se déplacer, lister le contenu
Remarque importante sur les commandes : pour utiliser une commande,
on tape dans le terminal son nom, suivi d'un espace, suivi de paramètres éventuels, séparés
par des espaces. Une conséquence est que ni le nom d'une commande, ni un des paramètres, ne
peut contenir d'espace (sinon le système ne saurait pas où commence et finit chaque paramètre).
Utilisons maintenant quelques commandes pour faire avec le terminal ce qu'on a fait précédemment
avec l'interface graphique. Les diverses commandes utilisées seront récapitulées à la fin du TP.
Pour vous en souvenir, vous pouvez penser au terme anglais qui désigne leur fonction,
et qui est souvent proche du nom de la commande, mais le mieux est de les retenir par la pratique.
Si une adresse contient un espace, il faut donc faire précéder cet espace
d'un antislash "\".
Par exemple l'adresse d'un dossier Dossier important
qui se situerait à la racine se taperait : /Dossier\ important.
Ce principe fonctionne aussi pour d'autres caractères spéciaux ("+", ";", "\" ...).
En général on évite de les utiliser dans les noms de fichiers ou dossiers.- I8Tapez
ls
puis appuyez sur Entrée (à chaque fois que vous tapez une commande, c'est appuyer sur Entrée qui permet de l'exécuter, nous omettrons donc cette étape systématique par la suite).ls
fait la liste des fichiers et dossiers contenus dans le dossier courant. - Tapez
ls /net/commun/
. Là, "/net/commun/" est un paramètre indiquant de quel dossier on veut faire la liste des fichiers et dossiers. Remarquez qu'on n'a pas changé de dossier, on est toujours dans le home. - Tapez
tree
(outree | more
si l'affichage est trop grand) pour afficher l'arborescence à partir du répertoire courant. La commandetree -d
(outree -d | more
) affiche l'arborescence en se limitant aux répertoires. - Pour connaître l'adresse absolue du répertoire courant,
I9tapez la commande :
pwd
(print working directory en anglais, imprimer le répertoire de travail) - Vous pouvez utiliser des options pour la commande
ls
, qui vont s'intercaler entre la commande et l'adresse du dossier dont vous voulez avoir la liste des fichiers et dossiers. I10Essayezls -l /net/commun/
(les fichiers sont disposés en une jolie liste avec de nombreuses informations), et I11ls -a /net/commun/
("a" pour "all" en anglais, permet d'afficher tous les fichiers même les fichiers cachésfichier qui n'apparaît pas dans l'affichage par défaut du contenu des dossiers, dont le nom commence par un point) - On va maintenant se placer dans le dossier
/commun
. On pourrait le faire directement, mais on va le faire par étape en remontant jusqu'à la racine et en redescendant vers/commun
. La commande à utiliser estcd
("change directory" en anglais, "changer de dossier"). - I12Remontez dans le dossier parent :
cd ..
(puisque ".." signifie "le dossier parent"), I13encore une fois pour atteindre la racine :cd ..
(remarquez que le nom du dossier courant indiqué à gauche de l'endroit où vous tapez les commandes a changé). I14Faites la liste des fichiers et dossiers (on a vu la commande pour faire cela plus haut...) pour voir si un dossiercommun
s'y trouve bien. Puis I15placez-vous dedans :cd ./commun
(ou biencd commun
, "./" peut être oublié pour désigner le dossier courant s'il n'y a pas d'ambiguïté). Si vous aviez voulu procéder directement vous auriez pu, en étant placé dans votre home, utiliser l'adresse absolue de ce dossier :cd /commun
, ou son adresse relative qui avait moins d'intérêt :cd ../../commun
. - I16Retournez dans votre home (
cd ~
équivalent àcd
), I17affichez sa liste des fichiers et dossiers, (les sous-répertoires sont en bleu, les fichiers exécutables en vert, les fichiers textes en noir). Il contient un répertoireBureau
, I18allez-y et listez ses fichiers et dossier. La corbeille, où arrivent les fichiers que vous supprimez depuis l'interface graphique, correspond au répertoire.local/share/Trash
de votre home. -
La navigation dans le manuel : La touche Entrée permet de passer à la ligne suivante, Espace de descendre à la page suivante, b (pour before) sert à remonter dans le texte, q permet de quitter le manuel. Pour trouver un mot-clé dans le texte du manuel, tapez /mot-clé puis Entrée. Puis appuyez sur n pour trouver la prochaine occurrence du mot-clé (n pour next).La commande
man [NomDeCommande]
permet de disposer d'une aide sur l'utilisation d'une commande (manuel d'utilisation). I19Essayezman ls
pour vérifier à quoi sert la commande "ls" et l'option "-a". Parfois, le contenu de l'aide accessible par "man" est rédigé en anglais ; si vous préférez, vous pouvez utiliser un moteur de recherche pour savoir à quoi sert une commande et obtenir un exemple d'utilisation, mais rappelez-vous que contrairement au web, les pages du manuel sont toujours accessibles !
e) Supprimer
Maintenant qu'on sait se déplacer dans les dossiers et lister leur contenu, on va voir comment en supprimer,
en supprimant avec la ligne de commande les fichiers et dossiers copiés précédemment à l'aide de l'interface graphique.
- La commande
rmdir
sert à supprimer un dossier vide ("remove directory" en anglais, supprime dossier). -
I20Placez-vous dans le dossier
TP1/
(que vous avez créé à une étape précédente du TP, en utilisant l'interface graphique). - Essayez de I21supprimer le dossier MP3 qui s'y trouve
en utilisant la commande
rmdir MP3
. - Attention, si vous utilisez la commandeSinon, la suppression est impossible et on vous répond :
rmdir chemin
, le dossier à l'adresse chemin doit être vide.rmdir: directory "chemin": Directory not empty
. - Pour supprimer un dossier non vide il faut donc utiliser la commande
rm
("remove" en anglais, supprime), avec l'option-r
("r" pour "récursivement") pour indiquer qu'on veut aussi supprimer tous les sous-dossiers et fichiers contenus. I22Essayez donc :rm -r MP3
. Ça fonctionne ! - La commande
rm
sert aussi à supprimer les fichiers.Attention à ne pas vous tromper quand vous utilisez la commanderm
avec l'option-r
, les conséquences d'une suppression malheureuse peuvent être dramatiques.
f) Créer des dossiers
Maintenant que le dossier MP3 a été supprimé, vous allez le recréer.
-
La commande
mkdir
("make directory" en anglais, créer répertoire en français) permet de créer un nouveau dossier à l'adresse passée en paramètre. - Vous devez être dans le dossier
~/TP1
. I23Utilisez la commandemkdir
pour y créer un répertoireMP3
:mkdir MP3
. - Attention, si vous utilisez la commandeSinon, la création est impossible et on vous répond :
mkdir chemin/NouveauDossier
, le dossier à l'adressechemin
doit effectivement exister.mkdir: Failed to make directory "chemin/NouveauDossier"; No such file or directory
. - I24Restez dans le dossier
TP-SGF
, et créez dans le dossierMP3
qui s'y trouve le sous-répertoireRock
de manière absolue et I25le sous-répertoireRap
de manière relative. - I26Supprimez le répertoire
MP3
et tout son contenu.
g) Déplacer et copier
On va maintenant voir comment copier les fichiers du dossier /net/commun/2015/Remediation/TP1MP3
vers votre répertoire
personnel en ligne de commande.
mv chemin1 chemin2
permet de déplacer fichiers ou dossiers (move en anglais) de l'emplacementchemin1
vers l'emplacementchemin2
.- Par exemple
mv /net/commun/2015/Remediation/TP1MP3 ~/GLIN102/TP-SGF
déplacera le dossierMP3
vers l'endroit voulu dans votre dossier personnel. I27Essayez de le faire ! - Problème : une erreur apparaît "
Permission denied
" vous n'avez pas le droit de supprimer des dossiers à l'intérieur du dossier/commun
(on verra les droits d'accès au TP suivant). - On utilise aussi la commande
mv
pour renommer fichiers ou dossiers :mv ~/TP1 ~/tp1
sert à renommer le dossierTP-SGF
entp1
. I28Si vous avez exécuté cette commande, exécutez la commande nécessaire pour redonner à ce dossier le nomTP-SGF
. - Pour des problèmes de droits d'accès, vous ne devez donc pas déplacer, mais plutôt
copier les fichiers et dossiers, en utilisant la commande
cp
(copy en anglais) avec l'option -r ("r" pour "récursivement") s'il s'agit d'un dossier. - I29Entrez donc la commande :
cp -r /net/commun/2015/Remediation/TP1MP3 ~/TP1/TP-SGF
. - I30Vérifiez que les fichiers
ont bien été copiés en listant le contenu du dossier
MP3
que vous venez de créer. - I31Créez un dossier
compil
dans ce dossierMP3
.
h) Types de fichiers
Pour approfondir sur la visualisation d'un fichier :
pour avoir un aperçu d'un fichier vous pouvez aussi utiliser la commande
Voyons les commandes qui permettent d'avoir un aperçu du contenu des fichiers.
cat
("catenate", "concaténer" en anglais) qui fait défiler tout le contenu
du fichier.
- La commande
more
("plus" en anglais) permet d'afficher le contenu d'un fichier page par page. - I32Utilisez-la pour voir le contenu
d'un faux MP3 :
~/TP1/MP3/Beethoven/Symphonie 9 Karajan.mp3
, et le contenu d'un vrai MP3 :~/TP1/MP3/Beethoven/Sonate 14 extrait.mp3
- La commande
file
(fichier en anglais) permet de connaître le type de fichier. Elle ne se fonde pas sur l'extension, mais sur une analyse du contenu, qui est comparé aux formats de référence. I33Essayez-la sur le vrai et le faux mp3 mentionnés à la question précédente.
i) Filtrer
Passons maintenant à la réalisation de la compilation.
-
Pour approfondir sur les filtres : vous pouvez aussi utiliser les crochets pour désigner un caractère parmi tous ceux entre crochets. Par exempleLe caractère joker "?" représente n'importe quel caractère, et "*" désigne une chaîne d'un nombre quelconque (0 ou plus) de caractères quelconques. On peut utiliser ces deux symboles pour filtrer des fichiers.
[aeiouy]
désigne une voyelle quelconque,[0-9]
un entier,[^0-9]
un non-entier ("-" pour indiquer un intervalle, "^" pour désigner le complémentaire). Si ces histoires de filtres vous intéressent, il peut être utile d'en créer de plus compliqués en utilisant les expressions régulières. - Par exemple, vous souhaitez afficher la liste des fichiers du
dossier
~/TP1/MP3/Divers
qui commencent par un "C", c'est à dire les fichiers avec un "C" suivi d'une chaîne d'un nombre quelconque de caractères quelconques. Pour cela, vous utilisez bien sûr la commandels
, et vous intégrez astucieusement le symbole qui convient :ls ~/TP1/MP3/Divers/C*
. - I34Placez-vous dans le dossier
~/TP1/MP3/Divers/
. Utilisez un filtre du même genre pour I35n'afficher que les fichiers d'extension mp3 dont le nom se termine par un "a". - Plus compliqué maintenant : I36affichez seulement les fichiers qui ont un "a" en deuxième position.
- Évidemment les filtres peuvent aussi s'utiliser avec la commande
cp
. I37Copiez en une seule commande tous les fichiers contenant "2008" dans leur nom vers le dossier~/TP1/MP3/compil/
. - Quand vous utilisez la commande
cp chemin1 chemin2
, si le cheminchemin2
ne correspond pas à un dossier existant, il sera interprété comme le nouveau nom de la copie du fichier (sinon le nom donné dans chemin1 est gardé). Par exemple, pour copier dans compil le fichier~/TP1/MP3/Beethoven/Symphonie 9 Karajan.mp3
en l'appelant1_Beethoven_Symphonie 9 Karajan.mp3
, vous pouvez I38vous placer dans le dossier~/TP1/MP3/
et utiliser la commandecp ./Beethoven/Symphonie\ 9\ Karajan.mp3 ./compil/1_Beethoven_Symphonie\ 9\ Karajan.mp3
(remarquez par quoi sont précédés les espaces, relisez ce cadre si vous ne comprenez pas pourquoi). - De même,
I39copiez le fichier
~/TP1/MP3/Classique Divers/Bach - Cello Suite 1.mp3
verscompil
en le renommant2_Classique Divers_Bach - Cello Suite 1.mp3
.
Conclusion sur la ligne de commande Linux
Peut-être que les opérations en ligne de commande vous ont pris plus de temps que les mêmes opérations avec l'interface graphique. Avec l'habitude, on devient beaucoup plus efficace avec la ligne de commandes dont on n'a eu ici qu'un mince aperçu.De plus, il est possible de faire de petits programmes appelés scripts pour automatiser encore plus ces tâches. Par exemple un script qui va lire dans le fichier
MaCompil
la liste
des fichiers à copier, et les copie en indiquant automatiquement la numérotation.
Mais concevoir un tel programme est un travail d'informaticien
qui ne vous sera pas demandé ici.