TP1 : L'utilisation du shell bash
Table of Contents
1 Objectif :
L'objectif de ce TP est de se familiariser avec les bases de Shell Linux. Au delà du compte rendu classique "libre" que vous allez réaliser, vous devez répondre à toutes les questions posées dans ce TP.
2 Préparation de la carte (Un petit rappel de réseau) :
Connectez votre Jetson Nano et avec votre machine via un des câbles Ethernet bleu. Puis, ouvrez un terminal (ctrl+shift+T ou dans le menu utilisateur) sur votre machine desktop (Utilisez la machine non connectée au réseau de l'université).
Vous allez commencer par configurer la machine hôte afin de la connecter à votre carte Jetson Nano. Exécutez la commande suivante, pour définir l'adresse IP de votre machine hôte (NB: X est le numéro de votre Jetson Nano, noté sur le boîtier et au dessous de la carte).
sudo ifconfig eno1 192.168.1.(X+100)/24 up
Sur votre carte Jetson Nano est installé un serveur Secure SHell ssh, permettant de se connecter à votre carte. Nous allons l'utiliser pour réaliser ce TP. Le mot de passe de votre compte vous a été communiqué par votre enseignant.
Pour se connecter à votre carte Jetson Nano, vous allez exécuter le code suivant:
ssh [utilisateur]@192.168.1.X
3 Les bases du Shell
3.1 Se positionner
Exécutez la commande suivante :
pwd
- Que fait cette commande?
- Interprétez le résultat
- Manipuler la commande cd pour naviguer entre les différents répertoires de la carte. Rapporter au moins une manipulation avec un chemin absolue, et une autre avec un chemin relatif.
3.2 Les variables, commande
Exécutez les commandes suivantes, étape par étape :
et=pwd echo et
et=pwd echo $et
et=$(pwd) echo $et
- Rapportez les résultats de chaque exécution
- Interprétez les résultats des 3 questions précédentes, qu'en déduites vous?
3.3 Manipulation de fichier
Nous voulons réaliser la suivante arborescence de répertoires et de fichiers.
Figure 1: Arborescence de fichier de réaliser
- Donnez la suite de commande shell permettant de réaliser cette suite :
- Expliquez ce que fait chaque commande.
- Utilisez le moins de commande possible
- Pointez à la fin sur le fichier racine de votre TP (le père du répertoire d1)
- Utilisez les commandes rm et rmdir et mv pour supprimer tout les dossiers sauf d1 et déplacer tout les fichiers dans le répertoire d1. Utiliser man pour vérifier ce que chaque commande fait. Rapporter la liste des commandes sur votre compte rendu, avec explication.
4 Les piping et redirection
Chaque programme est associé automatiquement à trois flux de données qui lui sont connectés :
- STDIN (0) : Entrée standard : flux entrant dans le programme
- STDOUT (1) : Sortie standard : flux affiché par défaut sur le terminal (printf par exemple en C)
- STDERR (2) : Erreur standard : pour les messages d'erreur, également par défaut sur le terminal (par exemple fprintf( stderr, "msg error");)
Figure 2: Flux d'entrée, sortie
Le piping et la redirection sont les moyens par lesquels nous pouvons inter-échanger ces flux entre des programmes et des fichiers pour diriger les données de manière efficace.
4.1 La redirection
4.1.1 Redirection de flux de sortie
Pointer avec à la commande cd sur le répertoire d1 et exécutez les commandes suivantes :
ls ls > outfile ls
- Interpréter les différents affichages.
- Afficher le contenue du fichier outfile
- Que fait l'opérateur >
Maintenant, exécutez la commande suivante :
ls > outfile
- Affichez le contenue du fichier outfile
Exécuter la commande suivante
ls >> outfile
- Que fait l'opérateur >> ?
4.1.2 Redirection de flux d'entrée
Exécutez la commande suivante :
echo "bonjour" > outfile cat < outfile > outfile2
- Affichez le contenue du fichier outfile2, interpréter le résultat
4.2 Piping
4.2.1 Piping simple
Exécutez les commandes suivantes :
ls ls | head -4
- Interprétez les résultats.
- Utilisez les pipes pour afficher seulement le quatrième élément afficher par la commande ls /dev
- Utilisez les pipes pour lister les fichiers du répertoire /dev un par un
- Utilisez les pipes en utilisant les commande ls et wc pour compter le nombre de fichier dans le répertoire dev
4.2.2 Piping avec GREP et Expressions régulières
grep est une commande qui permet de faire des recherches de chaînes de caractères dans un flux de texte (fichier ou sortie d’une autre commande, par exemple) et elle accepte les expressions régulières.
Faites man sur la commande grep pour avoir une idée sur son fonctionnement , ainsi que les options qu'elle propose.
Exécutez la commande suivante :
cd ~ ls /dev > ll grep 'tty' < ll
- Que fait cette commande?
Les guillemets autour du terme à rechercher ne sont pas obligatoire. Néanmoins ils sont fortement conseillés, spécialement lors de l'utilisation avec des caractères non-alphanumérique.
- Utilisez la même commande pour chercher le mot Video dans tout les fichiers dans tout le répertoire /home/geii, ainsi que numéro de ligne ou sa apparaît [utilisez man pour trouver les options qu'il faut]
- Utilisez les pipes et grep pour afficher les noms de fichiers contenant un chiffre dans le fichier ll (Voici un lien qui peut vous aidez)
5 Les alias
Les alias sont des substitutions abrégées de commandes répétitives et/ou longues à taper dans la console.
Il est possible de définir vos alias dans le fichier .bashrc, se trouvant dans le dossier Personnel.
Ouvrez avec un éditeur de texte, le fichier .bashrc :
Nous allons créer un alias pour la commande ls -la, vers ls, ainsi ajouter la ligne suivante à la fin de votre fichier .bashrc :
alias ls="ls -la"
Sauvegarder et fermez votre fichier. Maintenant, dans votre terminal Exécutez la commande suivante à fin de prendre en compte votre alias :
source .bashrc
- Exécutez la commande ls. Rapporter les résultats sur votre compte rendu.
Si vous voulez exécuter la commande ls au lieu d'invoquer son alias appeler \ls.
- La commande rm supprime les fichiers sans demander une confirmation à l'utilisateur. Utilisez l'aliasing pour qu'elle demande à chaque fois à l'utilisateur une confirmation de suppression de fichier. Utilisez man pour vérifier les options de rm
6 Les scripts
Nous voulons créer un premier script bash appeler main.sh et écrivez le script suivant
#!/bin/bash echo "Le 1er paramètre est : $1" echo "Le 2ème paramètre est : $2"
- Donnez les commandes qui permettent de créer le fichier main.sh
- Donnez la commande pour vous autoriser à lire, à écrire et à exécuter le fichiers, tandis que votre groups a le droit de lecture, et aucun droit aux autres utilisateurs.
- Exécuter le script, rapportez le résultat
Nous allons utiliser maintenant les scripts pour manipuler les GPIOs
- Définissez dans votre script main.sh les commandes nécessaires pour activer le GPIOs défini par $1. (vérifier le résultat)
- Ajouter dans votre script main.sh les commandes nécessaires pour définir la direction du GPIO défini par la variable $2.
- Faites clignoter une LED au choix.
- Ajouter les commandes pour libérer le port $1.
7 La manipulation de fichiers : Système de gestion de température
Afin de lire la température du CPU sur votre Jetson Nano, nous commençons par afficher le contenu du fichier suivant :
/sys/class/thermal/thermal_zone*/temp
- Quelle est la commande permettant d'afficher le contenu du fichier?
La valeur de température en degré Celsius est égale au contenu du fichier divisé par 1000. Nous allons réaliser le script bash temp.sh pour déclencher automatiquement les mesures de températures.
- Écrivez une fonction bash readTemperature qui permet de lire la
valeur d'un fichier de température, de diviser sa valeur par 1000 et de l'affecter à une variable res. (Un petit tutoriel pour la manipulation de fonctions peut etre trouver sur le lien : https://linuxize.com/post/bash-functions/)
Afin de garder une traçabilité de différente température, nous allons enregistrer les valeurs mesurées dans un fichier texte, avec la date de capture. Le format de la date doit être : YYYY/MM/JJ:H:M:S afin que les dates peuvent être comparées, comme des simples chaînes de caractères.
Complétez la fonction readTemperature pour enregistrer les couples température/date dans le fichier temp.dat, ainsi son contenu doit etre similaire au suivant
41 2021/12/2:23:58:55 40 2021/12/2:23:59:31 40 2021/12/2:23:59:33 40 2021/12/2:23:59:35 40 2021/12/2:23:59:37 40 2021/12/2:23:59:39
Nous allons maintenant effectuer quelques opérations de recherche textuelle pour interroger le fichier. Afin de réaliser ceci, nous utilisons la commande awk, voici un exemple de cette commande :
echo "1 3" | awk 'BEGIN{print "Bonjour,"}{print "Premier : " $1", Deuxieme : "$2}END{print "Au revoir"}'
- Exécuter et interprétez les résultats de cette commande?
Nous utilisons une la commande awk maintenant pour réaliser des requêtes afin de :
- Récupérer les températures supérieures à une valeur en entrée.
- Récupérer les températures capter à partir d'une date en entrée
- Récupérer les températures capter inférieure à une date en entrée
- Combiner les différents scripts pour réaliser toutes les requêtes en même temps.