Prise en main de Linux

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 :

  • Installer une machine virtuelle sous windows ( il faut un bon PC pour que ça ne rame pas trop .. )
  • Installer Linux en dual boot ( certaines marques de PC rendent cette installation plus ou moins compliquée )
  • Acheter un PC d’occasion et installer uniquement Linux ( Linux demandant peu de ressources, on peut trouver une très bonne machine pour 100€ )

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 ).


1- Système de Fichiers sous linux

/		
├── 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 

2- Promenons nous dans le terminal Linux

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.

2.1- Où suis-je ? ( répertoire courant )

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

2.2- Qu’y a-t-il dans mon répertoire courant ?

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.

2.3- Changer de répertoire

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 )

2.4- Caractères de Substitution

  • * : se substitue à une chaîne de caractères
  • ? : se substitue à un caractère unique

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

2.5- Exécuter un programme

$ chmod +x prog   	# prog devient exécutable   
$ ./prog			# Exécution de prog

3- Commandes de Base du Terminal

3.1- Organisation de l’arborescence des répertoires

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

3.2- Manipuler des fichiers

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 

3.3- Manipulation des processus

# 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]

4- Outils de Recherche

4.1- Rechercher un fichier dans une arborescence

find ./[REPERTOIRE RACINE DE RECHERCHE] -name [FICHIER_RECHERCHE] -print 2> /dev/null

4.2- Rechercher un mot dans des fichiers

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'

5- Les Variables d’Environnement

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

6- Pour aller plus loin …

linux_memo


7- Exercices

7.1- Arborescence

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.

7.2- Script shell : Conversion d’Images

Nous considérons le système de fichiers suivant :

photos.src.zip


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 :

  1. Supprimer les espaces dans les noms de fichiers et de dossiers
  2. Créer un nouveau système de fichiers nommé photos.png contenant les photos de photo.src converties au format .png