Vous êtes sur la page 1sur 131

École Nationale des Sciences de

l’informatique

Introduction aux systèmes


d’exploitation et environnement Unix
(II 1)

Chapitre 2 - Environnement UNIX/Linux


Plan
1. Introduction aux systèmes « Unix/Linux »
2. Le système de fichiers
3. Sécurité du système de fichiers
4. La programmation shell
5. Les filtres et les expressions régulières
6. Awk et Sed
7. Gestion des processus
Historique
• 1969: naissance d’Unix dans les laboratoires BELL
• 1973: portage du Noyau en C (Thompson et Ritchie) portage sur
plusieurs architectures:
• IRIX pour SGI
• SOLARIS pour SUN
• AIX pour IBM
• HPUX
• OSF pour DEC etc.
• 1974:Plusieurs universités commencent à utiliser UNIX et
la cinquième édition, conçue spécialement pour des fins
académiques, est introduite.
• 1975: La sixième édition de UNIX est produite et devient la
première à être commercialisée pour une petite somme par
AT&T.
Historique
• Problèmes:
• Plusieurs versions propriétaires: Solaris (Sun), AIX (IBM), HPUX (HP), etc.
• Portabilité des applications d’une architecture à une autre
• Besoin de standardisation
• Plusieurs tentatives avec les projets
• POSIX (une famille de normes techniques de IEEE: standardisation
des interfaces de programmation des logiciels destinés à fonctionner
sur les variantes du système d'exploitation UNIX)
• X/OPEN
• SVID (System V Interface Definition)
• Actuellement: 2 normalisations à vocations commerciales et industrielles
• IX/OSF (Unix d’IBM), par le groupe OSF
• Unix System V, groupe ARCHER d’AT&T: une version de UNIX (Janvier
1983). La plupart des systèmes UNIX propriétaires (comme AIX, HP-UX,
ou encore IRIX: qui avaient acheté une licence Unix auprès de AT&T))
descendent directement de System V.

4
Historique - Émergence des logiciels libres
• 1984: Projet GNU: création d’applications libres (open source)
• La GPL (General Public Licence): licence permettant de protéger le caractère
« open source » des logiciels libres
• La GPL assure et protège 4 libertés :
• Utilisation
• Duplication (pas de licence limitée en nombre d'installation)
• Accès au code source
• Modification et redistribution du code source
 BSD (Berkeley): premier Unix libre (fin des années 1980).
• Un logiciel libre n'est pas forcément gratuit !
• Exemples de logiciels libres :
• OpenOffice : suite bureautique
• VLC : lecteur multimédia

5
Historique - Les distributions Linux
• 1991: Linus Torvalds créé le « Kernel » : le noyau des systèmes Linux actuels
qui prendra par la suite le nom de noyau Linux (Linus' UNIX = l'UNIX de
Linus). But: un système avec code libre fonctionnant comme Unix sur PC
• Linus lance alors un appel à contribution, et permet donc un libre accès au
code source.
• Linus prend la décision de mettre le code source sous licence GPL : tout le
monde peut alors participer au développement de Linux.
• Kernel+ applications GNU => LINUX
• Actuellement plusieurs distributions existent
• Même noyau
• Environnement utilisateur et ensembles de logiciels utilitaires variables
• Distributions libres mais commerciales :
• RHEL (RedHat Entreprise Edition), SuSE Linux Enterprise
• Distributions libres et gratuites :
• Fedora, OpenSUSE, Ubuntu, Mandriva, CentOS, Gentoo, Debian,
Knoppix,etc…
6
Unix vs Linux
• Le système d’exploitation Linux
• Le code source de Linux est disponible gratuitement pour les utilisateurs.
• Linux utilise principalement une interface graphique avec une ligne de commande
optionnelle.
• Linux est portable
• Linux est très flexible et peut être installé sur la plupart des ordinateurs
personnels.
• Linux est utilisé sur les ordinateurs personnels, les téléphones mobiles, les
ordinateurs de bureau, etc.
• LeS systèmeS d’exploitation UNIX
• Le code source d’Unix n’est pas disponible pour le grand public.
• Unix utilise principalement la ligne de commande.
• Unix n’est pas portable.
• Ex. Ecrire différents drivers pour différentes variantes de Unix
• Unix a un environnement dépendant du matériel. Par conséquent, ne peut être
installé sur n’importe quelle machine.
• Unix est principalement utilisé dans les systèmes serveur, les ordinateurs centraux
et les ordinateurs de haut de gamme.
7
Architecture
Un système Unix est composé de:
1. Un noyau: assure la gestion de la mémoire et des entrées/sorties de bas niveau et
l’ordonnancement des tâches
2. Un ensemble d’outils de base:
• Différents interpréteurs de commande appelés shells;
• Des commandes de manipulation de fichiers;
• Des commandes de gestion des activités du système (les processus);
• Des commandes permettant la communication entre utilisateurs ou entre systèmes;
• Des éditeurs de textes;
• Des outils de traitement de textes et de traitement d’images;
• Des compilateurs;
• Des lecteurs multimédias (audio, vidéo);
• Des outils de développement;
• Etc.

8
Caractéristiques
• Système ouvert
• Repose sur des standards
•  (+) L’interopérabilité: la capacité que possède un produit ou un
système à fonctionner avec d’autres produits ou systèmes existants ou
futurs
•  (+) SE portable sur différentes machines: était conçu pour fonctionner
indépendamment de l'architecture matérielle de l'ordinateur
• Un mécanisme de protection
• identification des utilisateurs par mot de passe
• Permissions, droits d’accès, protection des fichiers
• Un super-utilisateur
• Multitâches
• plusieurs travaux simultanément
• Multi-utilisateurs
• plusieurs utilisateurs simultanément

9
Caractéristiques
• Tout est fichier même le matériel (périphérique, fichier ordinaire, etc)
• Système de fichiers hiérarchisé (arborescence)
• Système hiérarchisé de processus
• Au démarrage du système, le processus init est exécuté, il porte le PID
numéro 1
• Son rôle est de lancer l’exécution des sous-systèmes, comme les systèmes
de fichiers, le réseau, etc.
• Plusieurs interpréteurs de commandes (SHELL: langage de commande)

10
Caractéristiques
• Les utilisateurs: 3 types : administrateur, non privilégiés et utilisateurs
système.
• L’administrateur: un utilisateur unique qui a le droit de réaliser toutes les
opérations sur le système.
• login= root et mot de passe choisi au moment de l’installation
• Il peut créer de nouveaux utilisateurs, mais aussi formater les disques,
arrêter le système, interrompre des processus utilisateurs ou accéder à
l’ensemble des fichiers sans restriction. Par convention, cet utilisateur a
l’identifiant 0 (zéro).
• Les utilisateurs doivent être authentifiés par un login et un mot de passe
• Chaque utilisateur est caractérisé, par le système, par un UID unique
• Chaque utilisateur a un répertoire de travail par défaut (répertoire home)
• Rassemblés en groupes

11
Caractéristiques
• Multi-session: Possibilités d'ouvrir plusieurs sessions simultanées
1. Session graphique : Bureau
• Un bureau est un environnement de travail complet muni de thèmes personnalisés en plus
d'un ensemble de logiciels dédiés.
• Ex. Gnome, KDE

2. Sessions textuelles : Consoles Virtuelles


• Exécution de commandes sous le Shell
• Accessibles à travers les raccourcis : CTRL+ALT+F(2-->6)
3. Sessions distantes si service réseau disponible (Telnet, SSH)
12
Caractéristiques – Le Shell
• Un interpréteur de commandes (CLI pour command-line interpreter) est
un logiciel système faisant partie des composants de base du système (ex.
cmd pour windows, SHELL sous Unix)
• Interface entre l’utilisateur et le système d’exploitation
• Offre un langage de commande
• Permet d'accéder aux fonctionnalités internes du système d'exploitation.
• L'utilisateur lance des commandes sous forme d'une entrée texte
exécutée ensuite par le shell.
• Plusieurs: Bourne-Shell, C-Shell, Korn-Shell, T-Shell
• Accessible à travers :
• Les consoles virtuelles
• L'application « Terminal » en mode graphique
• Gestion d’un historique

13
Caractéristiques – Le Shell
• Langage de programmation
• Variables d’environnement :
• HOME: La variable $HOME contient le chemin absolu vers le répertoire
personnel
• PWD: La variable $PWD contient le chemin absolu vers le répertoire
courant
• Il existe 2 types de commandes :
• Les commandes externes : fichiers exécutables localisés dans
l’arborescence. Leur exécution nécessite la création d’un processus fils.
Exemples : mkdir, mv, chmod, …
• Ex. si on tape la commande ls, le shell demande au noyau Unix de
charger en mémoire le fichier /usr/bin/ls

• Les commandes internes : sous-programmes de l’interpréteur de


commandes (shell). Elles sont directement exécutables sans création d’un
shell-fils.
• Exemples : alias, cd…
14
Commandes de base
• Format d'une ligne de commande :
<prompt> commande [options] arguments
• <prompt> : invite de commande pouvant avoir plusieurs formats tel que « [nom
d’utilisateur @ répertoire courant] $ »
• Exemples:
• Pour récupérer l'identifiant de l'utilisateur courant :
$ whoami  donne le login
$ id  donne toutes les informations
$ who  liste tous les utilisateurs connectés
• Pour obtenir de la documentation sur une commande quelconque :
$ man <commande>
$ apropos <commande>
$ whatis <commande>
• Pour afficher un message à l’écran :
$ echo hello  affiche hello

15
Processus
• Les processus: Un processus est une instance d’un programme en exécution
• Chaque processus possède un environnement et un contexte (zone du code,
zone des données, pile utilisateur pour les variables locales et les appels aux
fonctions, les registres utilisés, numéro du processus, etc).
• Les processus s’exécutent aussi en arborescence: un processus peut créer
un autre et être lui même « fils » d’un autre processus
• Un processus possède un identifiant (PID), un père (PPID), un propriétaire
(UID) et un groupe propriétaire (GID)

 ps: liste les caractéristiques des processus en cours d’exécution sur la


machine

16
Processus
• A chaque création de processus, celui ci se voit affecté trois canaux de communication :
• l'entrée standard ;
• la sortie standard ;
• la sortie d'erreurs standard.

• Chacun des trois canaux se voit affecter un nom de fichier et un numéro :


Canal de communication Fichier Numéro logique
Entrée standard stdin 0
Sortie standard stdout 1
Sortie d'erreurs standard stderr 2
• Le fichier stdin (entrée standard), est le fichier à partir duquel le processus va lire les données
nécessaires en entrée. Il est ouvert avec le numéro logique 0 (file descriptor) et il est, par défaut
associé au clavier.
• Le fichier stdout (sortie standard), est le fichier dans lequel le process va écrire les messages qu'il
produit en sortie, dans le cas d'une exécution normale. Il est ouvert avec le numéro logique 1, et il
est, par défaut associé à l'écran.
• Le fichier stderr (sortie d'erreurs standard), est le fichier dans lequel le process va écrire les
messages d'erreur. Il est ouvert avec le numéro logique 2et il est par défaut associé à l'écran.

17
Processus
Les processus: les redirections
• Rediriger la sortie:
 cde > fichier: crée fichier ou écrase son contenu pour y écrire le résultat de cde
 cde >> fichier: crée fichier ou écrit à sa fin le résultat de cde.
• Rediriger l’entrée:
 cde < fichier: cde prend ses arguments de fichier
 $ sort <f: trie le contenu du fichier f

• Rediriger l’erreur
 cde 2> fichier ou cde 2>> fichier

18
Processus
• Les processus : composition
1. Composition séquentielle: C1;C2;C3

2. Composition parallèle de processus indépendants C1&C2&C3


• lance C1 et C2 en tâche de fond, et C3 au premier plan

3. Composition de processus communicants C1|C2|C3 : les pipes


• Exp: ls|sort –f

0
P1 1 0 P2 1 0 P3 1
2 2 2

19
Installation d’un système Linux
• Système hébergé complètement en natif sur le disque
• Installation complète sur tout le disque
• Installation en « dual boot » : cohabitation entre Linux et un autre système
d’exploitation (Windows …)
• Installation en tant que machine virtuelle
• Accéder à Linux à partir de Windows
• Charger deux systèmes en même temps et profiter simultanément des
deux environnements
• Nécessite un logiciel de virtualisation exp : VirtualBox (logiciel libre) ou
VMware
• Aucune installation  LiveCD
• Certaines distributions offrent des versions bootables directement à partir
d’un CD/DVD (Ubuntu, Fedora etc)
• Ne requière pas d’installation sur disque
• Tout l’environnement sera chargé à partir du CD

20
Pour finir
• Les distributions gratuites phares (documentation et téléchargement)
• Ubuntu : http://ubuntu-fr.org
• Fedora : http://www.fedora-fr.org
• OpenSuse : http://fr.opensuse.org
• Mandriva : http://www2.mandriva.com
• CentOS : http://www.centos.org
• Quelques commandes à tester :
• man
• id
• who
• logname
• groups
• passwd
• clear
• History
• …

21
Le système de gestion de
fichiers

22
Présentation générale
• Dans Unix la notion de fichier ne se limite pas à la simple notion usuelle de
fichier disque
• Un fichier apparaît comme un objet typé et pourra correspondre à:
• Un fichier disque au sens classique
• Une ressource (physique ou logique) du système (device)
• Exemple: terminaux, imprimantes, disques physiques ou logiques, la
mémoire physique, etc
• Système de Gestion des Fichiers (SGF):
• La partie la plus visible d’un système d’exploitation
• Un SGF a pour principal rôle de:
• La gestion de l’organisation des fichiers sur le disque (allocation de l’espace
disque aux fichiers)
• La gestion de l’espace libre sur le disque dur
• Permettre aux utilisateurs de manipuler les fichiers (création, ouvrir, copier,
etc)
• Plusieurs implémentations et types de systèmes de fichiers: pour Linux
(Ext2, Ext3,…), pour Windos (FAT, FAT32, NTFS, …)
23
Arborescence

24
Arborescence
Répertoires standards
• / : répertoire racine du système de fichiers
• /root : répertoire de travail par défaut de l’utilisateur root
• /tmp: répertoire des fichiers temporaires
• /bin: répertoire des programmes accessibles à tous les users
• /sbin: répertoire des programmes accessibles au root uniquement
• /etc: contient des fichiers de configuration de services
• /lib: librairies partagées et modules nécessaires au chargement du système
• /var: fichiers d’historiques (log), …
• /home: les répertoires de travail des utilisateurs
• /boot: le noyau du système et fichiers du démarrage
• /dev: fichiers des périphériques
• /usr , /proc, ….

25
Chemin relatif et chemin absolu
• Le chemin absolu: noter un fichier ou un répertoire par le chemin complet à
partir de la racine
• Exemple: /home/user1/test
• Le chemin relatif: noter un fichier ou un répertoire par rapport à la position
courante
• Exemple, lorsqu’on est dans le rép courant = /home, le chemin relatif du
fichier est => user1/test
• pwd: retourne le répertoire en cours
• .. : note le répertoire parent
• . : note le répertoire courant
• ~ : note le répertoire de travail de l’utilisateur en cours
• Exemples:
• Si pwd donne /home/user1
• cd /home/user2  cd ../user2

26
Types de fichiers
• Commande file
~$ file /dev/*
/dev/core: symbolic link to /proc/kcore
/dev/fd: symbolic link to /proc/self/fd
/dev/full: character special (1/7)
/dev/mqueue: sticky, directory
~$ file file.txt /dev/null: character special (1/3)
 file.txt: ASCII text /dev/ptmx: symbolic link to pts/ptmx
/dev/pts: directory
/dev/random: character special (1/8)
file file.c /dev/shm: sticky, directory
 file.c: ASCII C program text /dev/stderr: symbolic link to
/proc/self/fd/2
/dev/stdin: symbolic link to
/proc/self/fd/0
/dev/stdout: symbolic link to
/proc/self/fd/1
/dev/termination-log: empty
/dev/tty: character special (5/0)
/dev/urandom: character special (1/9)
/dev/zero: character special (1/5)
~$ file -z bar.txt.gz
 bar.txt.gz: ASCII text (gzip
compressed data, was "bar.txt", last
modified: Wed Sep 7 19:31:23 2016,
from Unix) 27
Types de fichiers
• Commande: ls –l nom_rep :
• Donne des informations sur les fichiers dans nom_rep et leur type, les droits, etc
• Types de fichiers:
• Fichiers ordinaires (ascii ou binaires) (-): sont ceux qui contiennent les informations des
utilisateurs. Ils sont soit des fichiers en code ASCII, soit des fichiers binaires
• Répertoires (d)
• Liens symboliques (l):
• sont des fichiers spéciaux qui ne font que pointer vers un autre fichier ou répertoire. C'est
l'équivalent des raccourcis sous windows.
• En cas de suppression du lien symbolique le fichier pointé n'est pas supprimé
• ln -s nom-du-fichier-à-pointer nom-du-lien-symbolique
• Fichiers block (b): fichier hardware (device file), en général dans /dev
• Le hardware lit/écrit les données en bloc
• servent à modéliser les disques
• Ex. disque dur
• Fichiers caractères ( c ): fichier hardware (device file), en général dans /dev
• sont liés aux périphériques entrées/sorties
• où les données sont lues et écrites en « stream »,
• Ex. clavier, souris, écran

28
Types de fichiers

$ ls -l /dev
brw-rw---- 1 root disk 3, 2 Jul 5 2000 hda :périphérique block
crw-rw-rw- 1 root tty 4, 9 Jul 5 2000 tty9 :périph. caractère
lrwxrwxrwx 1 root disk 3, 2 Jul 5 2000 cdrom -> hda : lien

29
Manipulation des répertoires
• Les noms des répertoire et des fichiers sont sensibles à la casse
• Un nom de répertoire ou de fichier commençant par ‘.‘ est un fichier ou un répertoire
caché
• Création: mkdir nom_rép1 [nom_rep2 …nom_repN]
• Destruction :
• rmdir: efface un répertoire vide
• rm –r: efface récursivement le contenu d’un répertoire puis celui-ci
• Listage: ls
• ls –a: lister aussi les fichiers et les répertoires cachés
• ls –l: lister le contenu avec affichage de plus d’informations

$ ls –a =>
. .bashrc .snapshots file some_file
.. .gitconfig .ssh link_to_test test
nom_fichier test.txt pic.jpg prog.c
.bash_history .sage f.log
.bash_profile .smc f.txt rep_2

$ ls –l =>
drwxr-xr-x 1 user1 users 112 oct 12 09:07 premier
=> d : indique un répertoire; les permissions; nombre de liens; utilisateur propriétaire; groupe
propriétaire; taille; date de dernière modif., nom fichier 30
Manipulation des répertoires

31
Manipulation des fichiers
• Création:
• touch nom_fichier: crée un fichier vide
• Utiliser un éditeur de texte pour éditer votre fichier: vi, pico, emacs…
• Suppression: rm
• Copie: cp fichier_source fichier_dest
• Déplacement: mv fichier destination
• Renommage: mv fichier nouv_nom
• Affichage du contenu d’un fichier:
• cat nom_fichier
• less nom_fichier
• more nom_fichier

32
Manipulation des fichiers
• Afficher n premières lignes d’un fichier:
• head -n fichier
• Afficher n dernières lignes d’un fichier:
• tail –n fichier
• tail –f fichier : ouverture en fin de fichier avec visualisation en temps réel
des modifications.
• Remarque: par défaut n=10
• Type de fichier: file fichier
• Juxtaposer les lignes des 2 fichiers:
• paste [-d carac. séparateur] fichier1 fichier2 (en colonnes)
• cat fichier1 >> fichier2 (les lignes de fichier1 après les lignes de
fichier2)

33
Caractères spéciaux
• * : remplace n (0 et +) caractères
• ? : remplace exactement 1 caractère
ls test* => affichage de: test, test1, test10, test254,

ls test? => affichage de: test1

• $ : interprété comme la valeur de la variable qui vient après

echo HOME => affiche le mot HOME


echo $HOME => affiche : /home/user1

34
Caractères spéciaux
• ‘ ’ : tout ce qui trouve entre ces côtes sera considéré comme une chaîne de caractères
• ~$ echo ‘mon répertoire est $PWD’
•  affiche: mon répertoire est $PWD
• ‘’ ’’ : tout ce qui se trouve entre ces doubles côtes sera considéré comme une chaîne de
caractères sauf les caractères spéciaux
• ~$ echo "mon répertoire est $PWD"
•  affiche: mon répertoire est /home/user
• ` ` : tout ce qui sera mis entre ces côtes sera considéré comme étant une commande et
sera exécuté
• ~$ echo `date`
•  Sat Feb 13 15:58:05 UTC 2021

• ~$ echo "mon répertoire est $PWD, date= `date` "


•  affiche: mon répertoire est /home/user, date= Sat Feb 13
16:01:35 UTC 2021

• ~$ echo `ls $HOME`


•  f.log f.txt f1 f2 f3 file link_to_test newf.txt
nom_fichier pic.jpg prog.c rep_2 some_file test test.txt :
35
liste les fichier de Home
Caractères spéciaux
• \ : annule l’effet du caractère spécial qui vient juste après
• ~$ echo "le prix est 10 \$"
• le prix est 10 $

36
Les inodes
• Inode= descripteur d’un fichier dans l’arborescence
• Structure composée de plusieurs champs d’informations et de plusieurs pointeurs.
• À chaque fichier correspond un numéro d'inode qui lui est associé à sa création
• Informations :
• Inode = structure {
• Num numéro d’inode unique dans l’arborescence: inode number or index number)
• Type type du fichier
• Mode les permissions du fichier
• UID l’utilisateur propriétaire de ce fichier
• GID le groupe qui possède ce fichier
• Taille la taille du fichier en octets
• ATIME date de dernier accès
• MTIME date de dernière modification du fichier
• CTIME date des dernières modifications de l’inode
• …}

37
Les inodes
• Chaque inode possède un numéro unique
• Pour visualiser les informations contenues dans l’inode associée à un fichier
 stat nom_fichier
• ls –i permet de lister les fichiers avec leur numéros d’inodes
correspondant

38
Les liens
• Lien symbolique (soft): $ln –s fichier_orig fichier_soft
• Un nouveau fichier ayant une nouvelle inode qui pointe vers le fichier original
(contient son chemin d’accès). Un lien symbolique est un fichier qui pointe vers un
autre fichier
• Si le fichier original est supprimé, les liens symboliques pointeront vers un fichier
inexistant.

39
Les liens

40
Les liens
• Lien physique (hard): $ln fichier_orig fichier_hard
• une manière de donner plusieurs noms à un fichier sans dupliquer ses données
disque et sans création d’une nouvelle inode.  Fichier original et lien physique
identiques
• Si le fichier original est supprimé, les données restent accessibles via le lien
physique (lien physique se comporte comme une copie du fichier original)
• Une inode persiste jusqu’à destruction du dernier lien physique vers lequel elle
pointe
•  le fichier existera tant qu'il y a au moins un lien physique

Inode num
Nombre de liens

Les droits d’accès


41
Les liens

42
Autres commandes sur les fichiers
• sort
• trie l’entrée ligne par ligne
• options:
• -r inverse l’ordre de tri
• +n : ignore les n premiers champs
• -n : tri numérique
• -u : afficher une instance unique de chaque ligne (ignorer
les lignes dupliquées dans le fichier en entrée)
• -b : ignorer les blancs en début des champs
• -f : confond les lettres majuscules et minuscules
• -k x : ordonner selon le champ numéro x

43
Autres commandes sur les fichiers

44
Autres commandes
• uniq
• Affiche un fichier en détruisant les lignes consécutives
dupliquées
• options: -u (affiche les lignes "uniques " : qui en
possèdent pas de duplicats),
• -d (affiche les lignes "dupliquées")

45
Autres commandes
• wc
• compter le nombre de lignes, le nombre de mots et le
nombre de caractères d’un fichier.
• wc -l fichier : retourne le nombre de lignes de fichier
• wc -w fichier : retourne le nombre de mots de fichier
• wc -c fichier : retourne le nombre de caractères de
fichier

46
Autres commandes
• Compression de fichiers : gzip, bzip, compress, ..
• Décompression de fichiers : gunzip, bunzip, uncompress, ..
• Archivage : tar
• Montage / démontage de partitions ou de volumes disques : mount /umount
• …

47
Sécurité du système de
fichiers

48
Introduction
• Chaque élément du SGF appartient à un utilisateur, est associé à un groupe
et porte des permissions définissant les droits d'accès pour chaque type
d'utilisateur.
• Par défaut (à la création), l'utilisateur propriétaire d'un élément sera celui
qui l'a crée. Le groupe propriétaire est le groupe par défaut de l'utilisateur
propriétaire.
• L'utilisateur propriétaire a le droit de modifier les droits d’accès de ses
fichiers et ses répertoires.
• L'utilisateur propriétaire a le droit de modifier l'appartenance d'un de ses
éléments
 il le donne à un autre utilisateur et perd par conséquent ses droits.
• Exception : root a tous les droits sur tous les fichiers même ceux d'autres
utilisateurs.

La commande ls -l donne ces informations :


$ ls –l premier
-rwxr-xr-x 1 user1 users 112 oct 12 09:07 premier
Les permissions standards
• Pour chaque élément du SGF, on distingue 3 types d’utilisateurs, chaque
type aura des permissions ou autorisations spécifiques.
• 3 permissions standards sont définies, chaque type d'utilisateur aura une
combinaison parmi ces trois.
• Les permissions peuvent être représentées par des lettres ou
numériquement en sommant les chiffres associées aux permissions de
chaque type d'utilisateur.

3 types d’utilisateurs: 3 types d’autorisations:

u: utilisateur propriétaire r (read)= 4


g: groupe propriétaire w (write) = 2
o: (others) : autres x (execute) = 1

50
Les permissions standards
• Exemple :
$ ls –l premier
-rwxr-xr-x 1 user1 users 112 oct 12 09:07 premier
• Le champs permissions : rwxr-xr-x
• 3 premiers caractères: permissions pour le propriétaire (user1) : rwx (lire,
écrire et exécuter) --> somme numérique =7
• 3 caractères suivants: permissions pour le groupe propriétaire (users) : r-x
=> lire et exécuter mais pas de modification (w non accordée) --> somme
numérique =5
• 3 derniers caractères : pour les autres utilisateurs : r-x --> somme
numérique =5
Équivalent numérique des permissions standards de ce fichier :
rwx r-x r-x
4+2+1 4+1 4+1
 755
51
Les permissions standards

Permission Pour les fichiers Pour les répertoires

r Droit de lecture (cat, Droit de lister le


less, etc) contenu (ls)

w Droit d'écriture Droit de créer de


(modification du contenu nouveaux éléments à
par un éditeur) l'intérieur (mkdir, touch,
etc)

x Droit d'exécution Droit d'accès ( se


(nécessaire pour les positionner à l'intérieur
binaires et les scripts) par cd)

52
Modification des permissions
• Chaque utilisateur a le droit de modifier les permissions de ses fichiers et de
ses répertoires (root peut tout changer)
• Changer les permissions : chmod
 $ chmod num fichier
• num: équivalent numérique des nouvelles permissions qu'on veut
appliquer sur fichier
• Exemple: chmod 644 fichier <=> rw- r- - r- -
 $ chmod [ u| o| g ] ± r|w|x fichier ( chmod utilisateur operation droit d’accès)
• Ajoute ou élimine une permission pour un type d’utilisateur donné
• Exemples :
• $ chmod g+w fichier : ajoute la permission d'écrire pour les membres
du groupe propriétaire.
• $ chmod o-r fichier : supprime la permission de lire pour les «autres».
• $ chmod +x fichier : rend le ficher exécutable par tout le monde
(u+g+o)
• $chmod u+x,g-w fichier: ajoute le droit en exécution pour le
propriétaire, et enlève le droit en écriture pour le groupe du fichier.
53
Modification des permissions

J’ai enlevé le droit w de rep_2, pas possible


de faire mkdir ou touch,
Mais je peux écrire dans le fichier qui appartient
à ce répertoire

J’ai enlevé le droit x au répertoire rep_2,


pas possible d’y accéder (ls, cd interdits)
54
Gestion d'appartenance
• Chaque utilisateur peut modifier l'appartenance de ses éléments (root peut
changer l'appartenance de n'importe quel élément)
• Changer l'utilisateur propriétaire : chown
• Changer l'utilisateur propriétaire uniquement
• $ chown user2 fichier  user2 est le nouveau propriétaire de fichier
• Changer le propriétaire et le groupe propriétaire :
• $ chown user2.users fichier
 le propriétaire devient user2, et le groupe propriétaire est users
• $ chown user2. fichier
• $ chown user2: fichier
 le propriétaire devient user2, et le groupe propriétaire est le groupe de
user2
• Changer le propriétaire de tous les fichiers d’un répertoire: option -R
• $ chown -R user2.users fichier

55
Gestion d'appartenance
• Changer le groupe propriétaire avec chown
• $ chown .users fichier
• $ chown :users fichier

uniquement le groupe propriétaire est mis à users (comme


la commande chgrp ci-desous)

• Changer le groupe propriétaire : chgrp


• $ chgrp users fichier

56
Gestion des utilisateurs
• 3 types d’utilisateurs :
• L’administrateur du système : root (admin/super user)
• Créé à l’installation du système Unix
• Il a tous les privilèges sur le système
• Les utilisateurs non privilégiés (regular users)
• Tâches standards: web, database, stocker leurs fichiers dans leur Home
• Accès limité aux commandes/fichiers critiques (Ex. Ne peut pas ajouter
un autre utilisateur, accède uniquement à ses fichiers)
• Les utilisateurs système
• Associés à des services et non pas à des utilisateurs comme les comptes
utilisateurs non privilégiés
• Certains services (base de données, mail, impression) ont leurs compte
systèmes leur permettant d’interagir avec le système
• Souvent créés à l’installation du service lui même
• Ex. Mail, ftp, MySQL

57
Gestion des utilisateurs
• Le fichier /etc/passwd contient la liste des utilisateurs déclarés
dans le système
• root peut créer de nouveaux utilisateurs non privilégiés.
• $useradd nom_utilisateur créer un nouveau utilisateur
• $passwd nom_utilisateur donner ou changer le mot de passe
d’un utilisateur
• $passwd changer le mot de passe de l’utilisateur courant
• Identité de l’utilisateur de la session courante :$id, $whoami
• ~$ id
 uid=2001(user) gid=2001(user) groups=2001(user)
• $userdel nom_utilisateur supprime l’utilisateur du système ainsi
que son mot de passe sans supprimer son répertoire de travail

58
Gestion des groupes
• Un utilisateur peut appartenir à plusieurs groupes :
• Le groupe initial ou par défaut (primary group) : porte le
même nom de l’utilisateur
• Possibilité de création d’autres groupes et d’ajout
d’utilisateurs
• Le fichier /etc/group contient la liste des groupes déclarés dans
le système
• root peut créer de nouveaux groupes.
• $groupadd nom_groupe créer un nouveau groupe
• $usermod –G nom_groupe nom_utilisateur ajoute
l’utilisateur à un groupe
• Supprimer un groupe (sans supprimer les utilisateurs) :
• $ groupdel nom-groupe

59
Les permissions spéciales
• les setuid, setgid et sticky bit sont des droits dits spéciaux, ils
s’ajoutent aux droits classiques (lecture, écriture et exécution)
et fonctionnent différemment suivant qu’on les applique sur un
fichier ou un répertoire.
• Utilisé pour permettre à des utilisateurs d’exécuter des
programmes avec des privilèges plus haut
• Pour les changer  la commande chmod

60
Les permissions spéciales
• Setuid: Applicable sur un fichier exécutable. L’utilisateur exécutant le fichier
aura les mêmes privilèges que l’utilisateur propriétaire.
• Ex. Le setuid est activé à la commande ping, ce qui permet à un utilisateur
normal de la lancer (même si cet utilisateur n’a pas le droit d’envoyer des
paquets réseau)
• Ex. N’importe quel utilisateur peut lancer la commande passwd (pour
changer son mot de passe), alors que le fichier /usr/passwd appartient au
root, cela est possible parce que l’exécutable /usr/bin/passwd a le SID activé
- ~$ ls -l /usr/bin/passwd
- -rwsr-xr-x 1 root root 68208 May 28 2020 /usr/bin/passwd
• En pratique: chmod
• $ chmod u+s fichier
• $ ls -l fichier
 -rwsr-xr-x ( ..... ) fichier

61
Les permissions spéciales
• Setgid: Applicable à un répertoire.
• Tout élément créé à l’intérieur d’un répertoire appartiendra au groupe
propriétaire du répertoire (et non pas au groupe de celui qui a créé le
fichier).
•  Par conséquent, tous les fichiers d’un répertoire R dont le setgid est
activé, appartiendront au groupe du propriétaire du dossier R quelque soit
l’utilisateur qui les a créés
• Utilisé pour le partage de fichiers : si des collaborateurs du groupe COLLAB
travaillent ensemble sur un dossier partagé dont le groupe = COLLAB,
chacun est amené à créer des fichiers dans le dossier partagé. Ces fichiers
feront partie du groupe COLLAB, et donc chacun des collaborateurs pourra
modifier tous les fichiers.

• $ chmod g+s rep


• $ ls -l
• drwxr-sr-x ( ..... ) rep

62
Les permissions spéciales
• Sticky bit: (« bit collant ») Applicable à un répertoire.
• Les éléments à l’intérieur peuvent être accessibles en lecture et écriture mais ne
peuvent être supprimés que par leurs propriétaires.
• $ chmod +t rep
• $ ls -l
• drwxr-xr-t ( ..... ) rep

63
Les permissions par défaut
• Les fichiers et les répertoires nouvellement crées portent des permissions
standards par défaut
• Lors de la création d'un fichier ou d'un répertoire et qu'on regarde ensuite
leurs droits, on obtient généralement rw- r- - r- - (644) pour un fichier et rwxr-
xr-x (755) pour un répertoire.
~$ ls -ld test_rep/  drwxr-xr-x 2 user user 2 Feb 19 18:36 test_rep/  (755)
~$ ls -l test_file  -rw-r--r-- 1 user user 0 Feb 19 18:37 test_file  (644)

• Ces valeurs sont contrôlées par un masque: son rôle est de contrôler quels
droits ne sont pas donnés (« soustraits ») aux fichiers et répertoires créés.
• Le système Unix crée les fichiers avec les droits maxium 666 (rw-rw-rw-) et les
répertoires avec les droits 777 (rwxrwxrwx), puis le masque est appliqué:
• À partir de 666 (pour les fichiers) ou 777 (pour le répertoires), on
« soustrait» le masque, et on obtient les permissions effectives accordées
aux fichiers et répertoires nouvellement créés.

64
Les permissions par défaut
• Afficher le masque pour l’utilisateur en cours:
1. umask : permissions sous forme octales

• ~$ umask (donne les droits mais en complément)


•  0022
• Le premier 0 indique que les chiffres sont en octal (base 8).
• Le deuxième 0: indique qu’aucun droit pour l’utilisateur n’est retiré
• Le 2 indique que le droit w (2) est retiré pour le groupe et les autres

2. umask -S : sous forme symbolique (alphabétique)

• ~$ umask –S
•  u=rwx,g=rx,o=rx

65
Les permissions par défaut
• Sur la plupart des Unix, le masque par défaut est 022;
• Donc, quels seront les droits effectifs des fichiers et des répertoires avec ce masque
finalement ?
• Pour un fichier :
• Maximum rw- rw- rw- (666)
• Retirer - - - -w- -w- (022)
• Reste rw- r- - r- - (644)
• Pour un répertoire :
• Maximum rwx rwx rwx (777)
• Retirer - - - -w- -w- (022)
• Reste rwx r-x r-x (755)

66
Les permissions par défaut
• Un autre exemple, si on a un masque qui vaut 244, quels seront les droits sur les
fichiers et répertoires ?

67
Les permissions par défaut
• Un autre exemple, si on a un masque qui vaut 244, quels seront les droits sur les
fichiers et répertoires ?
• Pour un fichier
• On part des droits maximum 666 et on « retranche » 244, on obtient donc 422,
 par défaut les fichiers auront comme droit 422 (r- - -w- -w- ).
• Pour un répertoire,
• on part des droits maximum 777 et on « retranche» 244, on obtient donc 533,
 par défaut les fichiers auront comme droit 422 (r-x -wx -wx).

68
Les permissions par défaut
• Un autre exemple:
• Pour un fichier :
• Maximum rw- rw- rw- (666)
• Retirer - - - r-x rw- (056)
• Reste ???

69
Les permissions par défaut
• Un autre exemple:
• Pour un fichier :
• Maximum rw- rw- rw- (666)
• Retirer - - - r-x rw- (056)
• Reste rw- -w- - - - (620) et PAS 610 !
 ATTENTION : la calcul des droits définitifs (effectifs) n'est pas une simple soustraction de
valeurs octales ! Le masque retire des droits mais n'en ajoute pas.
 En réalité, il s’agit d’un calcul binaire à faire
Droits effectifs = droits par défaut & ! Masque courant
Exemple:
666& ! 053 = 110 110 110 &
! 000 101 011
= 110 110 110 &
111 010 100
= 110 010 100 = 624 = rw- -w- r- -
 Sinon, on garde la première méthode, écrire les droits et déduire le résultat:
666 = rw- rw- rw-
053 = - - - r-x -wx
 Résulat= rw- - w - r- - = 624
70
Les permissions par défaut
• Comment définir le masque: $umask nnn
• umask n'est utilisable que si on est propriétaire du fichier.
• Exemple:
• $ umask 777  le plus restrictif, enlever tous les droits
$ touch newfile
$ cat newfile
cat: newfile: Permission denied
$ ls -l newfile
- - - - - - - - - - 1 shs shs 0 Sep 14 15:30 newfile
• Exemple:
• $ umask 022: les fichiers créés auront par défaut les permissions 644 et les répertoires 755
• $ umask 000: tous les fichiers qui seront créés auront les permissions 666, les répertoires 777
• ~$ umask 000
~$ touch dd
~$ ls -la dd  -rw-rw-rw- 1 user user 0 Feb 20 10:08 dd
~$ mkdir DD
~$ ls -ld DD  drwxrwxrwx 2 user user 2 Feb 20 10:10 DD

71
Les permissions par défaut
• Pour les répertoires, la permission x est ajoutée par défaut à la création
• Tableau de correspondance:
• Ex. Si dans le masque on a la valeur 2, les droits effectifs (affichés par ls -l) seront r-x
pour un répertoire et r- - pour un fichier

72
La programmation Shell

73
Le Shell : Présentation
• Le Shell
• Interpréteur de commandes qui offre :
• Langage de programmation : gestion de variables, structures etc.
• Environnement (variables, sessions utilisateurs, historique,…)
• Les + utilisés : ksh(korn shell), csh(c-shell), sh(Bourne shell), et Bash (Bourne Again shell)
• Le programme de shell utilise un ensemble de fichiers de démarrage pour aider à la
création d'un environnement.
• Exemple de fichiers d’environnement bash : ~/.bashrc, ~/.bash_profile, etc.
• Contiennent des configurations: (les couleurs du terminal, les alias des commandes, le
prompt, etc)
• On peut y ajouter nous même des commandes:
• alias wmi = “whoami“
• alias gc = “git clone“
• ~/.bashrc : script qui est lancé automatiquement lorsqu’un utilisateur ouvre une session
en mode interactif: lance un terminal
• ~/.bash_profile: script shell lancé en mode login (mode console): connexion à distance
via ssh par exemple.
Variables d’environnement
• $ env : liste les var. d’environnement.
• HOME : répertoire de travail de l’utilisateur de la session en cours
• PATH : les répertoires contenant des binaires (le shell va chercher à localiser des
exécutables dans les chemins inclus dans PATH).
• PWD : le répertoire en cours
• PS1 : valeur du prompt
• ….
$ env | grep HOME  HOME=/home/user
$ env | grep PWD  PWD=/home/user
• Leurs valeurs peuvent être personnalisées pour chaque utilisateur.
• En ligne de commande
• À travers les fichiers d’environnement génériques : /etc/profile , /etc/bashrc
• Ces fichiers contiennent des configurations de base pour tous les logins
• Ne sont modifiables que par le root
• A travers les fichiers d’environnement des utilisateurs : ~/.bashrc, ~/.bash_profile
• Concernent chaque utilisateur (il peut la modifier)

75
Caractères spéciaux
• ? remplace un caractère quelconque, sauf le ;
• * remplace n'importe quelle chaîne, même vide, de caractères , ne commençant pas par .
• [...] remplace un caractère parmi ... ,
• [abc] : un caractère parmi a,b ou c
• [a-d] : un caractère dans l’intervalle : a à d.
• [!..] remplace un caractère parmi ceux qui ne sont pas énumérés entre [...]
$ ls
t1.p t2b.p t3.p tf.p tn.p tx.p
t1a.p t2.p t4.p tn tx
$ echo Mes versions de TP sont t?.p
 Mes Versions de TP sont t1.p t2.p t3.p tf.p tn.p tx.p
$ echo les bonnes versions t[!0-9].p  les bonnes versions tf.p tn.p tx.p
$ echo les bonnes versions t[0-9].p  les bonnes versions t1.p t2.p
$ echo Dans t1?.p les tableaux sont de la forme t\[nx] avec nx=12 \*P
 Dans t1a.p les tableaux sont de la forme t[nx] avec nx=12*P
(déspécialiser avec « \ »)
76
Caractères spéciaux
• ls -l *.txt :
• affiche seulement les fichiers ayant l’extension txt
• rm td[1-3].pdf
• effacer les fichiers td1.pdf, td2.pdf et td3.pdf
• cp /tmp/?2011.data .
• copier tous les fichiers dans le répertoire /tmp dont le nom est composé
d’une chaîne de cinq caractères qui se termine par 2011 et qui ont
l’extension data dans le répertoire courant

77
Les (… )
• (…) : exécute les commandes ... par un shell fils;
• Un script shell peut lancer lui-même des sous-processus.
• Ces sous-shells permettent au script de faire de l'exécution en parallèle, donc
d'exécuter différentes tâches simultanément.
• L’environnement du processus n’est pas modifié après exécution de la suite de
commandes par le shell fils.
• Exemple:
• $ pwd  /home/user => répertoire initial
• $(cd /bin ; pwd)  /bin
• $ pwd  /home/user => le répertoire initial n’a pas été modifié
• Les variables comprises dans ces parenthèses, à l'intérieur du sous-shell, ne sont pas
visibles par le reste du script. Le processus parent ne peut pas lire les variables créées
dans le processus fils, le sous-shell.
• $ b=bonjour
• $ ( b=coucou ; c=hello; echo $b $c )  coucou hello
• $ echo $b  bonjour => la valeur de la variable b n’a pas été modifiée
• $echo $c  ne donne rien, c n’est pas reconnu par le shell parent 78
Les {…}
• Expansion d’accolades:
• cat {fichier1,fichier2,fichier3} > fichier_combiné
 Concatène les fichiers fichier1, fichier2 et fichier3 vers fichier_combiné.
• cp fichier22.{txt,sauve}
 cp "fichier22.txt" dans "fichier22.sauve"
• $ echo pre-{10..13}-post
 pre-10-post pre-11-post pre-12-post pre-13-post
• echo {a..z}
abcdefghijklmnopqrstuvwxyz
• Grouper un bloc de code : (exécute les commandes dans ... par le même shell)
{
echo "Description "
echo echo "Contenu de l'archive : "
} >f  toute la sortie du bloc sera redirigée vers f

79
Paramètres des commandes
et des programmes
• Les paramètres effectifs d'une commande ou argument sont des chaînes de
caractères.
• Les paramètres formels sont désignés par des chiffres
• 0 : nom de la commande
• $ : numéro du processus en cours
• @ : ensemble des paramètres
• *: ensemble de paramètres
• "$*" équivalent à "$1 $2 ..." et "$@" équivalent à "$1" "$2" ...
• # : nombre de paramètres
• ? : valeur de retour
• 0 si succès
• Code erreur sinon
• 1 : premier argument
• 2 : deuxième argument …

80
Paramètres des commandes
et des programmes
• On crée le fichier param.sh avec le contenu qui suit :

On lance le script, et voilà le résultat:

81
Paramètres des commandes
et des programmes
• $*: chaine de caractères
• $@ : un tableau

82
Variables : déclaration et portée
• Variable accessible dans l’instance en cours du Shell uniquement :
• $ var=valeur (attention! Pas d’espaces autour de =)
• $ echo $var
• Variable exportée vers tout fils du processus en cours :
• $ var= valeur
• $ export var
• Exemple:
• $ foo=bar
echo $foo  bar
$ bash -c 'echo $foo'  bash crée un subprocess (un shell) , la commande
ne donne rien, car la variable foo n’est pas exportée
• $ export foo
$ bash -c 'echo $foo' bar  donne bar, car la variable est exportée donc
reconnue par le shell fils
• Déclaration de constante : readonly var
• ~$ readonly var
• ~$ var=6  bash: var: readonly variable
83
read et echo
• $ read var :permet de lire à partir du clavier la valeur de var
• chacun des mots est affecté successivement à une variable (dans l'ordre).
$ read x y z # si on tape "une deux trois quatre
cinq"
On aura les variables x="une", y="deux" et z="trois quatre cinq
$ read -p 'Entrez votre nom : ' nom
$ echo "Bonjour $nom !"
 read –p : Affiche un message
• $ echo $var : permet d’afficher à l’écran la valeur de var
• L’option –e: Interpréter les séquences de caractères précédées d'un
backslash '\‘
$ echo "un mot \\n un autre mot"  un mot \n un
autre mot
$ echo -e "un mot \\n un autre mot"
 un mot
un autre mot
• L’option -n : Ne pas effectuer le saut de ligne final. 84
Évaluation des variables
• La commande test : évaluer une expression booléenne et
renvoie la valeur vrai ou faux.
• Exemples :
• Comparaisons numériques : eq (=), ne (≠), -gt(>), -ge(≥), -lt
(<), -le (≤), …
• $ test $x –ne $y
• Comparaison de chaînes de caractères :
• -z $ch: vrai si ch est de longueur nulle
• -n $ch: vrai si ch n’est pas nulle (longueur non nulle)

85
Évaluation des variables
• Calcul d’expressions arithmétiques ou de chaînes de caractères : expr
• $ expr $a + $b: donne la somme de a et b
• ~$ x=6
• ~$ y=5
• ~$ echo `expr $x+$y`  6+5 : Faux!! attention
espaces obligatoires 
• ~$ echo `expr $x + $y`  11
• $ N=`expr $N + 1` : incrémentation de N (N++)
• $ N=5;N=`expr $N + 1`; echo $N  6
• $ expr $a \* $b
• ~$ expr 12 \* 8  96 (attention, \ obligatoire car
* est un caractère spécial)
• ~$ echo $x $y  6 5
• ~$ res=`expr $x \< $y` ; echo $res  0 (\
obligatoire car < est un opérateur de redirection )

86
Évaluation des variables
• $ expr $1 : $2 : compare les 2 chaînes $1 et $2, s’arrête dès que
les chaînes diffèrent ou à la fin de $1. Renvoie le nombre de
caractères commun ou 0.
• ~$ expr novembre : nov  3 (espaces obligatoires)
• ~$ expr novembre : janvier 0
• ~$ expr novembre : novembre  8
• Trouver la longueur d’une chaine:
• ~$ a=hello
• ~$ b=`expr length $a`
• ~$ echo $b  5

87
Structure de la ligne de commande
• Commande simple: retourne code zéro si exécution sans erreur ou une valeur non
nulle qui a une signification propre à la commande qui l'a retournée.

• Tube (pipe-line) : séquence de 2 ou plusieurs commandes séparées par le "|".


~$ cat /etc/group | wc –l - 77
~$ less fich_hard | head -1  Hi (head -1: donne la première ligne du fichier)
• Liste de commande: séquence de commandes simples ou de pipe-lines séparés par
l'un des caractères suivants : ; & && ||
• C1 ; C2 exécution séquentielle de C1 puis C2 ;
• C1 & C2 exécution asynchrone;
~$ echo "en arriere plan" & echo "en avant plan"
[4] 589
en avant plan
en arriere plan

88
Structure de la ligne de commande
• C1 && C2 exécute C1; s'il n'y a pas d'erreur , exécute C2;
 c1&&c2 s’écrit: if c1; then c2; fi
• C1 || C2 exécute C1; s'il y a une erreur , exécute C2.
 c1||c2 s’écrit: if c1; then :; else c2; fi

89
Les scripts Shell
• Le Shell offre un langage de scripts directement interprété par le shell.
• Pour exécuter un script shell dans Bash, il faut commencer le programme par
la ligne:
• #!/bin/bash
• Le script shell doit être un fichier exécutable (chmod +x ! avant l’exécution).
• Exécution : $ ./nom_script [arguments]
• Utilisez l’éditeur de texte gedit par exemple
• Un script shell est un programme formé par des instructions utilisant des
appels de commandes shell, des variables et des structures du langage shell.

90
La structure conditionnelle
if .conditions
then if conditions
if conditions
if conditions instructions then
then
then else instructions
instructions
instructions if conditions elif conditions
else
fi then then
instructions
instructions instructions
fi
fi fi
fi

• Instructions: ça pourrait être une liste d’instructions


• Instructions: Chaque ligne doit contenir un seul mot réservé
et une seule instruction ou séparer les instructions par ‘‘;’’ if test 3 -eq 3 ...
 if conditions ;then instructions; else instructions; fi if [ 3 -eq 3 ]....
if test $1 == $2 ...
• Condition : expression booléenne formulée par la
commande test ou entre [ ]. if [ $1 == $2 ]...
• Espaces obligatoires autour de [ et ]
• On ne doit pas écrire[condition] mais [ condition ]
91
Les tests (Condition)
• Même syntaxe que la commande test
• Tests sur les types et permissions de fichiers
• -e fichier vrai si le fichier existe
• -r fichier vrai si f existe et a le droit r;
• -w fichier vrai si fichier existe et a le droit w;
• -x fichier vrai si fichier existe et a le droit x;
• -f fichier vrai si fichier existe et est un fichier ordinaire;
• -d rep vrai si le répertoire rep existe;
• -u fichier vrai si fichier existe et a le bit set-UID;
• -s fichier vrai si fichier existe et n'est pas de longueur nulle;
• Tests sur des chaines de caractères
• -z ch vrai si la chaîne ch est de longueur nulle;
• -n ch vrai si la chaîne ch est de longueur non nulle;
• c1 = c2 vrai si la chaîne c1 et c2 sont égales (espacement obligatoire) ;
• c1 != c2 vrai si la chaîne c1 et c2 sont différentes;

92
Les tests (Condition)
• Tests numériques
• n1 -eq n2 : vrai si les nombres n1=n2
• n1 -ne n2 : différent (not equal)
• n1 -lt n2 : < (less)
• n1 -le n2 : <= (less or equal)
• n1 -gt n2 : > (greater)
• n1 -ge n2 : >= (greater or equal)
• Opérateurs booléens :
• ! expression: la négation
• expr1 -o expr2: or
• expr1 -a expr2 : and
• Exemples:
• Tester si f1 est accessible en lecture
• $test –r f1 && echo “f1 accessible en lecture”
• La variable I est comprise entre 10 et 20
• if [ $I -ge 10 -a $I -le 20 ] ...
93
La structure conditionnelle
if test -e /etc/passwd if [ $1 != $2 ]
then then
echo "Le fichier existe" echo "Les 2 paramètres sont différents !"
else else
echo "Le fichier n'existe pas" echo "Les 2 paramètres sont identiques !"
fi Fi

 ./script.sh premier second


Les deux paramètres sont différents

nom=“ahmed” if [ $1 = 'koala' ]
if [ $nom = “ahmed” ]; then then
echo “Hi ahmed" echo "Bravo !"
fi echo "Vous connaissez le mot de passe"
else
echo "Vous n'avez pas le bon mot de passe"
fi

if test -e /etc/passwd ; then echo "Le fichier


existe" ; else
echo "Le fichier n'existe pas"
fi
94
La structure conditionnelle

95
La structure de choix

96
La structure de choix

97
Les boucles

• continue : permet de passer à la prochaine itération d’une boucle


• break : permet de sortir d’une boucle

98
Les boucles

99
Les boucles

100
Les filtres

101
Les filtres
• Le filtre « sort »
• Trie l’entrée ligne par ligne
• Le filtre « uniq »
• Affiche un fichier en détruisant les lignes consécutives dupliquées
• Le filtre « diff »
• Compare deux fichiers
• Le filtre « cut »
• Sélectionne uniquement certaines colonnes du fichier passé en paramètre
• Options:
• -f <liste>: liste des champs à afficher (champ = mot)
• -c <liste>: liste des colonnes à afficher (colonne = caractère)
• -d <char>: séparateur de champs
• Exemples:
• Cut –d : -f1 /etc/passwd: affiche le premier champ du fichier /etc/passwd en considérant
comme séparateur « : »
• Cut –c 10-16 /etc/passwd: affiche l’intervalle de caractères [10-16] de chaque ligne du
fichier

102
Les filtres
• Le filtre « grep »
• Recherche, dans le fichier passé en paramètre, les lignes vérifiant une expression
régulière donnée
• Syntaxe: grep expr_reg fichier
• Exemple:
• grep ‘toto’ fichier: cherche dans fichier les lignes qui contiennent le mot « toto »
• grep ‘toto$’ fichier: cherche dans fichier les lignes qui se terminent par le mot « toto »
• grep ‘^[A-Z]’ fichier : cherche dans fichier les lignes qui commencent par une majuscule
• Options:
• -w mot : recherche le mot exact
• -v expr : recherche les lignes qui ne contiennent pas expr
• -c : affiche le nombre de lignes résultats
• -f fichier : lit une expr. régulière à partir de fichier
• -n : afficher le numéro de ligne
• -B n : affiche n lignes avant chaque ligne trouvée
• -A n : affiche n lignes après chaque ligne trouvée
• -C n : affiche n lignes avant et après celle recherchée
• -i : confondre min. et maj.

103
Les expressions régulières

• [..] un des caractères, par énumération ou plage


• Exemples:
• ^[aA]: tous les fichiers commençant par a et A
• ^[a-f]: tous les fichiers commençant par a, b, c, d, e et f
• {..} ensemble de valeurs
• \ annule la sémantique d'un caractère spécial
• [^...] sauf les caractères définis
• Exemple:
• [a-m^i]: toutes les lignes contenant une lettre de a à m sauf i
• # commentaire

104
Exemples de « grep »
• Expliquer les commandes suivantes :
• ls –l | grep '^…....rw'
• ls –l | grep '^d'
• grep '^[^:]*::' /etc/passwd
• ls | grep '^..$'
• ls | grep '.*m.*m.*'

105
Exemples de « grep »
• Expliquer les commandes suivantes :
• ls –l | grep '^……..rw‘
• Imprime les fichiers qui peuvent être lus ou écrits par tous les
utilisateurs
• ls –l | grep '^d‘
• Imprime les lignes décrivant un répertoire
• grep '^[^:]*::' /etc/passwd
• Trouver les utilisateurs qui n’ont pas de mot de passe (2ème
champ vide)
• ls | grep '^..$'
• imprime les noms des fichiers constitués de deux lettres
exactement
• ls | grep '.*m.*m.*'
• imprime les noms de fichiers qui contiennent au moins deux
lettres «m»
106
Exemples de « grep »

• Rechercher toutes les occurrences des mots «terre» et «ciel» dans le fichier roman.txt
avec les numéros des lignes.
• Rechercher toutes les lignes qui commencent par a ou A.
• Rechercher les lignes contenant un chiffre
• Chercher toutes les lignes ne finissant pas par un signe de ponctuation (point, virgule,
point-virgule, deux-points, point d'interrogation, point d'exclamation)
• En utilisant grep, écrire une ligne de commande qui permet de chercher les lignes qui
commencent et se terminent par le même mot. Sachant qu’un mot est constitué
uniquement de lettres (minuscules ou majuscules) suivi d’un espace.

107
Exemples de « grep »
• Rechercher toutes les occurrences des mots «terre» et «ciel» dans le fichier roman.txt
avec les numéros des lignes.
• grep –inw ‘\(ciel\|terre\)’ fichier
• Rechercher toutes les lignes qui commencent par a ou A.
• grep ‘^[aA]’ fichier
• Rechercher les lignes contenant un chiffre
• grep ‘[0-9]’ fichier
• Chercher toutes les lignes ne finissant pas par un signe de ponctuation (point, virgule,
point-virgule, deux-points, point d'interrogation, point d'exclamation)
• grep –v ‘[.,;:?!]$’ fichier
• En utilisant grep, écrire une ligne de commande qui permet de chercher les lignes qui
commencent et se terminent par le même mot. Sachant qu’un mot est constitué
uniquement de lettres (minuscules ou majuscules) suivi d’un espace.
• grep '^\([a-zA-Z;. ,]*\) .*\1$' f.txt

108
Plan
1. Introduction aux systèmes « Unix/Linux »
2. Le système de fichiers
3. Sécurité du système de fichiers
4. La programmation shell
5. Les filtres et les expressions régulières
1. Sort
2. Uniq
3. Diff
4. Cut
5. Grep
6. Tr
7. find
6. Awk et Sed
7. Gestion des processus
Les filtres
• Le filtre « tr »
• recopie l’entrée sur la sortie en substituant des caractères
• Syntaxe: tr [-cds] [s1 ] [s2]
• options:
• -c (complément de s1)
• -d efface les car. de s1
• -s tte séquence dans s1 est substituée par un car. unique dans s2
• Exemples:
• tr A-Z a-z < essai : remplace les majuscules par des minuscules
• Équivalent à : tr '[:upper:]' '[:lower:]' < essai
• tr A-Z a-z < essai | tr -sc a-z ‘\012’ : remplace les majuscules par des minuscules,
puis remplace toute séquence de caractères non lettre minuscule par un retour
chariot (‘\012’)
• tr -s ’ ’ : enlève les espaces en trop
• Équivalent à : tr -s '[:blank:]' ' '

110
Les filtres
• Le filtre « find »
• descend récursivement des sous-hiérarchies de répertoires données par
leur racine, en cherchant les fichiers répondant à certaines critères (nom,
droit, type, taille..)
• Syntaxe: find chemin [option ] expression
• Options:
• -name motif
• -user nom
• -atime n : non utilisé depuis moins de n jours
• -mtime n : non modifié depuis moins de n jours
• -newer fichier : plus récent (date de création) que fichier
• -inum n : fichier ayant le inode numéro n
• -type x (b, c, f, d, …): recherche selon le type du fichier (bloc, caractère, fichier
simple, répertoire, lien …)
• -perm xxx: recherche selon la forme octale des droits d’accès
• -size n : recherche selon la taille du fichier
• -exec commande {} \;
111
Les filtres
• Le filtre « find »
• Exemples:

• Appliquer ls –l sur tous les fichiers source c ou objet o et modifié il y a moins de 30 jours.

• On recherche tous les fichiers ordinaires de l’arborescence dont la taille est supérieure à 30 K

• Chercher tous les fichiers du répertoire courant dont les noms commencent par a ou A, suivi
d'éventuellement quelques lettres ou chiffres, et se terminent par un chiffre entre 3 et 6 ?

• Comment fait-on pour indiquer que le fichier recherché a été modifié il y a plus de 30 jours ? Il
y a 30 jours ? Il y a moins de 30 jours?

112
Les filtres
• Le filtre « find »
• Exemples:

• Appliquer ls –l sur tous les fichiers source c


ou objet o et modifié il y a moins de 30
jours.

• On recherche tous les fichiers ordinaires de


l’arborescence dont la taille est supérieure
à 30 K

• Chercher tous les fichiers du répertoire


courant dont les noms commencent par a
ou A, suivi d'éventuellement quelques
lettres ou chiffres, et se terminent par un
chiffre entre 3 et 6 ?

• Comment fait-on pour indiquer que le


fichier recherché a été modifié il y a plus de
30 jours ? Il y a 30 jours ? Il y a moins de 30
jours?
113
Plan
1. Introduction aux systèmes « Unix/Linux »
2. Le système de fichiers
3. Sécurité du système de fichiers
4. La programmation shell
5. Les filtres et les expressions régulières
6. Awk et Sed
7. Gestion des processus
SED : Editeur de Flots
• Permet de gérer des flots de données en exécutant des opérations de
substitution.
• Utilise un tampon dans lequel elle transfère ligne par ligne le contenu d’un
fichier pour les traiter.
• Syntaxe : sed [-n] [requête][-e requête] [-f script] [fichier]
• Options :
• -e : doit précéder chaque requête s’il y a plusieurs
• -f : lire les commandes à partir d’un fichier script
• Format d’une requête : [adresse1[, adresse2]] commande [arguments]
• adresse :
• Vide : traite toute chaine
• num. absolu d’une ligne de texte
• $ : dernière ligne traitée
• Commande : expression régulière ou commande sed
• Exemple:
• sed ’s/UN/DEUX/g’ f1 >f1bis: Création du fichier f1bis à partir de f1 en remplaçant partout UN
par DEUX

115
SED : Editeur de Flots
• Les commandes sed
• a\ ch :ajoute ch au début du flot de donnée
• b etiq : saut à la commande etiq
• c\ remplace des lignes
• d détruit la ligne courante et lit la suivante
• i\ insère le texte
• p imprime la ligne (seulement les caractères imprimables)
• l (listage) imprime la ligne même les caractères non imprimables
• q fin (sortie de sed)
• s/anc/nouv/f substitue l’expression régulière anc par la chaîne nouv avec
comme valeurs de f:
• g : remplace toutes les occurrences
• p : écrire le résultat si une substitution est réalisée
• w fichier : enregistrer dans fichier si une substitution est réalisée

116
SED : Exemples
• Décommenter les lignes commentées et supprimer les espaces
en début de ligne
• $ sed -re 's/^# *//g' fichier
• Afficher toutes les lignes d’un fichier jusqu’au mot ‘fin’.
• $ sed ‘/fin/q’ fichier
• Lire les 3 premières lignes d’un fichier
• $ sed 3q fichier
• $ sed -n ’1,3p’ fichier (afficher 1 à 3)
• $ sed ’4,$d’ fichier (détruire de 4 à la fin)
• Supprimer toutes les lignes comprises entre « Bonjour » et Aurevoir »
• $ sed '/^Bonjour/,/^Au revoir/d' test.txt
• Ignorer les lignes qui ne contiennent pas le mot « Bonjour »
• sed '/Bonjour/!d' test.txt
• sed -n '/Bonjour/p' test.txt

117
AWK
• Outil programmable de transformation de texte
• Syntaxe proche du langage C
• Calculs de base, fonctions, …
• Intègre la recherche des expressions régulières
• Syntaxe:
$ awk ’programme-awk’ [variable=valeur] fichiers ...
ou
$ awk -f fichier-awk [variable=valeur] fichiers ...
• Options:
• -f fichier-awk : charge le programme ou les commandes awk à partir d’un fichier (pratique si
plusieurs lignes)

118
AWK

119
AWK: Les variables prédéfinies
• Pour le « programme-awk »
• Chaque ligne ("Record") est automatiquement séparée en champs ("Fields")
avec comme séparateur par défaut: blancs et/ou tabulations.
• NR : numéro de la ligne courante (Record)
• NF : nombre de champs de la ligne courante (Fields)
• $0 contenu de la ligne courante
• $1, $2 ... $NF contenu du 1er ... dernier champ
• RS : séparateur de lignes (par défaut = \n)
• FS : Séparateur de champs (par défaut = blanc et tab)
• ORS, OFS séparateurs de ligne et de champs pour l’affichage en sortie

• Remarque : La variable FS peut aussi être initialisée lors de l’appel de awk via
l’option –F
• -F c : définit le séparateur de champs du fichier en entrée au caractère c

120
AWK: Les variables prédéfinies

• Exemples :
• Afficher les noms des utilisateurs connectés et l’instant de leur
connexion :
• $ who | awk ‘{ print $1, $5 }’
• Afficher la 3ème et les deux dernières colonnes du fichier
annuaire :
• $ awk '{print $3 , $(NF-1) , $NF}' annuaire
• Afficher un fichier avec le num. de chaque ligne
• $ awk ‘{print NR,$o}’ fichier

121
AWK : Structures de contrôle
• Syntaxe proche du langage C
• if (condition) instructions [else instruction]
• while (condition) instructions
• for (expression; condition; expression) instructions
• break, continue, exit

• Remarques :
• Variables utilisateur et tableaux définis implicitement
• Opérateurs de comparaison et de calcul du langage C
• Fonctions d’impression et structures de contrôle similaires au langage C

122
AWK : Fonctions prédéfinies

• Chaînes de caractères • Arithmétiques


• index (s1, s2) : retourne la • sqrt (x)
position de s2 dans s1 • log (x)
• substr (s, c [, l]) : retourne la • exp (x)
sous chaîne de s qui débute à c • Sin(x)
et de longueur l sinon jusqu’à la
fin de s. • Cos(x)
• getline() : lit la ligne suivante, • int (x)
retourne 1 si la fin de fichier • …
sinon 0.
• print [expr1 [expr2] .....]
• printf (format, expr1, expr2 ...)
• length (chaine)
• …

123
AWK : Exemple 1
• Soit le fichier de données ‘population’:
Canada 3852 25 Amerique
Chine 3705 1032 Asie
France 211 55 Europe
• Écrire un script ‘total’ qui transforme le fichier ainsi :
Pays Superf Pop Cont
Canada 3852 25 Amerique
Chine 3705 1032 Asie
France 211 55 Europe
TOTAL 16417 1387
• Écrire le programme ‘maxpop’ qui permet de donner le pays ayant la plus grande
population

124
AWK : Exemple 1

125
Gestion des Processus

126
Les Processus

• Processus = objet dynamique qui représente une instance d’un programme


en cours d’exécution et son contexte
• Caractéristiques:
• identification (pid)
• identification du proc. parent (ppid)
• propriétaire
• priorité
• Pourcentage d’utilisation de la mémoire
• …
• Pour voir les processus en cours: ps, pstree, top, …

127
Les Processus

128
Les Processus

• Options de ps:
• -A liste tous les processus actifs du système
• -ef liste tous les processus actifs du système avec plus d’informations
• -u user affiche les processus d’un utilisateur donné
• -l : affiche en plus les infos de priorités
• Exécution en avant plan != exécution en arrière plan
• Processus en arrière-plan: &
• (le terminal n’est pas bloqué)
• exemple: emacs monfichier.c &

129
Les Processus
• jobs : liste des processus lancés en arrière plan
• fg %n : ramène un processus en avant plan
• bg %n : ramène un processus suspendu en arrière plan
• Envoi de signaux : kill
• kill –l : liste des signaux
• Raccourcis clavier:
• Ctrl + c : arrêt
• Ctrl + z : suspendre
• Exemple : Tuer un processus immédiatement :
• $ kill -9 <PID>

130
Les Processus
• Les priorités :
• [-19..20] : du plus prioritaire au moins prioritaire.
• Exp: les processus root sont par défaut de priorité 0, ceux des utilisateurs non
privilégiés sont 10
• nice : lance une commande avec une certaine priorité
• nice +n|-n cde
• renice : change la priorité d’un processus en cours d’exécution.
• renice +n|-n pid

131

Vous aimerez peut-être aussi