J’encourage l’utilisation de Linux pour toute la partie systèmes embarqués ( objets connectés et robotique ).
Au delà de la plus grande fiabilité de ce système par rapport à tous les autres, sa structure permet ( après un minimum de pratique ) de comprendre davantage le fonctionnement d’un ordinateur.
Des applications plus complexes nécessitant par exemple un raspberry pi fonctionnent sous linux.
Plusieurs options sont possibles pour utiliser Linux :
Même si vous ne pouvez ( ou ne voulez ) installer linux, on utilisera de toutes façons des outils multiplateforme pour cette partie microcontroleurs ( architecture et périphériques ).
/
├── bin # programmes essentiels au système
├── boot # images de noyaux Linux
├── dev # accès aux périphériques
├── etc # configuration du système
├── home # comptes utilisateurs
│ └── kerhoas # racine du compte de l’utilisateur kerhoas (~)
├── lib # bibliothèques essentielles au système
├── lib32
├── lib64
├── media # répertoires de montage des périphériques de stockage externes
├── mnt
├── proc # ressources matérielles détectées
├── root # racine du compte de l’administrateur root
├── sbin # exécutables essentiels réservés à l’administrateur
├── sys
├── tmp
├── usr # programmes installés par le système
│ ├── bin # exécutables installés
│ ├── include # fichiers d’en-tête installés
│ ├── lib # bibliothèques installées
│ ├── sbin # exécutables réservés à l’administrateur installés
│ └── share # documentation installée
└──var # données fréquemment réécrites (fichiers de log)
Gestion des Droits
kerhoas@kerhoas-dell:~$ ls -al mon_fichier
-rw-rw-r-- 1 kerhoas kerhoas 0 Feb 1 13:53 mon_fichier
Même si la plupart des manipulations peuvent se faire à la souris, le terminal sous linux reste un passage obligé.
La maitrise de quelques commandes de base rendront le travail sous linux beaucoup plus agréable.
commande pwd : print name of current/working directory
kerhoas@kerhoas-dell:~$ pwd
/home/kerhoas
/home/kerhoas est un chemin absolu, défini à partir de la racine du système de fichiers
commande ls : list
kerhoas@kerhoas-dell:~$ ls -al
-rw-r--r-- 1 kerhoas kerhoas 8039 Nov 18 13:40 .bashrc
drwxrwxr-x 83 kerhoas kerhoas 12288 Feb 1 10:28 .cache
drwxr-xr-x 90 kerhoas kerhoas 4096 Jan 31 09:55 .config
drwxrwxr-x 30 kerhoas kerhoas 4096 Jun 24 2022 COURS
drwxrwxr-x 21 kerhoas kerhoas 4096 Dec 14 17:47 DATA
drwxr-xr-x 8 kerhoas kerhoas 4096 Jan 24 09:21 Desktop
drwxrwxr-x 4 kerhoas kerhoas 4096 Sep 30 20:45 Documents
drwxr-xr-x 7 kerhoas kerhoas 36864 Feb 1 13:48 Downloads
drwxrwxr-x 3 kerhoas kerhoas 4096 Jan 14 2022 FILMS
-rw-rw-r-- 1 kerhoas kerhoas 0 Feb 1 13:53 mon_fichier
drwx------ 6 kerhoas kerhoas 4096 Jun 2 2021 .mozilla
drwxrwxrwx 89 www-data kerhoas 20480 Feb 1 13:59 WORKSPACE_WEB2
Les fichiers/répertoires cachés sont précédé d’un ‘.’, dans un explorateur de fichier on peut les faire apparaitre avec CTRL+h.
Ces fichiers cachés contiennent notamment des configurations ou préférences de programmes.
commande cd : change directory
En utilisant un chemin absolu :
cd /home/kerhoas/Desktop
REMARQUE : La touche Tab permet d’effectuer l’autocomplétion. Lors de l’écriture d’un chemin, c’est un réflexe à avoir pour éviter les fautes de frappe.
En utilisant un chemin relatif :
’.’ correspond à mon répertoire courant.
si je suis dans le répertoire /home/kerhoas/, je peux écrire :
cd ./Desktop
pour accéder au répertoire parent :
cd ..
REMARQUE : le caractère ~ correspond au répertoire de l’utilisateur ( ici /home/kerhoas )
Affichage de tous les fichiers d’extension .c dans un répertoire :
$ ls *.c
stm32f4xx_hal_adc.c stm32f4xx_hal_gpio.c stm32f4xx_hal_tim.c util.c
stm32f4xx_hal.c stm32f4xx_hal_i2c.c stm32f4xx_hal_uart.c
stm32f4xx_hal_cortex.c stm32f4xx_hal_spi.c stm32f4xx_ll_rcc.c
$ chmod +x prog # prog devient exécutable
$ ./prog # Exécution de prog
mkdir [rep] # creation nouveau répertoire
rm -r [rep] # destruction récursive du répertoire et de l’ensemble de son contenu
ls -al [rep] # lister le contenu d’un répertoire
pwd [rep] # chemin absolu du répertoire courant
cd [rep] # changer de répertoire
touch [FILE] # creation nouveau fichier
rm [FILE] # destruction
ln -s [SOURCE] [NON LIEN] # link --> Création d'un raccourcis
mv [SOURCE] [DEST] # Rename / Couper-Coller
cp [SOURCE] [DEST] # Copier-Coller Fichier
cp -r [SOURCE] [DEST] # Copier-Coller récursif (dossiers)
cp -u [SOURCE] [DEST] # update : copie si fichier plus récent
cp -arv [SOURCE] [DEST] # copie récursive all (avec infos fichiers date, user)
# -v : verbose
file [FILE] # nature de l’information contenue le fichier
chmod +x [FICHIER] # Rendre exécutable un fichier
chmod 777 [FICHIER/DOSSIER] # UGO (User/Group/Others) rwxrwxrwx (read/write/exec)
cat [FICHIER] # afficher fichier dans console ( autres : more, less, head, tail, hexdump )
cat [FICHIER_1][FICHIER_2] > [DEST] # Concaténation de fichiers
# Liste des Processus
top # equivalent ctrl+alt+suppr sous windows
ps # lister les processus USR s’exécutant sur le terminal courant
ps -ax # liste tous les processus
# Destruction des processus
kill -9 [N°PROC] # Kill forcé
pkill [NOM_PROCESSUS]
find ./[REPERTOIRE RACINE DE RECHERCHE] -name [FICHIER_RECHERCHE] -print 2> /dev/null
grep "phrase dans un fichier" [fichier] # mot/phrase dans un fichier
# grep récursif dans des dossiers/sous-dossiers :
grep -r "mot/phrase dans un fichier" ./
# Remplacement d'un pattern dans des fichiers :
grep -rl oldtext . | xargs sed -i 's/oldtext/newtext/g'
Toute commande saisie dans un terminal correspond à l’exécution d’un programme.
Le terminal consulte donc une série de répertoires pour retrouver ces programmes.
Pour connaitre l’emplacement de la commande ls :
kerhoas@kerhoas-dell:$ which ls
/bin/ls
La liste des répertoires se trouve dans la variable d’environnement PATH :
kerhoas@kerhoas-dell:~$ echo $PATH
/local/scilab-5.5.2/bin:/local/sdk_elec/bin:/local/sdk_elec/eclipse:
/local/sdk_elec/gcc-arm-none-eabi-10-2020-q4-major/bin:
/local/sdk_elec/openocd/bin:/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
printenv # liste des variables d'evironnement
echo $PATH # Affichage variable PATH
export PATH=$PATH:/home/user/mes_prog # Ajouter un répertoire à PATH
nano /etc/environment # Redéfinition des variables d'environnement
Q1. A partir du terminal, créer le système de fichiers suivant :
ex
├── folder1
│ ├── file1.txt
│ ├── file2.txt
│ └── test.py
└── folder2
├── file3.txt
└── file4.txt
Q2. Lister l’ensemble des fichiers de folder1.
Q3. Ecrire “hello” dans file3.txt, puis afficher le contenu de ce fichier.
Q4. compléter le fichier test.py avec un programme en python permettant d’afficher “bonjour” dans le terminal. Rendre ce fichier exécutable et tester le bon fonctionnement du programme.
Nous considérons le système de fichiers suivant :
photos.src
├── animaux
│ ├── elephants 4827279_640.jpg
│ ├── goose 4816953_640.jpg
│ ├── greater rhea 4837821_640.jpg
│ ├── kingfisher 1905255_640.jpg
│ ├── turtles 4832203_640.jpg
│ └── zebra 3834241_640.jpg
├── fleurs
│ ├── rose 4825575_640.jpg
│ ├── sunflower 4837900_640.jpg
│ └── tulips 4840806_640.jpg
└── monuments
├── FIQoo3Yp7BBayEiETDnElqsDFuAmYjWy6JkKTXpX.jpeg
├── florence 1066314_640.jpg
├── kristin 4840227_640.jpg
├── low-angle-photo-of-flatiron-building-1123982.jpg
└── pisa 4840084_640.jpg
L’objectif est d’écrire un script shell permettant de :