Partie 1

Dans cette partie, nous nous servirons de Cygwin (téléchargeable içi) qui est une émulation du système Linux.

La syntaxe générale des commandes Unix est :

nom_de_la_commande + [option] + argument

(on dit aussi "paramètre") L'argument sous ubunto s'écrit en majuscule.

L'objectif de cette partie est de manipuler les commandes et de travailler sur les options qui sont souvent spécifiques à chaque commande.

Exercices de prises de contact et commandes simples

  • 1. Comment s'appelle votre machine ? i686
  • 2. Quel jour sommes-nous ? (date).
  • 3. Quel jour de la semaine êtes-vous né ? (cal).

  • 4. Affichez votre nom de login.

Commandes Unix élémentaires

    Exercice 1

  • 1. Créez un fichier premiertexte contenant une ou deux phrases.
  • 2. Visualisez le contenu de premiertexte sans l'éditer.
  • 3. Quelle est la taille de premiertexte ?
  • 4. éditez PREMIERTEXTE. Que constatez-vous ?
    Sous ubunto, le shell ne reconnait pas le fichier car ce système d'exploitation distingue les caractères minuscules des caractères majuscules
  • Exercice 2 (cp, ls, mv)

  • 1. Faites une copie de premiertexte appelée double.
  • 2. Comparez leurs tailles.
  • 3. Renommez double en introduction.
  • 4. Quelle différence y a-t-il entre "mv double introduction" et "cp double introduction"?
  • "mv double introduction" renomme le fichier en "introduction", ce qui revient à changer son chemin (1 chemin pour un objet). Cela équivaut à l'action de "renommer" dans les interfaces traditionnelles. "cp double introduction" copie le fichier "double" et le "colle" à un autre endroit, ici dans le même dossier parent de "double" (à un objet correspond deux chemins). La commande correspond au copier coller des interfaces traditionnelles.

    Exercice 3 (mkdir, mv, cp, ls, cd)

  • 1. Créez un répertoire essai/.
  • 2. Déplacez introduction dans essai/.
  • 3. Faites une copie de premiertexte appelée copie, et placez-la également dans essai/.
  • 4. Affichez une liste de ce que contient essai/.
  • Exercice 4 (rmdir, cd, rm)

  • 1. Essayez de détruire essai/. Que se passe-t-il ? Que faut-il faire pour détruire un répertoire ?
  • 2. Détruisez tout ce que contient essai/.
  • 3. Détruisez essai/.

Afficher le contenu d'un dossier : ls

  • 1. Affichez le contenu de /usr/local/ sur windows : c:/users/val~1~PC-/appdata/local
  • 2. Quelle est la taille de votre .bashrc ? sur windows : c:/cygwin/home/val/.bashrc
  • 3. à quoi sert l'option -R de ls ? affiche le contenu des sous-répertoires jusqu'aux répertoires et fichiers terminaux
  • 4. 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 ? Indice : "trier" se dit to sort en anglais. L'ordre par défaut est alphabétique et tous les caractères en majuscules sont premiers devant les caractères minuscules : B> a
  • -f : transforme les minuscules en majuscules de sorte à ranger dans l'ordre alphabétiques en traitant minuscule et majuscule ensemble et non plus d'abord les majuscules et ensuite les minuscules
    -n : Trie par ordre numérique en plus de l'ordre alphabétique (si le dossier contient des fichiers nommés par des caractères alphabétiques en plus de fichier nommés par des chiffres, les fichiers alphabétiques sont classés en premier ds la liste)
    -r : inverse l'ordre par défaut ou donné en option +1 -2 : pour les fichiers qui ont un nom décomposables en plusieurs champs (ex. : "Brigitte Bardot" où "Brigitte" est le premier champ et "Bardot", le deuxième) permet de sélectionner le champ à trier.
  • 5. Affichez le contenu de votre répertoire courant de telle sorte que les fichiers modifiés récemment apparaissent en premier.
  • 7. décrivez le résultat de la commande ls -l.
  • L'option -l permet d'accéder au détail des fichiers ligne par ligne.

    Dans l'ordre, elle indique :
    • s'il s'agit d'un fichier ou d'un répertoire,
    • les droits
    • le lien
    • le propriétaire du fichier
    • le groupe
    • la taille en octet
    • la date et l'heure de la dernière modifiéation
    • le nom du fichier
  • 8. Comment afficher les droits d'un répertoire donné ?

  • l'option -l affiche les droits pour chaque type d'utilisateur (en orange : droits de l’utilisateur, en rose :les droits du groupe, en violet : les droits des autres.)
  • 9. Votre ls vous affiche le contenu de votre répertoire avec des signes distinctifs qui permettent d'identifier plus vite le type de fichiers (slash / pour les répertoires, arobase @ pour les liens, etc). Quelle est l'option qui ajoute ces caratères ? l'option -l permet également de voir le nb de liens
  • 10. Un répertoire a les droits suivants : "drwx--x--x". Je ne suis pas propriétaire; puis-je afficher le contenu du répertoire ?
    Non. "x" signifie qu'on peut seulement l'exécuter. Il aurait fallu qu'il y ai la mention "r" (comme "read")

Exercices sur les répertoires

    mkdir et rmdir

  • 1. créez trois répertoires en une seule ligne de commande.
  • 2. Effacez ces trois répertoires en une seule ligne de commande.
  • 3. Que se passe-t-il si vous tapez "mkdir mkdir"
  • 4. Vous voulez détruire un répertoire bla/, dont ls vous dit qu'il est vide. Cependant, quand vous tapez "rmdir bla", la machine vous répond :
    "rmdir: bla: Directory not empty". Que faut-il faire ?
    il faut ajouter l'option -r à la commande " rm " (et non pas " rmdir ")
  • 5. Est-ce que mkdir peut prendre des options ?
  • Oui. Comme on l’a vu ds les questions précédentes, il existe entre autres l’option « -v » qui affiche le résultat de commande (« création du repertoire », « impossible de créer le rep : le dossier existe déjà »...)
  • 6. à 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 de travail (répertoire dans lequel je suis à tel moment) contienne le répertoire "Rapport"
  • 7. 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 : l'option -p
  • 8. Comment créer un répertoire en spécifiant des droits ?
  • Il faut utiliser la commande "chmod" dont la syntaxe est : chmod + [code correspondant au droit souhaité] + [nomdurepertoire]
  • 9. Quel est l'effet de la commande suivante : "rmdir -p toto/tata/tutu/"?
  • 10. Vous voulez créer à la fois un répertoire toto/ et un sous répertoire tutu/ dans toto/. Quelle option faut-il utiliser pour que
  • si toto/ n'existe pas, le répertoire et son sous-répertoire soient crées;
  • si toto/ existe déjà, le sous-répertoire tutu/ soit crée, sans message d'erreur?
  • L'option -p permet justement de créer un sous dossier que le répertoire parent spécifié existe ou pas.

    cd

    But de l'exercice : apprendre à se servir de . et .. ("point" et "point point"). Supposons que vous avez l'arborescence suivante chez vous :
  • 1. Dans quel répertoire vous trouvez-vous quand vous vous connectez ?
  • Dans le dossier racine (noté : ~)
  • 2. Créér cette arborescence dans votre répertoire de travail
  • Mon repertoire de travail s’appelle « exo_cd» La création des objets peut se faire en deux lignes de commande :
    La première consacrée aux dossiers avec la commande mkdir:

    La deuxième ligne consacrée aux fichiers avec la commande touch :

    Cygwin affiche l'arborescence comme suit :
  • 3. Allez directement dans ~/Rapport/docs/afaire/.

  • La position courante est écrit en jaune avant la ligne de commande.
  • 4. De là, passez dans ~/Rapport/docs/fait/.
  • 5. Revenez dans ~/Rapport/.
  • 6. Sans changer de répertoire, regardez avec less le contenu de ~/www/index.html.
  • 7. Passez dans ~/Rapport/docs/.
  • 8. En restant là où vous êtes, affichez les droits de ~/Mail/
  • 9. Revenez dans votre répertoire principal.

Copier/déplacer des fichiers ou des dossiers : cp et mv

    cp

  • 1. 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, sans d'abord faire une copie de chacun des fichiers l'un après l'autre ?
  • Oui avec l'option -R (comme "recursif") déjà vu pour la commande ls pour l'affichage de toute l'arboresence
  • 2. 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à ?

  • Avec l'option -R, copie le répertoire essai à l’intérieur du répertoire tentative sous le nom « essai ».
  • 3. 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 ?
  • Pour un fichier en revanche, la commande cp fichier1 dossier1/fichier1 par exemple a pour effet d'écraser le contenu du fichier existant si fichier1 est déja présent dans " dossier1.
  • 4. Est-il possible de taper une ligne du genre de : "cp fichier1 fichier2 fichier3 répertoire/" Quel est l'effet de cette ligne ?

  • mv

  • 1. La syntaxe de mv est mv fichier1 fichier2; fichier1 est renommé en fichier2. Mais que se passe-t-il si fichier2 existe déjà ?
  • Cela écrase le contenu du fichier 2.
  • 2. Supposez que vous avez chez vous l'arborescence précédente, et que vous vous trouvez dans ~/Rapport/docs/. Comment faites-vous pour y amener Rapport.tex qui se trouve dans le répertoire père ?

  • Comment faites-vous ensuite pour ramener ce fichier à son emplacement d'origine ?
  • 3. Comment renommer un répertoire bla en blo ?
  • On écrit la commande " mv bla blo "
    Que se passe-t-il si le répertoire blo existe déjà ?
    Si blo existe déjà, bla devient un sous dossier de blo
  • 4. 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 ?
    Cela écrase le fichier existant
  • 6. Que se passe-t-il si on lance mv avec les options -i et -f ensemble ?
  • -f l'emporte sur -i : on force la modification de chemin même si le chemin cible existe déjà sans demander confirmation à l'utilisateur (ce que fait -i)

Visualiser le contenu d'un/plusieurs fichier(s) sans l'/les éditer : less

  • 1. Comment fait-on pour obtenir une page d'aide avec less ?
  • 2. Comment examiner plusieurs fichiers à la suite ? Comment passe-t-on au suivant ? Comment revient-on au précédent ?
  • Il faut écrire en argument le nom des fichiers les uns à la suite des autres. Une fois la commande tapée, on tape " :n " (comme " next ") pour passer au fichier suivant, et " :p " (comme " previous ") pour revenir au fichier précédent
  • 3. Quelles sont les commandes différentes qui permettent de quitter less ?
  • " q "
  • " : " puis " q "
  • " Q "
  • " : " puis " Q "
  • " Z " puis " Z "
  • 4. Comment dire à less d'ouvrir le fichier en plaçant en haut de l'écran la ligne n ?
  • On tape le numéro de ligne suivi de la touche "G "
  • 5. Comment dire à less d'ouvrir le fichier en plaçant en haut de l'écran la première ligne où apparaît un motif donné ?
  • 6. Quelles sont les deux commandes de less qui permettent de chercher un motif dans un fichier, respectivement après et avant la position courante ?
  • Soit le fichier " lexicologie.txt ". On y accède donc d'abord par la commande less:

    Et c'est après qu'on peut effectuer la recherche du motif (en bas de la fenêtre)
    En partant de la position courante vers la fin du texte :

    En partant de la position courante vers le début du texte :

  • 7. Comment dire à less de chercher le mot à partir de la première ligne du fichier, et ce où que l'on soit dans le fichier ?
  • Une fois la commande less tapée, Il faut taper "/@" puis le motif à rechercher :

  • 8. Que se passe-t-il si l'on cherche le motif suivant : "toTo" en donnant l'option -i à less ? Quelle option faut-il mettre à la place de -i pour chercher toTo tout en ignorant la casse des caractères ?


  • 9. Quelles sont les commandes qui permettent d'aller à la prochaine (resp. précédente) occurence du motif recherché à travers tous les fichiers édités ?
  • Une fois dans le less et une fois qu'on a saisi le motif recherché (par exemple "/langue"), on tape esc n.
  • 10. Comment chercher dans un fichier le caractère / ?

  • On tape " /\/ ". En effet, il faut déspécialiser le caractère en le faisant précédé par un anti-slash dans l'écriture du motif

Extraire des lignes de texte contenant un motif donné : grep (ou egrep)

    Rechercher des motifs

    Les options de grep

  • 1. Quelles sont les options de grep qui permettent d'obtenir des lignes de contexte (qui précédent et/ou suivent la ligne où figure le mot) ?
  • Pour ajouter au filtrage 1 ligne avant la ligne contenant le motif : l'option -B 1 :

    Pour ajouter au filtrage 2 lignes après la ligne contenant le motif : l'option -A 2:

    Enfin, l'option -C suivi d'un chiffre permet d'obtenir tel nombre de lignes suivant et précédant la ligne contenant le motif :

  • 2. Comment faire apparaître le numéro de la ligne où figure le mot recherché ?

  • Que se passe-t-il quand on demande également des lignes de contexte ? La fonction de numérotation s'applique également aux lignes de contexte:

  • 3. Comment faire pour afficher le nombre d'occurences du mot recherché ?

  • 4. Comment faire pour que grep ignore la casse des caractères (différence entre majuscules et minuscules) dans sa recherche ?

  • 5. Comment faire pour faire apparaître non pas les lignes où figurent le mot, mais les noms des fichiers ?

  • 6. Comment faire apparaître les lignes où ne figurent pas le mot recherché ?
  • L'option -v :

  • 7. Comment faire apparaître les noms des fichiers ne contenant pas le mot recherché ?
  • L'option -L :

  • 8. Comment faire pour que grep ne recherche que les lignes où figure le mot tel quel, et non pas ses variantes ?
  • Par exemple : on cherche le mot "distribution", mais pas "distributionnel" ou "distributionnalisme":
  • 9. Comment faire pour chercher plusieurs mots à la fois en faisant apparaître les numéros des lignes ?
  • Introduction aux expressions régulières

    Texte de Travail : 1 ère partie de Germinal de Zola
  • Pour afficher l'encodage du fichier : " file -i Zola.txt "
    Convertir en utf8 : iconv -f iso-8859-1 -t utf-8 Zola.txt > Zola-utf8.txt (cette commande est valable uniquement sur ubunto. Si vous utilisez cygwin , vous devez passer par un éditeur de texte, par exemple word, pour convertir le fichier en utf8)
  • 1. Chercher toutes les lignes commençant par "a" ou "A".
  • 2. Chercher toutes les lignes finissant par "rs".

  • 3. Chercher toutes les lignes contenant au moins un chiffre.

  • 4. Chercher toutes les lignes commençant par une majuscule.

  • 5. Chercher toutes les lignes commençant par "B", "E" ou "Q".

  • 6. Chercher toutes les lignes finissant par un point d'exclamation.

  • 7. Chercher toutes les lignes ne finissant pas par un signe de ponctuation (point, virgule, point-virgule, deux-points, point d'interrogation, point d'exclamation).

  • 8. chercher tous les mots contenant un "r" précédé de n'importe quelle lettre majuscule ou minuscule.

  • 9. Chercher tous les mots dont la seconde lettre est un "r".

Rechercher des fichiers selon divers critères : find

  • 1. Comment chercher tous les fichiers commençant par un "a" majuscule ou une minuscule, suivi d'éventuellement quelques lettres ou chiffres, par un chiffre entre 3 et 6 ?
  • Il existe deux façons de rechercher des fichiers donnés dans un dossier : soit on fait un egrep sur un ls, soit on écrit la commande « find » suivi de l'option -name. Mais les deux commandes, avec le même argument, ne produisent pas le même résultat. Voyez plutôt :
    avec egrep :

    içi la commande a pour effet d'extraire les lignes contenant le motif donné en argument. On n'a donc pas besoin d'exprimer l'extension du fichier recherché...
    Avec le même argument et la commande étendue find -name :

    Aucun fichier ne correspond à la recherche. En effet, la syntaxe de find est faite d'une façon telle que l'argument doit contenir le motif exact du/des fichier(s) que l'on recherche. Il aurait donc fallu pour que cela "produise un résultat" :
  • retirer le "^" en début d'argument, puisque par défaut, le premier caractère de l'expression régulière est censé représenter le premier caractère du fichier.
  • mettre un caractère/métacaractère représentant l'extension des fichiers recherchés derrière "[3-6]" .
  • Voyons ce que cela donne après modification :

    Pourquoi cela ne marche-il toujours pas? Après avoir fait pleins de tests sur les mêmes fichiers mais avec des variations dans l'expression régulière, je me suis rendu compte que la signification des étoiles n'était pas exactement la même (le diable est dans les détails) selon que l'on utilisait egrep ou find. En effet, alors qu'avec egrep, l'étoile signifie "0, 1 ou plusieurs fois le caractère précédant", avec find, elle symbolise ce qu'egrep signale au moyen du point : "nimporte quel caractère à cet endroit de la chaine de caractère"
    Entre [aA] et [3-6], il faut donc remplacer .* par *:

  • 2. 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?
  • Avec l'option -mtime
    Il y a plus de 30 jours : on complète l'option par +30:

    Il y a 30 jours : 30 :

    Il y a moins de 30 jours : -30 :
  • 3. Comment faire pour dire que le fichier a été modifié plus récemment qu'un autre fichier donné ?
  • On utilise l'option -newer :
  • 4. Comment fait-on pour spécifier que le fichier recherché est un répertoire ?
  • On utilise l'option -type d :
  • 5. Comment indiquer que le fichier recherché à une taille supérieure à une taille donnée ?
  • On fait appel à l'option –size :

    où c=bytes, k = kilobytes, M=mégabytes, G=gigabytes
  • 6. Utiliser find pour effacer tous vos fichiers de sauvegarde (terminés par un tilde) qui ont plus d'un mois. Pour les besoins de l’exercice, j’ai crée toto~.txt et donc ai mis « -« devant «30 » au lieu de « + »…