Skip to content

TP1 - Prise en main du shell

Cette première partie est un entraînement aux manipulations élémentaires du shell et des fichiers Unix. Vous devez simplement effectuer le travail demandé et poser toutes les questions que vous jugerez utiles. L’objectif est que vous soyez capable de refaire seul(e) les manipulations décrites.

  • Déterminez le système installé par la commande : uname -a
  • Affichez la distribution utilisée : cat /etc/issue ou lsb_release -a
  • Aide pour une commande : nomdelacommande --help
  • Manuel d’une commande : testez la commande man pour obtenir de l’aide sur la commande man.
  • Copiez le répertoire /media/commun/shell dans votre répertoire de travail par défaut (home directory) par la commande suivante (attention le point représente le répertoire courant) :

    • « En local »

      Terminal window
      cp -r /media/commun/shell .
    • OU «en remote» (sur vos machines perso ou à la maison).

      Terminal window
      scp -pr loginlinux@server:/media/commun/shell .
  • Placez-vous dans le répertoire shell et inspectez son contenu.

  • Les fichiers du répertoire noms sont vides, utilisez la commande ls -l pour le vérifier.

  • Placez-vous dans le répertoire noms (commande cd).

  • Pour les questions suivantes seule la commande ls et les caractères jokers doivent être utilisés.

    • Voir le cours : Les caractères et chemins spéciaux
    • Affichez tous les fichiers dont le nom se termine par .c
    • Affichez le nom de tous les fichiers dont le nom commence par un ‘a’ ou un ‘g’. Faites-le une fois avec les [], puis sans.
    • Affichez le nom de tous les fichiers dont le nom commence par un ‘a’ et termine par 1
    • Affichez le nom de tous les fichiers dont le nom contient exactement 3 caractères.
  • Sans changer de répertoire, trouvez au moins deux méthodes pour afficher le contenu de votre répertoire de travail par défaut (home directory). Affichez tous les fichiers y compris les fichiers cachés du répertoire de travail.

  • Remontez au répertoire shell.

Vous êtes dans le répertoire shell.

  • Affichez le contenu du fichier bravo.c par la commande cat bravo.c

  • Compilez puis lancez l’exécution du programme C contenu dans le fichier bravo.c; pour compiler utilisez la commande cc bravo.c -o a.out

    Cette commande crée un fichier exécutable de nom a.out

La commande a.out lance l’exécution du programme objet ; l’exécution échoue, car . (le répertoire courant) n’est pas présent dans la variable $PATH ; pour le vérifier affichez la variable PATH : echo $PATH

Il faut donc lancer l’exécution du programme objet par ./a.out

Voir le cours : Les variables « usuelles » (dont $PATH)

  • Recommencez mais en utilisant l’option -o qui permet de redéfinir le nom du fichier contenant l’exécutable du programme (que vous appellerez bravo).

    cc bravo.c -o bravo produit un fichier exécutable de nom bravo

    ./bravo lance l’exécution du programme objet (du répertoire courant)

  • De la même manière, compilez le programme boucle.c dans le fichier boucle et lancez son exécution. Pour l’arrêter, appuyez simultanément sur les touches Ctrl et C du clavier.

Voir le cours : Redirections E/S

Vous êtes toujours dans le répertoire shell et vous avez créé un fichier exécutable de nom bravo.

  • Lancez l’exécution de bravo en redirigeant sa sortie standard dans un fichier nommé out.
  • Recommencez mais en AJOUTANT la sortie de bravo à out (>> au lieu de >).
  • Tapez ls titi en redirigeant la sortie erreur de ls sur un fichier err.
  • Tapez ls titi * avec erreurs redirigées. Recommencez mais cette fois en redirigeant la sortie standard. Observez la différence : il s’agit de comprendre qu’un processus Unix a bien deux sorties : une pour les sorties normales et une pour les messages d’erreur.

La commande cat envoie le contenu des fichiers passés en paramètre sur sa sortie standard. Si aucun fichier n’est passé en paramètre, c’est le contenu de son entrée standard qui est envoyé sur la sortie.

Vous êtes toujours dans le répertoire shell.

  • Utilisez cat pour faire afficher à l’écran le contenu des fichiers m1 et m2 en une seule commande.
  • Utilisez cat pour créer une copie du fichier m1 baptisée m1bis.
  • Utilisez cat pour créer un fichier toto contenant un texte que vous taperez au clavier (terminer le texte par Ctrl-D qui est la marque de fin de fichier sur Unix).
  • Revenez à votre répertoire de travail par défaut (HOME directory), il existe au moins 3 syntaxes différentes de la commande cd pour faire cela.

  • Faites afficher votre environnement avec la commande env, puis avec la commande set. Observez les différences. La variable PS1 est-elle une variable publique ?

  • Le prompt (caractères avant le curseur dans un terminal) est défini par la variable de l’environnement PS1. Modifiez cette variable. (valable uniquement dans le terminal en cours)

  • Ajoutez à la fin de votre fichier .bashrc la commande echo -e "\nBonjour\n". Ouvrez une nouvelle fenêtre Terminal, vous devez voir s’afficher Bonjour.

  • Utilisez un éditeur (graphique) de texte pour écrire vos scripts. Je vous conseille d’utiliser vscode.
  • Une fois VSCode ouvert, ouvrez le dossier shell (Fichier > Ouvrir un dossier) pour retrouver et éditer vos fichiers.

Si vous ne pouvez pas lancer d’applications graphiques, vous pouvez utiliser l’éditeur de texte nano

Toujours sans écrire de script, uniquement avec les caractères jokers et les redirections vus dans ce TP (faites cet exercice avant de passer au ménage ci-dessous : il a besoin du répertoire noms) :

  • Depuis le répertoire shell, créez un fichier recap.txt contenant la liste des noms de fichiers de noms se terminant par .c.
  • Sans écraser recap.txt, ajoutez-y la liste des fichiers de noms dont le nom contient exactement 3 caractères.
  • Affichez le contenu de recap.txt à l’écran en une seule commande.

Voir le cours : Quelques commandes pour manipuler les fichiers (suite)

  • Sans changer de répertoire (vous êtes dans votre répertoire de travail par défaut), supprimez tous les fichiers du répertoire shell/noms.
  • Supprimez le répertoire shell/noms.