Cours

Transcription

Cours
Système d’Exploitation
D. Lazure et G. Dequen
Agenda
•
Charte UPJV :
• Confidentialité du password
• Usage limité aux enseignements
• Sauvegardes
•
•
•
Stations de travail sous Linux
Comptes nominatifs individuels
Adresse mail : login@etud­sc.u­picardie.fr
• Accès possible de l’extérieur …
Interface graphique optionnelle
Agenda
•
Quelques conseils et informations
• Présence en Cours/TD/TP très fortement conseillée
• Travail de TP en Binôme • ni monôme, ni trinôme, …
• PC (ou autre) personnel ?
• Est­il sous OS UNIX ? Si NON : le faire !!
•
Examen et Partiel
• Sans documents
Plan
•
•
Qu’est­ce qu’un système d’exploitation ?
Le point de vue utilisateur :
• Linux : Commandes et principes de base
• Shell­script
•
•
Maîtrise des expressions régulières
Programmation système
Operating System (Système d’exploitation) ?
•
•
“An operating system is the software that provides the interface between the hardware of a computer system and the applications programs that are used on it.”
Rôle :
• Gestion et partage des ressources matérielles
• CPU, Mémoire, Disques, périphériques, cartes graphiques, cartes son, …
• Support des services
• Édition, compilation, exécution, interfaçage graphique, gestion des services réseau, … OS : Caractéristiques …
•
•
Mono ou Multi­utilisateurs
Mono tâche ou Multi­tâches
• Multi­tâches
• Préemptif
• Un processus change de contexte sur « ordre » de l’OS
• L’OS décide de la « gestion » des processus
• Ex: UNIX, Windows NT/2K/XP
• Non Préemptif
• Un processus décide seul son changement de contexte selon certaines règles (ex: quand il a utilisé suffisamment de ressources CPU)
• Ex: Windows (< NT)
Quelques exemples …
•
•
•
•
MS/DR DOS
MS Windows 9*/CE/2k/XP/Vista/7/Mobile
Palm OS
UNIX
• AIX
• HPUX
• Linux
• Mac OS X 10.*
•
•
•
•
Mac OS
Be OS
Androïd
Symbian, ...
Operating Systems
•
•
Large, complex programs
Typically
• Long­lived
• Frequently extended and updated
• Worked on by a number of developers
• Used and, maybe abused by a variety of users with varying expertise and expectations
•
Essential to create an acceptable computing environment to create and execute other programs that achieve business or personal goals
MS Windows
•
•
•
Windows is a series of operating systems developed
by Microsoft
Object oriented and easy-to-use Graphical User
Interface (GUI)
Multitasking Operating systems
• allowing multiple software processes to be run at the same
time
•
Multiprocessing
• allowing multiple processors to be utilized
•
Multithreading • allowing different parts of a software program to run concurrently
•
Abundant in development tools and applications
•
•
Visual Basic, Visual C, Visual FoxPro, Delphi, Power Builder, …….
Microsoft Office, Microsoft Visio, Internet Explorer, ……
MS Windows kernel
• Windows 9X kernel
• Windows 3.X/95/98/ME
• In 2001, Microsoft announced ceasing
the development of Windows 9X kernel.
• Windows NT kernel
• Windows NT/2000/XP/Vista/7
Unix
•
•
•
•
Developed at Bell Laboratories in 1969
Written with the high­level programming language C
Initially designed for medium­sized minicomputers, and then moved to mainframe computers and personal computers
For different hardware platforms, there are many different Unix versions
• AIX, Digital Unix, Hp Unix, ...
• Sco Unix, which is a PC­based Unix operating system
•
Posix (start 1981) defines standard Unix system calls
Features of Unix
•
•
•
•
•
•
Mature and stable operating system
Graphical User Interface operating system
Multitasking capability Multiprocessing
Multithreading Multiuser capability
• allowing multiple users to utilize the computer and run programs at the same time. •
System portability
• Capable of moving from one brand of computer to another with a minimum of code changes
• The operating system could be upgraded without having all the user's data inputted again
•
Containing many tools and applications Unix functionally organized at three levels
- Surrounding the kernel and acting as a user interface
offering additional
functionality to the
operating system
to the Unix operating system
- Command language interpreter
- Interprets the command users enter
- Selects and runs the command or program
- Provides the results to the screen or file as
directed by the command
- C shell, Bourne shell, Korn shell
Tools and applications
shell
kernel
The main part of operating system, and
responsible for controlling system resources.
- Loaded into memory when the system boots
- Process control and scheduling
- Memory management
- Device I/O
- System error handling
- User programs requesting services from the
kernel through system calls
- Hardware devices getting kernel response
through interrupts
User interface
•
Providing two methods for user to
interact with the operating system
• GUI, for users of workstations or intelligent
terminals with bit-mapped displays
• Command line interface, for users of a
character cell terminal or terminal
emulator
UNIX File system
•
A hierarchical file system
•
•
•
•
•
a root filesystem: /bin, /lib, /etc, /dev, ...
a /usr filesystem: programs and unchanging data
a /var filesystem: changing data (such as log files)
a /home filesystem: user’s files
Types of files
• Ordinary disk files
• Special files
• Each physical device on a Unix system is treated as a
special file
• Located in the /dev directory
• Directory files
File system
•
Naming files and directories
• File and directory names can include letters,
numbers, periods(.), underscores(_), and some other
printable characters
• Avoid characters with special programming or system
meanings, such as /, *?[]<>$’”&!
• Generally, a name of file and directory can contain up
to 255 characters
•
Accessing directories and files
•
•
•
•
Accessing directories: cd , ls, pwd
Finding files: find
Viewing files: more, cat, tail, head, less
Editing files: vi, vim, ed
Online documentation
•
•
Unix commands are documented on line
in the man pages
The man command provides online
access to the system's reference pages
What is Linux ?
•
•
•
A free
Unix-type operating system originally created
by Linus Torvalds with the assistance of developers
around the world
The source code for Linux is freely available to
everyone
GUI operating system, including many of the tools
that Windows users are familiar with such as,
•
•
•
•
•
A file manager
A Window manager
A help system
A configuration
…
What is Linux ?
•
•
Requiring less system resources. A Linux
based system can operate smoothly on a 386
or 486
Application software support
• Office applications: Corel WordPerfect Office
2000 for Linux Deluxe, Open Office
• Graphics tool: Gimp, ImageMagick, ...
• Browsers: Firefox, Opera, ...
• MPEG Decoder/Encoder: mplayer, mencode, …
Where did it come from?
•
Linus Torvalds created it
• with assistance from programmers around the world
• first posted on Internet in 1991
•
•
Linux 1.0 in 1994; 2.2 in 1999
Today used on 7­10 million computers
• with 1000’s of programmers working to enhance it
How do you get it?
•
•
Download it from the Internet
From a “Distribution” (e.g. RedHat)
• Linux kernel
• X Windows system and GUI
• Web, e­mail, FTP servers
• Installation & configuration support
• 3rd party apps
• Hardware support
Why is it significant?
•
•
Growing popularity
Powerful
• Runs on multiple hardware platforms
• Users like its speed and stability
• No requirement for latest hardware
•
It’s “free”
• Licensed under GPL
• Vendors are distributors who package Linux
Utilisateur UNIX
➢
➢
Chaque utilisateur est connu
login/passwd :
➢
➢
➢
➢
Individuel : responsabilité
Confidentiel : sécurité
Changer de mot­de­passe : passwd (yppasswd)
Interne : UID/GID
➢
➢
User Identifier
Group Identifier
Security Guidelines
•
Take Care With Passwords • Use good ones (motherhood statement) • Don't Use Real Words • Make Sure They Are Not Easily Guessed • Use Combinations Of Upper and Lower Case, Numbers, Punctuation • One Method: Take first letter of a sentence or book title, insert numbers and punctuation
Choisir son passwd
➢
Faux passwd :
➢
➢
➢
➢
➢
➢
➢
Login
Nom Prénom
azerty mlkjhgf 1234567
N° téléphone, date de naissance
Mot du dictionnaire F/GB ...
...
Crack et sniff : strictly prohibited (see Charte) Utilisateur UNIX
➢
➢
Connexion ou login
➢
Mode texte
➢
Mode graphique
Après le login : shell ➢
interpréteur de commandes % ➢
Déconnexion en quittant le shell :
% logout
% exit
% Control­D ^D
Dieu existe
➢
➢
➢
➢
➢
➢
UID = 0
Login : root
Sur etud­sc.u­picardie.fr : interdit
Administrateur système
Le droit de tout faire (et n'importe quoi)
À la maison (ou en MASTER 2)
Additional Resources
•
UNIX Systems Administrator Resources
•
•
Linux/390 Observations and Notes
•
•
•
•
•
http://penguinvm.princeton.edu
Introduction to Linux
Introduction to UNIX
Linux/390 Installation
Linux Administration Made Easy
•
•
http://www.ugu.com/
http://www.linuxninja.com/linux­admin/book1.html
Conceptual software architecture of the Linux kernel
Additional Resources
•
•
•
•
•
•
http://www.linux.org
http://www.tux.org http://www.ubuntu.org
http://www.li.org
http://lea­linux.org
http://www.freenix.org
Linux File System Basics
•
Linux files are stored in a single rooted, hierarchical file system
Directories
root
• Data files are stored in directories (folders)
User home
directories
• Directories may be nested as deep as needed
Data files
Naming Files
•
Files are named by
• naming each containing directory
• starting at the root
•
This is known as the pathname
/etc/passwd
/home/neale/b
The Current Directory
•
One directory is designated the current working directory
• if you omit the leading / then path name is relative to the current working directory
• Use pwd to find out where you are
Current
working
directory
doc/letter
./doc/letter
/home/neale/doc/letter
Some Special File Names
•
Some file names are special:
• / The root directory (not to be confused with the root user)
• . The current directory
• .. The parent (previous) directory
• ~ My home directory
•
Examples:
• ./a same as a
• ../jane/x go up one level then look in directory jane for x
Special Files
•
/home ­ all users’ home directories are stored here
•
•
/bin, /usr/bin ­ system commands
/sbin, /usr/sbin ­ commands used by admins •
/etc ­ all sorts of configuration files
•
/var ­ logs, spool directories etc.
•
/dev ­ device files
•
/proc ­ special system files
Standard Files
•
UNIX concept of “standard files”
• standard input (where a command gets its input) ­ default is the keyboard
• standard output (where a command writes it output) ­ default is the terminal
• standard error (where a command writes error messages) ­ default is the terminal
Interpréteur de commandes
➢
➢
➢
Interface utilisateur pour lancer des commandes
Exécution de scripts (= programmes shells)
Nombreuses déclinaisons :
➢
➢
➢
➢
➢
Bourne shell : sh (ou bash)
Korn shell : ksh
C­shell : csh, tcsh
Command.exe (MS – ligne de commande)
Caractéristiques différentes :
➢
➢
➢
➢
Contrôle des processus
Substitution de variables
Langage de contrôle
Divers services
Syntaxe générale d'une commande
% nom [option]... [arguments]...
➢
➢
Premier mot : la commande à lancer
Puis les options (­...)
➢
➢
Puis les arguments
➢
➢
Concaténation généralement possible (­la pour ­l ­a)
Séparés par un ou plusieurs espaces
Mode intéractif : chaîne de prompt %
Documentation en ligne
% man [section] commande
Sections :
1) Users commands (man 1 ls)
2) System calls (man 2 chmod)
3) Subroutines (man 3 printf)
4) Devices (man 4 NFS)
5) File formats (man 5 passwd)
6) Games (man 6 chess)
7) Miscellaneous (man 7 man)
8) AdminSys (man 8 mkfs)
9) Kernel (man 9 ext2)
Interface graphique % xman
Commande % info plus complète
Les parties d'un man ➢
➢
➢
➢
➢
➢
➢
➢
NAME
SYNOPSIS
AVAILIBILITY
DESCRIPTION
OPTIONS
DEFAULTS
EXAMPLES
OVERVIEW
➢
➢
➢
➢
➢
➢
➢
➢
ENVIRONMENT
EXIT STATUS
WARNINGS
FILES
SEE ALSO
DIAGNOSTICS
BUGS
HISTORY
Fichier Unix
➢
➢
➢
➢
Toute donnée écrite fait partie d'un fichier
Format : séquence d'octets / de caractères
Hiérarchisé dans une arborescence unique
Contenus types :
➢
➢
➢
➢
Programmes exécutables, shell­scripts, textes ...
Répertoires
Périphériques (/dev)
Fichiers spéciaux
Chemins d'accès à un fichier
➢
Chemin absolu : à partir de la racine
/home/fmi/linfo/dushmol/CUnix/tp1/toto.c
➢
Chemin relatif : à partir du répertoire courant
% pwd
/home/fmi/linfo/dushmol/CUnix
% ls tp1/toto.*
toto.c
➢
Certains shells (csh, tcsh, bash):
~
~dushmol
répertoire de l'utilisateur qui exécute le shell
répertoire de dushmol
Remonter une arborescence
➢
➢
Répertoire courant : .
Répertoire père : ..
% ls .
toto.c
% ls ..
tp1
➢
Liens symboliques : rupture de l'arborescence
Syntaxe d'un nom de fichier
➢
Suite de caractères sauf /, terminée par \0.
➢
Longueur limitée par le File­System (partition)
➢
➢
Pas de propriétés héritées des noms ni des extensions (à l'exception des fichiers cachés)
Des conventions :
.s
assembleur
.c, .h
programme C (et include)
.java, .class
Java
.o
Binaire objet
.a
librairie de binaires objets
Diverses extensions habituelles
Documentations :
.html
HTML
.1 à .9
man
.texi
info
.ps
postscript
.pdf
portable doc. format
.tex
tex ou latex
Versions antérieures :
.old .bak .sav
~
Compressions :
.Z compress
.gz
gzip
.bz2 bzip2
.tar
archive tar
.tgz tar­ball
.tar.gz idem
.rpm RPM Package Manager
.uu
uuencode
Métas­caractères
➢
➢
➢
Substitutions effectuées par le shell
Avant l'appel de la commande
Expressions régulières :
? caractère quelconque
[a,b,c] a b ou c
[D­L]
D <= ? <=L
* tout motif (y compris vide)
➢
Protection d'un caractère : \
Commandes sur les répertoires
% pwd
• print working directory
% cd [rep]
➢
change directory
% mkdir [­p] dirname...
➢
make directory [­parents]
% rmdir dirname...
➢
remove directory (must be empty, cf rm ­r)
Type de contenu de fichier
% file /etc/a*
/etc/adduser.conf: ASCII English text
/etc/adjtime: ASCII text
/etc/aliases: ASCII text
/etc/aliases.db: Berkeley DB (Hash, version 7, ...)
/etc/alternatives: directory
/etc/apm: directory
/etc/apt: directory
/etc/at.deny: can't read `/etc/at.deny' (Permission denied).
Inspecte les contenus des fichiers
I­noeud d'un fichier
➢
Informations sur un fichier du File­System
➢
➢
➢
➢
➢
➢
➢
Type de fichier : ordinaire, répertoire, lien, tube...
Propriétaire : UID
Groupe : GID
Dates : création, modification, accès, effacement
Droits d'accès
Pour toute taille de fichier (meme vide)
I­nombre : indice dans la table des i­noeuds
(cf TD7)
ls ­l % ls ­l vm*
­rw­r­­r­­ 1 root root 834366 Sep 30 12:06 vmlinuz­2.2.20
➢
Premier caractère : type du fichier
­ fichier
d répertoire
l lien symbolique
➢
➢
➢
Caractères 2 à 4 : droits d'accès pour le propriétaire
Caractères 5 à 7 : droits d'accès pour le groupe
Caractères 8 à 10 :droits d'accès pour les autres Droits sur un fichier / un répertoire
➢
Droits sur un fichier :
r lecture
w écriture
x exécution
s set­UID, set­GID, sticky­bit
➢
Droits sur un répertoire :
r lecture (ls)
w modification (création, effacement)
x passage
t droit de suppression réservé au propriétaire
ls ­l (2) % ls ­l vm*
­rw­r­­r­­ 1 root root 834366 Sep 30 12:06 vmlinuz­
2.2.20
Entier : nombre de liens physiques
➢ Login du propriétaire
➢ Nom du groupe
➢ Taille (en octets) du fichier
➢ Date de modification
➢ Nom du fichier
➢
Fichiers (répertoires) cachés
Nom commençant par .
% ls
% ls ­a
. .. .data
% ls ­al
total 4
drwxr­xr­x 2 dequen dequen 1024 Sep 30 21:48 .
drwx­­­­­­ 25 lazure lazure 2048 Sep 30 21:48 ..
­rw­r­­r­­ 1 dequen dequen 6 Sep 30 21:48 .data
Contenu d'un répertoire
ls [­aliARF...] [name]...
➢
Options :
a all (meme cachés)
A idem a, sauf . et ..
l format long
i inode
d répertoire (ne descend pas)
t time
R récursif
➢
Noms de fichiers ou de répertoires facultatifs ( % ls * )
Déplacement ou renommage mv [­] [­fi] fichier1 fichier 2
Renomme fichier1 en fichier2
mv [­] [­fi] rep1 rep2
Renomme rep1 en rep2
mv [­] [­fi] fichier... repname
Déplace les fichiers dans le répertoire repname
Options :
­ les arguments suivants sont des fichiers ( ­toto )
­i interactif
­f force
Copies
cp [­ip] fichier1 fichier2
Recopie fichier1 dans fichier2
cp ­rR [­ip] rep1 rep2
Copie récursive de rep1 dans rep2
cp [­diprR] fichier... rep
Copie des fichiers dans rep (doit exister)
Options :
­i Mode interactif
­d pas de déréférencement des liens symboliques
­p Duplique les droits et la date de modification
­r ­R copie récursive
Effacement de fichier
rm [­] [­fir] fichier...
Remove
Destruction définitive (sauf FS journalisés)
Options :
­ les noms qui suivent ne sont pas (plus) des options
­r destruction récursive
­f force
­i mode interactif
Monsieur propre : # rm ­rf /
Visualisation de contenu
cat [­] [­bnv...] [fichier]...
Filtre élémentaire :
• Affiche l'entrée standard sur la sortie standard
Ou le contenu des fichiers concaténés si spécifiés
Options :
­b ­n ­v numérotation des lignes
filtre les caractères non­imprimables
Visualisation paginée
more [options] fichier...
less [options] fichier...
➢
➢
Affiche page/page le contenu des fichiers
Less plus puissant :
➢
➢
➢
Retour arrière
Ne lit pas tout le fichier avant de commencer
S'utilise en filtre (entrée standard)
Premières/dernières lignes
➢
head [­number] [fichier]...
tail [+|­number] [fichier]...
Options :
­number
+number
➢
number premières/dernières lignes
commence à la ligne number
S'utilise aussi en filtre
Edition de fichiers
➢
➢
Editeurs de fichiers de type texte
Historique : vi éditeur pleine page
➢ à savoir manipuler un minimum
➢
➢
➢
➢
➢
➢
x i ESC ESC:q!
ESC:wq
suppression de caractères
insertion
retour au mode précédent
quitte sans sauvegarder
Quitte en sauvegardant
Courants :
➢ Textedit, kedit, gedit, emacs, ...
Droits par défaut
➢
➢
➢
➢
umask [nnn]
Affiche (pas d'argument) le masque de création
Fixe le masque à nnn (chiffres octaux)
Définit les droits d'un fichier lors de sa création
Jamais de x (sauf éditeur de liens)
% umask 027
% mkdir bar ; touch foo
% ls ­ld bar foo
drwxr­x­­­ 2 lazure ens 1024 Sep 30 22:53 bar
­rw­r­­­­­ 1 lazure ens 0 Sep 30 22:53 foo
Changer les droits (symbolique)
chmod [­R] [ugoa][+­=][rwxstugo]fichier...
Récursivité par l'option ­R
ugoa user group others all
+­=
ajout retrait positionnement
rwx
read write execute
st
{set­uid,set­gid} sticky
ugo
recopie des droits user group others
➢
Changer les droits (octal)
➢
➢
➢
➢
➢
➢
➢
chmod [­R] octal fichier...
3 ou 4 chiffres octaux à ajouter et à concaténer
4000 set­uid bit
2000 set­gid bit
1000 sticky­bit (fichier : antiswap, rep: rm)
400 lisible prop
40 groupe
4 autres
200 modif prop
20 groupe
2 autres
100 exec prop
10 groupe
1 autres
Changer le propriétaire / le groupe
chown [­R] username fichier...
chgrp [­R] groupname fichier...
➢
➢
➢
Doit être root ou propriétaire (system V)
Doit être root (BSD)
Retirent les bits s
Créer un lien physique
➢
➢
ln fichier fichierbis
fichier et fichierbis partagent le même i­noeud
fichier et fichierbis sont indifférenciables
% ln toto titi
% date > toto
% cat titi
Mon Sep 30 23:28:47 CEST 2002
% rm toto
% cat titi
Mon Sep 30 23:28:47 CEST 2002
Créer un lien symbolique
➢
➢
➢
➢
➢
ln ­s fichier lien
Lien par le nom Alias : accès à fichier ­> accès à lien
Utilisation courante
Pas de droits sur le lien (droits sur le fichier)
Passe les frontières physiques
Espace disque libre
➢
➢
➢
➢
df [­i] [partition]...
df [­i] [fichiers]...
Affiche des informations sur l'espace libre
Par partition (FS)
Blocs / Inodes
Cf TD5
Usage disque
➢
➢
➢
➢
du [­s] fichier...
Taille disque utilisée par un fichier
Taille totale d'un répertoire (récursif)
En kilo­octets
­s pour n'afficher que la somme
Quotas disques
quota ­v
➢
➢
➢
➢
Affiche la position des quotas par partition
Limite soft
Limite hard
Grace period Commandes déjà vues
•
•
•
•
•
•
•
•
•
•
•
cat
cd
chmod
chown
cp
date
df
du
echo
expr
file
Affiche un flot sur stdout
Change de répertoire courant
Change les droits d'une entrée
Change le propriétaire d'une entrée
Copie des entrées
Affiche la date et l'heure
Espace libre
Usage disque
Affiche ses arguments sur stdout
Evalue une expression entière
Type le contenu des arguments
Commandes déjà vues
•
•
•
•
•
•
•
•
•
•
•
•
head
kill
less
ls
man
mkdir
more
mv
rm
rmdir
tail
test
Affiche le début d'un flot
Envoie un signal vers un processus
Visualisation paginée
Liste le contenu d'un répertoire
Affiche l'aide en ligne d'une commande
Crée un répertoire
Visualisation paginée
Renomme ou déplace des entrées
Efface des entrées
Efface un répertoire
Affiche la fin d'un flot
Evalue des conditions
basename - strip directory and suffix from
filenames
•
% basename /home/fmi/linfo/toto/Projet/parse.c
parse.c
% basename /home/fmi/linfo/toto/Projet/parse.c .c
parse
•
Utilisation courante :
•
•
•
• Vérification des arguments d'un shell script
• Permet une syntaxe plus tolérante lors de l'appel :
% script toto.c
% script toto
dirname - strip non-directory suffix from file name
•
% dirname /home/fmi/linfo/toto/Projet/parse.c /home/fmi/linfo/toto/Projet
•
Traitement de chaine de caractères
• Pas de vérification de l'existence du chemin
• À compléter avec le test de l'existence du chemin
diff - find differences between two
files
•
•
•
•
•
•
•
•
•
•
•
% diff fork.c fork2.c
17a18
> sleep(60);
% diff fork2.c fork3.c
18c18,21
< sleep(60);
­­­
> wait();
> // waitpid(pid);
> printf("J'ai attendu la fin de mon fils\n");
> sleep(30);
patch - apply a diff file to an original
•
Applique un patch produit par diff à un source
•
•
•
•
% diff fork2.c fork3.c > fork.diff
% patch fork2.c fork.diff
% diff fork2.c fork3.c
%
find - search for files in a directory hierarchy
•
Critères de recherche multiples :
• Nom de fichier
• Expression régulière
• Sensible à la casse ou non
• Dates
• Valeur absolue
• Comparaison avec un autre fichier
• Taille
• Valeur minimale, maximale
• Comparaison avec un autre fichier
• Propriétaire, groupe, droits, inode
•
Très utile en administration système
find - search for files in a directory hierarchy
•
•
•
•
•
•
•
•
% find / ­nouser % find /home ­name '*.jpg'
% find /var ­type p ­print
% find / ­perm +4000 ­exec 'echo {} >> /var/secure'
% find /tmp ­ctime +3 ­exec 'echo {} >> /
var/dump'
% find / ­newer /etc/lastdump
% find / ­inum 634881
% find / ­empty
cut - remove sections from each line of files
•% head ­3 /etc/passwd
•root:x:0:0:root:/root:/bin/bash
•daemon:x:1:1:daemon:/usr/sbin:/bin/sh
•bin:x:2:2:bin:/bin:/bin/sh
•% head ­3 /etc/passwd | cut ­d: ­f1,5­7
•root:root:/root:/bin/bash
•daemon:daemon:/usr/sbin:/bin/sh
•bin:bin:/bin:/bin/sh
•% head ­3 /etc/passwd | cut ­c3­6,21­
•ot:xt:/bin/bash
•emon/usr/sbin:/bin/sh
•n:x:bin/sh
grep - print lines matching a pattern
•
Recherche les lignes matchant une expression régulière :
.
^
$
\.
*
+
?
\{n\}
[]
caractère quelconque
caractère de début de ligne
caractère de fin de ligne
caractère point
réplicateur (0 fois ou n fois)
réplicateur non nul (au moins une fois)
réplicateur d'option (au plus 1 fois)
réplicateur n fois
ensemble de caractères
[0123456789] [0­9] [[:digit:]]
^ en début d'ensemble : exclusion de caractères
[^xyz] [a­w]
grep - print lines matching a pattern
•
•
•
•
•
•
•
•
Recherche des comptes sans passwd
% cat /etc/passwd | grep '::'
% cat /etc/passwd | grep '^.*::'
% cat /etc/passwd | grep '^[^:]*::'
Recherche des logins trop long
% cat /etc/passwd | grep '^[^:]\
{9,\}:'
Recherche des lignes non­vides
% grep ­v '^$'
sed - a Stream EDitor
•
•
Comporte un langage de programmation rudimentaire
Utilisé principalement pour le remplacement de regexp
% sed 's/regexp/remplacement/'
regexp est une expression régulière à la grep
• Comportant des sous­expressions entre \( \)
• Référencées dans remplacement par \1 \2 ...
• % echo Abcdef | sed 's/\(.*\)\(b.*\)\
(e.*\)/\2\1\3/'
• bcdAef
• % sed 's/^\([^:]\)::/\1:x:/'
• Autres actions possibles :
• d
• t
• g
delete
translate
plusieurs fois par ligne
seq - prints a sequence of numbers
•
•
•
•
•
•
•
•
•
•
% seq 1 5
1
2
3
4
5
% seq ­s' ' 1 5
1 2 3 4 5
% seq ­s' ' ­w ­30 10 80
­30 ­20 ­10 000 010 020 030 040 050 060 070 080
join - join lines of two files on a common field
•
Effectue une jointure sur des fichiers textes
•
% seq 1 10 100 > selection ; cat ­n /etc/passwd > liste
% join selection liste
1 root:x:0:0:root:/root:/bin/bash
11 uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
21 lazure:x:1000:1000:D. Lazure:/home_loc/lazure:/bin/bash
•
•
•
•
uniq - remove duplicate lines from a sorted file
•
Suppression des lignes consécutives identiques :
% cat toto | uniq ­u
•
Affichage d'un exemplaire de chaque ligne dupliquée
% cat toto | uniq ­d
•
Affichage de toutes les lignes dupliquées
% cat toto | unid ­D
•
Préfixe les lignes par le nombre d'occurrences
% cat toto | uniq ­c
•
Autres possibilités :
• Comparer un nombre de caractères spécifiques
• Spécifier si la casse est sensible ou pas
• Donner un séparateur particulier
sort - sort lines of text files
•
•
•
Trie les ligne du flot standard
Par défaut, par ordre lexicographique croissant
Nombreuses options disponibles :
• Numérique
% cat /etc/passwd | cut ­d: ­f3 | sort ­n • Reverse
• % sort ­r
• Sur une partie de la ligne
• % sort ­k 10,20
• Fusion (merge) de deux fichiers
• % sort ­m toto titi
gzip, gunzip - compress or expand files
•
•
Compression / décompression sans destruction
Niveau de compression :
• Compromis Temps de compression vs. Espace disque
• 1 à 9 (défaut=6)
•
Décompression par gunzip ou gzip ­d
•
% wc toto; i=1; while [ $i ­le 9 ]; do echo ­n niveau $i : ; gzip ­$i toto; wc ­c toto.gz; gzip ­d toto.gz; let i=$i+2; done
166 1109 891264 toto
niveau 1 : 38524 toto.gz
niveau 3 : 34345 toto.gz
niveau 5 : 28596 toto.gz
niveau 7 : 26479 toto.gz
niveau 9 : 23662 toto.gz
•
•
•
•
•
•
tar - The GNU version of the tar archiving utility
•SYNOPSIS tar [­] A ­­catenate ­­concatenate | c ­­create | d ­­diff ­­compare | r ­­append | t
• ­­list | u ­­update | x ­extract ­­get [ ­­atime­preserve ] [ ­b, ­­block­size N ] [ ­B,
• ­­read­full­blocks ] [ ­C, ­­directory DIR ] [ ­­checkpoint ] [ ­f, ­­file [HOST­
• NAME:]F ] [ ­­force­local ] [ ­F, ­­info­script F ­­new­volume­script F ] [ ­G,
• ­­incremental ] [ ­g, ­­listed­incremental F ] [ ­h, ­­dereference ] [ ­i, ­­ignore­zeros
• ] [ ­j, ­­bzip2 ] [ ­­ignore­failed­read ] [ ­k, ­­keep­old­files ] [ ­K, ­­starting­file
• F ] [ ­l, ­­one­file­system ] [ ­L, ­­tape­length N ] [ ­m, ­­modification­time ] [ ­M,
• ­­multi­volume ] [ ­N, ­­after­date DATE, ­­newer DATE ] [ ­o, ­­old­archive, ­­portabil­
• ity ] [ ­O, ­­to­stdout ] [ ­p, ­­same­permissions, ­­preserve­permissions ] [ ­P,
• ­­absolute­names ] [ ­­preserve ] [ ­R, ­­record­number ] [ ­­remove­files ] [ ­s,
• ­­same­order, ­­preserve­order ] [ ­­same­owner ] [ ­­numeric­owner ] [ ­S, ­­sparse ] [
• ­T, ­­files­from F ] [ ­­null ] [ ­­totals ] [ ­v, ­­verbose ] [ ­V, ­­label NAME ]
• [ ­­version ] [ ­w, ­­interactive, ­­confirmation ] [ ­W, ­­verify ] [ ­­exclude=FILE
• ] [ ­X, ­­exclude­from FILE ] [ ­Z, ­­compress, ­­uncompress ] [ ­z, ­­gzip,
• ­­ungzip ] [ ­­use­compress­program PROG ] [ ­­block­compress ] [ ­­rsh­command=CMD
• ] [ ­[0­7][lmh] ]
• filename1 [ filename2, ... filenameN ]
• directory1 [ directory2, ...directoryN ]
tar - The GNU version of the tar archiving
utility
•
Crée une archive contenant un ou plusieurs fichiers
% tar cvf Projet.tar *.c *.h Makefile README
•
Attention à ne pas oublier le nom du fichier créé !
% tar cvf *.c *.h Makefile README
•
Permet la compression en entrée (tar­ball):
% tar cvfz Projet.tar.gz *.c *.h Makefile README
% tar cvfz Projet.tgz *.c *.h Makefile README
•
Extraction :
% tar xzf Projet.tgz
•
Liste des fichiers inclus :
% tar tzf Projet.tgz
tee - read from standard input and
write to standard output and files
•
Permet de sauvegarder un flot entre deux commandes tubées :
% seq 1 10 | tee tempo | sort ­r ­n
•
Sans écrasement (append) :
% seq 1 10 | tee ­a tempo | sort ­r ­n
tr - translate or delete characters
•
Simple traduction :
% tr abcd ABCDEF
% tr [:lower:] [:upper:]
•
Ajustement des longueurs des 2 arguments :
% tr ­c $S1 $S2
% tr ­t $S1 $S2
•
Suppression de caractères :
% tr ­d $S1
•
Suppression des répétitions (utile avec cut ­d )
% ls ­l | tr ­s ' ' | cut ­d' ' ­f5
•
Possibilités de donner des ensembles prédéfinis ou de spécifier des constructeurs d'ensembles
wc - print the number of bytes, words, and lines in files
•
Par défaut, un filtre (sinon affiche le nom de fichier à la suite) :
% cat toto | wc
166 1109 891264
% wc toto
166 1109 891264 toto
% cat toto | wc ­c
891264
% cat toto | wc ­w
1109
% cat toto | wc ­l
166
% cat toto | wc ­L
28031
Source
•
% man bash Shell­script
•
Fichier texte exécutable, interprété par un shell : % emacs toto &
% head ­1 toto
#!/bin/sh ­u
% chmod +x toto
% toto
Voici mon premier shell script
% Variables
•
•
•
•
•
Toute variable est stockée sous forme de chaîne
Peut contenir des séparateurs (liste de mots)
Pas de déclaration nécessaire (interprétation)
Affectation :
MYVAR=”hello world !”
Référencement :
echo $MYVAR
Variables positionnelles (paramètres)
•
Dans le programme principal :
• arguments d'appel :
% mesargs ABC 123 “x y z”
$0=”mesargs”
$1=”ABC”
$2=”123”
$3=”x y z”
%
•
Dans une fonction : arguments de la fonction
• Cf fonctions
Variables spéciales
•
•
IFS
séparateurs
$* liste des paramètres (avec les séparateurs)
• “$*” équivaut à “$1c$2c...” avec c premier carac de $IFS
•
$@ liste des paramètres sans séparateurs
• “$@” équivaut à “$1” “$2” ...
•
•
•
$# nombre de variables positionnelles (au sens de $*)
$? code retour de la dernière commande exécutée
$$ PID du shell
Quelques variables du shell
•
•
•
•
•
•
•
USER
SHELL
PPID
PWD
RANDOM
HOSTNAME
IFS
•
•
•
•
•
•
•
PATH
HOME
PS1
PS2
PS3
PS4
...
Les différentes façons de quoter
•
“ ... “
• Paramètre unique
• Contenant éventuellement des séparateurs
• Expansion des variables
•
'...'
• Paramètre unique
• Contenant éventuellement des séparateurs
• Sans expansion des variables
•
` ... `
• Exécution d'une commande
• Expansion par le résultat de la commande
Séquences
•
;
séquence
• Évaluée de gauche à droite
• Résultat : la dernière évaluation
•
|
tube
• Séquence potentiellement évaluée en //
• Redirection stdout (gauche) sur stdin (droite)
• Résultat : la dernière évaluation
•
( )concatène les flux de sorties
• Le flux d'entrée est consommé par la 1ère commande
Séquences conditionnelles
•
&& séquence si VRAI
• Évalue la commande droite si retour de gauche = 0
• Arrêt si échec de la commande gauche
•
|| séquence si FAUX
• Évalue la commande droite si retour gauche != 0
• Arrêt dès qu'une commande retourne 0
Redirections d'entrées/sorties
•
•
En entrée d'une commande :
En sortie d'une commande :
• Forcer l'écrasement (noclobber) :
•
•
•
•
En sortie avec concaténation :
En sortie erreur d'une commande :
Redirection de stderr vers stdout :
Redirection des 2 sorties :
< filename
> filename
>| filename
>> filename
2> filename
2>&1
&> filename
>& filename
Shell­scripts intéractifs : read
•
•
Lecture d'une ligne en entrée standard
Affectation dans une variable
Inclusion d'un script : source ou .
•
Inclusion d'un script exécuté par le même processus
•
source filename
•
. filename
Redirection en­place
•
Redirection du flux du shell­script vers l'entrée standard
• cmd << MOT_CLEF
...
MOT_CLEF
• Le mot­clef est seul en début de ligne
• Sans expansion du texte en place :
quoter le mot­clef (par exemple : \MOT_CLEF)
•
Délimiteur non forcément en début de ligne (indentation) :
• cmd <<­ MOT_CLEF
...
MOT_CLEF
Opérations arithmétiques
•
Les variables sont des chaînes de caractères.
• % x=12
% x=$x+1
% echo $x
12+1
•
Au choix :
• Un outil historique : expr
• Une built­in commande : let
• Une construction syntaxique : $(( ))
Code de retour
•
Entier retourné par le processus
• int main();
• Convention : 0 si succès
•
•
Retour de la précédente commande : $?
Commande test
• évalue une expression booléenne
• Renvoie le résultat
• Équivalent syntaxique : • test expr
[ expr ] Exemple de tests (% man test)
•
Arithmétiques :
­ne ­eq ­le ­lt ­ge ­gt
•
Comparaisons :
= !=
chaines vides
•
Fichiers :
type : liens durs ou symboliques, répertoires, pipe, socket...
dates : accès, modification
droits : lecture, écriture, xeq, setUID, sticky­bit
taille, bloc device, character device
Alternative : if / elif / else / fi
if expr
then
instructions
elif expr
then
instructions
else
instructions
fi
•
if expr ; then
instructions
elif expr ; then
instructions
else
instructions
fi
Boucles canoniques : while / until
•
while expr
•
until expr
•
do
instructions
•
do
instructions
•
• done
done
Retour : dernière instruction
ou 0 si aucune
•
Itérateur de liste : for
•
•
•
for ID in list
do
instructions
•
for ID
•
do
instructions
•
done
done
Sortie de boucle : break, continue
•
break [n]
•
continue [n] •
built­in commands
•
sort ou resume de n boucles imbriquées
• n>=1
• Si n > #boucles imbriquées • fin du script (retour 0) pour break
• Resume de la dernière boucle pour continue
Alternative multiple : case / esac
•
case ID in
motif) instructions
;;
•
•
•
•
esac
Plusieurs entrées possibles : la première sélectionnée
Motifs avec méta­caractères (au sens du pathname)
Code de retour 0 si aucun motif sélectionné
Fonctions •
function toto ()
•
{
instructions
•
}
Paramètres formels sans déclaration : •
• variables positionnelles ($1...)
• Masquage des variables positionnelles d'appel du script
•
Variables locales précédées du qualifieur local
Faire un menu facile : select
•
select name [ in word ] ; do list ; done
•
The list of words following in is expanded, generating a list of items. The set of expanded words is printed on the standard error, each preceded by a number. If the “in” word is omitted, the positional parameters are printed (see PARAMETERS below). The PS3 prompt is then displayed and a line read from the standard input. If the line consists of a number corresponding to one of the displayed words, then the value of name is set to that word. If the line is empty, the words and prompt are displayed again. If EOF is read, the command completes. Any other value read causes name to be set to null. The line read is saved in the variable REPLY. The list is executed after each selection until a break or return command is executed. The exit status of select is the exit status of the last command executed in list, or zero if no commands were executed.
Exercices
•
Sauvegarde d'une liste de
fichiers
• Soit un répertoire source • Soit dans source un fichier MANIFEST contenant une liste (relative par rapport à source) de fichiers et répertoires. Écrire un script bash permettant de générer une archive source.tgz contenant les fichiers et répertoires listés dans MANIFEST
• Remarque : la création de l'archive peut passer par la création d'un répertoire intermédiaire
Exercices
•
Modifiez l’exercice précédent en tenant compte que chaque répertoire contient obligatoirement un fichier manifest. Ainsi, chaque répertoire contient sa propre liste de fichiers et de répertoire à sauvegarder.
Exercices
•
Génération de vignettes
• Soit un répertoire d'images rep.
• On souhaite automatiser la génération de vignettes pour les images contenues dans rep
• L'outil convert permet d'obtenir une vignette à partir d'une image jpeg en exécutant la ligne de commande suivante :
• convert ­size 120x120 source.jpg ­resize 12x12 +profile " " vignette.jpg
• Écrire un script permettant d'exécuter cette ligne
pour chaque fichier *source.jpeg** du répertoire rep de sorte que les noms des vignettes aient la forme sourcethumb.jpeg
Exercices
•
Publipostage
• Soit une base de données stockée dans 4 fichiers texte nom.txt, adr.txt, cp.txt, ville.txt
• Chacune des lignes de chacun des fichiers texte mises en correspondance représente les données d’une personne
• Soit un fichier texte contenant entre autres choses les chaines suivantes :
• __NOM__, __ADRESSE__, __CP__, __VILLE__
• Pour chaque contact : extraire son nom, son adresse, son code postal, sa ville. Créer un publipostage de telle sorte que dans les différentes copies du fichier source, les chaînes __X__ aient été remplacées par leur valeurs correspondantes à une ligne de la base de données.
Exercices
•
Surveillance d'URLs
• Soit un fichier urls.list contenant une liste d'URLs à surveiller
• La commande md5sum permet d'obtenir une 'empreinte' d'un fichier donné
• La commande wget permet de télécharger une URL
• En utilisant ces deux commandes, écrire un script en bash permettant d'afficher la listes des URLS contenues dans urls.list qui ont été modifiées (ie. dont l'empreinte de la version téléchargée est différente de la dernière empreinte enregistrée).
• On s'arrangera pour maintenir à jour le fichier urls.list avec les nouvelles empreintes.
Notion de processus
•
•
Un processus est un programme en cours d'exécution
Il est caractérisé par :
• Un numéro unique : le PID (Process Identifier)
• Un contexte propre
• Un espace d'adressage
• Une entrée dans la table des processus :
• Un état
• Une priorité
•
Deux modes d'exécution possibles :
• Mode utilisateur
• Mode noyau (lors d'appels système)
PID et PPID
•
PID: Process Identifier
• Numéro (entier positif) unique
• attribué définitivement
•
PPID: Parent Process Identifier
• PID du processus père
• Tout processus a un père
• Par défaut, c'est le processus qui l'a créé
•
Init • Processus d'initialisation du système
• PID=1
Arborescence des processus
init (PID=1)
Création
Création
Démons
Démons
Démons
Démons
getty
klogd
Mutation
login
syslogd
inetd
Mutation
atd
shell
crond
...
myp2p
Création
soffice
Création
pstree
Création et
détachement
Création et mutation
•
Création d'un processus par clonage
• À partir d'init
• Nouveau PID attribué par le système
• Arborescence
•
Mutation : • Chargement d'un nouvel exécutable
• PID conservé (espace mémoire et contexte aussi)
•
Détacher un processus de son père (shell) :
• Le processus est adopté par init
% nohup <commande args>
États possibles d'un processus
Actif utilisateur
Mode utilisateur
Mode noyau
Nouveau
Fork()
Prêt
Scheduler
Actif noyau
Signal
Suspendu
Fin
Zombi
E/S
Endormi
Gestionnaire VM
Prêt swappé
Endormi swappé
Fin d'un processus
•
Un processus peut terminer :
• Quand il a fini son exécution
• Quand il reçoit un signal
• De fin (INT...)
• D'erreur (FPE...)
•
La fin d'un processus est signalée à son père
• Libération des ressources
• Envoi d'un signal SIGCHLD au père
• Passage à l'état zombie (defunct)
• Disparition totale à l'accusé de réception du père
•
Propagation des signaux d'arrêts aux processus fils
Commandes Unix
•
Liste des processus courants : % ps [options]
•
Même commande, réactualisée à intervalles réguliers
% top
•
Arbre des processus :
% pstree
•
Envoi d'un signal :
% kill ­SIG PID
Envoi de signaux
•
Différents signaux dont les plus utilisés (man kill):
•
•
•
•
HUP
ABRT
KILL
1
6
9
INT
FPE
STOP
2
8
15
Permettent de • changer l'état d'un processus (STOP, CONT)
• Mettre fin à un processus (INT, ABRT, KILL)
• Réinitialiser un processus (HUP)
• Récupérer des erreurs graves (FPE...)
• Communiquer les fins de processus (HLD)
• ...
Cas particuliers du shell
•
Création d'un processus pour chaque commande simple
•
Par défaut : en foreground
• Attend la fin de l'exécution pour relire une commande
% commande arguments
%
•
Lancement en background (tache de fond) :
% commande arguments &
[1] commande arguments
%
•
PID : $$ PPID: $PPID
Gestion des jobs (bash)
•
Liste des jobs (applications lancées par le shell) :
% jobs
[1] Running simpress Processus.sxi &
[2] Running myp2p
% •
Relancement en foreground ou en background :
% fg %2
myp2p
^Z
[2] Stopped myp2P
% bg
[2] myp2p &
%
Processus et librairie standard #include <unistd.h>
• pid_t getpid(void);
Retourne le PID du processus courant
pid_t dépend de l'implémentation (unsigned int)
• pid_t getppid(void);
Retourne le PPID du processus appelant
•
•
•
•
•
•
char * getcwd(char *buf, size_t taille);
Affecte buf au répertoire de travail du processus appelant
UID / real UID
#include <unistd.h>
• uid_t getuid(void);
retourne le UID du processus :
•
•
• celui qui a lancé la commande
uid_t geteuid(void);
retourne l'UID effectif du processus :
•
•
• celui avec les droits duquel s'exécute le processus
• Consécutif à un set­UID bit positionné
Groupe d'un processus
•
•
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
int setpgrp(void);
pid_t getpgrp(void);
•
Par défaut, le groupe d'un processus est le groupe de celui qui a lancé le processus.
•
Utilisés pour définir des ensembles de processus afin de •
contrôler un groupe entier grâce à des signaux
(exemple : les shell comme CSH)
Envoyer un signal
int raise(int signal);
Envoie le signal signal au processus courant
void abort(void);
équivalent à raise(ABRT);
• int kill(pid_t pid, int sig);
•
•
•
•
•
•
•
Si pid > 0 : Envoie le signal sig à pid
Si pid == 0 : Envoie le signal sig au groupe courant
Si pid == ­1 : Envoie le signal sig à tous les processus (sauf init)
Si pid < ­1 : Envoie le signal à tous les processus du groupe de pid
Quelques outils orientés signaux
• unsigned int alarm(unsigned int seconds);
• Un signal ALARM sera envoyé au processus appelant dans seconds secondes.
• Retourne l'ancien décompte (d'un précédent appel)
• int pause(void);
• Bloque le processus courant en attendant le retour d'un handler déclenché à la réception d'un signal catché.
Redirection (capture) des signaux
•
•
•
•
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
ou
•
void (*signal( int sig, void (* handler)
(int) ))(int);
•
Redirige le signal sig sur le nouveau handler
• Des signaux non redirigeables : KILL STOP
•
Retourne l'ancien handler (pour rétablissement)
Exécution d'une redirection
•
Prochain signal sig au processus :
• (SysV, pas forcément Linux) rétablissement du comportement par défaut (nécessite de réarmer)
• Appel de (*handler)(sig)
• Au retour de (*handler), reprise au point d'appel
• Handler possibles :
•
•
•
•
•
Fonction C
SIG_DFL (implementation dependant)
SIG_IGN
Signaux non redirigeables : KILL et STOP
Signaux sont pendants (pending) en attente de prise en compte (par exemple, si le processus est endormi)
Mutation : execve()
• int execve (const char *filename, char *const argv [], char *const envp[]);
• Charge et lance l'exécution de filename :
• Exécutable ou Shell script (avec directive #! )
• Hérite du PID et des fichiers ouverts
• Ne retourne pas
• argv[] représente les arguments
• Tableau de chaînes de caractères
• Fini par NULL
• envp[] représente l'environnement
• Chaque élément de la forme clef=val (PATH=...)
• Fini par NULL
Mutation : autres fonctions
• #include <unistd.h>
• extern char **environ;
• int execl( const char *path, const char *arg, ...);
• int execlp( const char *file, const char *arg, ...);
• int execle( const char *path, const char *arg , ..., char * const envp[]);
• int execv( const char *path, char *const argv[]);
• int execvp( const char *file, char *const argv[]);
• Frontales à execve()
• cf man execl
Création de processus : fork()
pid_t fork(void) ;
Clonage du processus appelant :
•
•
• Allocation d'une entrée dans la table des processus
• Allocation d'un nouveau PID
•
Duplication de l'espace mémoire du processus :
•
•
•
•
•
Pile d'appels de fonction (STACK)
Variables globales (DATAS)
Tas des variables dynamiques (HEAP)
Code exécutable
Retour :
• Processus fils : 0
• Processus père : PID du fils
Exemple de fork()
•
•
main(){
pid_t pid;
pid=fork();
if (pid==0){
printf(“Je suis %d, fils de %d\n”,
getpid(),getppid());
}
else {
printf(“Je suis %d, père de %d\n”,
getpid(),pid);
}
}
Optimisation du fork()
•
Rappels (?) sur la gestion de la mémoire virtuelle :
• L'espace mémoire est divisé en pages
• Sur intel x86, chaque page fait 4Ko
• Les montées et descentes de pages entre RAM et DD se font par pages entières
• Les << réservations >> de pages aussi
•
Optimisation courante : Copy On Write
• Les copies de page ne sont effectuées qu'aux premières modifications
• Évite un surcoût de copies inutiles
• Partage des pages du code objet de l'exécutable
Création pour mutation : vfork()
•
•
•
Même principe que fork(), mais à usage réservé pour l'appel à une mutation
Evite les copies de l'espace mémoire
Comportement garanti uniquement • pour l'appel à une des fonctions de la famille des execve()
• Pas de retour de la fonction appelante (pas de copie de la pile d'appels de fonction)
•
Bloque le processus père avant l'appel à execve()
(pseudo­)Parallélisme
•
Les deux tâches issues d'un fork() s'exécutent en parallèle
• Même priorité
•
Sur une machine multi­processeurs :
• Parallélisme : chaque tâche est associée à un processeur
• Partage des pages mémoires
• Problèmes de synchronisation de processus...
•
Sur une machine mono­processeur :
• Pseudo­parallélisme : ordonnancement des processus
• Time­sharing
• Problèmes de synchronisation et de partage de données
Synchronisation avec wait()
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
•
•
•
Appel bloquant tant qu'aucun processus fils n'a fini
Information sur la fin du fils affectée dans *status (si !=NULL)
Macros disponibles pour tester cette information
• WIFEXITED(status) vrai si fin normale du fils
• WEXITSTATUS(status) code de retour (8bits) si WIFEXITED
• WIFSIGNALED(status) vrai si fin sur un signal non trappé
• WTERMSIG(status) numéro du signal de fin
• WIFSTOPPED(status) vrai si le fils est stoppé
• WSTOPSIG(status) numéro du signal
Synchronisation avec waitpid()
pid_t waitpid(pid_t pid, int *status, int options);
•
•
•
•
•
Si pid < ­1 : attendre un fils du groupe ­pid
Si pid == ­1 : équivalent à wait()
Si pid == 0 : attendre un fils du groupe courant
Si pid > 0 : attendre la fin du fils de PID pid
Options possibles :
• WNOHANG non bloquant
• WUNTRACED retour aussi pour un fils stoppé
Communications par tube (pipe)
•
•
•
File FIFO unidirectionnelle
#include <unistd.h>
int pipe(int filedes[2]);
Retourne un couple de descripteurs :
• filedes[0] pour les lectures
• filedes[1] pour les écritures
•
Souvent associé à un fork() :
• Création d'un tube
• Clonage : duplication des descripteurs et partage du tube
• Nécessite la fermeture du canal << inverse >>
Exemple de tube
•
Deux processus vont échanger une chaîne de caractères.
• Création d'un tube
• Clonage du processus principal
• Père : écriture de la longueur puis de la chaine
• Fils : lecture de la longueur puis de la chaine
•
À faire …
Appels systèmes : read() write()
•
•
Problème : pas de bibliothèque standard pour les tubes
Solutions :
• Définition et développement d'une bibliothèque
• Utilisation des appels systèmes d'entrée/sortie
•
Entrées/sorties par appels systèmes : • Pas de buffers utilisateurs, moins d'efficacité
• Plus que des appels systèmes
• Il existe quand même des buffers systèmes
•
TP facultatif :
• Mesurer la différence sur une application importante en IO
Appels systèmes : read() write()
• #include <unistd.h>
• int open(const char *pathname, int flags, mode_t mode);
• ssize_t read(int fd, void *buf, size_t count);
• ssize_t write(int fd, const void *buf, size_t count);
• int close(int fd);
• Descripteur entier : numéro dans la table des descripteurs (propre à l'espace du processus appelant)
•
•
•
•
•
0 : stdin
1 :
stdout
2 :
stderr
Ouverture d'un fichier : premier descripteur libre
Fermeture d'un fichier : libération du descripteur
Exercice
•
Écrivez un programme C qui génère les n premiers nombres entiers (n est un paramètre de la ligne de commande), les « injecte » dans un tube ou un second processus affiche uniquement les nombres pairs. Duplication de descripteur : dup()
• int dup(int oldfd);
• Duplique oldfd sur le premier descripteur libre
• Les deux descripteurs partagent la même entrée :
• Un accès sur l'un fait avancer le pointeur de l'autre
• int dup2(int oldfd, int newfd);
• Duplique oldfd sur newfd
Exercice: réécrire “cat” qui consomme l’entrée standard ou s’il existe, le fichier dont le nom est passé en paramètre