0% ont trouvé ce document utile (0 vote)
389 vues436 pages

Introduction aux systèmes d'exploitation

Le document présente le module de Système d'Exploitation pour la 2ème année IMA à l'Université Chouaïb Doukkali, détaillant le volume horaire, les prérequis, et les connaissances à acquérir. Il aborde les fonctionnalités des systèmes d'exploitation, la gestion des ressources, et les composants essentiels tels que le noyau et le gestionnaire de mémoire. Enfin, il décrit les services offerts par un système d'exploitation et les caractéristiques des systèmes multi-tâches et multi-utilisateurs.

Transféré par

adnanelaissaoui1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
389 vues436 pages

Introduction aux systèmes d'exploitation

Le document présente le module de Système d'Exploitation pour la 2ème année IMA à l'Université Chouaïb Doukkali, détaillant le volume horaire, les prérequis, et les connaissances à acquérir. Il aborde les fonctionnalités des systèmes d'exploitation, la gestion des ressources, et les composants essentiels tels que le noyau et le gestionnaire de mémoire. Enfin, il décrit les services offerts par un système d'exploitation et les caractéristiques des systèmes multi-tâches et multi-utilisateurs.

Transféré par

adnanelaissaoui1
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université Chouaïb Doukkali

Faculté Polydisciplinaire de Sidi Bennour


2ème année IMA – S3

SYSTÈME D’EXPLOITATION I
2ème année IMA – S3

PR. LAHMIDI AYOUB


2024-2025
Université Chouaïb Doukkali
Faculté Polydisciplinaire de Sidi Bennour
2ème année IMA – S3

VOLUME HORAIRE
❖ Cours : 24h (2h par séance)
❖ Travaux dirigés : 12h (1h30 par séance)
❖ Travaux pratiques : 10h (1h30 par séance)
❖ Evaluation des connaissances et des
compétences : 4h
Université Chouaïb Doukkali
Faculté Polydisciplinaire de Sidi Bennour
2ème année IMA – S3

EVALUATION DU MODULE

❖ Note du module :

80% EXAMEN FINAL + 20% TP


PRÉREQUIS
➢ Les notions du module « Architectures des ordinateur »
❖ Composants du système : Compréhension des différents composants d'un ordinateur,
comme le CPU, la mémoire, les bus, et les périphériques.
❖ Mémoire : Connaissance des concepts de mémoire vive (RAM), mémoire cache, et mémoire
de stockage.

➢ Les notions de programmation


❖ Structures de Contrôle : Boucles, conditions…
❖ Structures de Données : Utilisation des tableaux, pile, file…
❖ Gestion de Mémoire : Allocation dynamique, gestion de la mémoire et techniques de
libération.
CONNAISSANCES À ACQUÉRIR 1
➢Fonctionnalités et Caractéristiques des Systèmes d'Exploitation :
✓ Rôle : Gestion des ressources matérielles et exécution des programmes.
✓ Caractéristiques : Gestion de la mémoire et systèmes de fichiers.
➢Composantes Principales d’un système d’exploitation :
✓ Noyau : Gestion des processus, mémoire, et périphériques.
✓ Interface Utilisateur : Commandes et interfaces graphiques.
✓ Systèmes de Fichiers : Organisation et gestion des fichiers.

➢Familiarisation avec les Principaux Systèmes d'Exploitation :


✓ Exemples : Windows, Linux, macOS.
CONNAISSANCES À ACQUÉRIR 2
➢Connaissance Approfondie du Système d'Exploitation Unix :
✓ Structure : Architecture du système Unix, hiérarchie des répertoires.
✓ Système de Fichiers : Organisation et gestion des fichiers.

➢Maîtrise des Commandes de Base Unix et Programmation Shell :


✓ Commandes : Navigation, manipulation de fichiers, gestion des
processus.
✓ Shell Scripting : Création de scripts pour automatiser les tâches.
CONNAISSANCES À ACQUÉRIR 3
➢Gestion des Utilisateurs et des Groupes :
✓ Concepts : Création et suppression des comptes utilisateurs et groupes.

✓ Permissions : Attribution et modification des droits d'accès.

➢Gestion des Droits d'Accès :


✓ Permissions de Fichiers : Lecture, écriture, exécution.

✓ Sécurité : Gestion des permissions pour protéger les données.

➢Redirection des Entrées et Sorties :


✓ Utilisation de la redirection pour diriger les données d'entrée/sortie.
STRUCTURE DU MODULE
Chapitre 3
Chapitre 2 Ipsum
Chapitre 1 Ipsum
Ipsum

Introduction aux Les Commandes Programmation


systèmes de base Unix Shell
d’exploitation
C’EST QUOI UN SYSTÈME
INFORMATIQUE ??
LE TERME « INFORMATIQUE »
❖ Contraction d'information et automatique, désigne l’ensemble
des sciences et des techniques en rapport avec le traitement
automatique de l'information et ce traitement est effectué par
un système, concret (machine) ou abstrait.
UN SYSTÈME INFORMATIQUE
Un système informatique est un ensemble cohérent d'éléments interconnectés,
destiné à traiter automatiquement l'information.
1.Partie Matérielle (Hardware) :
Ensemble des éléments physiques d'un système informatique.
Exemples : Processeur (CPU), mémoire vive (RAM), disque dur (HDD/SSD), cartes
mères, périphériques (claviers, souris, écrans).
2.Partie Logicielle (Software) :
Ensemble des programmes informatiques exécutés par le matériel.
Exemples : Systèmes d'exploitation (Windows, Linux, macOS), applications
(navigateurs, éditeurs de texte), logiciels utilitaires.

Un programme est un ensemble d'instructions permettant de réaliser des tâches


spécifiques.
ARCHITECTURE SIMPLIFIÉE D’UN
ORDINATEUR
LA CARTE MÈRE 1
La carte mère est une plaque de résine contenant à l'intérieur et sur les deux faces une
fine couche de cuivre sur laquelle est imprimé le circuit imprimé, On y trouve les
éléments suivants :
➢ Le microprocesseur.
➢ La mémoire vive RAM (Random Access Memory) : Elle représente le lieu de travail
dans un ordinateur à savoir qu’un programme stocké sur le disque dur est chargé en
mémoire centrale où ses instructions seront accédées une à une pour être
exécutées par le processeur. La RAM est une mémoire volatile.
➢ La mémoire morte ROM (Read Only memory) : Elle contient les programmes du
BIOS qui gèrent le chargement du système et les entrées-sorties.
LA CARTE MÈRE 2
La carte mère est une plaque de résine contenant à l'intérieur et sur les deux faces une
fine couche de cuivre sur laquelle est imprimé le circuit imprimé, On y trouve les
éléments suivants :
➢ L'horloge qui permet de cadencer le fonctionnement du processeur, du bus. Sa
fréquence caractérise la carte mère. Elle est généralement très inférieure à celle du
processeur (de l'ordre de quelques centaines de MHz).
➢ Un ensemble de bus : un bus est un ensemble de fils de cuivre incrustés dans la
carte mère qui permettent de véhiculer l'information. Le bus se caractérise par le
nombre de fils qui le composent.
➢ Le "chipset" ou "jeu de composants" soudé sur la carte mère. Le chipset régit tous
les échanges au sein du PC en aiguillant les données sur les différents bus de la carte
mère.
L’UNITÉ CENTRAL OU MICROPROCESSEUR 1
➢ d'une unité de commande et de contrôle UCC : elle recherche les instructions, les
décode et en supervise leur exécution par l'UAL.
➢ d'une unité arithmétique et logique UAL : elle réalise les traitements qu'ils soient
arithmétiques ou logiques.
➢ de registres : ils sont des zones mémoires
internes au processeur destinées à accueillir
les données, les instructions et les résultats.
➢ d'une horloge qui rythme le processeur : à
chaque top d'horloge le processeur effectue
une instruction, ainsi plus l'horloge a une
fréquence élevée, plus le processeur effectue
d'instructions par seconde.
➢ d'un bus interne qui relie ces unités aux
registres.
PROBLÈMES DE LA GESTION
DIRECTE DES SYSTÈMES
INFORMATIQUES ??
SOLUTION :
ENVELOPPER LE MATÉRIEL
AVEC UNE COUCHE
LOGICIELLE
C’EST QUOI UN SYSTÈME
D’EXPLOITATION ??
UN SYSTÈME D’ÉXPLOITATION
Est un programme qui sert comme intermédiaire / interface entre
un utilisateur d’un ordinateur et le matériel informatique.
➢L’objectif du système d'exploitation:
➢ Contrôler / Exécuter des programmes / Application utilisateur.
➢ Rendre le système informatique facile à utiliser.
➢ Utiliser le matériel informatique de manière efficace.
OÙ SE SITUE LE SYSTÈME
D’EXPLOITATION
??
UN SYSTÈME D’ÉXPLOITATION
LE SYSTÈME D’EXPLOITATION (OPERATING
SYSTEM OU OS OU SE)
c’est le plus important des programmes systèmes :
1. Il contrôle les ressources de l’ordinateur.
2. Il libère le programmeur de la complexité du matériel.
➢Un système d’exploitation permet de répondre à deux
besoins qui ne sont pas forcément liés :
1. le système d’exploitation en tant que machine étendue (ou
« machine virtuelle »),
2. le système d’exploitation en tant que gestionnaire de ressources.

22
LE SYSTÈME D’EXPLOITATION (OPERATING
SYSTEM OU OS OU SE)
En tant que machine étendue:
➢Le système d’exploitation correspond à « l’interface » entre les
applications et le matériel.
➢De ce point de vue le système d’exploitation peut être assimilé à une
machine étendue ou virtuelle plus facile à programmer ou à utiliser
que le matériel :
✓ Un programmeur va utiliser le système d’exploitation par
l’intermédiaire “ d’appels système ”.
✓ Un utilisateur peut lui aussi – dans une certaine mesure – manipuler
un système d’exploitation, sans pour autant avoir à créer un
programme (commandes shell).

Partie 1 : Introduction 23
LE SYSTÈME D’EXPLOITATION (OPERATING
SYSTEM OU OS OU SE)
En tant que gestionnaire de ressources :
➢ Les différents composants d’un ordinateur doivent coopérer et partager des
ressources.
➢ Dans cette optique, le travail du système d’exploitation consiste à :
✓ ordonnancer,
✓ contrôler l’allocation des ressources :
• processeurs,
• mémoires,
• périphériques d’E/S,
• ...
entre les différents programmes qui y font appel.

Partie 1 : Introduction 24
LE SYSTÈME D’EXPLOITATION (OPERATING
SYSTEM OU OS OU SE)
➢ Le SE abstrait la machine
➢ Cache certains détails que
l’utilisateur n’a pas à connaître pour
exploiter la machine
➢ Présente à l’utilisateur une machine
virtuelle facile à utiliser et à
programmer.
➢ Offre des services abstraits
➢ Connait les détails internes et
garantie l’utilisation des services
concrets de la machine.
QUELS SONT LES SERVICES
OFFERTS PAR UN OS
??
LES SERVICES OFFERTS PAR UN OS
➢ Facilité de la création de programme.
➢ Editeurs, compilateurs, débogueurs, etc.
➢ Exécution du programme
➢ Chargement en mémoire
➢ Gestion des E / S et initialisation de fichier.
➢ Accès aux E / S et aux fichiers
➢ Traitement des spécificités des E/S et des
formats de fichiers.
➢ Accès au système
➢ Résolution des conflits de ressources.
➢ Protection de l'accès aux ressources et aux
données.
LES SERVICES OFFERTS PAR UN OS

Il y a quatre vues (dans la littérature) des SE:


➢ Gestionnaire de ressources : gère et alloue des
ressources
➢ Programme de contrôle : contrôle l'execution des
programmes utilisateur et des opérations des
périphériques d'E/S.
➢ Exécuteur de commande : Fournit un environnement
pour l'execution des commandes utilisateur.
➢Une Nouvelle vision plus moderne : le système
d'exploitation en tant que machine virtuelle.
LES CARACTÉRISTIQUES D’UN SYSTÈME
D’EXPLOITATION
Systèmes Multi-tâches :
Permettent l’execution de plusieurs taches à la fois, telque:
➢ Executer le programme d’un utilisateur, lire les données d’un disque ou afficher
des résultats sur une imprimante.
Systèmes Multi-utilisateurs :
Capable d’executer de façon concurrente et indépendante des applications
appartenant à plusieurs utilisateurs.
Remarque : Un système multi-utilisateurs est nécessairement multi-tâches,
mais l'inverse n'est pas vrai.
LES COMPOSANTS DU OS
➢ Le noyau (en anglais kernel) : représentant
les fonctions fondamentales du système
d'exploitation telles que la gestion de la
mémoire, des processus, des fichiers, des
entrées-sorties principales, et des
fonctionnalités de communication.
➢ L'interpréteur de commande (en anglais
shell) permettant la communication avec le
système d'exploitation par l'intermédiaire
d'un langage de commandes.
➢ Le système de fichiers (en anglais «file
system», noté FS), permettant d'enregistrer
les fichiers dans le disque sous forme d’une
arborescence.
➢ Les pilotes : Les pilotes sont fournis par
l'auteur du système d'exploitation ou le
fabricant du périphérique.
STRUCTURE EXTERNE D’UN SE :
LE NOYAU
➢Le système d'exploitation comporte un certain nombre de routines
(ou sous-programmes). Les plus importantes constituent le noyau
(kernel en anglais).
➢Le noyau d'un système d'exploitation se compose de quatre parties
principales : la gestion des tâches, la gestion de la mémoire, la
gestion des fichiers et la gestion des périphériques d'entrée-
sortie.
➢Il possède également deux parties auxiliaires : le chargeur du
système d'exploitation et l'interpréteur de commandes.
STRUCTURE EXTERNE D’UN SE :
LE GESTIONNAIRE DE TÂCHES
➢Sur un système à temps partagé, l'une des parties les plus
importantes du système d'exploitation est le gestionnaire
de tâches ou ordonnanceur.
➢Périodiquement, le gestionnaire de tâches décide
d'interrompre le processus en cours et de démarrer (ou de
reprendre) l'exécution d'un autre processus. Cette décision
peut être prise soit parce que le premier processus a
épuisé son temps d'allocation, soit parce qu'il est bloqué
en attendant une donnée d'un périphérique.
STRUCTURE EXTERNE D’UN SE :
LE GESTIONNAIRE DES FICHIERS
➢ Une des tâches fondamentales du système d'exploitation
est de masquer les spécificités des disques et des autres
périphériques d'entrée-sortie et d'offrir au programmeur un
modèle simple et facile à utiliser. Ceci se fait à travers la
notion de fichier.
STRUCTURE EXTERNE D’UN SE :
LE GESTIONNAIRE DES PÉRIPHÉRIQUES
Le contrôle des périphériques d'entrée-sortie (E/S) de
l'ordinateur est l'une des fonctions primordiales d'un
système d'exploitation. Celui-ci doit :
➢Envoyer les commandes aux périphériques, intercepter les
interruptions et traiter les erreurs.
➢Fournir une interface simple et facile à utiliser entre les
périphériques et le reste du système, qui doit être, dans la
mesure du possible, uniforme pour tous les périphériques, c'est-
à-dire indépendante du périphérique utilisé.
STRUCTURE EXTERNE D’UN SE :
LE CHARGEUR DU SE
➢ En général, de nos jours, lorsque l'ordinateur (compatible PC ou Mac) est mis sous tension, il
exécute un logiciel appelé BIOS (pour Basic Input/Output System) placé à une adresse bien
déterminée et contenu dans la mémoire ROM. Ce logiciel initialise les périphériques, charge un
secteur d'un disque, et exécute ce qui s'y trouve.

➢ Le chargeur du système d'exploitation est un programme crucial qui permet le démarrage


complet du système d’exploitation après l'initialisation par le BIOS.

➢ Après le BIOS, le chargeur lit les informations du disque de démarrage et charge le noyau du
système d’exploitation en mémoire.

➢ Il prépare la machine pour que le noyau du système d’exploitation puisse prendre le contrôle du
système.
STRUCTURE EXTERNE D’UN SE :
LE GESTIONNAIRE DE MÉMOIRE
La mémoire est une ressource importante qui doit être gérée avec prudence.
Sa gestion est la tâche du gestionnaire de mémoire. Celui-ci doit:
➢ Connaître les parties libres et les parties occupées de la mémoire,
➢ Allouer de la mémoire aux processus qui en ont besoin,
➢ Récupérer la mémoire utilisée par un processus lorsque celui-ci se termine
et traiter le va-et-vient (swapping en anglais) entre le disque et la mémoire
principale lorsque cette dernière ne peut pas contenir tous les processus.
LES PRINCIPAUX SYSTÈMES
D’EXPLOITATION
MS-DOS :
o Introduction : MS-DOS est l'un des premiers systèmes d'exploitation pour PC
les plus connus. Il est mono-utilisateur et mono-tâche.
o Évolution : Pour suivre les évolutions matérielles et les demandes des
utilisateurs, des couches logicielles additionnelles ont été ajoutées.
o Remplacement : MS-DOS a été rapidement remplacé par les systèmes
d'exploitation Windows.
Mac OS :
o Introduction : Développé par Apple, Mac OS a été lancé pour le Macintosh en
1984.
o Position : macOS est un concurrent majeur des systèmes Windows.
LES PRINCIPAUX SYSTÈMES
D’EXPLOITATION
Unix :
o Introduction : Unix est un système d'exploitation qui a été distribué
gratuitement, donnant naissance à de nombreuses variantes.
o Variantes Connues :
o Unix System V : Développé par AT&T et Bell Labs, c'est une évolution de la version
originale.
o Unix BSD : Développé à l'Université de Californie à Berkeley.
o Principaux Systèmes Unix pour les Architectures Intel :
o SCO OpenServer et UnixWare : Développés par SCO (Santa Cruz Operation).
o Solaris : Développé par Sun Microsystems.
o BSD (Berkeley Software Distribution)
o Trois Unix Dominants sur le Marché des Serveurs :
o HP-UX : Développé par Hewlett-Packard.
o Sun Solaris : Développé par Sun Microsystems.
o IBM AIX : Développé par IBM.
LES PRINCIPAUX SYSTÈMES
D’EXPLOITATION
Linux :
o Introduction : Linux a émergé comme une alternative populaire aux systèmes
Unix, à Novell NetWare et à Windows NT/2000 Server.
o Linux est multi-utilisateurs, multi-tâches, stable et gratuit.
o Principales Distributions de Linux :
▪ Red Hat Enterprise Linux (RHEL)
▪ Debian
▪ Caldera : Désormais intégré dans SCO.
▪ Ubuntu
LA FAMILLE DE WINDOWS
➢ 1992 : Lancement de Windows 3.10 et Windows pour Workgroups 3.11, axés sur le multitâche coopératif et l'interface multi-fenêtres.

➢ 1993 : Introduction de Windows NT 3.1, suivi en 1994 par Windows NT 3.5.

➢ 1995 : Début de la célèbre série avec Windows 95.

➢ 1996 : Lancement de Windows NT 4, disponible en versions Station de travail et Serveur.

➢ 1998 : Arrivée de Windows 98.

➢ 2000 : Commercialisation de Windows 2000 en versions Professionnel et Serveur, ainsi que Windows Millennium.

➢ 2001 : Introduction de Windows XP, disponible en versions Familial et Serveur.

➢ 2003 : Sortie de Windows Server 2003 (initialement nommé .NET).

➢ 2007 : Lancement de Windows Vista.

➢ 2009 : Début de Windows 7.

➢ 2012 : Introduction de Windows 8.

➢ 2015 : Lancement de Windows 10, avec des améliorations notables telles que l'introduction du menu Démarrer révisé, des bureaux virtuels, et la fonctionnalité Cortana pour
l'assistance vocale.

➢ 2021 : Introduction de Windows 11, qui apporte un design modernisé avec un nouveau menu Démarrer, des coins arrondis pour les fenêtres, et une intégration renforcée avec
Microsoft Teams.
SYSTÈMES D’EXPLOITATION
UNIX /LINUX
SYSTÈME D’EXPLOITATION : UNIX
➢Multi-utilisateurs : le système identifie des personnes
logiques et permet à ces personnes d'utiliser le système
dans certaines limites.
➢Multi-tâches : le système est étudié pour exécuter
plusieurs programmes en même temps, grâce au concept
de "temps partagé”.
➢Multi-plateforme : Unix n'est pas un système dédié à un
processeur, mais c'est une famille de systèmes que l'on
retrouve sur une multitude de plates-formes.
ARCHITECTURE ET CARACTÉRISTIQUES

➢Noyau : il assure la gestion de la mémoire et des entrées sorties de


bas niveau et l'enchaînement des taches.
➢Ensemble d'utilitaires : dédiés à des tâches diverses :
❖ des interpréteurs de commande appelés Shells permettant de soumettre
des tâches au système, tâches pouvant être concurrentes et/ou
communicantes.
❖ des commandes de manipulation de fichiers (copie, déplacement,
effacement, etc.).
➢Base de données système : un ensemble de fichiers contenant :
❖ des informations sur la configuration des différents services.
❖ des scripts de changement d'état du système (démarrage, arrêt, …).
ARCHITECTURE ET CARACTÉRISTIQUES
LOGICIELS PROPRIÉTAIRES

➢Ces logiciels propriétaires sont vendus et sont régis par


une licence restrictive qui interdit aux utilisateurs de
copier, distribuer, modifier ou vendre le programme en
question.
➢Les logiciels libres sont les logiciels que l'ont peut
librement utiliser, échanger, étudier et redistribuer. Cela
implique que l'on ait accès à leur code source (d'où le
terme équivalent OpenSource).
LOGICIELS LIBRES
❖ Liberté d'exécution : tout le monde a le droit de lancer
le programme, quel qu'en soit le but.
❖ Liberté de modification : tout le monde a le droit
d'étudier le programme et de le modifier, ce qui implique
un accès au code source.
❖ Liberté de redistribution : tout le monde a le droit de
rediffuser le programme, gratuitement ou non
❖ Liberté d'amélioration : tout le monde a le droit de
redistribuer une version modifiée du programme.
LICENCE GPL
➢ Copyright : Donne au créateur d’une œuvre (comme un logiciel) le
droit exclusif de reproduire, distribuer, modifier et créer des œuvres
dérivées de l’œuvre originale. En général, ce droit exclut les autres de
faire ces choses sans autorisation.

➢ Copyleft : Contrairement au copyright traditionnel, le copyleft est une


manière de garantir que les libertés associées à une œuvre (comme la
liberté de modifier et redistribuer le logiciel) sont préservées pour tout
le monde.

❑ GPL :General Public License, est une licence de logiciel libre créée par
la Free Software Foundation (FSF). Elle met en œuvre le principe du
copyleft.
DISTRIBUTIONS UNIX

Des Unix libres :


✓Linux sur plate-forme Intel, Sparc, Alpha, Mac, …
✓FreeBSD sur plate-forme Intel, Alpha, PC-98
✓OpenBSD également multi-plate-forme.
QUELLE EST LA DIFFÉRENCE ENTRE LINUX
ET LES SYSTÈMES D’EXPLOITATION UNIX?
➢ UNIX est protégé par un copyright, et seules les grandes entreprises sont
autorisées à utiliser le nom UNIX. (IBM AIX, Sun Solaris et HP-UX sont tous des
systèmes d’exploitation UNIX.).
➢ Linux est un clone d’UNIX. Linux est un noyau développé à partir de zéro par
Linus Torvalds avec l’aide d’une équipe de collaborateurs à travers le monde.
➢ Linux est un noyau entouré par plusieurs applications et systèmes de gestion
(GNU/Linux).
➢ Les systèmes d’exploitation UNIX sont considérés comme des systèmes
d’exploitation complets.
QUELLE EST LA DIFFÉRENCE ENTRE LINUX
ET LES SYSTÈMES D’EXPLOITATION UNIX?

➢Linux est gratuit.


➢On peut le télécharger à partir d’Internet ou de le
redistribuer sous licences GNU.
➢La plupart des systèmes d’exploitation UNIX ne sont pas
libres.
➢Linux est considéré comme le plus convivial des UNIX.
PEUT-ON AVOIR 2 OS
INSTALLÉS SUR SON
ORDINATEUR EN MÊME TEMPS ?
BOOT LOADER : GRUB
➢ Dans ce cas, juste après l'écran de boot, vous aurez un programme
appelé Boot Loader qui s'affichera pour que vous puissiez faire votre
choix.
➢ Le boot loader dont nous parlerons ici porte le nom: Grub.
➢ Grub vous proposera de choisir entre Windows et Linux à chaque
démarrage de l'ordinateur.
➢ Il lancera l'OS par défaut si vous ne faites pas de choix avant quelques
secondes.
➢ C'est vous qui choisissez l'OS par défaut bien entendu, on ne vous
impose rien.
BOOT LOADER : GRUB
➢GRUB est responsable du démarrage du système d'exploitation.
Lorsqu'un ordinateur est allumé, le BIOS charge le chargeur de
démarrage depuis le disque dur ou un autre périphérique de
stockage. GRUB se charge de gérer le processus de démarrage du
système d'exploitation.
SCHÉMA DU DÉMARRAGE
SCHÉMA DU DÉMARRAGE
AVANTAGES DES PROGRAMMES SOUS
LINUX
➢ Ils sont gratuits.

➢ Les logiciels sont souvent mis à jour, et toujours gratuitement !

➢ Certains de ces logiciels sont meilleurs que ceux que l'on trouve sous Windows.

➢ Certains logiciels n'existent même pas sous Windows ! Vous découvrirez de


nouvelles fonctionnalités et vous finirez par gagner du temps tout en utilisant
plus efficacement votre ordinateur.

Mais pourquoi les programmes sont-ils gratuits ? Ce n'est pas complètement


grave financièrement ?
AVANTAGES DES PROGRAMMES SOUS
LINUX
Voyons les choses en face :
➢ Windows coûte environ 2000-3000 DH
➢ Linux est gratuit, soit 0 DH TTC

On ne peut pas s'empêcher de se dire :


"Mais si c'est gratuit, c'est que ça doit être quelque chose de vite fait
et de moins bonne qualité !"
HISTOIRE : 1984
➢ Microsoft vient de sortir son premier OS : MS-DOS,
mais il est encore loin d'être abouti.

➢ Toutes les versions de Windows 95 à Windows Me


étaient basées sur MS-DOS (MS-DOS se lançait au
démarrage juste avant Windows).

➢ Ce n'est que depuis Windows XP que MS-DOS a


complètement disparu. Il n'est aujourd'hui plus
développé.
UNIX
➢ Celui qui était considéré comme le meilleur s'appelait "Unix".

➢ Il était beaucoup plus puissant que MS-DOS et aussi plus


compliqué à utiliser, ce qui explique pourquoi seuls les
informaticiens professionnels l'utilisaient.
➢ Il est aussi beaucoup plus ancien : ses origines remontent à
1969 !
➢ Graphiquement, Unix ressemblait beaucoup à MS-DOS
LE PROJET GNU
➢ En 1984, que Richard Stallman créa le projet GNU.

➢ Richard Stallman était alors chercheur en intelligence artificielle au MIT. Il voulait


créer un nouveau système d'exploitation fonctionnant comme Unix (les commandes
restant les mêmes).

Pourquoi vouloir créer une "copie" d'Unix ?

➢ Parce qu'Unix était payant et devenait de plus en plus cher ! Richard Stallman a voulu Richard Stallman
réagir en proposant une alternative gratuite : le projet GNU était né. Fondateur du projet GNU

Bon à savoir :
✓ Mac OS X est lui aussi basé sur Unix.
✓ En revanche, MS-DOS et Windows sont complètement à part.
GNU EST UN SYSTÈME D’EXPLOITATION LIBRE
➢ GNU ne devait pas seulement être un OS "gratuit". Il devait être aussi un OS
"libre".

Quelle différence ?

➢ Un programme libre est un programme dont on peut avoir le code source,


c'est-à-dire la "recette de fabrication".

➢ Au contraire, Windows est un OS propriétaire dont le code source est Richard Stallman
Fondateur du projet GNU
jalousement gardé par Microsoft.

➢ Un programme libre est donc la plupart du temps un programme gratuit.


Mais c'est aussi un programme qu'on a le droit de copier, modifier,
redistribuer.
GNU EST UN SYSTÈME D’EXPLOITATION LIBRE
➢ C'est une véritable idéologie en informatique : ces gens
pensent qu'il vaut mieux donner le code source des
programmes que l'on fait car cela permet le partage des
connaissances et que ça aide l'informatique à évoluer plus vite.

Le slogan du monde du Libre pourrait être :


"L'union fait la force"
Richard Stallman
Fondateur du projet GNU

➢ On dit aussi souvent que le programme est "Open Source", car


son code source est ouvert. Tout le monde peut le voir.
HISTOIRE : 1991
Linus Torvalds,
➢ En 1991, Linus Torvalds, étudiant de l'Université de Helsinki en Finlande, Créateur de linux
entreprend de créer son propre système d'exploitation sur son temps libre.

➢ Ce système a pris le nom de Linux, en référence au nom de son créateur.

Quel rapport avec GNU ?

➢ Eh bien il se trouve que ces 2 projets étaient complémentaires :

❖ tandis que Richard Stallman créait les programmes de base (programme de copie de
fichier, suppression de fichier, éditeur de texte),
❖ Linus s'était lancé dans la création du "coeur" d'un système d'exploitation (le noyau).
NAISSANCE DU PROJET GNU/LINUX
➢ Le projet GNU (programmes libres) et Linux (noyau d'OS) ont fusionné
pour créer GNU/Linux.
➢Théoriquement, on doit donc parler de GNU/Linux.
➢ C'est toutefois un peu difficile à écrire et prononcer, et par abus de
langage on dit souvent juste "Linux". Linus Torvalds,
Créateur de linux

Richard Stallman
Fondateur du projet
GNU
RÉCAPITULATIF
Ce qu’il faut retenir dorénavant c’est le schéma suivant :
LES DISTRIBUTIONS DE LINUX
➢ On peut y trouver de nombreux logiciels différents et il existe des
centaines de façons différentes de l'installer.
➢ Pour simplifier la vie des utilisateurs et pour leur permettre de faire un
choix, on a créé différentes distributions de Linux.
➢ C'est un concept qui n'existe pas vraiment sous Windows.
Voici ce qui peut différer d'une distribution à l'autre :
❖ L'installation (elle peut être très simplifiée comme très compliquée).
❖ Lagestion de l'installation des programmes. Si elle est bien faite et centralisée, elle
peut rendre l'installation de nouveaux logiciels plus simple que sous Windows.
❖ Les programmes préinstallés sur l'ordinateur (par exemple Windows est livré avec
Internet Explorer et Windows Media Player).
LES DISTRIBUTIONS DE LINUX
❖ Une distribution c'est un peu l'emballage de Linux. Le
cœur(noyau), lui, reste le même sur toutes les distributions.
❖ Quelle que soit la distribution que vous installez, vous avez un
Linux compatible avec les autres. Certaines distributions sont juste
plus ou moins faciles à prendre en main.
➢Les différentes distributions existantes :
❖ Il existe un grand nombre de distributions Linux différentes. Mais bon
comment faire un bon choix : en effet, quand on débarque la première fois
on ne sait pas trop laquelle choisir... surtout que toutes sont gratuites.
LES DISTRIBUTIONS DE LINUX
➢Linux est le plus souvent diffusé sous forme d’une distribution, un
ensemble de programmes (noyau, sources des utilitaires,
commandes, applications) formant après installation un système
complet.
POURQUOI AUTANT DE DISTRIBUTIONS
➢ Chaque distribution a sa cible ; certaines sont orientées :
❖ Sur la facilité d’utilisation,

❖ Pour une utilisation dans le domaine scolaire ou musical,

❖ Avec des fonctionnalités optimisées pour les netbooks et leur


écran réduit.

❖ D’autres encore se veulent très légères et fonctionnent sur des PC


plus anciens.
UBUNTU
➢ Ubuntu Linux est une distribution GNU/Linux non
commerciale basée sur Debian et lancée en 2004.
➢Son nom provient d’un ancien mot bantou (langue d’Afrique),
Ubuntu, signifiant « humanité envers les autres » ou encore «
je suis ce que je suis grâce à ce que nous sommes tous ».
➢Initiée par le milliardaire sud-africain Mark Shuttleworth et
sponsorisée par sa société Canonical Ltd, Ubuntu Linux est
conçue principalement pour les ordinateurs de bureau (PC et
Macintosh) avec un objectif de convivialité et d’ergonomie.
LES DISTRIBUTIONS UBUNTU
Edition standard Un bureau KDE paramétrable à souhait

Variante pour l'éducation Variante légère (<384Mo RAM)

La création multimédia Centre multimédia et enregistreur TV

L'usage interne des employés Google


LES DISTRIBUTIONS UBUNTU
➢La numérotation des versions d'Ubuntu est basée sur l'année
et le mois de leur sortie [A.MM].
➢La première version d'Ubuntu, sortie en octobre 2004,
portait le numéro de version 4.10.
➢La version suivante, sortie en avril 2005, portait le numéro
5.04.
➢La version suivante, 5.10, est sortie en octobre 2005.
INSTALLATION DU SYSTÈME UBUNTU
➢Les manières d’installer UBUNTU:
❖ Version « live » sans installation pour essayer Linux.
❖ Installer un seul système d’exploitation
sur la partition.
❖ Installer Linux comme un programme sur une partition
Windows.
❖ Faire cohabiter les deux systèmes sur une machine et
choisir durant le démarrage.
COMMANDES DE BASE DU SHELL
➢ Un Shell est un interpréteur de commande en mode texte peut s'utiliser en mode interactif ou
pour exécuter des programmes écrits dans le langage de programmation du Shell (appelés scripts
Shell).
➢ En mode interactif, le Shell affiche une invite en début de ligne (prompt)
➢ La commande est interprétée et exécutée après la frappe de la touche "Entrée”.

Invite affiché par


l'interpréteur de
commande

Terminal sous Mac


FORMAT DES COMMANDES
➢ Le format des commandes suit une convention bien établie :
Commande [-options] [paramètres]
➢ Les options et les paramètres sont parfois facultatifs.
Exemple : cp -i /home/profs/prof1/Hello.c /home/etudiants/etudiant1
o cp : commande qui va lancer la fonction de copie
o l'option -i : permet de contrôler certains aspects du comportement de la commande
o /home/profs/prof1/Hello.c : Il s'agit de la source ou le fichier que vous souhaitez copier
o /home/etudiants/etudiant1 : Il s'agit de la destination ou l'emplacement de la copie
MÉTA-CARACTÈRES DU SHELL
➢sont interprétés spécialement par le Shell avant de lancer la
commande entrée par l'utilisateur.
➢permettent de spécifier des ensembles de fichiers, sans avoir à
rentrer tous leurs noms.
Voici les plus utilisés :
o * : remplacé par n'importe quelle suite de caractères
o ? : remplacé par un seul caractère quelconque
o [ ] : remplacé par l'un des caractères mentionnés entre les crochets. On peut
spécifier un intervalle avec
o - : [a-z] spécifie donc l'ensemble des lettres minuscules
ARCHITECTURE DE LINUX
➢La couche physique : Périphériques et BIOS
➢La couche système : Gérée par le noyau
➢La couche interface : le Shell et/ou le système X-Window
SE LOGGER SUR LINUX
➢Pour utiliser un système Linux sur une machine, il faut avoir un compte
sur cette machine et rentrer au clavier:
• Son nom d’utilisateur : login
• Son mot de passe : password

➢Le système vérifie la correspondance entre le login et le mot de passe


• Si échec, il refuse l’accès.
• Si correct, il lance la procédure de login (analyse différents fichiers de
configuration et met en place l’environnement de l’utilisateur).
➢L’utilisateur est alors placé dans son répertoire d’accueil : c-à-d
/home/user1
CHANGER LE MOT DE PASSE
➢Si vous souhaitez changer votre mot de passe, la commande pour
réaliser cette opération est : passwd ou yppasswd

% yppasswd
Changing NIS password for USER on MACHINE
Old password: --entrez votre mot de passe courant
New password: --entrez votre nouveau mot de passe
Retype new password: --rentrez votre mot de passe
NIS entry has changed on filemon
LES SHELLS
QU’APPELLE T’ON UN SHELL
➢Un shell est la liaison la plus
élémentaire entre l'utilisateur
et le système d'exploitation,
c'est-à-dire le programme de
gestion de la ligne de
commande.
➢Les commandes saisies sont
interprétées par le shell et
transmises au système
d'exploitation.
QUEL SHELL ?
➢ Le shell affiche un «prompt» et attend les commandes de l’utilisateur
➢ Il en existe plusieurs avec des fonctionnalités et des interfaces différentes les
uns des autres
❖ sh : Bourne Shell (shell standard)
❖ ksh : Korn Shell
❖ csh : C Shell
❖ bash : GNU (Bourne Again Shell)
➢ Pour savoir quel shell est utilisé, tapez :

➢ Le liste des shells autorisés : /etc/shells


SHELL
➢ Ouverture du shell (sous X Window) :
❖ Cliquer sur l'icône représentant le shell, ou sélectionner « ouvrir un terminal » dans le
menu droit de la souris.
➢ A ce point le shell peut recevoir des commandes:
❖ Exemples :
date : affiche la date
ls : liste les fichiers du répertoire courant
❖ Fermeture du shell :
Commande exit
Ctrl-D
PROMPT
Il contient généralement des informations utiles comme :
➢ Nom d'utilisateur : Qui montre quel utilisateur est connecté.
➢ Nom de l'hôte : Le nom de l'ordinateur ou du serveur.
➢ Répertoire courant : Le dossier dans lequel tu te trouves actuellement.
➢ Caractère spécial : Comme $ pour les utilisateurs normaux
TERMINAL VS PROMPT
➢ Terminal : C'est l'interface qui te permet d'interagir avec le système
d'exploitation via des lignes de commande. C'est l'application où tu tapes
tes commandes.
➢ Prompt : C'est l'affichage dans le terminal qui indique que le système est
prêt à recevoir une commande. Il apparaît généralement à la fin d'une
ligne, avant que tu commences à taper ta commande.

❖ Ilest possible sous Linux d’activer simultanément plusieurs consoles de connexion.


❖ Le basculement entre les consoles est obtenu par la combinaison de touches
<ctrl–alt–Fx>; où Fx représente les touches de function F1 à F8.
QUELLE EST MON IDENTITÉ
➢Pour Linux, l’identité d’un utilisateur est celle sous laquelle il se
logge
➢La commande whoami vous donne votre identité
➢L’utilisateur appartient également à un ou plusieurs groupes
➢La commande id vous donne votre identité et votre groupe
COMMANDES LINUX
➢Une commande est l'exécution d'un programme dans l'interpréteur.
Elle prend en entrée des options et/ou des paramètres.
➢Elle peut renvoyer des informations à l'écran ou dans un fichier,
modifier un fichier, ou produire un message d'erreur.
➢Une commande est composée en premier lieu d'un code, suivi
parfois d'options ou de paramètres :

$ cmd option argument

Pour obtenir toutes les options d'une commande, il suffit d'appeler


l'option --help.
COMMANDES LINUX

$ commande options arguments


➢Les options (souvent très nombreuses) permettent de
modifier le comportement de la commande.
➢En général elles sont précédées du signe '-' (e.g. ls -l)
➢Certaines commandes utilisent des arguments (e.g.
nom de fichier) Il y a un manuel en ligne: man ls
COMMANDES LINUX
➢Unix est sensible à la casse
a != A
ls != LS ou de Ls
➢Unix utilise l'espace comme séparateur de commandes
➢Exemple :
man date et non mandate
COMMANDES LINUX : CHAÎNER LES
COMMANDES
$ date; pwd; cal
lun fév 25 22:29:09 CET 2013
/usr/share/man/man9
février 2024
di lu ma me je ve sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
COMMANDES LINUX
➢Quelques séquences de raccourcis à connaître :

Raccourci Description Utilisation


Interruption du Arrête un processus qui ne répond pas ou une
[Ctrl] + C
programme tâche en cours.

Suspension du - Envoie un signal de suspension (SIGTSTP) au


[Ctrl] + Z
programme programme, le mettant en pause.

Fin de saisie sur un Utilisé pour quitter un shell ou arrêter la saisie


[Ctrl] + D
prompt dans des commandes interactives.
GESTION DES FICHIERS ET
DES RÉPERTOIRES
SYSTÈMES DE FICHIERS

Fichiers de
stockage Mémoire vive

Répertoires 107
d’arrangement
SYSTÈMES DE FICHIERS

Un système de fichier est l'agencement logique et structuré des données sur un support de stockage.
➢ Supports courants :
• Disque dur
• Clé USB
• DVD
• Autres supports de stockage numériques
➢ Fonctionnement :
• Les informations ne sont pas écrites aléatoirement sur les disques.
• Une organisation spécifique est nécessaire pour stocker à la fois les fichiers et les
données qu'ils contiennent.
• C'est le système de fichiers qui définit cette structure et permet de gérer les fichiers de
manière efficace.
➢ Exemples de systèmes de fichiers :
• ext4 (Linux)
• NTFS (Windows)
• FAT32 (USB, DVD)
SYSTÈMES DE FICHIERS

Un fichier est un ensemble de données numériques regroupées sous un même nom.


Ces données peuvent être enregistrées sur différents supports (disques durs, SSD,
etc.) et leur méthode de stockage suit un format spécifique.

➢ Caractéristiques techniques d’un fichier :


• Information numérique constituée d'une séquence d'octets.
• Le format du fichier définit la manière dont les données sont organisées et
interprétées.
➢ Organisation des fichiers dans Linux :
• Tous les fichiers sont structurés selon une arborescence unique.
• Le point de départ de cette structure est appelé racine (représentée par « / »).
SYSTÈMES DE FICHIERS

Une arborescence est une organisation logique des fichiers sur un ou plusieurs
systèmes de fichiers.
➢ Structure hiérarchique :
• Un point de départ : le répertoire racine ("root").
• Des sous-répertoires imbriqués, organisés de
manière logique.
➢ Exemple de structure :
• / (root)
• /home
• /usr
• /etc
• /bin
SYSTÈMES DE FICHIERS
Un répertoire est une structure qui permet de ranger
et organiser les fichiers.
➢ Fonction principale : Organisation des fichiers en
groupes logiques.
➢ Création : Il est possible de créer plusieurs
répertoires pour classer les fichiers selon leur
utilité.
➢ Équivalent : Folder ou Collection dans d'autres
systèmes d'exploitation.
111
SYSTÈMES DE FICHIERS
Le système de fichiers est organisé en une structure arborescente dont les
nœuds sont des répertoires et les feuilles des fichiers ordinaires.
Racine de l’arborescence

Répertoire Ayoub
Sous-Répertoire

Fichier
ARBORESCENCE LINUX
ARBORESCENCE TYPIQUE DE LINUX

etc Fichiers de configuration


bin Commandes principales disponibles

Racine du système
boot Fichiers de démarrage du système contenant le noyau

dev Point de montage des périphériques


/ home Répertoires personnels des utilisateurs
root Répertoire personnel du super-utilisateur
usr Logiciels et librairies supplémentaires
var Journaux systèmes (log)
proc Système de fichiers virtuel (VFS) contenant des infos sur les
processus en cours d’exécution
nnée
1iv1e4rsi
aire
SYMBOLES ASSOCIÉS À L’ARBORESCENCE

Différents symboles sont utilisés pour désigner des répertoires :

✓ Le « . » → Répertoire courant
✓ Le « .. » → Répertoire parent
✓ Le « ~ » → Répertoire personnel de l’utilisateur courant
✓ Le « / » → Répertoire racine de l’arbre

nnée
1iv1e5rsi
aire
LES TYPES DE FICHIERS LINUX
➢ Le système Linux offre trois types de fichiers principaux :
a. Les fichiers ordinaires (regular files).
b. Les fichiers répertoires ou répertoires (directories).
c. Les fichiers spéciaux. Ils désignent les périphériques, les tubes ou autres supports de
communication.
❑ Les fichiers spéciaux sont de plusieurs types, à savoir :
❖l : un lien symbolique
❖b : un fichier spécial de type bloc (périphériques …)
❖c : un fichier spécial de type caractère (périphériques …)
❖s : socket
❖…
116
LES RÉPERTOIRE PERSONNEL – LE TILDE

➢ Le terminal interprète le caractère tilde ~ comme un alias du répertoire personnel,

mais le tilde ne doit être précédé d’aucun caractère.


Exemple: Pour vous déplacer dans le répertoire tmp de votre dossier personnel d’où que
vous soyez :
$ cd ~/tmp
➢ Mais la commande ci- dessous, génère une erreur :
$ cd /~
103
COMMANDE DE MANIPULATION DES
RÉPERTOIRES

➢ La commande permettant d’afficher le chemin d’accès du répertoire courant


(C’est-à-dire votre position dans l’arborescence) est:

Pwd : Print Working Directory

104
COMMANDE DE MANIPULATION DES
RÉPERTOIRES
➢ La commande permettant de se déplacer dans une arborescence est :
cd repertoire (change directory)

% pwd
/home/profs/ayoub
% cd Enseignement
% pwd
/home/profs/ayoub/Enseignement

➢ On peut se déplacer en utilisant un chemin : cd chemin


COMMANDE DE MANIPULATION DES
RÉPERTOIRES
Pour identifier un fichier dans l'arborescence, on indique le nom complet du fichier
Le nom complet du fichier est représenté par :
➢ Le chemin composé de répertoires qui conduit de la racine de l'arborescence du
système de fichiers jusqu'au répertoire qui contient le fichier.
➢ Chaque répertoire est distingué des autres par un symbole séparateur "/".
➢ Le nom du fichier.
COMMANDE DE MANIPULATION DES
RÉPERTOIRES : LES CHEMINS D’ACCÈS
On distingue deux expressions d'un chemin :

➢ Le chemin d'accès absolu (chemin absolu)

• Le chemin absolu commence par le symbole


séparateur /, il exprime le chemin complet
à partir de la racine de l'arborescence.

➢ Le chemin d'accès relatif (chemin relatif)

• Le chemin relatif commence par un autre


caractère que le caractère séparateur. Il
indique un chemin à partir du répertoire de
travail courant.
COMMANDE DE MANIPULATION DES
RÉPERTOIRES
Exemple :
Le répertoire courant est : /var/log

➢ Le chemin absolu pour désigner le


fichier fichier.txt est:
/home/etd/etudiant1/fichier.txt

➢ Le chemin relatif est :


../../home/etd/etudiant1/fichier.txt

✓ ".." désigne le répertoire parent


✓ "." désigne le répertoire courant
COMMANDE DE MANIPULATION DES
RÉPERTOIRES : LES CHEMINS D’ACCES
Voici par exemple l'utilisation de cd pour aller dans le
bureau à l'aide d'un chemin absolu:

$ cd /home/ayoub/Desktop

Voici la même commande mais en utilisant un chemin


relatif.
Le dossier courant est /home/ayoub.

$ pwd
/home/ayoub
$ cd Desktop
COMMANDE DE MANIPULATION DES
RÉPERTOIRES : LES CHEMINS D’ACCÈS
COMMANDE DE MANIPULATION DES
RÉPERTOIRES : LES CHEMINS D’ACCÈS
COMMANDE DE MANIPULATION DES
RÉPERTOIRES
➢ La commande servant à créer des répertoires est :
• mkdir [options] répertoires… (make directory)
➢ pour créer une arborescence entière, on utilise l’option –p
Exemple : créer l’arborescence ~/TPLinux/Groupe1
mkdir –p TPLinux/Groupe1
➢ La commande servant à supprimer un répertoire est :
• rmdir repertoire (remove directory) Le répertoire doit être vide
• rmdir -p repertoire : pour supprimer les sous répertoires qui peuvent
figurer dans le chemin d’accès à un répertoire s’ils sont vides.
• rm -r repertoire : Si le répertoire est non vide
LA COMMANDE DU
La commande du : permet d’afficher la taille d’une arborescence.
Syntaxe : du [options] [répertoire]
OPTIONS DE LA COMMANDE DU

Option description
-a Affiche les statistiques pour tous les fichiers, pas
seulement les répertoires.

-b Affiche les tailles en octets.

-c Affiche la totalité de l'espace utilisé par tous les


arguments.
-k Af f iche la taille en kilo-octets.

-S Affiche séparément la taille de chaque répertoire, sans


inclure la taille des sous-répertoires.
LES TYPES DE FICHIERS DANS UNIX
➢ Les fichiers ordinaires (réguliers) sont une suite d'octets sans structure.
➢ Les répertoires (d) contiennent des informations sur les fichiers et les
sous-répertoires.
➢ Les liens symboliques (l) sont une catégorie particulière de fichiers (qui
contiennent l'emplacement du fichier à prendre en compte).
➢ Les fichiers périphériques (c-b) sont vus comme des fichiers spéciaux du
répertoire /dev.
➢ Les tubes nommés (p) sont des fichiers sur disque gérés comme un tube
(pipe) entre deux processus échangeant des données.
NOTION D’I-NODE
➢ Un i-node est une structure de données qui contient des métadonnées à
propos d'un fichier ou d'un répertoire.
➢ Chaque fichier (ou répertoire) dans le système de fichiers possède un i-node
unique qui est stocké dans la table d’i-nodes.

✓ ls -i : Commande qui permet d'afficher le numéro d’i-node de chaque fichier.


✓ stat : Commande qui donne des informations détaillées sur un fichier ou un
répertoire, y compris le numéro d’i-node.
STRUCTURE D’UN I-NODE
Les inodes stockent des métadonnées telles que :
➢Numéro d’i-node : Identifiant unique pour chaque fichier.
➢Le type du fichier (ordinaire, répertoire, spécial...).
➢Le nombre de liens.
➢UID (User Identification): numéro d'utilisateur du propriétaire.
➢GID (Group Identification) : numéro du groupe propriétaire
➢Taille du fichier en octets
➢Adresses des blocs de données (qui contiennent le fichier)
➢Droits du fichier
➢Date de création, du dernier accès et de la dernière modification.
TABLE D’I-NODE
Chaque fichier est référencé dans deux
tables :

Une table d'inodes, une table par


système de fichiers : cette table
regroupe tous les inodes fichiers, qui sont
regroupés l'un après l'autre. A chaque
inode, correspond un numéro d’inode.
Une table catalogue (une par
répertoire) : cette table décrit les
correspondances entre les noms de
fichiers et les numéros d'inodes.

Le système identifie un fichier non pas par son nom, mais par son numéro
d’inode.
LES DONNÉES D’UN FICHIER
Dans Unix, les fichiers sont représentés comme des séquences d’octets, mais différents aspects de
gestion de données sont importants :
➢ Bloc de données :
❖ Les fichiers sont divisés en blocs de données stockés sur le disque. L’i-node contient des
pointeurs vers ces blocs.
❖ Le nombre de blocs peut varier selon la taille du fichier.

➢ Données utilisateur :
❖ Les données réelles contenues dans le fichier, qu’il s’agisse de texte, de scripts, ou de binaire.

➢ Métadonnées :
❖ Les métadonnées d’un fichier sont stockées dans l’i-node (propriétaire, permissions, etc.).

➢ Cache disque :
❖ Le système Unix utilise un mécanisme de mise en cache pour accélérer l’accès aux fichiers en
stockant temporairement les blocs en mémoire vive.
QUELQUES COMMANDES D'ACCÈS AUX
RÉPERTOIRES
Commande Description
ls Affiche la liste des fichiers contenus dans un répertoire
Options :
-a : liste aussi les fichiers cachés;
-l : donne des informations détaillées sur chaque fichier;
-i : donne le numéro de l'i-node du fichier.
mkdir crée un répertoire.

cd Change le répertoire de travail (répertoire courant).

pwd Donne le chemin absolu du répertoire courant.

rmdir Supprime un répertoire vide.


QUELQUES COMMANDES D'ACCÈS AUX
FICHIERS
Commande Description
cat Affiche le contenu du fichier.

stat Affiche les caractéristiques du fichier.

ls Affiche les caractéristiques d'une liste de fichiers


(l'option -i affiche les numéros d'i -node des
fichiers).
rm Supprime un fichier.

touch Modifie les caractéristiques de date d'un fichier


(permet également de créer un fichier vide).
COMMANDES DE MANIPULATION DU
SYSTÈME DE FICHIERS
Commande Description
cp Copie de fichier :
cp <source> <destination>
Duplication du contenu du fichier et Création d'une
entrée dans un répertoire.
mv Déplace/Renomme un fichier :
mv <source> <destination>
Suppression d'une entrée dans un répertoire et
création d'une nouvelle entrée dans un répertoire.

Si on copie (déplace/renomme) un fichier dans un fichier qui existe déjà, ce


second fichier est modifié (contenu écrasé et caractéristiques modifiées)
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : cp
➢ Cette commande permet la copie de fichiers.
Elle s’utilise sous quatre formes :
1) La copie d’un fichier source dans un fichier destination.
Exemple :
Dans le répertoire p2, copie du fichier text1.txt dans text2.txt
COMMANDE DE MANIPULATION DES
FICHIERS
2) La copie d’un fichier dans un répertoire.
Exemple :
COMMANDE DE MANIPULATION DES
FICHIERS

3) La copie d’un répertoire dans un autre (seuls les fichiers sont copiés :
on obtient un message d’erreur pour la copie des répertoires).
Exemple :
Copie le contenu du répertoire projet1 dans /home/user/Desktop/projet1
Dans un répertoire projet2
Commande :
$ cd /home/user/Desktop/projet1
$ cp * /home/user/Desktop/projet2
COMMANDE DE MANIPULATION DES
FICHIERS

4) La copie récursive permet de copier une arborescence.


Exemple :

Copie de l’arborescence du projet1 dans le répertoire projet2.


Commande :
$ cd /home/user/Desktop/projet1
$ cp –r * /home/user/Desktop/projet2
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : mv
Cette commande est équivalente à une copie, suivie d’une suppression.
Elle s’utilise sous deux formes :
1) Transfert de text1 dans text2 et suppression de text1; Si text2
existe, il est effacé.
Exemple :
user@pc :~$ mv text1 text2
COMMANDE DE MANIPULATION DES
FICHIERS

2) Transfert de(s) fichier(s) cité(s) dans le répertoire avec


le(s) même(s) nom(s) :

mv fichier(s) répertoire
Exemple :
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : rm
Supprime un (ou plusieurs) fichier(s) d’un répertoire.
Exemple :
Suppression du fichier text1.txt du répertoire projet1.
$ cd /home/user /Desktop/projet1
$ rm text1.txt
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : TOUCH
Cette commande permet (entre autres) de créer un fichier vide.
Exemple :
$ touch demo.txt
NIVEAU D’AUTORISATION

$ : ce symbole indique le niveau d'autorisation sur la machine.


Il peut prendre 2 formes différentes :
➢$ : signifie que vous êtes en train d'utiliser un compte utilisateur
"normal", avec des droits limités (il ne peut pas modifier les fichiers
système les plus importants).
➢# : signifie que vous êtes en mode super-utilisateur, c'est-à-dire que
vous êtes connecté sous le pseudonyme "root". Le root est
l'utilisateur maître qui a le droit de tout faire sur sa machine (même
de la détruire ).
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : find
find [chemin] [options] [expression]
➢ Recherche un fichier à partir du répertoire donné.
Options les plus fréquentes :
-name : Recherche d'un fichier par son nom
-iname : Même chose que -name mais insensible à la casse
-type : Recherche de fichier d'un certain type
-atime : Recherche par date de dernier accès
-mtime : Recherche par date de dernière modification
-link : Recherche du nombre de liens au fichier
-user : Recherche de fichiers appartenant à l'utilisateur donné
-group : Recherche de fichiers appartenant au groupe donné
COMMANDE DE MANIPULATION DES
FICHIERS
$ find /home/ -name monfichier
Recherche le fichier monfichier dans toute la descendance de /home/

$ find . -name "*.c"


Recherche tous les fichiers ayant une extension .c.

$ find . -mtime -5
Recherche les fichiers du répertoire courant qui ont été modifiés entre maintenant
et il y a 5 jours.
$ find . ! -user root
Affiche tous les fichiers n'appartenant pas à l'utilisateur root
LA RECHERCHE DE FICHIERS
Commande : locate Nom_du_fichier
➢ Permet de chercher un fichier donnée à travers son nom
des fichiers.
LA RECHERCHE DE FICHIERS
Commande : locate Nom_du_fichier
➢Recherche dans tous les répertoires du disque dur
LE STOCKAGE DES FICHIERS
LES LIENS ENTRE LES FICHIERS
Il existe deux types de liens pour gérer les fichiers :
➢ Les liens physiques : est un pointeur direct vers les données d’un
fichier sur le disque. En créant un lien physique, vous associez
plusieurs noms de fichiers à un même fichier (ou inode) dans un
même système de fichiers.
➢ Les liens symboliques : est un fichier spécial qui pointe vers un
autre fichier ou répertoire. Contrairement au lien physique, un lien
symbolique est une référence à un chemin, et non directement aux
données du fichier.
LES LIENS PHYSIQUES
Caractéristiques :
✓ Même inode : Un lien physique partage le même inode
(identifiant unique) que le fichier original, ce qui signifie
qu'ils sont indissociables au niveau des données.
✓ Suppression : Si vous supprimez un des fichiers avec un
lien physique, le fichier n'est pas réellement supprimé tant
qu'il existe au moins un autre lien physique vers les mêmes
données.
✓ Limites : Les liens physiques ne peuvent être créés que
dans le même système de fichiers. De plus, vous ne pouvez
pas faire de lien physique vers un répertoire.
LES LIENS SYMBOLIQUES
Caractéristiques :
✓ Chemin : Un lien symbolique contient le chemin vers le
fichier ou le répertoire cible.
✓ Inode différent : Le lien symbolique a un inode différent de
celui du fichier d’origine, car il s’agit d’un fichier distinct qui
contient l’adresse du fichier cible.
✓ Flexibilité : Vous pouvez créer des liens symboliques vers
des fichiers et des répertoires, et même entre différents
systèmes de fichiers.
✓ Fragilité : Si le fichier d'origine est supprimé, le lien
symbolique devient "cassé", car il pointe vers un chemin
inexistant.

Commande : ln -s fichier_original lien_symbolique


LIENS PHYSIQUES VS LIENS SYMBOLIQUES
Caractéristique Lien Physique Lien Symbolique
A un inode
Inode Partage le même inode
différent
Peut être utilisé
Système de
Même système de fichiers entre systèmes de
fichiers
fichiers
Les données restent
Fichier cible Le lien devient
accessibles tant qu’il existe
supprimé cassé
un lien
Peut lier des
Non Oui
répertoires

Commande pour afficher les numéros d’inode et de vérifier que


deux fichiers sont associés au même inode : ln –links ou ln –li
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : cat Nom_du_fichier
Afficher le contenu d’un fichier
user@pc :~$ cat fichier1.txt
Bonjour tout le monde, je suis très …;
user@pc :~$ cat fichier1.txt fichier2.txt
Bonjour tout le monde, je suis très …;
Voila le contenu de dexime fichier
user@pc :~$ more fichier1.txt (Affichage page par page)
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : tr [options] chaine1 chaine2


➢ Permet de transposer ou éliminer des caractères dans un fichier ou dans un
flux de données. Autrement dit, un caractère appartenant à chaine1 est
remplacé par le caractère de même position dans chaine2.
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : tr [options] chaine1 chaine2


Permet de transposer ou éliminer des caractères dans un fichier ou dans un
flux de données. Autrement dit, un caractère appartenant à chaine1 est
remplacé par le caractère de même position dans chaine2.

La commande tr est utilisée ici pour traduire des caractères. Dans cet
exemple, tous les caractères de a à f (minuscules) dans le texte d'entrée sont
remplacés par leurs équivalents en majuscules (A à F).
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : tail [OPTIONS] [FICHIER]
➢Permet d'afficher les dernières lignes d'un fichier. Par défaut, elle montre
les 10 dernières lignes.
Exemple :
$tail +10 mon-fichier
Toutes les lignes du fichier de la 10eme jusqu'à la fin.
$tail -10 mon-fichier
Les 10 dernières lignes à partir de la fin.
$tail -c -10 mon-fichier
Les 10 derniers caractères du fichier.
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : head [OPTIONS] [FICHIER]
➢Afficher les premières lignes d'un fichier. Par défaut, elle affiche
les 10 premières lignes.
Exemple :
$head -n +10 mon-fichier
Toutes les lignes du fichier de la 10eme jusqu’au début.
$head -n -10 mon-fichier
Les 10 premières lignes à partir de la fin.
$head -n 10 -c mon-fichier
Les 10 premiers caractères du fichier.
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : cut [OPTIONS] [FICHIER]


➢Permet d'extraire des sections spécifiques d'un fichier texte,
souvent utilisée pour manipuler et traiter des fichiers de données
structures.
Option Description
-c Permet de sélectionner les colonnes.
-d Permet de spécifier un séparateur de champs
-f Indique le numéro du ou des champs à couper
-b Sélection sur le numéro d’octet
-s (avec –f) Supprime les lignes vides .
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : cut [OPTIONS] [FICHIER]


Exemple :
cut -c1 /etc/passwd

Affichera le premier caractère (colonne) du fichier /etc/passwd.

cut –d : -f 6 /etc/passwd (avec séparateur de champs)

Affichera le 6eme champ du fichier /etc/passwd, dont le séparateur


de champs est le caractére double point (”:").
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : sort [OPTIONS] [FICHIER]
➢Permet de trier les lignes d'un fichier texte selon différents
critères comme l'ordre alphabétique, numérique, ou basé sur des
champs spécifiques.
➢Syntaxe : sort [-o|-n|-r|-R|-u] [nom_fichier]
Option Si gni fi cati on

-o Ecr ire le résultat dans un fichier


-u El imi ne les lignes identiques
-r Trier en ordre inverse
-R Trier aléatoirement
-n Trier des nombres
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : diff [options] fichier1 fichier2

➢ Permet de comparer deux fichiers textes. Elle affiche les différences entre
ces fichiers, ce qui est particulièrement utile pour voir les modifications
apportées à un fichier ou pour vérifier les différences entre deux versions d'un
document.

Option Significat ion

-i N e fait pas de différence entre les


caractères minuscules et
majuscules.
-w N e tient pas compte du caractère espace.

-B N e tient pas compte des lignes blanches.


COMMANDE DE MANIPULATION DES
FICHIERS
Commande : wc
➢ Permet de compter le nombre de ligne d'un fichier, mais
aussi le nombre de mot ou de caractères.
Options courantes
✓ -l : Compte uniquement le nombre de lignes.
✓ -w : Compte uniquement le nombre de mots.

✓ -c : Compte uniquement le nombre de caractères.


✓ -m : Compte le nombre de caractères (en tenant compte des caractères multi-
octets, si applicable).
✓ -L : Affiche la longueur de la ligne la plus longue.
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : paste
➢ Permet la fusion de lignes de fichiers. Elle permet de concaténer
les lignes de fichiers en les séparant par un délimiteur, généralement
une tabulation.
Options courantes
✓-s : Les lignes sont remplacées par des colonnes
✓-dx : Le caractère x définit le séparateur de champ
COMMANDE DE MANIPULATION DES
FICHIERS

Commande : echo

➢ Affiche à l’écran le texte qui suit la commande echo

Exemple :

user@pc :~$ echo bonjour

bonjour
COMMANDE DE MANIPULATION DES
FICHIERS
Commande : which

➢ Pour connaitre la localisation d’une commande (connaitre le chemin


correspondant à une commande).
Exemple :
user@pc :~$ which ls
/usr/bin/ls
❖ Signifie que la commande « ls » est dans le répertoire « bin » qui est un
sous répertoire de « usr » qui est un sous-repertoire du répertoire racine
(repértoire « root »).
COMMANDES DE BASE UNIX
Commande : uname
➢Est utilisée pour afficher des informations sur le système
d'exploitation et le matériel.

Option Signif icat ion

-m A f f ic h e l e t y pe d e l a m ac hi ne .

-n A ff iche le nom de la m achine.

-r A ff iche le numér o de version du système.

-s A ff iche le nom du système.

-a A ff iche toutes les infor mations ci-dessus.


COMMANDES DE BASE UNIX
Commande : su

➢ Est utilisée pour changer l'identité de l'utilisateur en cours


d'exécution. Elle permet de basculer vers un autre utilisateur dans le
système, souvent pour obtenir des privilèges administratifs (root), ou
pour agir en tant qu'un autre utilisateur.

Exemple :
user@pc :~$ su
Login: root
COMMANDES DE BASE UNIX
Commande : sudo

➢Exécuter les commandes en se substituant à l'utilisateur.


➢Cette commande permet à l'administrateur système d'accorder à
certains utilisateurs (ou groupes d'utilisateurs) la possibilité de
lancer une commande en tant qu'administrateur, ou comme
autre utilisateur.

$ sudo reboot

Lance la commande reboot avec les droits de l'utilisateur root.


COMMANDES DE BASE UNIX
➢ Reboot : est une commande permettant de redémarrer
le système.
➢ Shutdown : est une commande permettant l'extinction
de la machine à partir du terminal.

Exemple
user@pc :~$ Shutdown
LES FILTRES
DE RECHERCHE
LES EXPRESSIONS RÉGULIÈRES
➢ Définition : Formule qui représente une chaîne de caractères.
Composée de caractères et d'opérateurs.
➢ Utilisation : On recherche alors non pas un mot ou une simple
chaîne de caractères mais une suite de caractères qui
correspondent au critères énoncés par la formule.
➢ Certains opérateurs doivent être précédés d'un \ pour ne pas
entrer en conflit avec le shell, ainsi :
{ , } , ESPACE , ( , ) et | seront écrits \{ , \} , \ , \( , \) et \ | .
LES EXPRESSIONS RÉGULIÈRES
Rappel :
* : N’importe quelle séquence de caractères.
? : N’importe quel caractère.
[] : N’importe quel caractère choisi dans les caractères donnés entre crochets.
[^] : n’importe quel caractère sauf ceux dans les caractères donnés entre crochets.
[−] : n’importe quel caractère dans la plage de caractères donnés entre crochets.

Exemples :
$ ls *
$ ls ?ateau
$ ls *ateau
$ ls [gr]ate*
$ ls [^br]ateau
$ ls [a-c]*
LES EXPRESSIONS RÉGULIÈRES
➢ Les expressions régulières sont aussi des suites de caractères permettant de faire des
sélections.
➢ Les différentes expressions régulières sont :
LES EXPRESSIONS RÉGULIÈRES
Représentation :

✓ Un caractère compris entre 'a' et 'z' : [a-z]

✓ Un caractère compris entre '0' et '9' : [0-9]

✓ Le début d'une ligne : ^

✓ La fin d'une ligne : $

✓ Un choix entre deux chaînes : \ |


✓ Caractère compris entre 'a' et 'z' ou 'A' et 'Z' : [a-zA-Z]
✓ Répétitions d'une occurrence
o Exactement 2 répétitions de 'x' : x\{2\}
o Entre 2 et 5 répétitions de 'x' : x\{2, 5\}
o Au moins 2 répétitions de 'x' : x\{2, \}
LES EXPRESSIONS RÉGULIÈRES
Exemple :

✓ L'expression [a-z][a-z] * cherche les lignes contenant au minimum un caractère en minuscule.


[a-z] caractère permis, [a-z]* recherche d'occurrence des lettres permises.

✓ L'expression ^[0-9] \{ 4 \}$ a pour signification, du début à la fin du fichier $,


recherche les nombres [0-9] de 4 chiffres \ {4\} .

Remarque :
✓ Le caractère ^ n'a la signification de non qu'entre crochets.

✓ Quelle est la différence entre [^abc] et ^[abc] ?


LES EXPRESSIONS RÉGULIÈRES
Exemple :
✓ [02-57]
0, 2, 3, 4, 5 ou 7
✓ [a-d5-8X-Z]
a, b, c, d, 5, 6, 7, 8, X, Y ou Z
✓ [0-5-]
0, 1, 2, 3, 4, 5 ou –
✓ [^0-9]
pas un chiffre
✓ Un code permanent contient 4 majuscules suivies de 8 chiffres :
[A-Z]\{4\}[0-9]\{8\}
✓ Un code permanent contient 12 caractères lettres ou chiffres :
[A-Z0-9]\{12\}
LES EXPRESSIONS RÉGULIÈRES
Exemple plus avancé:
Repérer les lignes contenant une date qui est exprimée par JJ/MM/AA ou bien JJ/MM/AAAA
✓ Jours 01 à 09 : 0[1-9]
✓ Jours 10 à 29 : [1-2][0-9]
✓ Jours 30 et 31: 3[0-1]
On obtient alors :
\(0[1-9]\|[1-2][0-9]\|3[0-1]\)
✓ Mois 01 à 09 : 0[1-9]
✓ Mois 10 à 12 : 1[0-2]
On obtient alors :
\(0[1-9]\|1[0-2]\)
✓ Une année contient simplement 2 ou 4 chiffres :
\([0-9]\{2\}\|[0-9]\{4\}\)
✓ Concaténation des expressions formalisant les jours, mois et années avec un '/' entre elles :
\(0[1-9]\|[1-2][0-9]\|3[0-1]\)/\(0[1-9]\|1[0-2]\)/\([0- 9]\{2\}\|[0-9]\{4\}\)
COMMANDES DE BASE UNIX
Commande : grep "motif" nom_du_fichier
➢ Permet de rechercher des motifs dans des fichiers ou dans la sortie d'autres
commandes. Son nom est dérivé de l'expression "global regular expression
print".
COMMANDES DE BASE UNIX
Commande : grep "motif" nom_du_fichier
➢Exemple avec le fichier file_adresse :

$grep ^[g-n] file_adresse


➢ Permet d’obtenir toutes les lignes commençant par les caractères
compris entre g et n.
$grep Brest file_adresse

➢ Permet d’obtenir les lignes contenant la chaîne Brest


COMMANDES DE BASE UNIX
Commande : grep "motif" nom_du_fichier

Remarque : Différence entre grep et find :


Find : sert à parcourir l’arborescence pour la recherche d’un nom
de fichier.
Grep : sert à chercher la chaîne de caractère qui lui est
spécifiée dans les fichiers donnés en argument.
Exercice
Vérification très sommaire de la validité d’une adresse IP,
« 4 décimaux de 3 chiffres qui sont séparés par des . ».
COMMANDES DE BASE UNIX
S OLUT ION :
”([0-9]{1,3}\.){3} [0-9]{1,3}”
Voici comment cette ligne est décomposée :
([0-9]{1,3}\.){3} :www.xxx.yyy.
[0-9] : un caractère entre 0 et 9
{1,3} : répété entre une et trois fois, donc x, xx ou xxx
\. : suivi d’un point
{3} : le tout trois fois
[0-9]{1,3} : .zzz
[0-9] : un caractère entre 0 et 9
{1,3} : répété entre une et trois fois
COMMANDES DE BASE UNIX
Opérateurs logiques :

! Non logique
-a Liaison par et logique de deux critères
-o Liaison par ou logique de deux critères
COMMANDES DE BASE UNIX
Exemple avec find :
➢ Les fichiers n'appartenant pas à l'utilisateur u1:
find . ! -user u1 -print
➢ Recherche des fichiers qui ont pour nom a.out ou des fichiers se terminant
par .c:
find . \(-name a.out –o –name "*.c"\)
➢ Recherche des fichiers qui ont pour nom core et une taille supérieure à
1Mo.
find .\ (-name core –a –size +1M \)
COMMANDES DE BASE UNIX
Remarque :
Les opérateurs and et or n’ont par la même priorité, donc, il
faut positionner les parenthèses pour interpréter le ou logique
avant le et logique. Les parenthèses étant à leur tour des
caractères spéciaux, on doit les désactiver.
COMMANDES DE BASE UNIX
E X E RC I CES : FI ND
1) Afficher tous les fichiers qui commencent par ‘a’ majuscule ou minuscule.
2) Afficher tous les fichiers qui se composent de 3 caractères dont le dernier est ‘M’.
3) Afficher tous les noms de fichiers se terminant soit par a, b ou c.
4) Afficher tous les noms de fichiers répertoires commençant par une lettre
majuscule.
5) Afficher tous les noms de fichiers de l’utilisateur « webmaster1 » qui appartient
au groupe « webos ».
6) Afficher tous les fichiers normaux ayant pour taille plus de 150 Ko.
7) Afficher tous les fichiers dont les dernières modifications remontent à moins de
trois jours.
8) Afficher tous les fichiers répertoires ou les fichiers dont le nom se termine par le
caractère ‘a’.
9) Afficher tous les fichiers qui n’appartiennent pas a l’utilisateur « userxg1 ».
COMMANDES DE BASE UNIX
S OLU TION : FIND
1). $find / - name "[aA] *”
2). $find / - name "??M"
3). $find / - name "*[a b c] "
4). $find / - type d - name "[A-Z] *”
5). $find / - user "webmasters1" -a –group "webos"
6). $find / - type f -size "+150K"
7). $find / - type f -mtime -3
8). $find / (- type d -o type f) -name "*a"
9). $find .! –user "userxg1"
COMMANDES DE BASE UNIX
E X ER C IC E ( GR E P / C UT ) :

A partir du fichier etc/passwd


▪ 1). Affichez uniquement la ligne concernant l’utilisateur root.
▪ 2). Affichez uniquement les login de tous les utilisateurs (1èr
champ).
▪ 3). Affichez les correspondances login (1) numéro d'utilisateur
(3), nom réel(5)
▪ 4). Quels sont les fichiers de /etc/ contenant des nombres de
plus de trois chiffres
COMMANDES DE BASE UNIX
1). grep "^root" /etc/passwd
2). cut –d ':' -f1 /etc/passwd
3). cut –d ':' -f1,3,5 /etc/passwd
4). grep -r '[0-9]\{4,\}' /etc/*
COMMANDES DE BASE UNIX
E XERCICE
▪ 1). Lister le contenu du répertoire /dev.
▪ 2). Lister le contenu du fichier /etc/passwd.
▪ 3). Afficher les utilisateurs définis dans le fichier /etc/passwd.
▪ 4). Rechercher tous les fichiers du répertoire /etc contenant la chaine de
caractères "root".
▪ 5). Rechercher la localisation du fichier "stdio.h" dans le système de fichier de
votre installation.
▪ 6). Utiliser les commandes de comparaison de fichiers de Linux pour tester le
contenu d'un même fichier texte en version Unix et Dos.
▪ 7). Combien de lignes, de mots et de caractères comportent les fichiers
"montexte.unix", "montexte.dos" et "montexte.mac"?
COMMANDES DE BASE UNIX
C O RR ECTIO N :
1). ls /dev
2). cat /etc/passwd
3). cut -d':' -f1 /etc/passwd
4). grep -r "root" /etc/*
5). locate stdio.h
6). diff montexte.unix montexte.dos
7). wc montexte.unix;
wc montexte.dos;
wc montexte.mac
COMMANDES DE BASE UNIX : LES ALIAS
➢ ALIAS : permet de donner un synonyme à une commande ou à un
groupement de commandes.
➢ Cela permet de gagner du temps et de simplifier les commandes.
On peut mettre un certain nombre d'alias dans le fichier .profile
La syntaxe est la suivante : alias nom_alias = ' commande '
Exemple :
$alias goappli=‘cd /home/compte_appli/appli’
➢ Pour obtenir la liste des alias définis : $ alias
REDIRECTION DES
ENTRÉES/SORTIES
LES SÉPARATEURS CONDITIONNELS DE
COMMANDES

Il est possible de contrôler la séquence d’exécution de commandes en


utilisant des séparateurs conditionnels.

➢ Le séparateur && permet d’exécuter la commande qui le suit, si


et seulement si la commande qui le précède a été exécutée sans
erreur.
➢ Le séparateur || permet d’exécuter la commande qui le suit si et
seulement si la commande qui le précède a été exécutée avec
erreur.
LES SÉPARATEURS CONDITIONNELS DE
COMMANDES

Exemple :
Suppression des fichiers si la commande cd projet1 a été correctement
exécutée.

$ cd projet1 && rm *
Exemple :
Si le répertoire projet1 n’existe pas, alors il sera créé par la commande
mkdir.

$ cd projet1 || mkdir projet1


LES ENTRÉES SORTIES D’UN PROCESSUS

Lors de l’exécution d’une commande, un processus est créé.


Par défaut le processus:
➢ Lit ses données d'entrée à partir de l’entrée standard (par
défaut le clavier).
➢ Écrit sa sortie (les résultats et les erreurs) dans la sortie
standard (par défaut l’écran).
LES ENTRÉES SORTIES D’UN PROCESSUS
➢ Ces canaux de communications sont désignés par les fichiers :
❖ « stdin » : pour l’entrée standard, identifiée par l’entier 0.
❖ « stdout » : pour la sortie standard, identifiée par l’entier 1.
❖ « stderr » : pour la sortie d’erreur standard, identifiée par l’entier 2.

➢ Il est possible de rediriger les entrées/soties standards des commandes afin


que la lecture se fasse à partir d’un fichier et que l’écriture se fasse dans un
fichier.
REDIRECTION DE L’ENTRÉE STANDARD
On peut rediriger l’entrée standard d’une commande afin que la lecture se
fasse à partir d’un fichier grâce au symbole « < »
commande < fichier_entree
La commande effectue ses entrées à partir du fichier «fichier_entree »
Exemple :
% cat < donnees_entree
La commande lit le fichier «donnees_entree» et l’affiche sur la sortie
standard, au lieu de lire les données au clavier.
REDIRECTION DE LA SORTIE STANDARD
On peut rediriger la sortie standard d’une commande afin que l’écriture se fasse
dans un fichier grâce aux symboles « > » ou « >> ».
commande > fichier_sortie
commande >> fichier_sortie
➢ Si le fichier « fichier_sortie» n’existe pas, alors il sera créé.
➢ Si le fichier « fichier_sortie» existe, alors:
❖ Si le symbole « > » est utilisé dans ce cas le fichier «fichier_sortie» sera écrasé
et remplacé par la nouvelle sortie standard de la commande.
❖ Si le symbole « >> » est utilisé, dans ce cas la nouvelle sortie standard sera
rajoutée à la fin du fichier « fichier_sortie ».
REDIRECTION DE LA SORTIE STANDARD
La touche « >> » redirige la sortie standard à la fin d'un fichier et le crée s'il
n'existe pas.

Commande
REDIRECTION DE LA SORTIE STANDARD
Exemple:
➢ On trie le fichier « fiche1 » et on écrit le résultat dans le fichier « fiche_trie » au
lieu d’afficher le résultat sur l’écran.
% sort fiche1 > fiche_trie
➢ On trie le fichier « fiche2 » et on écrit le résultat à la fin du fichier « fiche_trie ».
% sort fiche2 >> fiche_trie
Remarque:
On peut rediriger l’entrée et la sortie en même temps.
Exemple:
Trier le fichier « fiche » et écrire le résultat dans le fichier « fichier_trie »
% sort < fiche > fichier_trie
REDIRECTION DE LA SORTIE STANDARD
➢ La touche « << » passe la console en mode saisie au clavier, ligne
par ligne.
➢ Toutes ces lignes seront envoyées à la commande lorsque le mot-
clé de FIN aura été écrit.
REDIRECTION DE LA SORTIE STANDARD
Remarque :
La commande « cat » permet de faire la concaténation des fichiers en
redirigeant la sortie standard à l’aide des opérateurs de redirections « > »
ou « >> ».
Exemple:
Concaténer les fichiers « fiche1 » et « fiche2 » dans « fiche 3 »
% cat fiche1 fiche2 > fiche3
REDIRECTION DE LA SORTIE D’ERREURS STANDARD
(STDERR)

Lors de l’exécution d’une commande, des messages d’erreurs


peuvent être affichés à l’écran si un problème survient en
cours d’exécution.
On peut rediriger la sortie des messages d’erreurs dans un
fichier. Ceci permet d’éviter d’avoir un mélange entre les
résultats normaux et les messages d’erreurs dans une même
sortie (standard ou fichier).
Ceci peut se faire grâce aux chaines « 2> » ou « 2>> »
REDIRECTION DE LA SORTIE D’ERREURS STANDARD
(STDERR)
Syntaxe :
commande 2> fichier_sortie
commande 2>> fichier_sortie
Comme pour la redirection de la sortie standard,
➢ Si le fichier sortie n’existe pas alors il sera créé.
➢ Si le fichier sortie existe alors:
• Si on utilise la chaine « 2> » alors le fichier sera écrasé et remplacé par la
nouvelle sortie standard.
• Si on utilise la chaine « 2>> » , alors la sortie standard se rajoute à la fin du
fichier sortie.
REDIRECTION DE LA SORTIE D’ERREURS STANDARD
(STDERR)
Exemple:

On exécute la commande « find » sans arguments. Les résultats de la recherche sont redirigés vers le fichier «res_find»
alors que les messages d’erreurs (par exemple on ne peut pas explorer un répertoire protégé en lecture) seront redirigés
vers le fichier «erreur_find ».

% find .> res_find 2> erreur_find

% find . >> res_find 2>> erreur_find

Remarques :

Pas d’espace entre le "2" et le "> »

Les résultats et les erreurs peuvent être redirigés vers un même fichier grâce aux chaines «&>» ou « &>> »

Exemples:

% find . &>res

% find . &>>res
LES TUBES (PIPES)
Les pipes (tubes) permettent de rediriger la sortie d’un processus vers
l’entrée d’un autre. Les processus s’exécutent en parallèles.
Syntaxe :

cmdA | cmdB
➢« cmdA » et « cmdB » sont deux commandes.
➢Le symbole « | » est appelé « pipe ». Il permet de relier deux
commandes entre elles.
➢La sortie standard de la commande « cmdA » est utilisée comme
entrée standard de la commande « cmdB ».
LES TUBES (PIPES)
Exemple :

Exécuter la commande « ls -l » et rediriger la sortie de la commande vers le fichiers « resultat.txt »

% ls -l > resultat.txt

Compter le nombre de lignes, le nombre de mots et le nombre de caractères du fichier « resultat.tx » et


rediriger le résultat vers le fichier « cp.txt »

% wc < resultat.txt > cp.txt

ou

% wc resultat.txt > cp.txt

Les deux commandes peuvent être combinées pour élaborer une seule:

% ls -l | wc > cp.txt
LES TUBES (PIPES)
% ls -l | wc
16 124 921
➢ Compte le nombre de lignes, de mots et de caractères de la sortie de la
commande « ls-l » ( résultat: 16 lignes, 124 mots et 921 caractères).
Exemple :
➢ Compte le nombre de lignes, de mots et de caractères de la sortie de la
commande « ls -l | wc »
% ls -l | wc | wc
1 3 24
GESTION DES
UTILISATEURS
LES UTILISATEURS
➢ Linux est un système multi-utilisateurs :

➢ Pour préserver la sécurité et la confidentialité des donnée, Linux assure un


système d’identification et de gestion des utilisateurs

➢ Un utilisateur est donc celui qui s’est logué en donnant un nom de login. Ce login
permet de définir l’utilisateur et tracer l’activité menée en son nom.
LES UTILISATEURS
➢ Il existe deux types d’utilisateurs :

▪ Le root ou le super utilisateur a l’ensemble des droits sur le système.

▪ Utilisateur ordinaire ayant des droits bien définies sur le système.

Others ➢ Il existe 3 classes d'utilisateurs :

▪ Le propriétaire du fichier (User)

▪ Le groupe dans lequel appartient le


propriétaire (Group)
▪ Les autres (Others).
LES UTILISATEURS
Utilisateur : Personne autorisée à se connecter sur le système.
➢ Son accès est autorisé après identification :
❖ Par son nom d'utilisateur (username ou login).
❖ Par son mot de passe associe (password).
➢ Il dispose d'une zone privée sur le disque :
❖ généralement située dans /home/username ou dans /users/username
❖ sur laquelle il a tous les droits.
➢ La taille de cette zone privée (i.e. le nombre d'octets qu'il est possible d'y stocker) peut
être restreinte a un quota.
➢ il est identifié par un numéro unique ou UID (User IDentication number).
➢ il appartient a un ou plusieurs groupes (mais un groupe dans lequel Il est par défaut).
LES GROUPES
Groupe : Ensemble de personnes ou de groupes.

❖ Les groupes sont utilisés pour contrôler les accès au sein du système.

❖ Le changement de groupe est (éventuellement) contrôlé par un mot de passe.

❖ il est géré par un administrateur spécifique au groupe (ou par défaut le


super-utilisateur).

❖ il est identité par un numéro unique ou G ID (Group IDentication number).


LES UTILISATEURS ET LES GROUPES
➢ Fichiers de description des utilisateurs et des groupes :
❖ /etc/passwd pour les utilisateurs : Contient les
informations relatives aux utilisateurs (login, mot de passe
crypté, uid, gid, nom complet, répertoire de travail au login,
commande exécutée au login).

❖ /etc/group pour les groupes : Contient les informations


relatives aux groupes (nom, mot de passe, gid, liste des
membres du groupe).
LES DROITS D’ACCÈS
LES DROITS D’ACCÈS
➢ Sous Linux, chaque fichier (ou répertoire) possède un ensemble d'attributs
définissant les droits d'accès à ce fichier pour tous les utilisateurs du système.
❖ À sa création, un fichier appartient à son auteur.
❖ Le propriétaire du fichier peut ensuite distribuer ou restreindre les droits d'accès
sur ce fichier.
➢ Pour chaque classe d'utilisateurs, il y a 3 types d'accès à un fichier donné :
▪ r : en lecture (Read).
▪ w : en écriture (Write).
▪ x : en exécution (eXecute).
LES DROITS D’ACCÈS DES FICHIERS ET DES
RÉPERTOIRES

➢U n droit d’accès est un modèle qui décrit pour chaque fichier


ou chaque répertoire, qui a le droit :
✓ De lire;
✓ D’exécuter;
✓ De modifier.

Droits du Propriétaire Droits du Groupe Droits du Reste du Monde

rwx rwx rwx


LES DROITS D’ACCÈS DES FICHIERS ET DES
RÉPERTOIRES

d rwx r-x r-x


LES DROITS D’ACCÈS
LES DROITS D’ACCÈS À UN
RÉPERTOIRE/FICHIER

Accès Fichier Répertoire

r Lire le contenu du fichier Afficher le contenu du répertoire

w Modifier et Supprimer le contenu Ajouter, Modifier et Supprimer le


du fichier contenu du répertoire

x Lancer un fichier exécutable Accéder comme répertoire de travail


sur le répertoire
D’UNE FAÇON GÉNÉRALE
La commande ls -l en console permet d'afficher les détails d'un répertoire ou d'un fichier.
On y découvre alors une somme importante d'information.
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS

Propriétaire chmod (Change Mode)

Description des protections Mode symbolique


par un nombre octal
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS : LE MODE OCTAL

Les droits sont représentés par un nombre octal (Base 8)


➢ De 0 à 7
La représentation binaire (base 2) donne le détail des droits
➢ Exemple : 6 5 4

110 101 100


rw- r-x r--
Ce mode permet de modifier tous les droits en même temps
➢ A utiliser avec précaution
➢ Très efficace pour s’assurer que tous les fichiers ont les mêmes droits
➢ Utilisé pour sécuriser les accès des utilisateurs aux fichiers
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS : LE MODE OCTAL
Exemple:
On veut modifier la protection du fichier toto de la manière suivante :
r-x rw- rwx
1. Autorisant un accès lecture et exécution au propriétaire,
2. Lecture et écriture au groupe,
3. Accès sans restriction aux autres (cas très rare).
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS : LE MODE SYMBOLIQUE
le mode symbolique, permet une description absolue ou relative
des droits d’accès, comme suit :

chmod [qui] op [permission] fich/rep

Combinaison de lettre u (user),


g (groupe), r (read=lecture),
o (other=autre) w (write=écriture),
ou a (all=tous) pour ugo x (exécution).

+ : Permet d’ajouter un droit d’accès,


- : Permet de supprimer un droit d’accès
= : Permet d’affecter un droit de manière absolue
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS : LE MODE OCTAL

➢ Le mode est spécifié par un nombre en octal (base 8), dont les chiffres
représentent (dans l'ordre de gauche à droite) :
✓ Les droits pour l'utilisateur propriétaire du fichier.
✓ Les droits pour le groupe propriétaire du fichier.
✓ Les droits pour tous les autres.
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS : LE MODE SYMBOLIQUE

➢ Supprimer le droit d’écriture au propriétaire.


$ chmod u -w file
➢ Ajouter le droit de lecture pour le groupe.
$ chmod g+r file
➢ Accès uniquement en exécution pour le propriétaire et le
groupe, pas de modification pour les autres.
$ chmod ug=x file
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS : LE MODE SYMBOLIQUE
chmod ugo+x monRep
➢ Ajoute l'exécution (ouverture) du répertoire monRep à tous (propriétaire,
groupe, autres).

chmod go-wx monRep


➢ Supprime l'autorisation d'écriture et l'exécution de monRep au groupe et aux
autres.

chmod u=rw, go=r MonFichier


➢ Fixe l'autorisation de lecture et d'écriture au propriétaire et une autorisation
de lecture au groupe et aux autres.
MODIFICATION DES DROITS D’ACCÈS AUX
FICHIERS : LE MODE OCTAL

chmod 644 MonFichier


➢ Exactement la même chose , mais en utilisant les valeurs octales (Nota : 6 =
4+2 = lecture + écriture)
chmod u=rw, g=r, o= MonFichier
➢ Fixe l'autorisation d'ouverture et de lecture au propriétaire, uniquement la
lecture au groupe et interdit tout accès aux autres.

chmod 640 MonFichier


➢ Exactement la même chose que ci-dessus mais en utilisant les valeurs
octales.
LA COMMANDE CHMOD : EXERCICE
o Interdire la lecture et l'accès au répertoire RepertoireUn aux utilisateurs ne
faisant pas partie du groupe en utilisant le mode symbolique.
o Donner les droits d'écriture au groupe sur le fichier fichierUn en mode
symbolique.
o Donner le droit d'exécution sur le fichier fichierUn à l'utilisateur
propriétaire en mode symbolique.
o Prévoir les droits affichés par la commande ls -l après exécution de ces
commandes.
o Réécrire les commandes avec l'utilisation numérique de la commande
chmod.
LA COMMANDE CHMOD : EXERCICE
➢Mode symbolique
✓chmod o-rx RepertoireUn
✓chmod g+w fichierUn
✓chmod u+x fichierUn
➢Mode numérique
✓chmod 750 RepertoireUn
✓chmod 664 fichierUn
✓chmod 764 fichierUn
COMMANDES POUR MODIFIER LES RÈGLES

➢ Des commandes permettent de modifier les règles de droits sur les


fichiers :

✓chmod : Permet de changer les droits.

✓chown : Permet de changer le propriétaire (utilisateur et groupe).

✓chgrp : Permet de changer le groupe propriétaire.

✓umask : Permet d'indiquer les droits à la création.


COMMANDES POUR MODIFIER LES RÈGLES
➢La commande chown :
Permet de changer le propriétaire d'un fichier et/ou d'un répertoire et
récursivement ce qu'il contient
La syntaxe : chown [OPTION]…[OWNER][:[GROUP]] FILE…
➢La commande chgrp :
Permet de changer le groupe d'un fichier et/ou d'un répertoire et
récursivement ce qu'il contient
La syntaxe : chgrp [OPTION]…[GROUP]] FILE…
Conditions : être le propriétaire du fichier et être membre du groupe
auquel on veut donner le fichier
MODIFICATION DES PROPRIÉTAIRE ET DU
GROUPE
Exemple :
$ chgrp group1 fichier1

• group1 : Le nom du groupe auquel vous souhaitez attribuer le fichier1.


• fichier1 : Le fichier dont vous souhaitez changer le groupe.
• Condition : Cette opération est possible uniquement si l'utilisateur appartient déjà au groupe group1.

$ chown user1 fichier1

chown: fichier1: Operation not permitted

• user1 : Le nom de l'utilisateur qui sera le nouveau propriétaire.


• fichier1 : Le fichier dont vous souhaitez changer le propriétaire.
• Message d'erreur : chown: fichier1: Operation not permitted signifie que l'utilisateur actuel n'a pas les permissions
nécessaires pour changer le propriétaire. Cette opération est généralement réservée à l'utilisateur root.

$ sudo chown user1 fichier1


• Change le propriétaire de fichier1 à user1, même si l'utilisateur courant n'est pas le propriétaire du fichier.
MODIFICATION DES DROITS PAR DÉFAUTS
: UMASK
➢ Quand vous créer un fichier, par exemple avec la commande touch, ce fichier par
défaut possède certains droits.
❖ Ce sont 666 pour un fichier (-rw-rw-rw-), 777 pour un répertoire (drwxrwxrwx),
ce sont les droits maximum.
➢ Vous pouvez faire en sorte de changer ces paramètres par défaut. La commande
umask est là pour ça, elle définit les permissions par défaut d'un répertoire ou d'un
fichier créé.

Syntaxe : umask x

Où x est un nombre exprimé sous forme octale qui déterminera les permissions.
MODIFICATION DES DROITS PAR DÉFAUTS
: UMASK
➢La commande umask :
✓ Permet de spécifier des droits par défaut lors de la création des fichiers.
✓ Utilise des masques sous forme numérique octale.
✓ Sans paramètre : indique le masque courant.
✓ Avec le masque en paramètre : modifie le masque courant.

Les droits obtenus sont le complémentaire de ceux indiqués par le masque


MODIFICATION DES DROITS PAR DÉFAUTS
: UMASK POUR UN FICHIER
1 . Si vous tapez umask 022

Vous partez des droits maximum 666 et vous retranchez 022.

✓ on obtient donc 644

Par défaut les fichiers auront comme droit (rw-r-- r--).


2 . Si vous tapez umask 244
Vous partez des droits maximum 666 et vous retranchez 244
✓ on obtient donc 422
par défaut les fichiers auront comme droit (r---w-- w-).
MODIFICATION DES DROITS PAR DÉFAUTS
: UMASK POUR UN RÉPERTOIRE
Si vous ta pez um as k 02 2

vous partez des droits maximum 777 et vous retranchez 022

✓ on obtient donc 755

par défaut ils auront comme droit (-rwxr-xr-x).

Si vous ta pez um as k 24 4

vous partez des droits maximum 777 et vous retranchez 244

✓ on obtient donc 533

par défaut ils auront comme droit (-rwx-wx-wx).


DEVENIR ROOT
➢ Vous passerez root indéfiniment.

➢ Le symbole # à la fin de l'invite de commandes vous indique que vous êtes


devenu super-utilisateur.
➢ Vous pouvez alors exécuter autant de commandes en root que vous le
voulez.
➢ Pour quitter le "mode root", tapez exit.
AJOUTER UN UTILISATEUR
Les commandes adduser et deluser font partie des commandes de la gestion des
utilisateurs. Si vous essayez de les exécuter avec un utilisateur normal, un
message vous informera que vous n'avez pas les permissions nécessaires.

➢ Seul root peut gérer les utilisateurs

Par exemple, pour créer un compte pour karim :

Rajouter un sudo devant la commande si vous n'êtes pas déjà root, c'est à dire
tapez sudo adduser karim
COMMANDE PASSWD : CHANGER LE MOT
DE PASSE
Pour changer le mot de passe d'un utilisateur, utilisez la commande passwd
en spécifiant le nom du compte à modifier.
Exemple :
root@user:/home# passwd karim
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Attention : Si vous utilisez passwd sans spécifier de nom d'utilisateur, c'est
le mot de passe de l'utilisateur courant (root dans ce cas) qui sera modifié.
COMMANDE DELUSER : SUPPRIMER UN
COMPTE
La commande deluser permet de supprimer un utilisateur déjà créé.
Exemple :
root@user:/home# deluser karim
Ne supprimez pas votre propre compte utilisateur (ex. : user), sinon il ne
restera que root, et Ubuntu interdit la connexion directe en tant que root.
Cela vous empêchera de vous connecter au prochain démarrage.
La commande seule ne supprime pas le répertoire personnel de l'utilisateur.
Pour supprimer également le dossier home et les fichiers personnels,
utilisez l'option --remove-home :
deluser --remove-home karim
AJOUT DE GROUPES AVEC ADDGROUP
addgroup : Cette commande sert à ajouter un nouveau groupe.

Chaque utilisateur appartient à un groupe par défaut.

Pour ajouter un groupe : addgroup nom_groupe

Définition des groupes par défaut :

Si aucun groupe n'est défini, un groupe du même nom que l'utilisateur


sera automatiquement créé. Ainsi, karim appartiendra au groupe
karim.
AJOUT DE GROUPES AVEC ADDGROUP
Pour vérifier l'appartenance des utilisateurs aux groupes, utilisez la
commande ls -l dans le répertoire /home :
root@user:~# cd /home
root@user:/home# ls -l
total 24
drwx------ 2 root root 16384 2007-09-19 18:22 lost+found
drwxr-xr-x 65 karim karim 4096 2007-11-15 22:40 karim
Colonne 3 : Indique le propriétaire du fichier ou dossier.
Colonne 4 : Indique le groupe qui possède ce fichier ou dossier.
Exemple : Le dossier karim appartient à l'utilisateur karim et au groupe karim.
COMMANDE USERMOD : MODIFIER UN
UTILISATEUR
La commande usermod permet d'éditer un utilisateur.
Principaux paramètres :
✓ -l : Renommer un utilisateur (ne change pas son répertoire personnel).
✓ -g : Changer le groupe principal de l'utilisateur.

Exemples :
• Mettre karim dans le groupe amis :
usermod -g amis karim
• Remettre karim dans son groupe d'origine karim :
usermod -g karim karim
• Ajouter karim à plusieurs groupes simultanément (amis, math, physique)
usermod -G amis,math,physique karim
• Remarque : Séparez les groupes par des virgules sans espace entre les noms.
COMMANDE USERMOD : MODIFIER UN
UTILISATEUR
➢Attention : -G remplace tous les groupes auxquels l'utilisateur
appartient.
usermod -G amis karim
➢l’utilisateur karim sera retiré de tous ses groupes actuels et
ajouté uniquement au groupe amis.
➢Pour ajouter des groupes sans supprimer les groupes actuels,
utilisez -aG :
usermod -aG amis karim
Commande delgroup : Supprimer un groupe
delgroup amis
COMMANDE TAR : COMPRESSION ET
DÉCOMPRESSION
La commande tar (Tape ARchive) :
Un outil de compression et décompression pour la gestion des archives. Il permet de
regrouper plusieurs fichiers et répertoires en un seul fichier tar. Ce fichier peut
ensuite être compressé à l’aide d’autres outils tels que gzip ou zip.
Option Significat ion
-c Crée une nouvelle archive .

-v A ffiche des dét ails sur les fichiers traité s

-f Indique le nom du fic hie r d'archive

-x Extr air e les fichier s d’une archive tar

-t A fficher le contenu d’une archive tar sans l’extrair e

-z Compr es ser une ar chive tar avec gz ip


COMMANDE TAR : CRÉATION D’UNE
ARCHIVE TAR
Pour créer une archive tar, on utilise :
l’option -c (create) suivie de l’option -f (file) et du nom de
l’archive à créer.
Exemple :
Pour créer une archive tar nommée "archive.tar" contenant les
fichiers "fichier1" et "fichier2", on utilise la commande suivante :
tar -cf exemple.tar fichier1 fichier2
COMMANDE TAR : EXTRACTION D’UNE
ARCHIVE
Pour extraire les fichiers d’une archive tar, on utilise :
l’option -x (extract) suivie de l’option -f et du nom de l’archive à
extraire.
Exemple:
pour extraire les fichiers de l’archive "archive.tar", on utilise la
commande suivante :
tar -xf archive.tar
COMMANDE TAR : LISTER LE CONTENU
D’UNE ARCHIVE
Pour afficher le contenu d’une archive tar sans l’extraire, on
utilise:
l’option -t (list) suivie de l’option -f et du nom de l’archive.
Exemple :
Pour afficher le contenu de l’archive "archive.tar", on utilise la
commande suivante :
tar -tf archive.tar
COMMANDE TAR : COMPRESSION ET
DÉCOMPRESSION
La commande tar peut également être utilisée pour compresser
et décompresser des fichiers à l’aide de l’algorithme gzip.
➢ Pour compresser une archive tar avec gzip :
On ajoute l’option -z (gzip) lors de la création de l’archive.
Exemple :
Pour créer une archive tar compressée nommée "archive.tar.gz"
contenant les fichiers "fichier1" et "fichier2", on utilise la
commande suivante :
tar -czf archive.tar.gz fichier1 fichier2
COMMANDE TAR : COMPRESSION ET
DÉCOMPRESSION
➢ Pour décompresser une archive tar compressée avec gzip :
On ajoute également l’option -z lors de l’extraction de l’archive.
Exemple :
Pour extraire les fichiers de l’archive "archive.tar.gz", on utilise la
commande suivante :
tar -xzf archive.tar.gz
COMMANDE TAR : GÉRER LES FICHIERS ET
RÉPERTOIRES
La commande tar permet de gérer les fichiers et répertoires inclus
dans une archive, en ajoutant ou en supprimant des éléments.
➢ Pour ajouter des fichiers ou répertoires à une archive existante, on
utilise :
l’option -r (append) suivie de l’option -f et du nom de l’archive, ainsi
que des fichiers ou répertoires à ajouter.
Exemple :
Pour ajouter le fichier "fichier3" à l’archive "archive.tar", on utilise la
commande suivante :
tar -rf archive.tar fichier3
COMMANDE TAR : GÉRER LES FICHIERS ET
RÉPERTOIRES
➢ Pour supprimer un fichier d’une archive, on utilise :
l’option --delete suivie de l’option -f et du nom de l’archive,
ainsi que du nom du fichier à supprimer.
Exemple:
Pour supprimer le fichier "fichier2" de l’archive "archive.tar", on
utilise la commande suivante :
tar --delete -f archive.tar fichier2
COMMANDE TAR : FILTRAGE DES FICHIERS
La commande tar permet également de filtrer les fichiers inclus
dans une archive en fonction de critères spécifiques.
Pour cela, on utilise l’option --exclude suivie du motif à exclure.
Exemple:
Pour créer une archive tar sans les fichiers dont le nom se
termine par ".txt", on utilise la commande suivante :
tar -cf archive.tar --exclude='*.txt' fichier1 fichier2 fichier3
COMMANDE TAR : CHANGER LE
RÉPERTOIRE DE DESTINATION
Lors de l’extraction d’une archive tar, vous pouvez souhaiter
changer le répertoire de destination des fichiers extraits.
Pour cela, on utilise l’option -C (change-directory) suivie du
répertoire de destination.
Exemple :
Pour extraire les fichiers de l’archive "archive.tar" dans le
répertoire "/home/user/documents", on utilise la commande
suivante :
tar -xf archive.tar -C /home/user/documents
COMPOSITION DES COMMANDES
Symbole « ; »
➢ Le symbole « ; » permet de lancer plusieurs commandes sur une même
ligne en les séparant les unes des autres. Cela crée une séquence de
commandes exécutées dans l’ordre spécifié.
➢ Chaque commande est exécutée successivement, le shell attendant la fin de
cmd1 avant de passer à cmd2.
cmd1 ; cmd2 ; ...
Exemple :
echo "Début" ; ls ; echo "Fin"
COMPOSITION DES COMMANDES
Symbole « & » pour l’exécution en arrière-plan:

➢ Le symbole « & » est utilisé pour exécuter des commandes en arrière-plan, permettant au terminal de rester
disponible pour d'autres opérations. Cela est particulièrement utile pour les commandes ou scripts de longue
durée, car le shell ne reste pas bloqué en attendant leur achèvement.

➢ Lorsqu’une commande est suivie du symbole « & », le shell lance la commande en tâche de fond et revient
immédiatement au prompt pour permettre d'autres entrées.

nom_cmd &

➢ Avantages de l'exécution en arrière-plan

✓ Permet de libérer le terminal pour d'autres commandes sans attendre la fin de la tâche.

✓ Utile pour des opérations lourdes, telles que les sauvegardes, téléchargements, ou scripts de traitement de
données.
COMPOSITION DES COMMANDES
Les séquences de commandes () et {}
➢ Les symboles () et {} permettent de regrouper plusieurs commandes pour créer une macro-
commande. Cette combinaison est pratique pour structurer et organiser des séquences de
commandes complexes.
❖ ( suite_cmds ) : Utilisation des parenthèses
✓ Les commandes placées entre parenthèses sont exécutées dans un sous-shell (processus
fils).
✓ Cela signifie que les modifications faites dans ce bloc (comme les changements de
variables ou de répertoires) n'affectent pas le shell principal.
❖ { suite_cmds ; } : Utilisation des accolades
✓ Les commandes entre accolades sont exécutées par le shell principal (pas de sous-shell).
✓ Les modifications apportées dans ce bloc sont donc visibles dans le shell principal.
COMPOSITION DES COMMANDES
Exemple : Utilisation d'une macro-commande avec () pour le sous-shell

Considérons la macro-commande (cd cours; pwd) :


% pwd
/home/etudiant
% (cd cours; pwd)
/home/etudiant/cours
% pwd
/home/etudiant

Les commandes cd cours et pwd, placées entre parenthèses, sont exécutées dans un sous-shell.

Une fois le sous-shell terminé, le shell courant reste inchangé, d’où le retour au répertoire initial
/home/etudiant.

➢ Cela montre l’avantage des parenthèses pour exécuter des séquences de commandes sans impacter le
contexte du shell principal.
COMPOSITION DES COMMANDES
Exemple : Utilisation d'une macro-commande avec {} dans le shell principal

Considérons la macro-commande { cd cours; pwd; } :


% pwd
/home/etudiant
% { cd cours; pwd; }
/home/etudiant/cours
% pwd
/home/etudiant/cours

Les commandes entre accolades { cd cours; pwd; } sont exécutées dans le shell principal et non dans un sous-
shell.

Commande pwd en dehors des accolades : Confirme que le répertoire est toujours /home/etudiant/cours, car le
changement de répertoire fait partie du shell principal.

➢ Cet exemple montre que l’utilisation des accolades {} est idéale lorsque l’on souhaite que les changements
apportés par les commandes regroupées soient conservés dans le shell courant.
CONTRÔLE DES
PROCESSUS
CONTRÔLE DES PROCESSUS
Le shell permet de contrôler les processus qui s’exécutent. Un processus s’exécute soit en
foreground (avant plan), soit en background (arrière plan ou en tâche de fond).
➢ Foreground (Avant-plan) : Exécution par défaut.
✓ Lorsqu'une commande est lancée, elle s'exécute automatiquement en avant-plan.
✓ Bloque l'accès au terminal jusqu'à la fin de la commande. Empêche l'utilisateur de lancer
une autre commande dans le même terminal tant que l'exécution n'est pas terminée.
✓ Pendant l'exécution de cette commande :
• L’utilisateur ne peut pas saisir une autre commande dans ce même shell.
• Pour lancer une nouvelle commande en parallèle, l’ouverture d’un nouveau terminal est
nécessaire.

Remarque : Ouvrir un nouveau terminal revient à créer un nouveau processus shell,


permettant d'exécuter des commandes séparément.
CONTRÔLE DES PROCESSUS : EXÉCUTION
EN AVANT-PLAN

➢Suspension d’un processus en avant-plan :


✓ Utiliser Ctrl-Z pour suspendre un processus en cours.
✓ Attention : Le processus est en pause, mais reste actif en arrière-plan.
➢Relancer un processus suspendu :
✓ En avant-plan : Utiliser la commande fg.
✓ En arrière-plan : Utiliser la commande bg.

➢Interruption d’un processus en avant-plan :


✓ Utiliser Ctrl-C pour arrêter définitivement un processus en cours.
CONTRÔLE DES PROCESSUS : EXÉCUTION
EN ARRIÈRE-PLAN

➢Exécution en arrière-plan
✓Pour permettre au shell de lancer plusieurs commandes en parallèle,
il est nécessaire d'exécuter une commande en arrière-plan.
Cela se fait en ajoutant le symbole & à la fin de la commande.

✓ Lorsqu'une commande est suivie de &, le shell crée un processus


fils pour exécuter cette commande en arrière-plan.
✓ Le processus shell (processus père) peut alors continuer à
exécuter d'autres commandes sans attendre la fin de l'exécution
de la commande précédente.
CONTRÔLE DES PROCESSUS : EXÉCUTION
EN ARRIÈRE-PLAN
➢ Lorsque la commande est lancée en arrière plan, le shell:
✓ Affiche entre crochets, « [ num_processus] », le numéro du processus lancé en arrière plan, par le
même processus shell.
✓ Affiche le PID (Process IDentifier), le numéro identifiant le processus lancé en arrière plan.
✓ Ensuite, affiche le prompt (l’invite de commande) et attend une nouvelle commande.

Exemple :
Pour rechercher tous les fichiers avec l'extension *.c à partir du répertoire racine / et
enregistrer les résultats dans le fichier resultat, la commande serait :
find / -name "*.c" > resultat &
Cette commande démarre une recherche en arrière-plan, permettant à l'utilisateur de
continuer à travailler sur le terminal pendant que la recherche s'effectue.
CONTRÔLE DES PROCESSUS
Exemple :

find / -name "*.c" -type f -print & > resultat

& : find doit être exécutée en arrière-plan. > : Redirige la sortie standard d'une commande vers un fichier.

1. Dans cette syntaxe, le shell essaie d'exécuter find en arrière-plan, mais la redirection (> resultat) est associée
à la commande qui précède le &, ce qui pourrait ne pas fonctionner comme prévu.

2. En effet, cette syntaxe tente d'exécuter find en arrière-plan tout en redirigeant la sortie dans resultat, mais la
redirection pourrait ne pas être appliquée à la commande en arrière-plan.

Le shell va traiter la redirection avant de lancer la commande en arrière-plan. La sortie standard de la commande
find ne sera pas correctement redirigée vers resultat. En fait, la redirection pourrait échouer, et resultat pourrait
rester vide.

(find / -name "*.c" -type f -print > resultat) &

Conclusion : les parenthèses permet de s'assurer que la redirection est correctement appliquée à la commande
find avant qu'elle ne soit exécutée en arrière-plan.
CONTRÔLE DES PROCESSUS
➢ La commande fg permet de relancer le processus en avant plan.
➢ On ne peut pas arrêter (interrompre) un processus en arrière plan avec « CTRL-C » .
➢ La commande jobs permet de lister les processus lancés en arrière plan, par le
même processus shell.
Exemple:
% jobs
[1]+ Running gedit &
✓ Veut dire que le processus « gedit » est lancé en arrière plan.
CONTRÔLE DES PROCESSUS
➢ Si l’exécution en arrière plan, s’est bien passée, une ligne « Done » apparait
indiquant que le processus est terminé.

Exemple:
[1] + Done find / -name "*.c" -type f > resultat
• Si l’exécution en arrière plan, ne s’est pas bien passée, une ligne « Exit »
apparait indiquant que le processus est terminé.

Exemple:
[1] + Exit find / -name "*.c" -type f > resultat
CONTRÔLE DES PROCESSUS
Précaution:
❖ Si le processus lancé en arrière plan fait des saisies interactives alors
le shell peut interpréter ces saisis comme de nouvelles commandes.
➢ éviter les saisies interactives dans les processus lancés en arrière
plan.
❖ Si le processus lancé en arrière plan fait des affichages sur écran
alors ces affichages peuvent se chevaucher avec les sorties standard
des nouvelles commandes lancées avec le shell.
➢ éviter les sorties standards dans les processus lancés en arrière plan.
CONTRÔLE DES PROCESSUS
Attention:
❖ Un processus ne peut exister que si son père existe.
Quand on quitte le processus père alors on quitte
automatiquement tous ses processus fils.
❖ Ne pas quitter le shell alors que ses processus fils
s’exécutent en arrière plan.
CONTRÔLE DES PROCESSUS
La commande « bg » permet de réactiver un processus
bloqué par « CTRL-Z ». L’exécution du processus réactivé
s’effectue en arrière plan.
bg %num_process
✓« num_process » désigne le numéro du processus lancé en
arrière plan.
✓pas d’espace entre % et « num_process ».
CONTRÔLE DES PROCESSUS
Exemple :
➢ On lance en avant-plan la commande « find ». Pendant l’exécution, on tape la commande «Ctrl-Z»
pour suspendre l’exécution du processus.
% find / > resultat
Lorsqu’on tape « Ctrl-Z », la commande « find » est suspendu , le message suivant est affiché.
[1] + Stopped find / > resultat

➢ On peut réactiver le processus et relancer, en arrière plan, la suite de la commande « find » en


utilisant la commande «bg».
% bg %1
[1] 1234 find / > resultat &
CONTRÔLE DES PROCESSUS
La commande « fg » permet :
✓de réactiver un processus suspendu par « CTRL-Z » . L’exécution du
processus réactivé s’effectue en avant plan.
✓de refaire passer en avant plan une commande qui s’exécute en
arrière plan (commande lancée avec le symbole « & »).
fg %num_process
✓ « num_process » désigne le numéro du processus lancé en arrière
plan ou suspendu par « Ctrl-Z ».
✓Pas d’espace entre % et « num_process »
CONTRÔLE DES PROCESSUS
Exemple :
➢ On lance en avant plan la commande « find ». Pendant l’exécution, on tape la commande
«Ctrl-Z» pour suspendre l’exécution du processus.
% find / > resultat
Lorsqu’on tape « Ctrl-Z », la commande « find » est suspendu , le message suivant est
affiché.
[1] + Stopped find / > resultat
➢ On peut réactiver le processus et relancer, en avant plan, la suite de la commande « find »
en utilisant la commande «fg».
% fg %1
find / > resultat
CONTRÔLE DES PROCESSUS : COMMANDE
WAIT
➢ La commande « wait » permet de faire attendre que tous les processus lancés en
arrière plan soient terminés.

Exemple:
% cat ./Dossier/* > res1.txt 2> erreur1.txt &
% find / > res2.txt 2> erreur2.txt &
% wait

% echo " les deux commandes sont terminées"


➢ La commande « wait » est lancée en avant plan. On ne peut plus lancer de nouvelles
commandes, tant que les commandes lancées en arrière plan n’ont pas terminé.
CONTRÔLE DES PROCESSUS :
COMMANDE PS
La commande ps (Process Status) permet de lister les processus qui sont en cours sur la
machine.
ps [options]
La commande « ps » sans options, n’affiche que les processus en cours qui sont lancés par
l’utilisateur sur le terminal actuel (par le processus shell).

Exemple:
%ps
PID TTY TIME CMD

2254 pts/1 00:00:00 bash

2705 pts/1 00:00:01 gedit

2710 pts/1 00:00:00 ps


CONTRÔLE DES PROCESSUS
% ps –f (format complet) affiche une vue détaillée des processus

% ps –u permet de filtrer les processus par utilisateur


CONTRÔLE DES PROCESSUS : SIGNIFICATION
DES DIFFÉRENTES COLONNES
➢ UID (User ID): identifiant de l’utilisateur qui a lancé le processus.
➢ PID (Process ID): correspond au numéro du processus
➢ PPID (Parent Process ID): correspond au PID du processus parent.
➢ STIME (Start TIME): correspond à l’heure du lancement du processus.
➢ START: idem STIME.
➢ TTY : correspond au nom du terminal depuis lequel le processus a été lancé.
➢ TIME : correspond à la durée de traitement du processus.
➢ CMD : correspond au nom du processus (la Commande exécutée).
➢ %CPU: facteur d’utilisation du cpu exprimé en %.
➢ C: idem %CPU
CONTRÔLE DES PROCESSUS
➢ %MEM : rapport d’utilisation de la mémoire
➢ RSS: mémoire physique (non virtuelle) utilisée par la processus, exprimée en kilo-octets .

➢ VSZ : mémoire virtuelle.


➢ STAT: état du processus

Quelques états:
❖ R (Running): prêt à être exécuté (il est sur la file d’attente des processus).

❖ S (Sleeping): bloqué en attente d’une action externe (par exemple le processus attend une
lecture sur la clavier).
❖ T : processus arrêté, par exemple par Ctrl-Z.
CONTRÔLE DES PROCESSUS : ARRÊT D'UN
PROCESSUS / SIGNAL
❖Pour arrêter un processus qui s’exécute en arrière plan, on
utilise la commande « kill » qui consiste à envoyer des signaux
au processus.
➢Le signal est un moyen de communication entre les processus.
kill [-num_signal] PID [PID ...]
❖Le principe de la commande consiste à envoyer un signal (une
requête) au processus spécifié dans la commande par son PID.
Ce dernier intercepte le message et réagit en fonction du
signal envoyé.
CONTRÔLE DES PROCESSUS : ARRÊT D'UN
PROCESSUS / SIGNAL
Remarque:
Seul le propriétaire du processus qui peut lancer la commande «kill » ou le super-user (utilisateur "root") .

Chaque signal a un nom et un numéro qui dépendent du système utilisé. La commande


« kill -l » permet d’obtenir la liste des signaux.
Par défaut, la commande « kill » envoie le signal demandant au processus spécifié de se
terminer normalement.

Exemple :
% gedit test.c &
[1] 1234
% kill 1234
[1] + Terminated gedit test.c
CONTRÔLE DES PROCESSUS : ARRÊT D'UN
PROCESSUS / SIGNAL
➢ Le signale numéro 1 (SIGHUP): Ce signal est envoyé par le père à tous ses fils
lorsqu'il se termine.
➢ Le signal numéro 2 (SIGINT): ce signal permet l’interruption du processus
demandé (Ctrl+C).
➢ Le signal 9 (SIGKILL): ce signal permet de forcer l’arrêt du processus.
Exemple:

% gedit test.c &


[1] 1234
% kill -9 1234
[1] + Processus arrêté gedit test.c
ÉDITEURS DE TEXTE SOUS UNIX

Les éditeurs de texte sont indispensables dans un environnement


Unix car ils permettent de :

➢Configurer le système en modifiant des fichiers de configuration.

➢Développer des scripts pour automatiser des tâches.

➢Éditer des fichiers de texte de manière simple et rapide.


CATÉGORIES DES ÉDITEURS DE TEXTE SOUS
UNIX
1. Mode Graphique
➢ gedit : Éditeur de texte par défaut dans GNOME, offrant une interface graphique
conviviale.

2. Mode Console
➢ vi : L’un des éditeurs de texte les plus anciens et omniprésents sous Unix. Il est léger
et performant.
➢ vim : Version améliorée de vi, offrant des fonctionnalités supplémentaires comme la
coloration syntaxique et les plugins.
➢ nano : Un éditeur plus simple, conçu pour être facile d’utilisation, avec des
commandes affichées en bas de l'écran.
ÉDITEURS DE TEXTE SOUS UNIX : GEDIT
gedit est un éditeur de texte graphique facile à utiliser, par défaut dans l’environnement
GNOME.

➢ Interface conviviale et intuitive.

➢ Prend en charge la coloration syntaxique pour divers langages.

➢ Fonctions de recherche/remplacement, annuler/rétablir, et plugins supplémentaires.

➢ Idéal pour les utilisateurs préférant une interface graphique.

➢ Lancer en ligne de commande avec : gedit nom_du_fichier .


ÉDITEURS DE TEXTE SOUS UNIX : VI/VIM

vi est l'éditeur de texte par défaut sur de nombreux systèmes Unix.

vim (vi amélioré) est une version améliorée avec plus de fonctionnalités.

❖ Passage en mode :
➢ Mode normal : navigation et commandes.

➢ Mode insertion : pour écrire/modifier le texte.

➢ Mode commande : pour exécuter des opérations (sauvegarder, quitter).


ÉDITEURS DE TEXTE SOUS UNIX : VI/VIM
Ouvrir un fichier avec vi ou vim :

Pour ouvrir ou créer un fichier avec vi ou vim, entrez la commande suivante dans le terminal :

vi nom_du_fichier ou vim nom_du_fichier

Passer en mode insertion :

Lorsque vi est lancé, vous êtes par défaut en mode normal (mode de commande) où il n'est pas possible d'insérer du texte
directement. Pour commencer à insérer du texte, vous devez passer en mode insertion en appuyant sur l'une des touches
suivantes :
➢ i : Insère le texte à l'endroit actuel du curseur.
➢ I : Insère le texte au début de la ligne actuelle.
➢ a : Ajoute du texte après le curseur (après le caractère actuel).
➢ A : Ajoute du texte à la fin de la ligne actuelle.
➢ o : Ouvre une nouvelle ligne sous la ligne actuelle et passe en mode insertion.
➢ O : Ouvre une nouvelle ligne au-dessus de la ligne actuelle et passe en mode insertion.

Une fois dans le mode insertion, vous pouvez taper du texte comme dans un éditeur classique.
ÉDITEURS DE TEXTE SOUS UNIX : VI/VIM
Quitter le mode insertion :
Pour quitter le mode insertion et revenir en mode normal, appuyez sur la touche Échap
(Esc). Vous pourrez alors utiliser d'autres commandes ou naviguer dans le fichier.
Enregistrer et quitter le fichier :
Une fois les modifications terminées, revenez en mode normal (si vous êtes encore en
mode insertion) en appuyant sur Échap, puis utilisez les commandes suivantes :
➢ :w : Enregistre les modifications sans quitter vi.
➢ :wq ou :x : Enregistre les modifications et quitte vi.
➢ :q! : Quitte vi sans enregistrer les modifications.
INTRODUCTION AU BASH : LES DIFFÉRENTS
SHELLS ET LEUR INITIALISATION
Il existe plusieurs Shells UNIX :
➢C-Shell (csh ou tcsh)
➢Bourne Shell (sh ou bash)
➢Korn Shell (ksh), ....
L’interprétation des commandes simples est semblable pour tous. Par
contre, l’utilisation pour écrire des scripts diffère beaucoup (définition
des variables, structures de contrôle, etc).
INTRODUCTION AU BASH : LES DIFFÉRENTS
SHELLS ET LEUR INITIALISATION
L’initialisation du Shell se fait au démarrage du système : Les Shell exécutent
des fichiers de configuration, qui peuvent contenir des commandes
quelconques et sont généralement utilisés pour définir des variables
d’environnement et des alias :
➢ csh exécute le fichier ~/.cshrc (le "rc" signifie run command)
➢ tcsh exécute ~/.cshrc
➢ sh exécute ~/.profile
➢ bash exécute ~/.bash_profile ou à défaut ~/.profile
Ces fichiers d’initialisation sont "invisibles”.
INTRODUCTION AU BASH : VARIABLES
D’ENVIRONNEMENT
Elles sont instanciées lorsqu’un Shell est exécuté par le système. Ce sont des
variables dynamiques utilisées par les différents processus d’un système
d’exploitation.
➢ Elles donnent des informations sur le système, la machine et l’utilisateur.
➢ La commande env permet d’afficher à l’écran toutes les variables
d’environnement pour le Shell.
Pour définir ses propres variables d’environnement, on utilise la commande
export :
❖VARIABLE=VALEUR : donne une valeur à une variable.
❖export VARIABLE : définit VARIABLE comme une variable d’environnement.
❖echo $VARIABLE : affiche la valeur de la variable.
INTRODUCTION AU BASH : VARIABLES
D’ENVIRONNEMENT
LE SHELL : INTERPRÉTEUR DE
COMMANDES
Le shell est un environnement puissant pour l’automatisation et le développement de
scripts complexes sous Unix :
✓ Un Langage de Programmation Complet :
✓ Gestion des Variables :
Possibilité de définir et manipuler des variables pour stocker et traiter des données.
✓ Tests et utilisation des Boucles :
Structures conditionnelles (if, else) et boucles (for, while) pour automatiser les tâches.
✓ Opérations sur Variables :
Calculs, concaténations et manipulations avancées de chaînes de caractères.
✓ Définitions des Fonctions :
Capacité de définir des fonctions pour structurer le code et réutiliser des blocs
d’instructions.
LE SHELL : INTERPRÉTEUR DE
COMMANDES
➢La commande ps: Donne le nom du SHELL

l’interpréteur utilisé est bash

➢La commande bash –version : Donne la version du SHELL


COMMANDES INTERNES ET EXTERNES
❖ Le shell distingue deux sortes de commandes :
✓ les commandes internes : le code est implanté au sein de l’interpréteur de
commande (cd , echo , pwd,…)
✓ les commandes externes : le code se trouve dans un fichier ordinaire (ls,
mkdir, cat, sleep,…)

Syntaxe : type –t Commande


➢ Builtin : Commande Interne
➢ File : Commande externe
COMMADES INTERNES ET EXTERNES
Example :
$ type -t sleep
file
La commande sleep est identifiée comme un fichier, c'est donc une commande
externe.
$ type -t echo
builtin
La commande echo est identifiée comme une commande interne du shell (builtin).
COMMENTAIRES
Un commentaire débute avec le caractère # et se termine avec la fin de
la ligne. Un commentaire est ignoré par le shell.
Example :
$ echo bonjour # l'ami
$ bonjour
$ echo coucou #l' ami
$ coucou
# echo coucou
$
FICHIERS SHELL
Lorsqu’un traitement nécessite l’exécution de plusieurs
commandes, il est préférable de les sauvegarder dans un
fichier plutôt que de les retaper au clavier chaque fois que le
traitement doit être lancé.
➢ Ce type de fichier est appelé fichier de commandes ou
fichier shell ou encore script shell.
STRUCTURE ET EXÉCUTION D'UN SCRIPT
➢ Les shell scripts se terminent généralement par « .sh » pour le Bourne Shell et le Bourne Again Shell, par
« .ksh » pour le Korn Shell et par « .csh » pour le C Shell.

Pour lancer l’exécution d’un fichier shell, on peut utiliser la commande : bash
✓ $ bash monscript

Il est plus simple de lancer l’exécution d’un programme shell en tapant directement son nom, comme on le
ferait pour une commande unix ou une commande interne.
Pour que cela soit réalisable, deux conditions doivent être remplies :
l’utilisateur doit posséder les permissions r (lecture) et x (exécution) sur le fichier shell :
✓ $ chmod u+x monscript
✓ Pour l'exécuter : $ ./monscript

Pour éviter le ./ le répertoire dans lequel se trouve le fichier shell doit être présent dans la liste des chemins
contenue dans PATH. :
✓ $ PATH=$PATH:.
✓ $ monscript
STRUCTURE ET EXÉCUTION D'UN SCRIPT
❖ Une ligne de commentaire commence toujours par le caractère « # ». Un commentaire peut
être placé à la fin d'une ligne comportant déjà des commandes.
# La ligne suivante effectue un ls
ls # La ligne en question
❖ La première ligne à une importance particulière car elle permet de préciser quel shell va
exécuter le script.
#!/bin/ sh
#!/bin/ksh
❖ Dans le premier cas c'est un script Bourne, dans l'autre un script Korn
❖ Dans notre cas on va utiliser le Bourne Again Shell
#!/bin/bash
STRUCTURE ET EXÉCUTION D'UN SCRIPT
Exercice :
1. A l’aide d’un éditeur de texte, créer un fichier premier contenant les lignes suivantes :
#!/bin/bash
# premier
echo "La date du jour est: "
Date
La notation #! en première ligne d'un fichier interprété précise au shell courant quel interpréteur doit être
utilisé pour exécuter le programme (dans cet exemple, il s’agit de /bin/bash).

2. Vérifier le contenu de ce fichier.


3. Pour lancer l’exécution d’un fichier shell premier, on peut utiliser la commande : bash premier ou ./premier
ou directement premier

Ex : $ bash premier
la date du jour est : jeudi 27 février 2014, 17:34:25 (UTC+0100)
$
STRUCTURE ET EXÉCUTION D'UN SCRIPT
Exercice :
Écrire un programme shell monscript1 qui affiche le nom de connexion
de l'utilisateur et le chemin absolu de son répertoire courant de la
manière suivante :

Ex : $ monscript1
mon nom de connexion est : stagiaire
mon repertoire courant est : /home/stagiaire
$
LES TYPES DE PARAMETRES
❖Le shell distingue trois types de paramètres :

➢ les variables, identifiées par un nom


Ex : a , PATH
➢ les paramètres de position, identifiés par un numéro
Ex : 0 , 1 , 12
➢ les paramètres spéciaux, identifiés par un caractère spécial
Ex : # , ? , $
LES VARIABLES

Une variable est identifiée par un nom, Une suite


de lettres, de chiffres ou de caractères espace
souligné ne commençant pas par un chiffre. Les
lettres majuscules et minuscules sont
différenciées.
LES VARIABLES
Les variables peuvent être classées en trois groupes :

A- les variables utilisateur (ex : a, valeur)

B- les variables prédéfinies du shell (ex : PS1, PATH, REPLY, IFS, HOME)
C- les variables prédéfinies de commandes unix (ex : TERM).

En général, les noms des variables utilisateur sont en lettres minuscules


tandis que les noms des variables prédéfinies (du shell ou de commandes
unix) sont en majuscules.
LES VARIABLES
Les principales commandes de manipulation des variables sont
➢ Echo
➢ Print
➢ Export
➢ read
➢ Set, unset
➢ Shift
LES VARIABLES SIMPLES
Nous appellerons variable simple toute variable définie par l’utilisateur pour
ses propres besoins.
Désignation de la variable :
❖ Pour désigner une variable, il suffit d’utiliser la syntaxe suivante: $variable
Si la variable doit être suivie d’une valeur autorisée la notation est alors la
suivante: ${variable}nombre
Affichage d’une variable :
❖ La commande: echo [-n] [texte] $variable permet d’afficher la valeur de la
variable. On peut aussi l’intégrer dans du texte.
❖ L’option –n permet d’éviter le passage à la ligne après l’affichage.
TYPES D’AFFECTATION DES VARIABLES
Affectation directe :
Syntaxe : nom=[valeur] [ nom=[valeur] ... ]

le symbole = et la valeur à affecter forment une seule chaîne de caractères.

Plusieurs affectations peuvent être présentes dans la même ligne de commande

Ex : $ x=coucou y=bonjour

=> la variable x contient la chaîne de caractères coucou


=> la variable y contient la chaîne bonjour

Ex : $ echo x est $x
x est coucou
TYPES D’AFFECTATION DES VARIABLES
le nom d’un paramètre « x » et la valeur de ce paramètre « $x » ne se
désignent pas de la même manière.
Ex :
$ x=$x$y => x : contenant, $x : contenu
$ echo $x
coucoubonjour
$
TYPES D’AFFECTATION DES VARIABLES
Lorsque l’on souhaite effectuer une concaténation, il est possible d’utiliser
l’opérateur += de bash

Ex :
$ x=coucou y=bonjour
$ x+=$y
$ echo $x
coucoubonjour
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER

Syntaxe : read [ var1 ... ]


Ex : $ read a b
bonjour Monsieur
=> chaînes saisies par l’utilisateur et enregistrées respectivement dans
les variables a et b
$ echo $b
Monsieur
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
Lorsque la commande interne read est utilisée sans argument, la
ligne lue est enregistrée dans la variable prédéfinie du shell REPLY.

Ex :
$ read
bonjour tout le monde
$
$ echo $REPLY
bonjour tout le monde
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER

L’option « –p » de read affiche une chaîne d’appel avant d’effectuer la lecture.


read –p chaîne_d_appel [ var … ]
Ex :
$ read -p "Entrez votre prenom : " prenom
Entrez votre prenom : Eric
$
$ echo $prenom
Eric
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
Remarque :
R1 : s’il y a moins de variables que de mots dans la ligne lue, le shell
affecte le 1er mot à la première variable, le 2ème mot à la 2eme variable,
etc., la dernière variable reçoit tous les mots restants.

Ex : $ read a b c
un bon jour coucou
$
$ echo $a
un
$ echo $c
jour coucou
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
R2 : s’il y a Plus de variables que de mots dans la ligne lue, chaque
variable reçoit un mot et après épuisement de ces de derniers, les
variables excédentaires sont vides.

Ex : $ read a b
un
$
$ echo $a
un
$
$ echo $b
=> valeur null
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER

❖ La commande read propose plusieurs options intéressantes.

➢ -p : afficher un message de prompt.

➢ -n : limiter le nombre de caractères.

➢ -s : ne pas afficher le texte saisi.


AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER
Exercice :

Ecrire un programme shell deuxfois qui affiche le message "Entrez un mot : ", lit le
mot saisi par l'utilisateur puis affiche ce mot deux fois sur la même ligne.

Ex : $ deuxfois
Entrez un mot : toto
toto toto
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER

Solution : deuxfois

#!/bin/bash
read -p "Entrez le mot:" a echo $a $a
VARIABLE EN « LECTURE SEULE » OU
CONSTANTE
declare –r nom=valeur [ nom=valeur … ]
La commande declare -r permet de déclarer une variable comme étant en lecture
seule, ce qui signifie que sa valeur ne peut pas être modifiée après sa définition. C'est
utile pour définir des constantes dans un script shell.
Ex : $ declare -r mess=bonjour
❖ Une tentative de modification de la valeur d’une constante provoque une erreur.
Ex : $ mess=salut
bash: mess : variable en lecture seule
$
AFFECTATION PAR LECTURE : SAISIE AU
CLAVIER

Pour connaître la liste des constantes définies : declare –r


QUOTES, APOSTROPHE, GUILLEMETS ET
APOSTROPHE INVERSÉE
➢ Les simples quotes ' ' délimitent une chaîne de caractères. Même si cette chaîne contient des commandes ou
des variables shell, celles-ci ne seront pas interprétées.
$ variable ="secret"
$ echo 'Mon mot de passe est $variable.‘
Mon mot de passe est $variable.
➢ Les doubles quotes " " délimitent une chaîne de caractères, mais les noms de variable sont interprétés par le
shell.
$ variable="secret"
$ echo "Mon mot de passe est $variable." Mon mot de passe est
secret.
➢ Bash considère que les Anti-quotes `` délimitent une commande à exécuter. Les noms de variable et
les commandes sont donc interprétés.
$ echo `variable="connu"; echo "Mon mot de passe est $variable."`
Mon mot de passe est connu.
echo `ls` : cette commande affiche le contenu du répertoire courant à l'écran
EXPORTATION DES VARIABLES
Généralement, une variable n’est utilisée que dans le shell-script où elle reçoit son affectation, si
on souhaite l’utiliser pour les programmes appelés ultérieurement, on doit l’exporter.

❖ VARIABLE = valeur
❖ export VARIABLE

En Bash, les variables définies dans un shell sont locales à ce shell et ne sont pas visibles par les
sous-processus ou les shells enfants, sauf si elles sont exportées.

ma_variable = toto
export ma_variable
# Ouvrir un nouveau shell (sous-shell)

bash
echo $ma_variable # toto
DECLARE ET EXPORT
Pour rendre une variable disponible pour une exportation en
dehors de l'environnement du script lui-même on utilise:
declare -x var3
declare -x var3=373
La variable var3 peut être appelée par un autre script dans le
même shell mais reste inconnue pour les autres shell (nouvelle
console).
LES VARIABLES
➢ Les variables Bash ne sont pas typées : À l'inverse de nombreux langages de
programmation.
➢ les variables bash sont des chaînes de caractères mais, suivant le
contexte, Bash autorise des opérations entières et des comparaisons sur
ces variables, le facteur décisif étant la seule présence de chiffres dans la
variable. declare –i permet de déclarer une variable de type entier par
exemple
➢ La commande intégrée declare permet de modifier les propriétés des
variables. Ceci est une forme très faible du typage disponible dans
certains langages de programmation. La commande declare est
spécifique à la version 2 ou ultérieure de Bash.
LES VARIABLES D’ENVIRONNEMENT
➢ Les variables accessibles à un interpréteur (ou plus généralement à un
processus) peuvent se décomposer en deux classes :
❖ les variables locales (comme les variables de l’exemple précédent) :
elles disparaissent lorsque l’interpréteur (ou le processus) se termine.

❖ les variables d’environnement : celles-ci ont la particularité d’être


automatiquement transmises à sa descendance, c-à-d. copiées, à tous les
shells fils (ou processus fils) qu’il créera dans le futur.
Des exemples de variables d’environnement usuelles sont PATH et
HOME.
LES VARIABLES D’ENVIRONNEMENT
Pour créer une variable d’environnement ou faire devenir variable d’environnement une
variable déjà existante, on utilise la commande interne export.

Ex : $ a=coucou
$b=bonjour => définition de la variable locale b
$ export b => la variable b devient une variable d d’environnement
$ export c=bonsoir => définition de la variable d’environnement c
$ bash => création d’un shell fils
$ echo $a
$ => la variable a est inconnue
$ echo $b
Bonjour
$ echo $c
bonsoir => les variables b et c sont connues du shell fils
$ exit => fin du shell fils
LES VARIABLES D’ENVIRONNEMENT
➢ La transmission des variables d’environnement est unidirectionnelle :
du processus père vers le(s) processus fils.
➢ Si un processus fils modifie la valeur d’une variable d’environnement, seule sa copie locale en sera affectée.

Ex : $ export a=coucou
$ bash
$ echo $a
coucou
$ a=bonsoir => modification de la variable d’environnement a dans le shell fils
$ echo $a
Bonsoir
$ exit
$ echo $a
coucou => la valeur n’a pas été modifiée dans le shell père
LES VARIABLES D’ENVIRONNEMENT
Visualisation des variables disponibles :
La commande printenv : affiche les valeurs des variables de
l’environnement du processus en cours.
Supprimer une variable :
La commande unset variable : supprime la variable de la
liste des variables disponibles.
VARIABLES DU SHELL - PERSONNALISATION
DE L’ENVIRONNEMENT

Les principales variables :


➢ Le shell permet le stockage de variables d’environnement (en majuscules)
➢ Définies pour l’ensemble du système

Exemples : HO ME , PATH, SHE L L, USE R


➢ On accède à leur valeur en les faisant précéder d’un «$»

➢ Pour visualiser toutes les variables d’environnement: «env»


VARIABLES DU SHELL-PERSONNALISATION DE
L’ENVIRONNEMENT
❖ CD PATH : liste des répertoires recherchés quand cd est exécuté avec un nom relatif comme argument,
❖ D I S PL AY: l ’é cr a n s u r l e q u e l on tr ava i l l e ( p a r d éf a u t : 0. 0 ) ,
❖ EN V: nom d ’un f i c hi e r exé c uté à c ha qu e a pp el d e b a s h ,
❖ G I D : l e n u m é ro d u g ro u p e a c tu e l d e l ’u t i l i s a te u r,
❖ H OM E: r épe r toi re de l og i n,
❖ H OS T: l e nom de l a m a c hi ne s ur l a qu el l e on s e t ro uve ,
❖ LO G NA M E: l e nom de l ’ut i l i s a te ur,
❖ M A NPATH : l i s te de s ré pe rt oi r es o ù s e t r ouve nt l es pa g e s de ma n uel ,
❖ PATH : l i s te d e s ré p e rt oi r e d e r ec h e r ch e d e s c om ma n d es , l e s ép a ra te u r e st « : » ,
❖ PW D : l e ré pe r toi r e cou ra nt ,
❖ S H EL L: l e s h e l l p a r d éfa u t,
❖ TE R M: n om d u ty p e d e te rm i n a l u t i l i s é,
SUBSTITUTIONS DES VARIABLES
Effectuer un certain nombre de substitutions lors de l’affichage:

➢ $paramètre => affiche la valeur courante de paramètre

➢ ${paramètre} = > affiche la valeur courante de paramètre et autorise la


concaténation.
➢ ${paramètre:-valeur} => affiche la valeur courante de paramètre si elle est non
nulle, sinon affiche Valeur

➢ ${paramètre:=valeur} => affiche la valeur courante de paramètre si elle est non


nulle, sinon affiche valeur et affecte à paramètre valeur,

➢ ${paramètre:?valeur} => affiche la valeur courante de paramètre si elle est non


nulle, sinon on écrit valeur sur la sortie standard et on sort.
PARAMÈTRES DE POSITION
➢ Un paramètre de position est référencé par un ou plusieurs chiffres : 8 , 0 , 23
➢ L’assignation de valeurs à des paramètres de position s’effectue :
❖ soit à laide de la commande interne set

❖ soit lors de l’appel d’un fichier shell ou d’une function shell.

➢ On ne peut utiliser ni le symbole =, ni la commande interne read pour affecter directement


une valeur à un paramètre de position.
Ex : $ 23=bonjour
23=bonjour : commande introuvable
$
$ read 4
Aa
bash: read: « 4 » : identifiant non valable
$
COMMANDE INTERNE SET
La commande interne set affecte une valeur à un ou plusieurs paramètres de
position en numérotant ses arguments suivant leur position. La numérotation
commence à 1.

Syntaxe : set arg1 ...

Ex : $ set alpha beta gamma

✓ alpha est la valeur du paramètre de position 1


✓ beta est la valeur du 2ème paramètre de position
✓ gamma est la valeur du paramètre de position 3
COMMANDE INTERNE SET
Pour obtenir la valeur d’un paramètre de position, il suffit de placer le caractère $
devant son numéro. Ainsi, $1 permet d’obtenir la valeur du premier paramètre de
position, $2 la valeur du deuxième et ainsi de suite.

Ex : $ set ab be ga => numérotation des mots ab, be et ga


$ echo $3 $2
ga be
$ echo $4
$
COMMANDE INTERNE SET
➢ Tous les paramètres de position sont réinitialisés dès que la commande interne set est utilisée avec au moins un argument.
Ex: $ set coucou
$ echo $1 coucou
$ echo $2
=> les valeurs be et ga précédentes ont disparues
$
➢ La commande interne set -- rend indéfinie la valeur des paramètres de position préalablement initialisés.
Ex : $ set alpha beta
$ echo $1 alpha
$ set --
$ echo $1
=> les valeurs alpha et beta sont perdues
$
COMMANDE INTERNE SET
Variable prédéfinie I F S et commande interne set :
❖ La variable prédéfinie IFS du shell contient les caractères séparateur de mots. ( Par défaut, ce sont
les caractères espace, tabulation et interligne). L’initialisation de IFS est effectuée par bash.
( Ex : $ set Jean:12:Rodez (3 arguments si IFS=: et un seul sinon)).

❖ Utilisée sans argument, set a un comportement différent : elle affiche, entre autres, la liste des
noms et valeurs des variables définies. (Ex : $ set | more)

❖ Si la valeur du premier argument de set commence par un caractère - ou +, une erreur se produit.
En effet, les options de cette commande interne commencent par un de ces deux caractères.

❖ Pour éviter que ce type d’erreur ne se produise, on utilise la syntaxe : set --ar g …
PARAMÈTRES SPÉCIAUX
➢ Un paramètre spécial est référencé par un caractère spécial.
L’affectation d’une valeur à un paramètre spécial est effectuée
par le shell (implicitement).

➢ Pour obtenir la valeur d’un paramètre spécial, il suffit de placer le


caractère $ devant le caractère spécial qui le représente.
PARAMÈTRES SPÉCIAUX
➢ $# : donne le nombre d’arguments passés au script

➢ ${#var} : longueur de la variable "var"

➢ $* : liste complète des valeurs des paramètres

❖ représente un seul mot constitué de la valeur de tous les paramètres positionnels


séparées par le premier caractère de la variable spéciale I FS.

❖ Ceci signifie que $* est équivalent à "$1c$2c...'', dans laquelle c est le premier
caractère de la valeur de la variable IFS.
❖ Si I FS est nulle ou inexistante, les paramètres sont séparés par des espaces.

➢ $0 : le nom du script
PARAMÈTRES SPÉCIAUX

➢$n, ${n} valeur du nième argument du script,


➢$@ équivalent à $*, mais $@ signifie: "$1" "$2" ... "${n}"
❖ chaque paramètre se transforme en un mot distinct
➢$$ le numéro de processus du script,
EXERCICE
Ecrire un programme shell nbmots qui demande à l'utilisateur de saisir une
suite quelconque non vide de mots puis affiche le nombre de mots saisis.

Ex : $ nbmots

Entrez une suite de mots : un deux trois quatre cinq

5 => 5 mots ont été saisis

$
SOLUTIONS
Solution 1
#!/bin/bash
read -p "Entrez une suite de mots:" a set $a
echo $#

Solution 2
#!/bin/bash
echo "Entrez une suite de mots" read a
set $a
echo $#
COMMANDE INTERNE SHIFT
➢ La commande interne shift décale la numérotation des paramètres de position ayant une valeur.
Syntaxe : shift [n]

$ set a b c d e => 1 2 3 4 5
$ echo $1 $2 $#
ab5
$ shift 2
=> a b c d e les mots a et b sont devenus inaccessibles
=> 1 2 3
$ echo $1 $3
ce
$ echo $#
3
$

Remarques :

➢ La commande shift sans argument est équivalente à shift 1

➢ shift ne modifie pas la valeur du paramètre de position 0 qui possède une signification particulière.
COMMANDE INTERNE SET : CAS PARTICULIER
➢ Lorsque la commande interne set est utilisée dans un script shell, la syntaxe $1 a deux significations distinctes :

❖ Avant set : $1 représente le premier argument passé au script.

❖ Après set : $1 devient le premier paramètre de position réinitialisé par set.

Exemple :

#!/bin/bash

echo '$1' est $1 # Affiche le premier argument

set hello # Réinitialise $1 à "hello"

echo '$1' est $1 # Affiche "hello"

Exécution :

$ ecrase_arg bonjour coucou salut

$1 est bonjour

$1 est hello
PARAMÈTRES SPÉCIAUX * ET @
Les paramètres spéciaux @ et * contiennent tous les deux la liste des valeurs des
paramètres de position initialisés.

Ex : $ set un deux trois quatre


$
$ echo $*
un deux trois quatre
$
$ echo $@
un deux trois quatre
$

"$*" est remplacée par "$1 $2 ... "


"$@" est remplacée par "$1" "$2" ...
PARAMÈTRES SPÉCIAUX * ET @
Ex : $ set bonjour "deux coucou" salut => trois paramètres de position sont initialisés

$ set "$*" => est équivalent à : set “bonjour deux coucou salut"

$
$ echo $#
1

$ echo $1

bonjour deux coucou salut

$
PARAMÈTRES SPÉCIAUX * ET @
➢ "$@" produit autant de chaînes que de paramètres de positions initialisés.
➢ "$*" traite l’ensemble des paramètres de position initialisés comme une unique chaîne de
caractères.
Inversement,
Ex : $ set bonjour "deux coucou" salut => trois paramètres de position initialisés
$
$ set "$@” => est équivalent à : set “bonjour" “deux coucou" “salut"
$
$ echo $#
3
$ echo $2
deux coucou => l’intégrité de la chaîne a été préservée
$
SUBSTITUTION DE COMMANDES
Syntaxe : $( cmd )

➢ Une commande cmd entourée par une paire de parenthèses ( ) précédées d'un caractère $ est
exécutée par le shell puis la chaîne $( cmd ) est remplacée par les résultats de la commande
cmd écrits sur la sortie standard, c’est à dire l’écran.
➢ Ces résultats peuvent alors être affectés à une variable ou bien servir à initialiser des
paramètres de position.
Ex : $ pwd
/home/ubuntu => résultat écrit par pwd sur sa sortie standard
$ repert=$(pwd) => la chaîne /home/ubuntu remplace la chaîne $(pwd)
$
$ echo mon repertoire est $repert mon # repertoire est /home/ubuntu
METTRE UNE COMMANDEDANS UNE VAR

➢ rep=`pwd`
➢ echo $rep
➢ var=$(echo `pwd`)
➢ Var=$(echo `ls –l|wc -l`)
➢ Var =$(` echo $mavariable | grep [a-z] | wc -l` )
EXERCICE
En utilisant la substitution de commande, écrire un fichier shell mach
affichant :
"Ma machine courante est nomdelamachine"

Ex : $ mach

Ma machine courante est ubuntu

$
SOLUTION
#!/bin/bash
mamachine=$(hostname)
Echo ’’Ma machine courante est $mamachine’’
SUBSITITUTION DE COMMANDES
Pour l’utiliser avec la commande set il faut utiliser le double « - » Set - - $(cmd)
$ set $( ls -l .bashrc)
bash: set: -w : option non valable
set : utilisation : set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg...]
$ ls -l .bashrc
-rw-r--r-- 1 sanchis sanchis 3486 mai 18 2013 .bashrc
$

$ set -- $(ls -l .bashrc)


$
$ echo $1
-rw-r--r—
$
EXERCICE
Ecrire un programme shell taille qui prend un nom de fichier en
argument et affiche sa taille. On ne considère aucun cas d'erreur.

Ex : $ ls -l .bashrc
-rw-r--r-- 1 ubuntu ubuntu 3486 mai 18 2013 .bashrc
$
$ taille .bashrc #!/bin/bash
3486 var=$(ls -l $1)
set -- $var
echo $5
GROUPEMENT DE COMMANDES
Le shell fournit deux mécanismes pour grouper l’exécution d’un ensemble de commandes sans pour cela affecter un nom à ce
groupement :
❖ l’insertion de la suite de commandes entre une paire d’accolades { suite_cmds ; }
Ex : $ pwd
/home/sanchis => répertoire initial
$
$ { cd /bin ; pwd ; } => changement du répertoire courant
/bin
$
$ pwd
/bin => répertoire final (le changement a été préservé !)
$
❖ l’insertion de cette suite de commandes entre une paire de parenthèses ( suite_cmds ; )
Ex : $ ( pwd ; date ; echo FIN ) > fin
$
$ cat fin
/home/sanchis
lundi 31 mars 2014, 10:55:31 (UTC+0200)
FIN
GROUPEMENT DE COMMANDES
Exercice : A l'aide de la commande date, écrire un programme shell jour qui affiche le jour courant du
mois.
Ex : $ date
lundi 24 mars 2014, 09:08:02 (UTC+0100)
$
$ jour
24
$ Set - - $(date) ; Echo $2
Exercice : a) Ecrire un programme shell heure1 qui affiche l'heure sous la forme : heures:minutes:secondes
Ex : $ heure1
09:11:40
Set - - $(date) ; Echo $4

b) Ecrire un programme shell heure qui n’affiche que les heures et minutes. On pourra utiliser la variable
prédéfinie IFS du shell
Ex : $ heure
09:11
GROUPEMENT DE COMMANDES
Exercice :
Ecrire un programme shell uid qui affiche l'uid de l'utilisateur. On utilisera la
commande unix id, la commande interne set et la variable prédéfinie IFS.
$id

uid=1016(toto) gid=100(users) groups=100(users)

echo "$1" | cut -d'=' -f2 | cut -d'(' -f1


SUPPRESSION DES AMBIGUÏTÉS
Pour éviter les ambiguïtés dans l’interprétation des références de paramètres,
on utilise la syntaxe ${paramètre}.
Ex : $ x=bon
$ x1=jour
$ echo $x1 => valeur de la variable x1
Jour
$ echo ${x}1 => pour concaténer la valeur de la variable x à la chaîne ‘’1’’
bon1
$

Ex : $ set un deux trois quatre cinq six sept huit neuf dix onze douze
$ echo $11
Un1
$
$ echo ${11} => pour obtenir la valeur du onzième paramètre de position onze
PARAMÉTRES NON DÉFINIS
Trois cas peuvent se présenter lorsque le shell doit évaluer un paramètre :
✓ Le paramètre n’est pas défini,
✓ Le paramètre est défini mais ne possède aucune valeur (valeur vide),
✓ Le paramètre possède une valeur non vide.
Lorsque l’option nounset de la commande interne set est positionnée à
l’état on (commande set -o nounset), bash affiche un message d’erreur
quand il doit évaluer un paramètre non défini.
PARAMÉTRES NON DÉFINIS
Ex : $ set -o nounset => option nounset à l’état on
$ echo $e => variable utilisateur e non définie
bash: e : variable sans liaison => message d’erreur !
$ set -- => paramètres de position sont réinitialisés
$ echo $1
bash: $1 : variable sans liaison
$ d= => d : variable définie mais vide
$ echo $d
=> > valeur null, pas d d’erreur
$
PARAMÉTRES NON DÉFINIS

Pour associer au paramètre une valeur ponctuelle lorsqu’il est non

défini ou bien défini vide.

La syntaxe à utiliser est la suivante :

${paramètre:‐chaîne}
PARAMÉTRES NON DÉFINIS
Ex : $ set -o nounset
$ ut1=root => ut1 définie et non vide
$ ut2= => ut2 définie et vide
$ echo $ut1
root
$ echo $ut2
$ echo $1
bash: $1 : variable sans liaison
=> paramètre de position 1 non défini
$
PARAMÉTRES NON DÉFINIS
Ex : $ echo ${ut1:-Remplace}
root => ut1 étant définie non vide, sa valeur est utilisée
$ echo ${ut2:-Remplace}
=> ut2 est définie et vide, la valeur de remplacement est utilisé
Remplace
$
$ echo ${1:-Remplace}
Remplace
=> le premier paramètre de position est non défini, la valeur de
remplacement est utilisée
$
PARAMÉTRES NON DÉFINIS
Cette association ne dure que le temps d’exécution de la
commande.
Ex : $ echo $1
bash: $1 : variable sans liaison
=> le paramètre est redevenu indéfini
$
PARAMÉTRES NON DÉFINIS
La commande « set +o nounset » positionne l’option nounset à l’état off :
le shell traite les paramètres non définis comme des paramètres vides.

Ex : $ set +o nounset => option nounset à l’état off


$
$ echo $e => variable e non définie,
$ => aucune erreur signalée
$ echo $2
$ => aucune erreur signalée
$ f= => f : variable définie vide
$ echo $f
$
SUPPRESSION DE VARIABLES
Pour rendre indéfinies une ou plusieurs variables, on utilise la commande
interne unset.
Syntaxe : unset var [ var1 . . . ]

Ex : $ a=coucou => la variable a est définie


$ echo $a
coucou
$ unset a => la variable a est supprimée
$ set -o nounset => pour afficher le message d’erreur
$ echo $a
bash: a : variable sans liaison
$
SUPPRESSION DE VARIABLES
Une variable en « lecture seule » ne peut être supprimée par unset.

Ex : $ declare -r a=coucou => définition de la constante a


$ echo $a
coucou
$ unset a
bash: unset: a : « unset » impossible : variable est en lecture seule
$
RAPPEL SUR LES REDIRECTIONS D’ENTRÉE
SORTIE
Un processus Unix possède par défaut trois voies
d’interaction avec l’extérieur appelées entrées / sorties
standard.
> fichier : Sortie standard vers un fichier (l’écrase s’il existe)
>> fichier : sortie standard vers la fin d’un fichier
< fichier : entrée standard est un fichier
<< fichier : entrée standard en mode saisie jusqu’à mot de fin
2> fichier : sortie d’erreur vers fichier
2>> fichier : sortie standard à la fin d’un fichier
2>&1 : rediriger la sortie standard pour les messages d’erreur vers la sortie standard
cmd1 | cmd2 : sortie de cmd1 est l’entrée de cmd2
RAPPEL SUR LES REDIRECTIONS D’ENTRÉE
SORTIE
Pour éviter que le contenu d’un fichier ne soit écrasé lors d’une redirection, il est
possible d’utiliser l’option noclobber de la commande interne set.
Ex : $ cat t
bonjour
$ set -o noclobber => activation de l’option noclobber
$ echo coucou > t
bash: t : impossible d’écraser le fichier existant
$ echo ciao >> t
$ => la concaténation reste possible
$ cat t Bonjour ciao
$ set +o noclobber
=> pour désactiver l’option
REDIRECTIONS ET SCRIPTS: SUBSTITUTION DE
COMMANDE
Une substitution de commande associée à une redirection de l’entrée standard permet d’affecter à une
variable le contenu d’un fichier.
En effet, la substitution de commande $(cat fichier) peut être avantageusement remplacée par la
syntaxe $(< fichier). Cette deuxième forme est plus rapide.
Ex : $ cat fic_noms
pierre beteille
anne debazac
julie donet
$
$ liste=$(<fic_noms)
$
$ echo $liste => liste est une variable et non un fichier !
$ pierre beteille anne debazac julie donet => elle contient le contenu du fichier fic_noms
REDIRECTIONS ET SCRIPTS: SUBSTITUTION DE
COMMANDE
Exercice :
Ecrire un programme shell nblignes prenant un nom de fichier en
argument et qui affiche le nombre de lignes de ce fichier.

Ex : $ nblignes fich_noms
3
$
$ nblignes=$( wc -l < fic_noms )
$ echo $nblignes
3 => nombre de lignes
$
REDIRECTIONS ET SCRIPTS
Redirections séparées des entrées / sorties standard
Les entrées / sorties peuvent être redirigées indépendamment les unes des autres.

Ex : $ wc -l < fic_noms > fic_nblignes 2>err


$ cat fic_nblignes
3
$ cat err
$
Il est possible de placer les redirections où l'on souhaite car le shell traite les redirections avant d'exécuter la
commande. Ex :
$ < fic_noms > fic_nblignes wc 2>err -l
$
$ cat fic_nblignes
3
$
$ cat err
$
REDIRECTIONS ET SCRIPTS : TEXTE JOINT
Il existe plusieurs syntaxes légèrement différentes pour passer un texte comme entrée
à une commande. La syntaxe présentée ci-dessous est la plus simple :
cmd << mot
texte
mot
Ex : $ a=3.5 b=1.2
$
$ bc << Fin
> $a + $b => la chaîne ">" indique que la commande >
> Fin => n’est syntaxiquement pas terminée
4.7
$

La commande unix bc est une calculatrice utilisable en ligne de commande


REDIRECTIONS ET SCRIPTS : CHAÎNES
JOINTES
Syntaxe :
cmd <<< chaîne

C’est une syntaxe plus compacte que le texte joint :


le contenu transmis à l’entrée standard de la commande cmd se présente
sous la forme d’une chaîne de caractères chaîne.

Ex : $ a=1.2 b=-5.3
$
$ bc <<< "$a + $b"
-4.1
$
REDIRECTIONS ET SCRIPTS : TUBES ET
CHAÎNES JOINTES
Le shell crée un processus différent pour chaque commande d’un tube cmd1 | cmd2.
Cela provoque l’effet suivant : si cmd2 modifie la valeur d’une variable, cette
modification disparaitra avec la fin du processus qui exécute cette commande.
Ex : $ a=bonjour
$ echo $a | read rep # (a)
$ echo $rep
=>la variable rep ne contient pas la chaîne bonjour ; elle n’est pas initialisée
$
Pour éviter ça, on place les deux commandes à l’intérieur d’une paire de parenthèses
Ex : $ echo $a | ( read rep ; echo $rep )
bonjour => l’affectation à rep a bien été effectuée
$ echo $rep
=> > variable rep non initialisée
$
REDIRECTIONS ET SCRIPTS : TUBES ET
CHAÎNES JOINTES
Cela provient du fait qu’il y a deux variables rep différentes :

Une qui est créée et utilisée par le processus qui exécute la commande
read rep et une qui est créée et utilisée par le processus qui exécute la
commande echo $rep. L’utilisation d’une chaîne jointe permet de résoudre
de manière élégante ce problème de transmission de données entre
processus.
Ex : $ read rep <<< "$a"
$
$ echo $rep
bonjour
$
REDIRECTIONS ET SCRIPTS : SUBSTITUTION
DE PROCESSUS
La substitution de processus généralise la notion de tube. La principale forme de
substitution de processus est la suivante : cmd <(suite_cmds)
Le shell crée un fichier temporaire, connecte la sortie de suite_cmds à ce fichier
temporaire puis lance l’exécution de cette suite de commandes.
Ex : $ ls -l
total 8
-rw-rw-r-- 1 sanchis sanchis 140 mars 31 10:29 err
-rw-rw-r-- 1 sanchis sanchis 0 mars 31 10:26 f
-rw-r--r-- 1 sanchis sanchis 156 mars 31 10:30 trace
$ wc -l <(ls -l)
4 /dev/fd/63 => la commande ls –l affiche 4 lignes
$
Dans l’exemple ci-dessus, la sortie de la commande ls –l a été enregistrée dans un fichier
temporaire /dev/fd/63. Puis, la commande wc –l /dev/fd/63 a été exécutée.
INTERPRÉTATION DE COMMANDE TEST
La commande Test :
test condition & & alo rs_instruction1|| sinon_instruction2
ou
[ condition ] & & alors_instruction1 | | sinon_instruction2
est utilisée dans de nombreux cas par les structures de contrôle du shell. Cette
commande renvoie 0 si la condition est vérifiée et une Valeur différente de 0
sinon.
Dans la deuxième syntaxe, il faut faire attention à mettre des espaces entre les
crochets et la condition.
❖ commande1 & & commande2 : exécute commande1, si le code de retour est
O K alors on exécute commande2,
❖ commande1 | | commande2 : exécute commande1, si le code de retour est
mauvais alors on exécute commande2.
TEST DE CONDITIONS
La commande test permet d'effectuer des tests de conditions. Le résultat est récupérable par la variable :
$? (code retour)
Si ce résultat est 0 alors la condition est réalisée.
Tests sur chaîne :
❖ test -z "variable" : zero, retour OK si la variable est vide (ex test -z "$a")
❖ test -n "variable" : non zero, retour OK si la variable n'est pas vide (texte quelconque)
❖ test "variable" = chaîne : OK si les deux chaînes sont identiques
❖ test "variable" != chaîne : OK si les deux chaînes sont différentes

Exemple :
$ a=
$ test ‐z "$a" ; echo $?
0
$test ‐n "$a" ; echo $?
1
$ a=omar
$ test "$a" = omar ; echo $?
0
TEST DE CONDITIONS
Tests sur valeurs numériques
Les chaînes à comparer sont converties en valeurs numériques. La syntaxe est : test valeur1 option valeur2
et les options sont les suivantes :
Option Role
-eq Equal : égal
-ne Not Equal : différent
-lt Less than : inférieur
-gt Greater than : supérieur
-lt Less or equal : inférieur ou égal
-ge Greater or equal : supérieur ou égal
Exemple : $ a=10
$ b=20
$ test "$a" ‐ne "$b" ; echo $?
0
$ test "$a" ‐ge "$b" ; echo $?
1
$ test "$a" ‐lt "$b" && echo "$a est inferieur a $b »
10 est inferieur a 20
TEST DE CONDITIONS
Tests sur les fichiers
La syntaxe est : test option nom_fichier et les options sont les suivantes :

Option Rôle
-f Fichier normal
-d Un répertoire
-c Fichier en mode caractère
-b Fichier en mode bloc
-r Autorisation en lecture (pour le propriétaire)
-w Autorisation en écriture (pour le propriétaire)
-x Autorisation en exécution (pour le propriétaire)
-s Fichier non vide (au moins un caractère)
-e Le fichier existe
-L Le fichier est un lien symbolique
TEST DE CONDITIONS
Tests sur les fichiers :
Exemple :
$ ls -l
-rw-r--r-- 1 oracle system 1392 Aug 14 15:55 dump.log
lrwxrwxrwx 1 oracle system 4 Aug 14 15:21 lien_fic1 > fic1
lrwxrwxrwx 1 oracle system 4 Aug 14 15:21 lien_fic2 -> fic2
-rw-r--r-- 1 oracle system 234 Aug 16 12:20 liste1
-rw-r--r-- 1 oracle system 234 Aug 13 10:06 liste2
-rwxr--r-- 1 oracle system 288 Aug 19 09:05 param.sh
-rwxr--r-- 1 oracle system 430 Aug 19 09:09 param2.sh
-rwxr--r-- 1 oracle system 292 Aug 19 10:57 param3.sh
drwxr-xr-x 2 oracle system 8192 Aug 19 12:09 rep1
$ test -f lien_fic1 ; echo $?
1
$ test -x dump.log ; echo $?
1
$ test -d rep1 ; echo $?
0
TEST DE CONDITIONS
Tests combinés par critères ET OU NON

On peut effectuer plusieurs tests avec une seule instruction.


Les options de combinaisons sont les mêmes que pour la commande find.
Critère Action
----------------------------------------------------
-a AND, ET logique
-o OR, OU logique
! NOT, NON logique

Exemple :

$ test ‐d "rep1" ‐a ‐w "rep1" && echo "rep1: repertoire, droit en ecriture"


rep1: repertoire, droit en ecriture

$ test ! ‐d "rep1" && echo "rep1 n’est pas un repertoire"


TEST DE CONDITIONS
Syntaxe allégée :

➢ Le mot test peut être remplacé par les crochets ouverts et fermés « [...] ».

Il faut respecter un espace après et avant les crochets.

Exemple :

$ [ "$a" ‐lt "$b" ] && echo "$a est inferieur a $b" 10 est
inferieur a 20
TEST DE CONDITIONS
Tests étendus :
Une nouvelle commande permet des tests étendus et généralement plus performants, par l'utilisation
des doubles-crochets « [[...]] ».
$ test –f fich ⇔ [ -f fich ] ⇔ [[ -f fich ]]
Il existe quelques différences entre la commande test (ou []) et la nouvelle :

❖ Les caractères spéciaux (métacaractères) de recherche de fichiers ne sont pas interprétés.

❖ -a et -o (ET et OU) sont remplacés par « && » et « || ».

Exemple :
$ [[ -d "rep1" && -r "rep1" ]] && echo "rep1 : repertoire avec droits write"
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
➢ Expressions arithmétiques habituelles évaluées à l'aide de
❖ expr (révolue),
❖ let (moderne et fait pour plusieurs expressions)
❖ ((…)) pour une seule expression (Comme let)

Ex : $ a=100
$ expr $a + 1
101 => Affiche la valeur de a incrémenté de 1

$ let a=a+1 b=2*a/3


Incrémente a de 1 et affecte à b la valeur 2a/3
Pas d'espace dans les expressions

$ ((y = 2 * x +3))
Affecte à y la valeur de l'expression 2x+3
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Opérateurs identiques à ceux du langage C :
Arithmétiques :
❖ () pour fixer l'ordre d'évaluation, ! Négation, * multiplication, / quotient, %
modulo, + addition, - soustraction.
❖ a++, a-- post-incrémentation, post-décrémentation.
❖ ++a, --a pré-incrémentation, pré-décrémentation.

Booléens :
❖ <=, >=, <, >, == (égalité), != (différent), && (et logique), || (ou logique)

Affectation :
❖ = (affectation simple)
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Commande interne : (( Cette commande interne est utilisée pour effectuer des opérations arithmétiques :
Syntaxe : (( expr_arith ))
➢ expr_arith est évaluée ;
si cette évaluation donne une valeur différente de 0, alors le code de retour de la commande interne (( est égal à 0
sinon le code de retour est égal à 1.

Exemple :
$ (( 1‐5 )) => la valeur de l'expression arithmétique est égale à ‐4 donc le code de retour de (( est égal à 0

$ echo $?

0
$ (( 5‐5 )) => la valeur de l'expression arithmétique est 0, donc le code de retour de (( est égal à 1
$echo $?
1
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Commande interne ((

Il est inutile d'utiliser le caractère de substitution $ devant le nom d'une variable car il n'y a pas d'ambiguïté
dans l'interprétation ; par contre, lorsqu'une expression contient des paramètres de position, le caractère $
doit être utilisé.

$ declare –i a= 2 $ date
Exemple : $ (( b = a + 7 )) jeudi 21 décembre 2006, 19:41:42 (UTC+0100)
$ echo $b $
9 $ set $(date)
$
$ (( b = $2 + 1 )) => incrémentation du jour courant
$
$ echo $b
22
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Valeur d'une expression arithmétique :
La commande interne (( expr_arith )) n'affiche pas sur la sortie standard la valeur de l'expression arithmétique
expr_arith.
Pour obtenir la valeur de l'expression arithmétique, on utilise la syntaxe : $(( expr_arith ))

Exemple :

$echo $(( 7 * 2 ))

14

$echo $(( a= 2*8 ))

16

$echo $(( 7 < 10 ))

1
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Commande expr
La commande expr permet d'effectuer des calculs sur des valeurs numériques, des comparaisons, et de la
recherche dans des chaînes de texte.

Exemple :
$ expr 7 + 3

10

$ expr 7 \* 3

21

$ a a=`expr 13 – 10`

$ echo $a

3
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Commande let
En bash, les var. sont toutes des chaînes de caractères ⇒Incapable de manipuler des nombres ⇒ pas d’opérations!!
On peut faire des calculs en utilisant l'instruction "let". Syntaxe : let "expr_arith"
Exemple :
$ let "b=12+3"
$ echo $b
15

Les opérations :
➢ L’addition : +
➢ La soustraction : −
➢ La multiplication : ∗
➢ La division : /
➢ La puissance : ∗∗
➢ Le modulo : %
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Variables de type entier
✓ Pour définir et initialiser une ou plusieurs variables de type entier, on utilise la syntaxe
suivante : (même syntaxe avec la commande typeset )
declare -i nom[=expr_arith] nom[=expr_arith] ...

✓ L'avantage est qu'il devient possible d'effectuer des calculs et des comparaisons sans
passer par expr. La commande let ou « ((...)) » permet des calcules sur variables.

✓ Pour que la valeur d’une variable entière ne soit pas accidentellement modifiée après
qu’elle ait été initialisée, il suffit d’ajouter l’attribut r.

✓ pour connaître toutes les variables entières définies, il suffit d’utiliser la commande
declare -i
ENTIERS ET EXPRESSIONS ARITHMÉTIQUES
Variables de type entier
Exemples :
$ declare ‐i x=35 => définition et initialisation de la variable entière x
$ declare ‐i v w => définition des variables entières v et w
$ v=12 => initialisation de v par affectation
$ read w
34 => initialisation de w par lecture
$declare ‐ir a=‐6 => seule la consultation est autorisée !
$ typeset ‐i resultat
$ resultat= 6*7
$ echo $resultat
42
$ resultat=resultat*3
126
$ resultat=Erreur
Erreur: bad number
DÉLAI D’ATTENTE

Commande sleep
La commande sleep permet d'attendre le nombre de secondes indiqués. Le script est
interrompu durant ce temps. Le nombre de secondes et un entier compris entre 0 et 4
milliards (136 ans).

Exemple :

$ sleep 10 ; date
STRUCTURES DE CONTRÔLE
Structure de contrôle conditionnelle : if ... then ... Else

La structure if then else fi est une structure de contrôle conditionnelle.


if <commandes des_co condition>
then

<commandes exécutées si condition réalisée>

Else

<commandes exécutées si dernière condition pas réalisée>

fi
On peut aussi préciser le elif, en fait un else if. Si la dernière condition n'est pas réalisée on en teste une nouvelle.

❖ Le fonctionnement est le suivant : commandes_condition est exécutée ; si son code de retour est égal à 0, alors
la branche then est exécutée sinon c'est la branche elif ou la branche else qui est exécutée, si elle existe.
STRUCTURES DE CONTRÔLE
if condition ; then
commande
fi

if condition ; then
commande1;
else
commande2;
fi
If condition1 then
Commandes
elif condition2 then
Commandes
elif …
else
fi commandes
STRUCTURES DE CONTRÔLE
❖ Créer un script rm1 pour supprimer un fichier d onnée en paramètre Si la suppression
se passe bien, afficher u n message « Fichier a été supprimé » Sinon un message
« fichier n’a pas été supprimé ».
❖ Créer un script affic qui affiche la type de fichier donné en paramètre si fichier ordinaire
afficher le contenu, si répertoire lister le contenu, sinon afficher message « type non traité ».
programme affic
programme rm1 if [[ ‐f $1 ]] then
#!/bin/bash echo $1 : fichier ordinaire
if rm $1 2>/dev/null cat $1
then echo ‘’$1 a été supprimé’’ elif [[ ‐d $1 ]]
else echo ‘’$1 n’a pas été supprimé’’ Then
fi echo $1 : repertoire
ls $1
Else
echo $1 : type non traité
fi
STRUCTURES DE CONTRÔLE
Choix multiples avec case
La commande case ... esac permet de vérifier le contenu d'une variable ou d'un résultat selon
plusieurs cas possibles.
Syntaxe : case valeur in
Expr1) commandes ;;
Expr2) commandes ;;
...
esac
Expr peut être : Un simple texte Ou une composition de caractères spéciaux.
❖ Chaque bloc de commandes lié à une expression doit se terminer par ;;
❖ Dès qu'une expression (Expr) est vérifiée, le bloc de commandes correspondant est exécuté.
❖ L'étoile (*) en dernière position est utilisée comme une action par défaut si aucun critère n'est
satisfait.
STRUCTURES DE CONTRÔLE
Choix multiples case :
Exemples :
STRUCTURES DE CONTRÔLE
Choix multiples case :

Expr peut être construit à l’aide des caractères et expressions génériques de bash.

Dans ce contexte, le symbole | signifie OU.

Exemple :
read –p ″Entrez votre réponse : ″ rep

case $rep in

o|O ) echo OUI ;;

*) echo Indefini

esac
STRUCTURES DE CONTRÔLE
Choix multiples case :
Exemple :
STRUCTURES DE CONTRÔLE
Choix multiples case :
Exemple :

Ecrire un script qui test si le caractère saisi est un nombre, majuscule, minuscule,
alphabet, ou autre.

#!/bin/bash
# Tester des suites de caractères.
echo "Appuyez sur une touche, puis faites ENTER."
read Touche
case "$Touche" in
[[:lower:]] ) echo "Lettre minuscule";;
[[:upper:]] ) echo "Lettre majuscule";;
[0-9] ) echo "Nombre";;
* ) echo "Ponctuation, espace blanc ou autre";;
esac
STRUCTURES DE CONTRÔLE
Boucle for
STRUCTURES DE CONTRÔLE
Boucle for

Exemple : programme for_liste


#!/bin/bash
for a in toto tata
do
echo $a
done

$ for_liste
toto
tata
STRUCTURES DE CONTRÔLE
Boucle for
Deuxième forme :
Si liste_mots contient des substitutions, elles sont préalablement traitées par bash.

Exemple : programme affich.ls


#!/bin/bash
for a in tmp $(pwd)
do
echo “ ‐‐‐ $a ‐‐‐”
ls $a
done

Exemple : programme affich.user


#!/bin/bash
echo "Liste des utilisateurs dans /etc/passwd"
for var in `cat /etc/passwd | cut ‐d: ‐f1`
do
echo "$var"
done
STRUCTURES DE CONTRÔLE
Ec ri re u n programme qui recopie tous les fichiers *.c du répertoire courant dans un répertoire
fourni à par l’utilisateur
Read rep
mkdir $rep
for i in '*.c'
do
cp $i $rep/
done
Afficher les variables $1 $3 $4 $6 $7 $9 $10

for i in 1 3 4 6 7 9 10;
do echo $i;
done
STRUCTURES DE CONTRÔLE
Structure for pour les expressions arithmétiques:

Bash a introduit une nouvelle structure for adaptée aux traitements des expressions arithmétiques,
itération issue du langage C. Elle fonctionne comme cette dernière.
Syntaxe :
for (( expr_arith1 ; expr_arith2 ; expr_arith3 ))
do
suite_cmd
done

expr_arith1 : est l'expression arithmétique d'initialisation.


expr_arith2 : est la condition d’arrêt de l’itération.
expr_arith3 : est l’expression arithmétique qui fixe le pas d’incrementation et de décrémentation.
STRUCTURES DE CONTRÔLE
Structure for pour les expressions arithmétiques :
STRUCTURES DE CONTRÔLE
La boucle while :
STRUCTURES DE CONTRÔLE
La boucle while :
STRUCTURES DE CONTRÔLE
La boucle until :
STRUCTURES DE CONTRÔLE
Break et continue :
❖ La commande break permet d'interrompre une boucle. Dans ce cas le script continue après la
commande done. Elle peut prendre un argument numérique indiquant le nombre de boucles à sauter,
dans le cadre de boucles imbriquées.
❖ La commande continue permet de relancer une boucle et d'effectuer un nouveau passage. Elle
peut prendre un argument numérique indiquant le nombre de boucles à relancer (on remonte de n
boucles). Le script redémarre à la commande do
STRUCTURES DE CONTRÔLE
Select :
La commande select est utilisée pour afficher un menu permettant à l'utilisateur de choisir une option parmi plusieurs.

select var in selection1 selection2 ... selectionN

do instructions

done
Chaque option du menu est affichée précédée par son numéro d’ordre. La sélection de l'utilisateur est stockée dans la variable
d'environnement REPLY, tandis que la valeur sélectionnée est assignée à la variable var.
$PS1 :
Définit le prompt principal du shell. Par défaut, sa valeur est $ (ou # pour l'utilisateur root). Vous pouvez personnaliser $PS1 pour
afficher des informations comme l'heure, le nom de l'utilisateur ou le répertoire courant.
$PS2 :
Définit le prompt secondaire, affiché lorsque l'utilisateur continue une saisie (exemple : lorsque vous utilisez une commande sur
plusieurs lignes). Par défaut, sa valeur est >.
$PS3 :
Définit le prompt pour la commande select. Par défaut, aucune valeur spécifique n'est définie, mais vous pouvez
personnaliser $PS3 pour afficher un message contextuel dans les menus créés par select.
STRUCTURES DE CONTRÔLE
Select :
Écrire un script qui affiche « Bonjour Madame » ou « Bonjour Monsieur » selon si l'utilisateur indique être
une femme ou un homme.

echo "Êtes-vous un homme ou une femme ?"


PS3="Femme ou Homme ? "
select choix in "homme" "femme"; do
case $REPLY in
1) echo "Bonjour Monsieur"; break ;;
2) echo "Bonjour Madame"; break ;;
*) echo "Mauvaise réponse, veuillez réessayer." ;;
esac
done

Affichage :
1) Homme
2) femme
Femme ou Homme ?
STRUCTURES DE CONTRÔLE
#!/bin/bash

# Afficher un message pour sélectionner un type de terminal


echo "Select your terminal type:"

# Personnalisation du prompt pour `select`


PS3="terminal? "

# Menu avec les types de terminaux disponibles


select term in "Givalt VT100" "Tsoris VT220" "Shande VT320" "Vey VT520"; do
case $REPLY in
1) TERM="gl35a";; # Si l'utilisateur choisit 1, TERM est défini à "gl35a"
2) TERM="t2000";; # Si l'utilisateur choisit 2, TERM est défini à "t2000"
3) TERM="s531";; # Si l'utilisateur choisit 3, TERM est défini à "s531"
4) TERM="vt99";; # Si l'utilisateur choisit 4, TERM est défini à "vt99"
*) echo "Invalid choice."; continue ;; # Toute autre saisie affiche "Invalid"
esac

# Si une sélection valide est faite, afficher le type de terminal choisi


if [[ -n $TERM ]]; then
echo "TERM is $TERM"
break # Quitter la boucle
fi
done
INSTRUCTIONS LIÉES AUX BOUCLES
➢ A l’intérieur de ces différentes structures, il est important que l’utilisateur puisse
fixer lui-même et selon ses propres critères la sortie de boucles.

❖ La commande: continue [n] permet de sauter à la fin de la boucle et de recommencer


une nouvelle boucle.

❖ La commande: break [n] provoque, quand à elle la sortie de la boucle en cours et passe
à l’instruction qui suit la boucle.

➢ Dans les deux cas, l’entier n permet d’indiquer que l’action se porte sur une
boucle externe.
❖ Par exemple, break 2 sortira de la boucle qui englobe la boucle dans laquelle cette
instruction est écrite.
COMMANDE EXEC
La commande exec exécute la commande à la place du processus (shell) courant :

exec [commande [arg ...]]

❖ Il n’y a pas de création de nouveau processus


❖ arg, . . . deviennent les arguments de commande
❖ si commande n’existe pas, le shell termine avec un code de retour

Exemple:
exec vi myfile
exec 1>/tmp/out
COMMANDE EXPR
expr arguments...
➢ Cette commande évalue les arguments comme une expression et le
résultat est envoyé sur la sortie standard.
➢ Ce n’est pas une commande interne au shell
➢ « expr », comme toutes les commandes UNIX , doit avoir ses arguments
séparés par des espaces.
➢ La première utilisation de « expr » concerne les opérations
arithmétiques simples.
❖ Les opérateurs +, -, * et / correspondent respectivement à l'addition,
à la soustraction, à la multiplication et à la division.
❖ La seconde utilisation de la commande « expr » concerne la
comparaison et la gestion des chaînes de caractères grâce à
l'opérateur « : ».
EXPR ET TRAITEMENTS DES CHAINES DE
CARACTÈRES

➢expr exp1 \| exp2 : renvoie exp1 si exp1 est non nul, sinon
renvoie exp2.
➢expr exp1 \& exp2 : renvoie exp2 si exp1 est non nul,
sinon renvoie 0.
➢expr exp1 : exp2 comparaison des deux arguments
(renvoie le nombre de caractères en commun)
➢expr length exp retourne le nombre de caractères de exp
➢expr substr exp n1 n2 retourne une sous chaîne de exp
commençant a la place n1 et de n2 caractères
➢expr index exp car retourne la position du caractère car
dans la chaîne exp
EXPR ET TRAITEMENTS DES CHAINES DE
CARACTÈRES
E XEM PL ES :

X=3; Y=5
Z=`expr $X + 4 `
echo $Z #affiche 7
Z=`expr \( $Z + $X \) \* $Y`
echo $Z #affiche 50
X=abcdef
Z=`expr $X : '.*’ `
echo $Z #affiche 6
Z=`expr \( $X : '.*' \) + $Y`; echo $Z #affiche 11
CALCULS, TRAITEMENTS DES
CHAÎNES DE CARACTÈRES
Exemple:
programme qui incrémente la valeur d’une variable de 1 et l’affiche tant que
c’est inférieur à 10:

Affichage des nombres entiers de 1 à 10:


a=1
while [ $a ‐lt 10 ]
do

echo $a; a= `expr $a +1 `

done
LES FONCTIONS
Le shell bash propose plusieurs syntaxes pour définir une fonction:
function nom_fct
{
suite_de_commandes
}
nom_fct () {
commande...
}
function nom_fct
{ suite_de_commandes ;}
Pour appeler une fonction, il suffit de mentionner son nom.
DÉFINITION DE FONCTION EN MODE LIGNE
Comme pour les autres commandes composées de bash, une
fonction peut être définie directement à partir d’un shell
interactif.
$ function f0
{
> echo Bonjour tout le monde !
>}
$ f0 => appel de la fonction f0
Bonjour tout le monde !
$
L’EXÉCUTION D’UNE FONCTION
L'exécution d'une fonction s'effectue dans l'environnement
courant, autorisant ainsi le partage de variables.
En mode commande :
$ c=Coucou
$
$ function f1
{
echo $c => utilisation dans la fonction d’une variable externe c
}
$
$ f1
Coucou
$
OÙ DÉFINIR UNE FONCTION
Il n’est pas obligatoire de définir toutes les fonctions en début de programme. Il
est uniquement nécessaire que la définition d’une fonction soit faite avant son
appel effectif, c'est-à-dire avant son exécution :
function f1
{ ... ;}
suite_commandes1
function f2
{ ... ;}
suite_commandes2
Dans le code ci-dessus, suite_commandes1 ne peut exécuter la fonction f2
(contrairement à suite_commandes2).
Pour utiliser les fonctions dans tout le script il suffit de les déclarer au début.
DECLARE -F
Les noms de toutes les fonctions définies peuvent être listés à l'aide
de la commande :
declare –F
#exemple de réponse
declare -f f0
declare -f f1
Les noms et corps de toutes les fonctions définies sont affichés
à l’aide de la commande :
declare –f
Pour afficher le nom et corps d’une ou plusieurs fonctions :
declare -f nomfct ...
declare -f f0
SUPPRESSION D’UNE FONCTION
Une fonction est rendue indéfinie par la commande interne :
unset -f nomfct ...
$ declare -F declare -f f0 declare -f f1
$ unset -f f1
$ declare –F
declare -f f0 => la fonction f1 n’existe plus !
LES ARGUMENTS PASSÉS AU SCRIPT
❖ Les arguments d’une fonction sont référencés dans son corps de la
même manière que les arguments d’un programme shell le sont :
$1 référence le premier argument, $2 le deuxième, etc., $# le
nombre d’arguments passés lors de l’appel de la fonction.
❖ Le paramètre spécial $0 n’est pas modifié : il contient le nom du
programme shell.
❖ Ecrire un script qui affiche $0, $1 et $# avant la définition de la
fonction, dans la fonction et après.
LES ARGUMENTS PASSÉS AU SCRIPT
script.sh : #!/bin/bash
echo "Avant f : \$0 : $0"
echo " Avant f : \$# : $#"
echo " Avant f : \$1 : $1"

function farg
{
echo " --- dans f : \$0 : $0"
echo " --- dans f : \$# : $#"
echo " --- dans f : \$1 : $1" ; }
# Appel de la fonction
farg
echo " Aprés f : \$0 : $0"
echo " Aprés f : \$# : $#"
echo " Aprés f : \$1 : $1"
LES VARIABLES GLOBALES
Par défaut, une variable définie à l’intérieur d’une fonction est globale ; cela signifie qu’elle est
directement modifiable par les autres fonctions du programme shell.

Exemple : glob.sh #!/bin/bash


function fun
{
var="Un" # creation de la variable var
}
function fdeux
{
var=${var}Deux # premiere modification de var
}
fun
fdeux
var=${var}Princ # deuxieme modification de va
echo $var
UnDeuxPrinc #résultat
LES VARIABLES LOCALES
➢ Pour définir une variable locale à une fonction, on utilise la
commande interne local. Sa syntaxe est :
local [option] [nom[=valeur] ...]
local prenom="zouhair"
➢ Les options utilisables avec local sont celles de la commande interne
declare. Par conséquent, on définira une ou plusieurs variables de type
entier avec la syntaxe local –i (local –a pour un tableau local).
➢ La portée d'une variable locale inclut la fonction qui l'a définie ainsi que
les fonctions qu'elle appelle (directement ou indirectement).
LES VARIABLES LOCALES
Exemple :
#!/bin/bash
function f1 {
local -i a=12 # 'a' est une variable locale à f1
(( a+=1 ))
echo "Dans f1 : a => $a"
}
f1
echo "Dans main : a => $a" # Génère une erreur car 'a' est locale à f1
LE RETURN
On peut définir une fonction qui retourne une valeur comme le montre l’exemple
(min entre args):
function min()
{
if [ -n $1 ] && [ -n $2 ]; then
if [ $1 -lt $2 ]; then
return $1
else return $2
fi
fi
}
min 112 13
echo "$? est la plus petite valeur"
RESTRICTION DU RETURN
➢ Il n’est pas possible de mettre une valeur supérieure à 256 comme argument et une
fonction ne peut renvoyer une valeur supérieure à 256.
➢ Cette contrainte provient des codes de sortie.
➢ Pour palier au problème, il suffit d'utiliser une variable globale.

VAL=
function min() {
if [ -n "$1" ] && [ -n "$2" ]; then
if [ "$1" -lt "$2" ]; then
VAL=$1
else
VAL=$2
fi
fi
}
min 1132 1300
echo "$VAL est la plus petite valeur"
EXPORTER UNE FONCTION
➢ Pour qu’une fonction puisse être exécutée par un programme
shell différent de celui où elle a été définie, il est nécessaire
d’exporter cette fonction.
➢ On utilise la commande interne export: export -f nomfct

➢ Pour que l’export fonctionne, le sous-shell qui exécute la fonction


doit avoir une relation de descendance avec le programme shell qui
exporte la fonction.
EXPORTER UNE FONCTION
Exemple :
Progdef.sh
#!/bin/bash
function bonj
{
echo "bonj : Bonjour $1 "
}
bonj Madame #appel normal à la fonction
ProgShell.sh
#!/bin/bash
echo "appel a la fonction externe : bonj "
bonj Monsieur #appel erroné à la fonction
VISIBILITÉ D’UNE FONCTION
Le programme devient:

#!/bin/bash
function bonj
{
echo bonj : Bonjour $1
}
export -f bonj
VISIBILITÉ D’UNE FONCTION
➢ Après son export, la fonction bonj sera connue dans les sous-
shells créés lors de l’exécution de ProgShell.

➢ La visibilité d’une fonction exportée est similaire à celle d’une


variable locale, c'est-à-dire une visibilité arborescente dont la
racine est le point d’export de la fonction.
SUBSTITUTION D’UNE FONCTION
➢ La commande interne return ne peut retourner qu’un code de
retour.
➢ Pour récupérer la valeur modifiée par une fonction, on peut :
❖ Enregistrer la nouvelle valeur dans une variable globale,
❖ Faire écrire la valeur modifiée sur la sortie standard, ce qui
permet à la fonction ou programme appelant de capter cette
valeur grâce à une substitution de fonction :
$( fct [ arg … ] )
SUBSTITUTION D’UNE FONCTION
Exemple:
#!/bin/bash
function ajout
{
echo " $1 coucou "
}
echo "la chaine est : $(ajout bonjour)"
EXEMPLE DE FONCTIONS RÉCURSIVES
Calcul de Factoriel de $1
#!/bin/bash
recursion=$1 # Nombre fournit en argument.
count=1
recurse ()
{
var=$1
while [ $var -gt 1 ]
do
((count=count * var));(( var-- )) recurse $var
done
}
recurse $recursion
echo "le factoriel est $count"
APPEL DE FONCTION
➢ Lorsque la fonction dans un programme shell est définie dans un
autre on l’exécute dans l’environnement du fichier shell «
principal ».
➢ Dans l’exemple suivant:
❖ soit f une fonction
❖ f définie dans le fichier def_f.sh
❖ et nous voulons l’appeler depuis le fichier shell appel.sh
➢ Il suffit d’utiliser la commande interne source ou ‘.’ devant le
nom du script contenant la fonction
➢ Seule la permission lecture est nécessaire pour def_f.
APPEL DE FONCTION
Soit le script Appel.sh :

#!/bin/bash
source def_f # ou plus court : . def_f
# Permissions suff de def_f : r--r--r--
x=2
f # appel de la fonction f contenue dans def_f
Définition def dans le script def_f.sh
#!/bin/bash
function f()
{echo $((x+2));}
APERÇU SUR LES TABLEAUX
Instanciation
tab[1]=1
Appel de l'ensemble du tableau:
${tab[*]}
Appel d'un élément :
${tab[i]}
Declare -a tab # l'index de tab est un nombre
Exemple :
#!/bin/bash
nom[0]='Bonjour’
nom[1]='Monsieur’
echo ${nom[0]} #affiche 'Bonjour’
echo ${nom[*]} #affiche 'Bonjour Monsieur'
APERÇU SUR LES TABLEAUX
Exemple :
tab=(red green blue yellow magenta)
len=${#tab[*]}
echo “Le tableau a $len éléments. Ce sont:”
i=0
while [ $i -lt $len ]
do
echo "$i: ${tab[$i]}"
let i++
done
TABLEAU ASSOCIATIF
Version bash 4

Declare -A A RR AY

Initialisation

Le tableau peut être initialisé directement :


tab=([" nom"]="berbère” ["age"]=26) ;

ou élément par élément :


ARRAY["nom"]="berber"

ARRAY["C"]="26"

ARRAY["B"]=10 ;

ARRAY["FHH"]='c'
TABLEAU ASSOCIATIF
A c c è s a u x éléments :
L e s différents modes d’accès aux éléments des tableaux sont ensuite les mêmes que pour un tabl eau indexé :
echo ${ARRAY["A"]}
echo ${ARRAY["FHH"]}

I nfo r mat ion s su r le tab leau :


❖ L e no m bre d’é lé m ent du tabl ea ux : e cho "N om br e d' él é me nts : " $ {# AR RAY[ *] } "o u” $ { #A RR AY [@ ]}

❖ L e s inde xe s sont re tourné par “ $ {! A RR AY [@ ] }” ou “ $ {! AR R AY[ *] }” :


e cho "I ndexes du tabl e au" $ {! AR R AY [@ ]}

Pa r c o u rs d u tab lea u :

for elem in ${!ARRAY[*]}


do echo "Key \"${elem}\" : Value :

"${ARRAY[${elem}]}
done

Vous aimerez peut-être aussi