Vous êtes sur la page 1sur 123

Linux

Présenté par :
Dr MEZAOUR billel
Ingénieur R&D | Développeur d’application Chez Caplogy

b.mezaour@caplogy.com

www.caplogy.com

2023 Caplogy Group


4

Objectifs de cours
Introduction au système Linux

• Comprendre le rôle du système d’exploitation


• Quels sont les liens entre partitions, système d’exploitation, système de fichiers ?
• Pourquoi un système d’exploitation de type UNIX ?

• Connaître les fonctions de base d’un système d’exploitation LINUX


• Organisation de la hiérarchie de fichiers LINUX

• Commandes LINUX usuelles pour la gestion de fichiers, de processus, de flux

• Écriture de scripts en bash avec conditionnelles et appels de scripts


6

Introduction au système Linux


Compétences à acquérir
Compétences

Installer / Utiliser un terminal Linux


Connaitre les commandes de base UNIX
Se déplacer dans l'arborescence de fichiers
Se situer dans l'arborescence de fichiers
Comprendre et modifier les droits des fichiers

Savoir rediriger l’entrée ou la sortie d’une commande

Savoir composer des commandes


Construire une expression régulière
Faire de l’extraction et de la recherche de motifs
dans un fichier ou une chaine de caractères
Ecrire des scripts bash simples
Ecrire des scripts bash faisant appel à d’autres scripts

Traduire en scripts bash des algos avec conditionnelle


10

Plan

• Introduction générale

• Système de fichier linux

• Permissions d’accès aux fichiers

• Passage de la ligne de commande au script shell

• Installation & configuration


Introduction Générale Qu’est-ce qu’un système d’exploitation ? 12

Système d’exploitation ?
Un système d’exploitation (OS pour Operating System) est l’intermédiaire entre les applications
et le matériel

Applications

OS

Matériel physique

C’est le premier programme exécuté lors de la mise en marche de l’ordinateur, grâce à


l’amorçage (boot)
Introduction Générale Qu’est-ce qu’un système d’exploitation ? 13

Systèmes d’exploitation

• Ses fonctions principales sont Ordonnanceur (scheduler) :


• Le contrôle des ressources Assure l’exécution simultanée de plusieurs
• Le contrôle des processus programmes / processus
Les distribue sur les différents processeurs
• Le contrôle des périphériques
•…

• Il contient des outils de gestion « bas-niveau » utilisés par les applications


• Manipulation de fichiers
• Lecture / écriture en mémoire
• Détection d’erreurs
•…
Qu’est ce qu’un système d’exploitation ?

❑ Un système d'exploitation est un logiciel qui est dans un appareil électronique, pilote
les dispositifs matériels et reçoit des instructions de l'utilisateur ou d'autres logiciels
ou applications.

❑ Les systèmes d'exploitation comportent aussi l'interface avec l'utilisateur. Dans un


ordinateur, par exemple, c'est lui qui affichera les fenêtres et présentera le contenu
des unités de stockage (disque dur, CD, DVD…).
Exemples de OS:
Windows MAC Linux
Qu’est ce qu’un système d’exploitation ?

Architecture Type d’un système d’exploitation

Quelques exemples:
Unix, DOS, Windows, Mac OS, Linux, OS/2, BSD, ...

Dr. Samir Dawaliby 8


Introduction Générale Qu’est-ce qu’un système d’exploitation ? 14

Qu’est ce qu’un système d’exploitation ?


• 2 grandes familles (populaires) d’OS : UNIX et Windows
Windows UNIX
GNU/Linux
DOS, Windows NT • Fedora
MS-DOS • 2000 • Ubuntu OS X
• Windows 95 • XP • Mint iOS
• 98 • Vista • …
• Me• Seven Android BSD
• … • 8
• 10 Chrome OS

• Attention ! OS ≠ distribution
Distribution : OS + applications et logiciels (éditeurs de texte, explorateur web, jeux …)

Mais, concrètement, où sont les OS ??


Qu’est ce qu’un système d’exploitation ?
Exemple :
Lors de démarrage d’un ordinateur, la première chose qui s’affiche est un écran comme celui là:

🡪 Cette écran peut changer en fonction des versions de Windows ou un autre système
d’exploitation (exemple: MAC)

Une fois que le système est chargé, vous pouvez utiliser vos programmes :
jeux, Internet, logiciels de dessin, de mail, de musique…
Introduction Générale UNIX/Linux 28

UNIX/Linux : Caractéristiques
Système multi-utilisateurs : les ressources du système sont également
partagées entre plusieurs utilisateurs

• Les tâches peuvent appartenir à des utilisateurs différents

• Connexions à distance
• Tâches système

• Séparation des espaces de travail : données et mémoires propriétaires


Introduction Générale UNIX/Linux 27

UNIX/Linux : Caractéristiques
Système multi-tâches : plusieurs programmes ou commandes exécutées
simultanément

• L’ensemble des activités (tâches) se déroule simultanément :


• Chaque tâche a droit à un temps de calcul
• Le temps est découpé en tranches
• En apparence, les tâches s’exécutent en parallèle

Fin tâche 2 Début tâche 4


• L’ordonnanceur gère
• L’attribution des slots de temps
• Les changements de contexte et de mémoire
• Les priorités des tâches
• Et tire parti de la lenteur des tâches / capacités de l’ordinateur
Distribution Linux
🡪 Une distribution est en quelque sorte l'emballage de Linux. Le cœur, lui, reste le même
sur toutes les distributions.
🡪 Quelle que soit la distribution que vous installez, vous obtenez un Linux compatible avec
les autres. Certaines distributions sont juste plus ou moins faciles à prendre en main.

▪ La différence d’une distribution à l’autre est dans:

1. L’installation : très simplifiée comme très compliquée


2. La gestion de l'installation des programmes.
3. Les programmes préinstallés sur l'ordinateur (Windows est par exemple livré
avec Internet Explorer et Windows Media Player).
Système GNU/Linux
Choix de distribution
Mainteneur Public orienté Packages
distribution
RedHat Entreprise Avancé serveur RPM
(RHEL) (Débutant)
*Fedora Communauté Avancé Poste travail RPM
(Débutant) / serveur
*CentOS Communauté Avancé Poste travail RPM
(Débutant) / serveur

SuSE/Novell Entreprise Avancé serveur RPM


(Débutant)
Communauté

Debian communauté Avancé Poste travail DEB


/ serveur
*ubuntu communauté débutant Poste Deb
travail/serveur
*LinuxMint communauté débutant Poste travail Deb
Logiciel libre (free software) : quatre libertés

Liberté 0 : La liberté d'exécuter le programme

Liberté 1 : La liberté d'étudier le fonctionnement du programme, et de l'adapter


=> (accès au code source nécessaire)
Liberté 2 : La liberté de redistribuer des copies

Liberté 3 : La liberté d'améliorer le programme et de publier ses améliorations, pour


en faire profiter toute la communauté
=> (accès au code source nécessaire)
10

Plan

• Introduction générale

• Système de fichier linux

• Permissions d’accès aux fichiers

• Passage de la ligne de commande au script shell

• Installation & configuration


Introduction Générale Notions de partitions et de systèmes de fichiers 20

Partitions et systèmes de fichiers


• Le système de fichier associé à l’OS d’une partition primaire permet d’organiser les
données stockées en mémoire sous la forme d’une arborescence de fichiers

• Il assure
• La manipulation des fichiers : création / destruction, ouverture / fermeture, enregistrement,
déplacement etc.
• L’allocation en mémoire (fichiers de tailles différentes et dynamiques)
• La localisation des fichiers au sein de l’arborescence
• La sécurité et le contrôle des fichiers : partage par différentes programmes, accès
autorisés / non-autorisés 🡪 les droits !

• A chaque fichier sont associés des métadonnées, comme, les droits d’accès
en lecture/écriture, sa taille, qui est le propriétaire …
Introduction Générale Notions de partitions et de systèmes de fichiers 19

Partitions et systèmes de fichiers


• Le système de fichier associé à l’OS d’une partition primaire permet d’organiser les
données stockées en mémoire sous la forme d’une arborescence de fichiers
Arborescence du système de fichier linux
Contenu des répertoires
./ Root dir

bin Binaires de commandes essentiels à tous les utilisateurs

boot Fichier du chargeur de démarrage

dev Points d’accès préparés par le système aux périphériques

etc Fichiers de configuration

lib Librairies partagées et modules du noyau

media Points de montage des supports amovibles

mnt Points de montage pour monter les systèmes de fichiers temporaires

opt Répertoire d’installation de certaines applications optionnelles

proc Système de fichiers virtuel contenant les informations sur le noyau et les processus

sbin Binaires essentielles du système

srv Données concernant les services fournis par le système

Tmp Fichiers temporaires

usr Sous-répertoires contenant outils & applications utilisateur

var Données variables

home Répertoires d’accueil pour tous les utilisateurs


Les différentes catégories de fichiers

Echanges de données entre ce fichier et système


- fichier ordinaire
se font par octets (exemple : terminaux, ports
d fichier répertoire (directory) série et parallèle)
Echanges de données entre ce fichier et système se
c fichier spécial : périphérique
font par blocs (exemple lecteur disque)
mode caractère (raw)
b fichier spécial : périphérique mode bloc Fichier de communication inter processus unidirectionnel
p tube nommé (named pipe)
Raccourci vers autre fichier
l lien symbolique (symbolic link)
s socket

Fichier de communication bidirectionnel permettant de communiquer avec un autre


processus sur la même machine ou avec un processus s’exécutant sur d’autres
machines.
Les différentes catégories de fichiers
Dossiers principaux, termes et utilitaires inclus
Un nom de fichier valide:
• Doit contenir au maximum 255 caractères par nom de fichier.
• Est sensible à la casse : 'A' et 'a' sont différents.
• Peut contenir tous les caractères sauf "/".

🡪 On recommande d'utiliser des caractères alphanumériques ainsi que plus ("+"),


moins ( "-"), le point ("."), la virgule (",") et underscore (“_“).
On devrait éviter les caractères accentués et les espaces, mais ce n'est pas une règle.

Caractères à éviter
Lorsque vous nommez un fichier, il faut éviter certains caractères:
• Les traits d'union en début de nom.

• Les espaces
• Tous les autres caractères spéciaux: !@##%^&*():;"'}{|\<>?~`
Effectuer la gestion de base des fichiers

ls: Liste le contenu des répertoires.


File: Trouvé les informations sur les fichiers
whereis et which: Identifient les fichiers.
mv: Déplace (renomme) les fichiers.
cp: Copie les fichiers ou les répertoires.
touch: Change le timestamps du fichier ou créer un nouveau fichier.
rm: Efface des répertoires ou des fichiers.
mkdir: Crée un répertoire.
rmdir: Supprime un répertoire.
find: Recherche de fichiers dans une arborescence de répertoires
Commandes principales de gestion de fichiers
cat, tac: Lier les fichiers et imprimer les sorties standards.
cut: Supprime des sections de chaque ligne des fichiers.
expand: Converti les tabulations en espaces.
unexpand: Converti les espaces en tabulations.
fmt: Formate le texte.
head, tail: Affiche la première ou la dernière partie du fichier.
join: Fusionne les lignes de deux fichiers dans un champs commun.
nl: Affiche les numéros de ligne du fichier.
od: Transfert les fichiers en octal ou vers d'autres formats.
paste: Fusionne les lignes des fichiers.
pr: Converti les fichiers textes pour l'impression.
sed: Permet de faire des substitutions de textes sort:
Extrait des lignes de fichiers texte.
split: Sépare un fichier en morceau.
tr: Transfert ou efface des caractères.
uniq: Supprime les lignes dupliquées depuis un fichier assorti.
wc: Affiche le nombre d'octets, de mots et de lignes dans le fichier.
Informations sur les utilisateurs
▪ root
Un utilisateur particulier (super-utilisateur) a tous les privilèges root
Réservé à l’installation et l’administration du système
Pour des raisons de sécurité, on évite de se connecter root, utilisation de sudo
Création d ’utilisateur : useradd

▪ Les utilisateurs sont identifiés par des UIDs, un entier sur l’intervalle 0 .. 4 294 967 295 (FFFFFFFF).
Les utilisateurs avec un UID=0 sont super-utilisateurs

▪ Les utilisateurs appartiennent à des groupes identifiés par des GIDs, un entier sur l’intervalle 0 .. 4 294
967 295

▪ adduser et addgroup peuvent choisir automatiquement les UIDs et GIDs

▪ id affiche votre identification :

Remarque: La commande useradd fonctionne aussi mai ne créera pas le répertoire


'/home/username' mais la commande adduser le fera
Informations sur les utilisateurs
▪ Dans le fichier /etc/passwd, une ligne définie chaque compte utilisateur. Le mot de passe
encrypté se trouve dans /etc/shadow.
▪ Le format de /etc/passwd est le suivant:

1. Le premier champ est le nom d'utilisateur


2. Le champs x représente l'ancien emplacement du mot de passe. Les troisième et
quatrième champs sont l'UID et le GID de l'uilisateur Le cinquième champ est un
commentaire
3. Le sixième champ est le répertoire personnel de l'utilisateur
4. Le dernier champ est le shell par défaut de l'utilisateur
Informations sur les utilisateurs

▪ Le format de /etc/shadow est le suivant:

1. Nom utilisateur
2.Mot de passe encrypté sur 13 caractères, une entrée vide
signifie qu’il n'est pas nécessaire de fournir un mot de passe (dangereux!), le !devant le mot de
passe encrypté signifie que le compte est
bloqué. Le * signifie qu’aucun mot de passe n'a encore été défini
3. Nombre de jours (depuis le 1er Janvier 1970) depuis que le mot de passe a été changé
4.Nombrede jours avant lequel le mot de passe peut être changé (0 signifie que le mot de passe peut être changé
à tout moment)
5. Nombre de jours après lequel le mot de passe doit être changé (entrer
99999 pour signifier que l'utilisateur peut garder son mot de passe indéfiniment)
6. Nombre de jours pendant lesquels avertir l'utilisateur d'un mot de passe sur el point d'expirer (entrer 7 pour une semaine complète)
7. Le nombre de jours après expiration, pendant lesquels le compte est encore actif
8. Le nombre de jours ( depuis le 1er Janvier 1970) que le compte a été désactivé
9. Champ réservé pour utilisation ultérieure
Informations sur les groupes
•Dans le fichier /etc/group, il y a une ligne pour chaque groupe d'utilisateurs. Les mots de
passe encryptés sont dans /etc/gshadow.
•Le format du fichier /etc/group est le suivant:

1. Le premier champ est le nom d'utilisateur


2. Le second champ x signifie que le mot de passe du groupe est encrypté dans le
fichier /etc/gshadow
3. Le troisième champ est le GID
4. Le quatrième champ contient les membres du groupe
Informations sur les groupes
•Le format du fichier /etc/gshadow est le suivant:

1.Le premier champ est le nom du groupe


2. Le deuxième champ est le mot de passe crypté.
3. Le troisième champ est une liste d'administrateurs de groupe.
4. Le quatrième champ est une liste des membres du groupe.

Les mots de passe des groupes ne sont généralement pas activés tant que tous les membres du
groupe n'ont pas reçu le mot de passe de l'administrateur.
10

Plan

• Introduction générale

• Système de fichier linux

• Permissions d’accès aux fichiers

• Passage de la ligne de commande au script shell

• Installation & configuration


Informations sur les utilisateurs

▪ 3 types d’utilisateurs:

propriétaire (user)
personnes du mm groupe (group)
les autres (others)

▪ 3 Types de permissions:

Fichier Répertoire
Lecture (r) Afficher le contenu Affichier le contenu
Ecriture (w) modifier Créer/supp fichiers
Exécution (x) Exécuter Traverser
Permissions d'accès
Les permissions par défaut sont:
• 0666 pour la création d'un fichier
• 0777 pour la création d'un dossier

R🡪 autorise la lecture du contenu du répertoire


X🡪 autorisés ‘accès au répertoire (cd) et l'exécution d’un fichier
W🡪autorise la création, la suppression et le changement du nom d’un élément du
repertoire (mkdir, rm, rmdir, mv)
Gestion des droits de base

Droits Octal Binaire


--- 0 000 chmod 621 exemple 1
--x 1 001 rw- -w- --x
-w- 2 010 chmod 700 exemple 2
-wx 3 011 rwx --- ---
r-- 4 100
chmod 754 exemple 3
r-x 5 101
rwx r-x r--
rw- 6 110
rwx 7 111
Gérer la propriété des fichiers
Changer le propriétaire

chown [-R] nv_user fichiers


– Commande réservée au propriétaire actuel des fichiers ou des répertoires (et à root).
– L'option -R (récursif) permet d'agir sur l'ensemble des sous-répertoires.

Exemple :
chown -R stage4 /home/stage1

Changer le groupe propriétaire

chgrp [-R] nv_groupe fichiers

Ceci doit être effectué par root ou le propriétaire, à condition que celui-ci soit membre du
nouveau groupe.

Exemple :
chgrp -R stage4 /home/stage1
Permissions par défaut

▪ Les permissions par défaut sont :


• 0664 pour la création d'un fichier
• 0775 pour la création d'un dossier

▪ La plupart des systèmes attribuent ces permissions lors du démarrage


grâce à la commande umask.

▪ En général, la valeur du mask est de 022. Cela signifie que l'accès en


écriture pour le groupe et les autres utilisateurs est restreint.

▪ Pour déterminer valeur courante de umask : $ umask


▪ Pour modifier la valeur de umask : $ umask 77 /etc/login.defs
Trouver et placer les fichiers système
Commandes :

• Find: rechercher tous les fichiers


• Locate: permet de trouver très rapidement un fichier
• Whereis: est utilisé pour localiser les fichiers binaire, source et
page de
manuel d'une commande.
• Which: utilisé pour identifier l'emplacement d'un exécutable donné qui est exécuté
lorsque vous tapez le nom de l'exécutable (commande) dans l'invite du terminal.
• Whatis: la commande est utilisée pour obtenir une description d'une page de manuel
en ligne.

🡪 Pour Voir la fonction des différentes options des commandes tapez :


man [command]
Fichiers, processus et flux au travers de l’interprète
de commande
Zoom sur le manuel 41

Zoom sur le manuel


La commande man : " être autonome, c'est beau "
• Réponds aux questions : comment utiliser cette commande ? quelles sont toutes les options possibles ?
pourquoi ça ne fait pas ce que je veux ? etc.

• Une syntaxe à connaître !


D'après… man man
texte gras à taper exactement comme indiqué
texte italique à remplacer par l'argument approprié (plus souvent souligné)
[-abc] tous les arguments entre [ ] sont facultatifs
-a|-b les options séparées par | ne peuvent pas être utilisées simultanément
argument ... argument peut être répété
[expression] ... toute l'expression située à l'intérieur de [ ] peut être répétée

• Capsule vidéo : https://www.youtube.com/watch?v=IUVRh7IxaGk


Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 42

Commandes et fichiers
• Les fichiers sont des objets permanents sur des supports permanents,
qui restent sur le support magnétique lors de l’arrêt du système

• Sous UNIX, les répertoires, les programmes, les périphériques sont vus
comme des fichiers

• Chaque fichier a un nom, et fait partie d’une structure hiérarchisée


• Racine unique notée /
• Arborescence de fichiers
Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 44

Arborescence de fichiers
Répertoire courant

Répertoire parent

Chemin absolu vers titi.txt


/home/licence/CDA/titi.txt

Chemin relatif vers titi.txt


./titi.txt

Il existe un chemin unique de la racine vers n’importe quel fichier


• Ce chemin est une suite de noms séparés par des /
• Il peut être absolu, ou relatif au répertoire courant
Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 45

Arborescence de fichiers
Répertoire parent

Répertoire courant Chemin absolu vers titi.txt


/home/licence/CDA/titi.txt

Chemin relatif vers titi.txt


../licence/CDA/titi.txt
Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 46

Exploration de l’arborescence
Commandes et chemins
• cd : changer de répertoire courant (Change Directory)
• pwd : donner le chemin du répertoire courant (Print Work Directory)

(l’ensemble des commandes seront largement vues en TP avec leurs principales


options)
Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 47

Exploration de l’arborescence
Exemples avec $ cd /home/licence/CDA
les commandes cd et pwd $ pwd
/home/licence/CDA

Répertoire courant
Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 48

Exploration de l’arborescence
$ cd ..
Exemples avec $ pwd
les commandes cd et pwd /home/licence
Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 49

Exploration de l’arborescence
$ cd ../cnam
Exemples avec
$ pwd
les commandes cd et pwd /home/cnam
Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 50

Exploration de l’arborescence
• cd : changer de répertoire (Change Directory)

• pwd : donner le chemin du répertoire courant (Print Work Directory)

• ls : afficher la liste des fichiers et répertoires du répertoire courant, ou du


répertoire donné en paramètre (LiSt)

• rm (ReMove) / rmdir (ReMove Directory) : effacer des fichiers / des


répertoires

• touch / mkdir (MaKe Directory) : créer un fichier / un répertoire

• cp (CoPy) / mv (MoVe) : copier / déplacer des fichiers


Fichiers, processus et flux au travers de l’interprète
de commande
Des commandes pour agir sur les fichiers 53

Arborescence de fichiers
• Dans tous les systèmes, il existe 2 types de fichiers
• Les fichiers caractères (fichiers textes) qui dépendent de l’encodage utilisé par la système de fichiers
• Les fichiers binaires : images, applications…

De ces types va dépendre la façon dont le système interprète ces fichiers

• L’extension (caractères après le point) informe sur l’application qui a créé le fichier (.c, .ps, .tar,
.txt …)

• Des métadonnées sont associées aux fichiers


• date de création
• taille en octets sur le disque
• propriétaire, droits d’utilisation …
Fichiers, processus et flux au travers de l’interprète
de commande
( Encodage de caractères ) 55

Un point sur l’encodage des caractères


• Code ASCII (American Standard Code for Information Interchange, 1963)
• 1 octet = 1 caractère, mais n’utilise que 7 bits
Base 2 Base 10 Base 16
De 00100000 32 20
à 011111111 127 7F

• Permet de représenter 95 caractères courants de la langue anglaise


• Pas d’accents, lettres grecques, etc.
10

Plan
• Introduction générale

• Système de fichier linux

• Permissions d’accès aux fichiers

• Passage de la ligne de commande au script shell

• Installation & configuration


Installation UNIX/Linux 64

Installation
• Pour les utilisateurs de Windows 10
• Possibilité d’installer comme un terminal avec l’application Ubuntu dans l'OS Windows

• Seulement l'interprète de commande (terminal) ou système complet avec


environnement graphique

• Accès aux fichiers Windows, téléchargement d'applications Linux

• Tutoriel vidéo : https://www.youtube.com/watch?v=KHSKl9fZfko&feature=youtu.be

• Pour les utilisateurs de Mac ou Linux


🡪Terminal natif !
Installation UNIX/Linux 65

Solutions de VM

Machine virtuelle : un Linux dans le Windows


• Un système hôte (Windows) accueille un système invité (distribution Linux)
• L’invité est un simple fichier image (de 2 à 6 Go)
• Logiciel : VirtualBox https://www.virtualbox.org/
• Exemples d’images: https://ubuntu.com/download/desktop

Lancer le logiciel :
Création d’une image pour Linux :
Taille mémoire :
Disque dure :
Stockage sur le disque :
chargement de l’image :
Man pages
▪ Les manuels en ligne décrivent la plupart des commandes utilisées dans votre
système.
man [command]

Commandes pratiques du man :


● / : rechercher du texte
● n : aller à l'occurrence suivante
● N : aller à l'occurrence
● précédente q : sortir
Pourquoi la programmation des systèmes Unix?
Les principales applications :
● La création de plusieurs processus

● L'accès concurrente par plusieurs processus s'exécutant sur le même processeur.

○ Partage de données entre plusieurs processus (un exemple classique est le


producteur/consommateur)

○ Partage de ressources entre plusieurs processus, avec une possible exclusion mutuelle.

● Les communications entre processus (échanger des données qui ne sont pas partagées)

● La synchronisation entre processus (ne pas lire des données qui ne sont pas complètement écrite)

Dr. Samir Dawaliby


Pourquoi sous Linux et comment?
● Les concepts sont généraux et se retrouvent dans tous les systèmes d'exploitation.

● Les sources du noyau de linux sont accessibles et open source,


● Les interfaces sont normalisées.
● Le noyau linux est écrit en C

Pour faire de la programmation système sous linux, il faut donc savoir


comment coder en C sous linux.

Dr. Samir Dawaliby


Programmation en C sous Linux
Pour programmer sous linux, on a besoin :
● D'éditer son code,
● De le compiler,
● De le builder,
● De le débugger.

La plupart du temps, on utilise un IDE


● Les IDE reposent sur la plupart des outils que nous allons lister pour chacune des fonctionnalités
qu'ils offrent.

● Il est parfois utile de comprendre ce que l'on génère avec un IDE (pour voir ce qui ne va pas).

Dr. Samir Dawaliby


Editer le code sous Linux
Si l'on ne dispose pas d'affichage graphique, on doit passer par un éditeur en ligne de
commande, tels que :

● vi : date de ... 1976. Installé par défaut sur l'immense majorité des linux.
● nano : date de 2000. Inclus la coloration syntaxique par exemple.
● pico : éditeur de texte par défaut pour le logiciel CLI pine (email). Sous licence. nano
est basée sur l'interface pico.

Dr. Samir Dawaliby


Compilation
Lorsque vous tapez un fichier source C, il ne s'agit que de texte.
Ce ne sont pas des instructions que le processeur peut exécuter.
Pour traduire le source C en instructions pour le processeur, il est plus pratique d'utiliser un outil :
le compilateur C.

La compilation est constituée de plusieurs étapes, qui sont regroupées sous le terme 'compilation' .

Les étapes de compilation d’un fichier .c


La première étape, analyse le source C, vérifie qu'il est correct (qu'il ne comporte ni ambiguités,
ni erreurs) et génère l'ensemble d'instructions processeur correspondant.

Le résultat de cette première étape est un nouveau fichier appelé fichier objet qui contient les instructions.

Cette étape ne suffit pas à construire le programme exécutable complet puisqu'il manque encore plusieurs
choses.
Les étapes de compilation d’un fichier .c

On utilisez des fonctions que vous n'avez pas écrites :


lire un caractère,
écrire un caractère,
les fonctions mathématiques, etc.

Ces fonctions et les instructions processeurs qui les réalisent sont fournies avec le compilateur C.

Les fonctions standards sont regroupées dans une librairie.

Il y a une librairie pour les fonctions mathématiques, les entrées / sorties, la gestion de la mémoire,
etc.

Le rôle de la deuxième étape, appelée édition de liens :


Déterminer les fonctions qui sont nécessaires à votre programme.
Les étapes de compilation d’un fichier .c
Compiler le code sous Linux
GCC (GNU Compiler Collection, à l'origine GNU C Compiler).
● Permet de compiler du C,
● Mais aussi du C++, Ada, Fortran, Pascal, VHDL, D, Objective C...
● On parle de gcc quand on veut compiler du C.

GCC a de très nombreuses options (une quarantaine). Les plus utilisées sont :
● -I : include
● -L : link
● -l : librairies à linker
● -O : optimisation du code
● -Werror : Warning traités com

Dr. Samir Dawaliby


Compiler le code sous Linux
GCC est le compilateur standard sous linux
● Il existe des portages sur les principaux OS (windows, macOS) et pour beaucoup de
microprocesseurs (AMD64, ARM, MIPS, PowerPC, etc.)
● Il existe des alternatives (PathScale, TinyCC) mais leur utilisation reste exotique.

On utilisera GCC pour compiler. Mais comme tout compilateur, il a ses inconvénients:
● GCC est un outil très puissant
● Utilisable "à la main" quand on travaille sur des micro-projets,
● Il est vital d'utiliser des outils de build dès que l'on passe à des projets de taille même
moyenne

Dr. Samir Dawaliby


Compiler avec GCC
Pour indiquer à gcc que l'on souhaite compiler un fichier source, il suffit de lui donner l'option -c et
le nom de votre fichier source.
On peut également choisir le nom du fichier objet résultat de la compilation avec l'option -o.

gcc -Wall -o nom_du_fichier_objet -c nom_du_fichier_source_C

L'option -Wall demande au compilateur d'afficher tous les messages de prévention (lorsque
quelque chose est ambigu ).
Si tout se passe bien, gcc a créé le fichier objet .

Attention :
Avant de taper cette commande, il faut placer l'interpréteur de commandes dans le répertoire qui
contient vos fichiers sources avec la commande cd.
Edition de liens avec GCC (produire l'exécutable)
Pour construire le programme exécutable, le fichier objet généré par la compilation et
éventuellement une librairie .
L'option -o permet d'indiquer le nom du programme exécutable à construire et l'option -l le nom d'une
librairie.

gcc -o nom_du_programme -lnom_de_la_librairie nom_du_fichier_objet

Exemple : vous voulez compiler tp.c qui se trouve dans le répertoire TP1 de votre compte.
1. ouvrez un terminal / interpréteur de commandes
2. placez l'interpréteur de commandes dans le répertoire qui contient tp.c, c'est à dire TP1 : "cd TP1"
3. compilez tp.c et créez tp.o, le fichier objet : "gcc -o tp.o -c tp.c"
4. Exécutez votre programme : "tp" ou "./tp"

Si votre programme utilise une fonction de la librairie mathématique, par exemple, il faut le dire à
l'éditeur de liens avec l'option -l.
La librairie mathématique s'appelle tout simplement m.
Il faut donc ajouter l'option -lm à l'étape 3 ci-dessus : "gcc -lm -o tp -c tp.c "
Principales options du compilateur gcc
Exemple :

On considère un programme réalisant le produit de (i+2) par la racine carré de j.

• La somme i+2 est réalisée par une fonction f, qui est écrite dans le fichier f1.c
• La fonction g, écrite dans le fichier f2.c, se contente de la fonction racine carrée (sqrt) de la
librairie mathématique du C.
• Le programme principal main, qui calcule f(i)*g(j), se trouve dans le fichier p1.c
On veut construire le programme binaire exécutable qui regroupe tout celà.
Compilation de chacun des fichiers source .c puis édition des liens.
Déboguer le code sous Linux - Debug
Un Debug signifie la recherche d'erreurs dans le code, de fuite mémoire, etc.

Il existe aussi beaucoup d'outils de debug, comme par exemple :


● gdb : The GNU Project Debugger. Richard Stallman, 1988. Standard sous linux, mis à jour
régulièrement. Vous permet de :
○ De démarrer vos programmes, en spécifiant quoi que ce soit que puisse changer
son comportement
○ Faire stopper votre programme quand certaines conditions sont réalisées.
○ Examinez ce qui s'est passé, une fois que votre programme a été stoppé.
○ Changer des choses dans votre programme, pour corriger les effets d'un bug et en
chercher un autre.
● ddd : Interface graphique pour gdb.

Dr. Samir Dawaliby


10

Plan

• Introduction générale

• Système de fichier linux

• Permissions d’accès aux fichiers

• Installation & configuration

• Passage de la ligne de commande au script shell


Fichiers, processus et flux au travers de l’interprète
de commande
L'interprète de commande 39

L’interprète de commande
Le choix entre plusieurs shells
Tous les noms de shell se terminent par sh

Quelques exemples
• sh : un des plus anciens, écrit par Steve Bourne en 1977
• csh : avec une syntaxe proche du C (C-shell)
• tcsh : une version plus élaborée avec la syntaxe de csh
• bash : Bourne Again Shell, version GNU enrichie de sh
• Pour une liste plus exhaustive des shells disponibles sur la machine, voir le fichier
/etc/shells

On peut toujours lancer un shell en l’appelant par son nom

Lorsqu’on se connecte, on se retrouve sous un shell par défaut, prédéfini, souvent bash.
Pour savoir dans quel shell on est : echo $0
Fichiers, processus et flux au travers de l’interprète
de commande
L'interprète de commande 40

Syntaxe de l’appel de commande

La ligne de commande est découpée en « mots »

• Le premier mot désigne la commande à exécuter


• Les mots suivants peuvent être des options (avec un ou deux tirets en préfixe), et/ou
des paramètres (noms de fichiers ou simples chaînes de caractères)

$ ls -l /tmp

$ echo $0

$ ps --help

$ man cat


Le shell : l’interface en ligne de commande
Le shell = la couche logicielle qui constitue l’interface utilisateur d’un système
d’exploitation

Très souvent le mot « shell » fait référence à une interface en ligne de commande.

Script shell = un programme pour un shell

► permet de vérifier des conditions, de faire des boucles et des fonctions

► est exécuté (interprété) directement par le shell (n’est pas compilé)


Système GNU/Linux
Le shell
Le shell est un programme permettant d’interagir avec les services
fournis par un système d’exploitation
Le shell
• Pourquoi apprendre le langage du shell
▪ Le shell est l'interface de tous les jours en UNIX. Bien connaître son
shell permet d'économiser beaucoup d'efforts
▪ Le shell est universel: peu importe le système UNIX, vous pouvez être certain de
retrouver sh et csh
▪ C'est facile de programmer en shell
o Par rapport par exemple à C; le shell n'a pas été conçu pour être minimal ou
théoriquement élégant; il a été conçu pour être flexible et pratique
Les mauvais côtés des shell

Le shell possède quelques inconv́ enients :

- Documentation difficile d'accès pour le débutant (la page de manuel “man bash” est très
longue et technique) ;

- messages d’erreurs parfois difficiles à exploiter

- relative lenteur (langage interprété sans recompilation).


Les shells : quelques titres

sh : Bourne Shell

► était le shell UNIX par défaut


► beaucoup de shells modernes sont compatibles
bash : Bourne Again Shell
► le shell par défaut sous la plupart de distributions Linux et sous MacOS
zsh : Z Shell
► un shell avec des fonctionnalités avancées
cmd : la ligne de commande Windows
► offre des fonctionnalités pareils aux autres shells, mais est moins utilisé

PowerShell : un shell Windows qui se fonde sur .NET


Bash
Interpréteur de commandes
Lit des commandes (à partir du terminal ou d’un fichier)
Exécute les commandes
Écrit les résultats sur son terminal d’attache
Bash définit un langage, appelé le langage bash
Structures algorithmiques classiques (if, while, for, etc.)
Variables
Accès rapide aux mécanismes offert par le noyau du système d’exploitation (tube,
fichiers, redirections, …)
ifconfig
rm, mv, mkdir
systemctl
...
Réfléchissons-y

Pourquoi faire des scripts ?

► encore un langage de programmation ?!


► on pourrait écrire des programmes en Java (ou en un autre, vrai langage)

Les langages de scripts shell sont beaucoup mieux adaptés aux tâches de
gestion d’un système.

Les scripts bienfaits sont donc plus clairs et plus faciles à maintenir.
Script bash
• Un script bash est un fichier de type texte contenant une suite de
commandes shell, exécutable par l'interpréteur (ici le programme /bin/bash)
▪ Un script peut être lancé en ligne de commande, comme dans un autre script
▪ Modifiable par un éditeur de texte
▪ Un programme bash doit être rendu exécutable avec

chmod u+x mon_script.sh

▪ Par convention, les noms de script sont suffixés par l’extension « .sh »
• Invocation du script nommé mon_script.sh avec

./mon_script.sh

./mon_script.sh arg1 arg2


Structure d’un script bash
• Première ligne :
#!/bin/bash
▪ #! : indique au système que ce fichier est un ensemble de commandes à exécuter
par l’interpréteur dont le chemin suit
▪ /bin/bash : lance bash
• Puis séquence structurée de commandes shell
#! /bin/bash

commande1
commande2

• Sortie implicite du script à la fin du fichier


▪ Sortie explicite avec la command exit
Le Hello World

Le fichier sera interprété par /bin/bash

#!/bin/bash
echo “Hello World”
Afficher Hello World

Pour lancer :
► sauvegarder dans script.sh
► donner les droits à l’exécution : chmod +x script.sh
► lancer : ./script.sh
Variables

#!/bin/bash
message="Hello World"
echo $message
Variables
#!/bin/bash
message="Hello World"
echo $message

► $ pour utiliser la variable, pas de $ à la définition


► toutes les variables sont des chaînes de caractères

on fera des calculs numériques plus tard

► les noms de variable sont sensibles à la casse

Pas d’espaces autour de = à la définition !


Variables bash - exemple
a=42
echo $a
42

s='Bonjour, monde!!!'
echo $s
Bonjour,monde!!!

read x Ceci est une phrase


echo $x
Ceci est une phrase

read x y Ceci est une phrase


echo $x
Ceci
Calculs numériques
variable=$((10 * 20 - 1))
ou bien
let variable = 10 * 20 - 1
echo $variable
-4

Seulement les calculs avec les nombres entiers sont possibles :


echo $((3/2)) 1
if : l’instruction conditionnelle

x=”hello”
Les retours à la ligne sont
if [ $x == “hello” ]; then importants.

echo True On utilise != pour l’inégalité.

else Ces opérateurs ne marchent que


pour les chaînes de caractères.
echo False
fi
if : comparer les nombres

if [ $value -eq 1 ] value = 1 ? (equals)


if [ $value -ne 1 ] value ≠ 1 (not equals)
? (greater than)
if [ $value -gt 1 ]
value > 1 ? (greater or equal)
if [ $value -ge 1 ]
(less than)
value ≥ 1 ?
if [ $value -lt 1 ] (less or equal)
if [ $value -le 1 ] value < 1 ?
value ≤ 1 ?
if : vérifier plusieurs alternatives
x=4
if [ $x -eq 3 ]; then
echo Three
elif [ $x -eq 4 ]; then
echo Four
else
echo Something
fi
Test de fichiers
Si le fichier existe et... :
-r :est lisible
-w :l’ ́ecriture est possible
-x :ex ́ecutable

Exemple :

if [ -r $2 ] ;then
...
...
else
echo "vous n’avez pas le droit de lire le fichier $2"

fi
Test de fichiers : d’autres options
-f :est un fichier ordinaire
-d :est un répertoire
-p :est une représentation interne d’un dispositif de communication
-c :est un pseudo-fichier du type acc`es caract`ere par caract`ere
-b :est un pseudo-fichier du type acc`es par bloc
-L :est un lien symbolique
-u : son Set UID=1
-g :son Set GID=1
-k :son Sticky Bit=1
-S :est non-vide
case : vérifier plusieurs alternatives

x=3
case $x in 3 )
echo Three
;;
4 )
echo Four
;;
* )
echo Something else

esac

16/35
case : vérifier plusieurs alternatives
if : connecteurs logiques : syntaxe plus claire
x=4
y=5

if [[ "$x" -eq 4 ]] && [[ "$y" -eq 5 ]] then


echo '$x est 4 et $y est 5'
fi
if [[ "$x" -eq 5 ]] || [[ "$y" -eq 5 ]] then
echo '$x est 5 ou $y est 5'
fi
if : [ ... ] contre [[ ... ]]

[ ... ] est un synonyme de la commande test.


► if [ $x -gt 4 ]

if test $x -gt 4
for : traverser une liste
Traiter chaque ligne de la sortie d’une commande :
for i in $(ls)
do
echo "J'ai vu $i !"
done
while : boucle while

i=0
while [[ $i -lt 10 ]]
do
echo "et $i"
i=$(($i + 1))
done

La syntaxe pour les conditions est la même que pour if.


while : lire un fichier ligne par ligne
La commande read renvoie les lignes de l’entrée standard une par une.

while read line


do
echo $line
done < script1

On peut aussi utiliser les pipes :


cat script1 | while read line
do
echo $line
done
Tableaux : déclaration et indexation
Créer un tableau en utilisant la syntaxe liste :

tableau=( "salade" "tomate" "oignon" )

Accéder aux éléments d’après leurs indexes :

echo ${tableau[1]}

Donner les valeurs aux éléments directement :


tableau[0]="salade"
tableau[1]="tomate"
tableau[2]="oignon"
Tableaux : longueur et traversée

Pour savoir la longueur d’un tableau :

echo ${#tableau[@]}
ou bien

echo ${#tableau[*]}

Pour traverser un tableau :

for i in ${tableau[@]}
ou bien

for i in ${tableau[*]}
Variables bash

• Définir des variables dans un fichier (configuration)


MACHINE_LISTE=hosts
IF=enp0s3
DOMAINE_IP="EFREI.local"

• Inclure les variables dans un autre fichier

#!/bin/bash

. param
Fonctions : syntaxe de base

Pour déclarer une fonction :


function helloWorld {
echo Hello World
}

Pour appeler une fonction :

helloWorld
Fonctions bash

• Pour déclarer une fonction, on utilise la syntaxe suivante

maFonction()
{
instructions
}

• Pour appeler une fonction, on utilise la syntaxe suivante

maFonction param_1 param_2 ... param_n

• Paramètres passés à la fonction


▪ À l'intérieur de la fonction, les paramètres sont représentés,
respectivement, par les variables $1, $2,... , $n
Fonctions bash
#!/bin/bash

# déclaration d'une fonction


maFonction()
{ varlocal="je suis une fonction"
echo "$varlocal"
echo "Nombres de paramètres : $#" echo $1
echo $2
}

# appel de ma fonction
maFonction "Hello" "World!"

je suis la fonction Nombres de paramètres :


2 Hello
World!
Fonctions : accéder à tous les paramètres
$@ le tableau de tous les paramètres
$* une chaîne de caractères qui contient tous les paramètres
(aplatis)
$# le nombre de paramètres

Pour énumérer tous les paramètres :


function tous {
for i in "$@"
do
echo $i
done
}
Fonctions : variables locales et globales
Par défaut, toutes les variables sont globales. Pour déclarer une
variable locale, utilisée local.
x=1
y="hello"
function modif {
x=2
local y="bonjour"
}
modif
echo $x
echo $y
Fonctions : variables locales et globales
Par défaut, toutes les variables sont globales. Pour déclarer une
variable locale, utilisée local.
x=1
y="hello"
function modif {
x=2
local y="bonjour"
}
modif
echo $x # affiche 2
echo $y # affiche "hello"
Fonctions : valeurs de retour
Les fonctions n’ont pas de valeur de retour, mais elles ont une sortie standard.

function func {
echo "hello"
}
x=$(func)
echo $x
On peut aussi communiquer via les variables globales.
Fonctions : codes de retour
Une fonction peut renvoyer un code de retour.

function plusgrand {
if [[ $1 -gt $2 ]]; then
return 1 # code de retour
else
return 0
} fi
La variable spéciale $ ? contient le code de retour du dernier appel.
Un code de retour est toujours une valeur numérique.
Arguments d’une commande
• mon_script.sh arg1 arg2 arg3 arg4 …
▪ chaque mot est stocké dans une variable numérotée

o "$0" : toujours le nom de la commande


o • "$1" … "$9" : les paramètres de la commande
o • $# : nombre de paramètres de la commande
o • "$@" : liste des paramètres : "arg1" "arg2" "arg3" "arg4" …

#! /bin/bash $./mon_echo.sh
for i in "$@"; do $./mon_echo.sh toto titi
echo $i toto
done titi
$
Imbrication de commandes

• Pour récupérer le texte écrit sur le terminal par une commande dans
une chaîne de caractères
▪ $(cmd)
▪ Attention à ne pas confondre avec $cmd qui permet l’accès à la valeur de la variable
cmd
$ date
lundi 27 juillet 2015, 12:47:06 (UTC+0200)

$ echo "Nous sommes le $(date). "


Nous sommes le lundi 27 juillet 2015, 12:47:06 (UTC+0200).
$

Vous aimerez peut-être aussi