Skip to content

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:

  1. lire une ligne de commandes
  2. l’analyser
  3. l’exécuter
  4. 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 commande man. En général, les options peuvent être combinées derrière un seul tiret, exemple ls -l -t -r se réduit en ls -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 exemple ge TAB TAB montre geany , gedit ...
  • c’est la même chose pour les noms de fichiers en paramètres : ls /t TAB se complète en ls /tmp/. Ne saisissez jamais les noms de fichiers manuellement ! Utilisez systématiquement TAB 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.

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 courant
  • ls affiche la liste des noms (list names) des fichiers et répertoires du répertoire courant
  • cd [DIR] change de répertoire courant
  • mkdir [NOM]... crée des sous-répertoires
  • rmdir [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 de ls ? 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 :

  1. l’interprèteur de commandes recherche dans le répertoire courant la liste des noms de fichiers qui se terminent par .cc (par exemple bonjour.cc factorielle.cc) et fait l’expansion (le remplacement du motif par les fichiers correspondants) de la commande, qui devient ls -l bonjour.cc factorielle.cc
  2. 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. Exemple echo /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 avec ls -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 et less ne permettent plus de voir le contenu d’origine. À la place, employez zcat et zless.
  • Comment décompresser le fichier ?

Synthèse et compléments

  • Le fichier compressé prend le suffixe .gz. Décompression par gunzip
  • 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 de gzip (basé sur Lempel-Ziv). Suffixe .bz2 , la commande de décompression est bunzip2 . Il existe également des commandes bzcat , 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 pour gzip (suffixes conventionnels .tar.gz ou .tgz)
  • -j pour bzip2 ( .tar.bz2)

En séance de TP, vous aurez l’occasion de comparer tar avec d’autres commandes d’archivage, comme zip.