Rappel commandes, Notation joker, Compression de fichiers, Archivage, Impressions.
Étudiants distants
Pendant la séance, l'enseignant est en présentiel avec l'autre groupe et ne peux pas intéragir avec vous comme lors d'un TP.
Lisez le support et testez les commandes au fur et à mesure.
Avec l'absence des explications de l'enseignant, il est fortement encouragé d'expérimenter plus.
La page VDI et Linux donne toutes les informations pour vous connecter à distance à une machine à l'aide du système VDI
de l'IUT et d'y utiliser Linux via WSL
.
Le sujet est rédigé pour une utilisation depuis Linux. Donc ignorez tout ce qui concerne des icônes. Votre terminal est tout simplement votre application Ubuntu 20.004 LTS
.
En général, le texte affiché comme ceci : commande argument
correspond à une commande à saisir dans l'interpréteur de commande.
Dans l'exercice sur la compression, vous pouvez créer des fichier avec Visual Studio Code.
Tous
Les aléas de l'emploi du temps font que ce TD a lieu avant le tout premier TP d'installation (c'est censé être le contraire). Vous reverrez ces aspects en TP.
Quelques commandes
Utiliser les commandes
En cliquant sur l’icône terminal, nous avons accès à un interpréteur qui permet de saisir des commandes et voir le résultat de leur exécution.
Démonstration :
- ouverture d’un terminal
- exécution
date
- exécution
echo "hello, world"
- exécution
code
Explication : Dans la fenêtre s’exécute un programme appelé interprèteur de commandes, dont le rôle est schématiquement de faire une boucle:
- lire une ligne de commandes
- l’analyser
- l’exécuter
- recommencer, sauf si la commande était
exit
, auquel cas l’interprète s’est arrêté, et la fenêtre s’est refermée.
Explications : Une ligne de commande commence par le nom de la commande (par exemple
date
, echo
...) suivi éventuellement par des options et des paramètres, comme le message
hello, world
.
Les options commencent la plupart du temps par un tiret. Des exemples :
echo -n "hello, world"
: effet de l’option-n
? (man
: qui supprime le passage à la ligne après l’affichage).date -d "Sunday"
: effet ? (date de dimanche prochain) Les commandes usuelles comportent de nombreuses options, que l’on peut connaitre en consultant le manuel en ligne... par la commandeman
. En général, les options peuvent être combinées derrière un seul tiret, exemplels -l -t -r
se réduit enls -ltr
.
Démonstration Exemple : man date
Remarquez les conventions pour la notation dans le manuel
- les éléments à taper tels-quels sont écrits en gras,
- les mots en majuscules comme OPTION ou FORMAT représentent des catégories (OPTION ne représente pas le mot OPTION, mais une option)
- les crochets indiquent le caractère facultatif : on peut lancer date sans mettre d’options ni de format
- les barres verticales indiquent un choix (entre
-u
,-uts
et-universal
). Exemples d’options “longues” introduites par un double tiret.
À vous de jouer : trouvez dans le manuel comment faire afficher le numéro de version de
geany
(un autre éditeur)).
Il est important de ne pas avoir peur de lire le manuel. C’est même un réflexe à avoir.
Interprète de commande : historique et complétion
Démonstration :
- l’interprèteur de commande bash possède un mécanisme d’historique, ce qui permet de reprendre facilement les dernières commandes au lieu de les retaper (flèches haut/bas, gauche/droite pour corriger).
- complétion : si on tape le début du nom d’une commande (par exemple
gea
suivi d’une tabulation, le nom est automatiquement complété - si il y a plusieurs commandes avec le même préfixe, un second appui sur
TAB
affiche la liste. Par exemplege TAB TAB
montregeany
,gedit
... - c’est la même chose pour les noms de fichiers en paramètres :
ls /t TAB
se complète enls /tmp/
. Ne saisissez jamais les noms de fichiers manuellement ! Utilisez systématiquementTAB
pour les compléter et ne jamais faire d’erreur de frappe sur le nom de fichiers - depuis peu, il est également possible de faire l’autocomplétion sur les ARGUMENTS de
certaines commandes standards. Vérifiez dans votre
.bashrc
que l’option est activée
De nombreux raccourcis clavier facilitent l'édition de la ligne ; ne retenez que ceux qui vous semblent pertinents. Ces raccourcis peuvent changer en fonction de votre configuration.
Déplacement
Ctrl + a
: aller au début de la ligne.Ctrl + e
: aller à la fin de la ligne.Alt + b
: se déplacer mot par mot dans la ligne de commande en arrière.Alt + f
: se déplacer mot par mot dans la ligne de commande en avant
Couper / Coller
Ctrl + shift + c
: copier dans le presse papier le texte sélectionné à la souris.-
Ctrl + shift + v
: coller le text du presse papier. -
Ctrl + k
: couper la chaîne du curseur jusqu'à la fin de la ligne. Ctrl + u
: couper la chaîne du curseur jusqu'au début de la ligne.Ctrl + w
: couper le mot avant le curseur.Ctrl + y
: coller une chaîne.
Modification
Ctrl + t
: inverser la position des deux caractères avant le curseur (pratique quand on tape par exemple, sl au lieu de ls).Alt + t
: inverser la position des deux mots avant le curseur.Alt + c
: mettre une lettre en majuscule.Alt + l
: mettre un mot en en minuscule (l pour lowercase).Alt + u
: mettre un mot en majuscule (u pour uppercase).Alt + .
: réécrire le paramètre de la dernière commande.
Divers
Ctrl + l
: effacer le contenu de l'écran.Ctrl + r
: rechercher une commande déjà tapée.Ctrl + _
: annuler la dernière modification.Ctrl + c
: arrêter la commande.Ctrl + d
: quitter le shell.
Naviguer dans les répertoires
Explications : les fichiers de l’ordinateurs sont stockés dans une arborescence de fichiers et répertoires (appelés dossiers sur d’autres systèmes). Pour travailler efficacement on organise son espace de travail en répertoires et sous-répertoires. On appelle répertoire courant (working directory) le répertoire où on se trouve à un moment donné. Quelques commandes utiles (ET À MAÎTRISER) dès maintenant :
pwd
affiche le chemin d’accès du répertoire courantls
affiche la liste des noms (list names) des fichiers et répertoires du répertoire courantcd [DIR]
change de répertoire courantmkdir [NOM]...
crée des sous-répertoiresrmdir [NOM]...
supprime des sous-répertoires (si ils sont vides).
À vous de jouer
- Où êtes vous ? que voyez-vous dans votre répertoire courant ?
- Que montre l’option
-l
dels
? L’option-a
? Et en les combinant ? - Allez voir le contenu du répertoire où vous avez mis vos premiers exercices de programmation.
- Effet de l’option
-t
?
Synthèse et compléments :
La commande du -sh [REPERTOIRE]...
permet de savoir la taille totale occupéee par un
répertoire.
La commande quota -s
permet de vérifier l'utilisation du quota de votre compte.
Manipuler fichiers et répertoires
Explications : pour travailler efficacement il faut classer ses données en répertoires et sous-répertoires.
Commande mkdir
pour créer un répertoire, et rmdir
pour le supprimer. On a aussi
des commandes de copie cp
, de déplacement ou renommage mv
(move) et de suppression rm
(remove). la commande touch
sert en principe à changer la date de dernier accès d’un fichier,
mais elle permet aussi de créer un fichier vide.
Syntaxe et options principales :
mkdir REP...
rmdir REP...
cp [-rv] SRC... DST
rm [-ri] F...
mv F... DST
touch F...
À vous de jouer : créez un sous-répertoire Essais
dans le répertoire temporaire /tmp
, et
déplacez-vous-y.
- Faites quelques expériences pour éclaircir le fonctionnement de ces commandes. Déterminez le rôle des options indiquées.
- comment déplacer un répertoire ? Le copier ? Le supprimer ?
Agir sur le contenu des fichiers
Explications : jusqu’ici les commandes nous ont permis de déplacer des fichiers en bloc, sans regarder leur contenu, comme on transporte des cartons sans savoir ce qu’il y a dedans.
Pour modifier le contenu, vous connaissez code
, qui est un éditeur de textes amélioré.
D’autres commandes affichent simplement le contenu sans le modifier :
cat [-n] FICHIER...
less FICHIER...
À vous de jouer : pour bien distinguer ces commandes, essayez-les sur un fichier d’une
centaine de lignes constitué à l’aide de code
(coupez-collez n’importe quoi).
Synthèse : less
affiche page par page, en attendant une intervention humaine (taper espace). Possibilité de remonter dans le texte (flèches), et de chercher (/). cat
se contente d’afficher tel quel, ou en numérotant les lignes (option -n
).
Quelques outils pour le développement
Quand on programme, il est important de présenter le texte source de façon lisible, en respectant des conventions de présentation qui facilitent la lecture, et donc, ultérieurement, la maintenance des programmes.
Programmation en C++/Java : la commande astyle
vous permet de reformater un source C++/C/Java/...
Pratique pour remettre au clair un programme tapé un peu n’importe comment (celui que vous
a envoyé votre binôme)
- dans le répertoire
/tmp/Essais
que vous avez déjà créé, copiez le source de quelques programmes que vous avez déjà tapé. Exemple :
cd PremierCours
cp *.cc /tmp/Essais
cd /tmp/Essais
- compilez-les, un par un :
g++ -Wall prog.cc -c -o prog.o ; g++ prog.o -o prog
, pour vérifier qu’ils sont corrects - reformattez-les avec la commande
astyle [OPTIONS] [SOURCE...]
. Parmi les options, il y a des choix de styles, vous pouvez essayez-style=ansi
,-style=gnu
,-style=k/r
,-style=linux
. Notez les différences. - Que dit
file *
?
Synthèse : les différents styles correspondent à des communautés de programmeurs, qui
adopent des conventions cohérentes (dans chaque communauté), mais différentes (entre elles).
La commande file [FICHIER...]
tente de déterminer la nature d’un fichier en examinant le
début de son contenu.
Méta-caractères
Explication :Vous avez déjà utilisé une commande du genre cp *.java /tmp/Essais
.
L’étoile est ce qu’on appelle un méta-caractère qui a un rôle spécial : il ne s’agit pas d’un
fichier qui s’appellerait *.java
, mais d’un ensemble de fichiers dont le nom se termine par .java
.
Le caractère *
déclenche une expansion, c’est à dire le remplacement dans la ligne
de commande de la chaîne *.java
par la liste des noms des fichier du répertoire dont le nom se
termine par .java
.
Le caractère «étoile» est donc un caractère spécial, il y en a d’autres.
Mécanisme d’expansion
Il faut rentrer un peu dans les détails : l’exécution de la commande ls -l *.cc
se déroule
en deux temps :
- l’interprèteur de commandes recherche dans le répertoire courant la liste des noms de
fichiers qui se terminent par
.cc
(par exemplebonjour.cc
factorielle.cc
) et fait l’expansion (le remplacement du motif par les fichiers correspondants) de la commande, qui devientls -l bonjour.cc factorielle.cc
- l’interprète lance la commande
ls
, qui analyse ses 3 arguments (option et paramètres) et effectue l’action correspondante.
Retenir que le caractère étoile n’est pas traité spécifiquement par certaines commandes
comme ls
, mais par toutes, parce que le remplacement est fait par l’interprèteur de commandes.
Exemple : echo sources = *
Remarquez aussi que quand l’expansion ne fournit de résultat, l’étoile n’est pas remplacée.
$ echo *.xyz
*.xyz
Méta-caractères
Explication
le caractère *
est un méta-caractère, il sert à décrire d’autres caractères que lui-même; il en existe d'autres :
- Le caractère
*
signifie “n’importe quelle chaîne de caractères”. - Le caractère
?
signifie “n’importe quel caractère”. - Les crochets
[
]
définissent un ensemble caractères possibles. Exemple ls/bin/[aeiuoy]*
affiche les noms de fichiers qui commencent par une voyelle. - dans les crochets, le caractère
-
permet de définir un intervalle. Exempleecho /usr/bin/[0-9]*
affiche les noms de fichiers qui commencent par un chiffre.
Exercice
echo <motif>
permet d'afficher tous les fichiers qui correspondent au motif attendu.
Dans /mnt/roost/users
, trouvez (les étudiants distants ne peuvent pas faire cet exercice avec les informations qu'ils ont) :
- tous les identifiants d’utilisateurs commençant par un x
- tous les identifiants d’utilisateurs contenant un x
- tous les identifiants d’utilisateurs contenant un x, un w ou un z
- tous les utilisateurs dont le nom commence par une lettre de A à E. On suppose qu’il y a une seule lettre pour le prénom
Complément :
Le point d’exclamation !
comme premier caractère entre crochets, signifie tout caractère
sauf ceux spécifiés entre crochets. Exemple :
echo /bin/[!aeiuoy]*
Explication : Il y a d’autres caractères spéciaux, par exemple les guillemets simples et doubles qui servent à encadrer des chaines.
$ echo " hello, world"
hello, world
et qui font aussi perdre la particularité de l’étoile et d’autres méta-caractères. Exemple : echo "*"
affiche une étoile : l’expansion n’a plus lieu.
Archivage et compression
Compression
Explications : la compression consiste à recoder le contenu d’un fichier sous une forme moins encombrante. Deux problématiques distinctes :
- pour des fichiers de données, on exige une compression sans perte d’information : après compression et décompression, on doit retrouver les données d’origine à l’identique.
- pour des images, des vidéos et des sons, des compromis sont possibles : des “détails” peuvent être supprimés dans une certaine mesure (en jouant sur les tolérances psycho-physiologiques). C’est ce qui est utilisé pour les MP3, la télévision numérique etc.
Ici on s’intéresse uniquement à la compression sans perte, pour laquelle il existe de très
nombreux algorithmes et formats. Dans le monde Unix, les plus courants sont gzip
et bzip2
.
Exercice
- Copiez dans
/tmp
un fichier texte volumineux. Vous pouvez le créer avecls -R /usr/bin /usr/lib > /tmp/gros.txt
. Notez sa taille. - Appliquez-lui la commande
gzip
(lire le manuel pour voir comment ça marche). Que constatez-vous ? - Remarquez que les commandes
cat
etless
ne permettent plus de voir le contenu d’origine. À la place, employezzcat
etzless
. - Comment décompresser le fichier ?
Synthèse et compléments
- Le fichier compressé prend le suffixe
.gz
. Décompression pargunzip
- L’algorithme de compression est paramétrable, la commande
gzip
reconnait les options 1 et 9 qui agissent sur le taux de compression. Avec-9
elle est plus efficace, mais prend plus de temps. -
bzip2
utilise l’algorithme de Burrows-Wheeler, qui est en général meilleur que celui degzip
(basé sur Lempel-Ziv). Suffixe .bz2
, la commande de décompression estbunzip2
. Il existe également des commandesbzcat
,bzless
.... -
gzip [-v19] FICHIER...
gunzip [-v] FICHIER...
bzip2 [-v12..9] FICHIER...
bunzip2 [-v] FICHIER...
Archivage par tar
Explications : l’objectif de l’archivage est de grouper plusieurs fichiers en un seul, par exemple pour pouvoir les expédier en pièce attachée.
Fonctionnalités de base : construire une archive à partir d’un ensemble de fichiers, consulter son catalogue, extraire les fichiers de l’archive.
En plus : ajouter des fichiers supplémentaires dans une archive, en modifier, en supprimer, faire des extractions partielles, ...
Quelques formats traditionnels : tar , cpio , zip, 7z.
TAR = tape archiver, autrefois destiné à faire des sauvegardes (et des restaurations) sur bandes magnétiques, d’où son nom. Maintenant on l’utilise le plus souvent pour construire des fichiers d’archives.
Utilisation de base
tar -cf ARCHIVE RÉPERTOIRE...
tar -tf ARCHIVE
tar -xf ARCHIVE [FICHIER]...
Remarques
-c
= create,-f
= file,-x
= extract,-t
= list,- option
-v
= verbose pour voir le déroulement, - on donne traditionnellement le suffixe
.tar
aux archives.
Exercice
-
créez une archive de votre répertoire
M1101
. Bonne pratique : se placer au dessus du répertoire à archiver. Cela évitera “d’en mettre partout” au déballage. -
déplacez l’archive dans
/tmp
, - vérifiez son contenu sans la déballer
- extrayez les fichiers dans
/tmp
- trouvez comment extraire un seul fichier.
Synthèse et compléments : des options de la commande tar
permettent de produire et
utiliser directement des archives compressées :
-z
pourgzip
(suffixes conventionnels.tar.gz
ou.tgz
)-j
pourbzip2
(.tar.bz2
)
En séance de TP, vous aurez l’occasion de comparer tar
avec d’autres commandes d’archivage, comme zip
.