cours unix finale

publicité
SYSTEME D EXPLOITATION UNIX
Chapitre 1 : système d’exploitation ?
Chapitre 2 : Le système de fichiers
Chapitre 3 : SHELL
Chapitre 4 : Les processus
Chapitre 5 : Quelques outils supplémentaires
Chapitre 6 : Communications sous Unix
Chapitre 7. UNIX et Scripts
1
Chapitre 1 : système d’exploitation ?
1.1 Système informatique: le matériel
1.2 Système informatique: le logiciel
1.3 Objectifs d’un système d’exploitation
1.4 Système multitâche et multi-utilisateur
1.5 Exemple de catégories de systèmes informatiques
1.6 Système d’exploitation Unix
1.7 Historique d’Unix
1.8 Conclusion
2
1.1 Système informatique: le matériel
•
•
•
L’objectif d’un système informatique est d’automatiser le traitement de l’information.
Un système informatique est constitué de deux entités: le matériel et le logiciel.
Côté matériel, un ordinateur est composé de:
o L’Unité Centrale (UC) pour les traitements
o La Mémoire Centrale (MC) pour le stockage
o Les Périphériques: disque dur, clavier, souris, carte réseau... accessibles via des pilotes de
périphériques
1.2 Système informatique: le logiciel
•
Côté logiciel, un système informatique est composé de deux niveaux bien distincts: le système
d’exploitation et les applications.
o L’objectif du logiciel est d’offrir aux utilisateurs des fonctionnalités adaptées à leurs besoins.
o Le principe est de masquer les caractéristiques physiques du matériel.
o La solution consiste à structurer en couches le logiciel, chacune offrant des services de plus
en plus évolués au niveau supérieur.
Cette abstraction logicielle du matériel s’appelle machine virtuelle.
3
1.3 Objectifs d’un système d’exploitation
•
•
Les deux objectifs majeurs d’un système d’exploitation sont :
1. Transformer le matériel en une machine utilisable, c.-à-d. fournir des outils adaptés aux
besoins des utilisateurs indépendamment des caractéristiques physiques,
2. Optimiser l’utilisation des ressources (matérielles et logicielles).
Ces deux objectifs doivent être atteints en garantissant un bon niveau en:
o Sécurité: intégrité, contrôle des accès, confidentialité...,
o Fiabilité: satisfaction des utilisateurs même dans des conditions hostiles et imprévues,
o Performance du système informatique.
1.4 Système multitâche et multi-utilisateur
•
•
•
Un système d’exploitation multitâche ré-attribue périodiquement (quantum de temps de l’ordre du
centième de seconde) l’UC à une tâche (exécution d’un programme) différente dans le but de faire
progresser l’exécution de plusieurs programmes à la fois.
o La notion d’ordonnancement de tâches est alors apparue.
o L’utilisateur a l’impression que plusieurs programmes sont exécutés « simultanément ».
A contrario, un système d’exploitation monotâche exécute une commande uniquement lorsque la
précédente est terminée.
Un système multitâche peut permettre à plusieurs utilisateurs de travailler simultanément, il est
alors dit multi-utilisateur.
o Le système d’exploitation alloue chaque quantum de temps à des programmes de différents
utilisateurs.
o Ainsi tous les utilisateurs ont l’impression de travailler simultanément (c’est le temps
partagé).
1.5 Exemple de catégories de systèmes informatiques
•
•
•
Ordinateurs individuels anciens (catégorisation volontairement obsolète) :
o Matériel: PC, MacIntosh...
o Système d’exploitation: DOS, Windows 3.1, Mac OS...
o Mono-utilisateur et monotâche (ou forme limitée de multitâche)
Systèmes informatiques à temps partagé
o Matériel: Stations de travail, Mini, PC...
o Système d’exploitation: Unix, VMS, Windows NT/2000/XP/Vista..., Mac OS X...
o Multi-utilisateur et multitâche.
Systèmes informatiques spécialisés
o Matériel et logiciel spécifiques
Temps réel: robots, contrôle de processus industriels, systèmes informatiques
embarqués...
Transactionnel: réservation de places, service après-vente...
1.6 Système d’exploitation Unix
•
Unix est un système d’exploitation multitâche et multi-utilisateur structuré en couches, garantissant
sa portabilité (existence sur presque toutes les matériels).
4
o
o
o
o
Le noyau Unix contient les principales fonctionnalités du système.
La bibliothèque C fait l’interface entre le noyau et les programmes utilisateurs.
Unix fournit une interface homme / machine très puissante appelée shell mais aussi des
interfaces graphiques.
Unix fournit de nombreux outils (en standard et dans le domaine public).
1.7 Historique d’Unix
• 1960+ Il y a beaucoup de débats sur les mérites des différents langages de programmation (PL/1,
APL, Simula, ALGOL 60, COBOL, FORTRAN, etc.). À l'Université de Londres et de Cambridge, le
langage BCPL (Basic Combined Programming Language) est créé. Des recherches sur les concepts de
temps partagé, de traitement interactif (par opposition au traitement par lots), de pagination et de
protection de la mémoire, d'ordonnancement des travaux et de structure de fichiers sont débutées.
• 1967 Dennis Ritchie quitte Harvard pour travailler aux Laboratoires Bell dans le New Jersey.
• 1968 Ken Thompson quitte Berkeley, où se faisaient déjà des recherches sur un nouveau système
d'exploitation (SDS930), pour se joindre à une équipe de spécialistes qui avaient travaillé sur les
systèmes Multics (Cambridge Multiple Access System) et GE 645.
• 1969 Thompson et Ritchie produisent la première édition d'un système à usager unique sur un PDP
7. C'est un système primitif qui ne comporte qu'un assembleur et un chargeur.
• 1970 La primitive « fork » est ajoutée pour permettre la création de processus et des programmes
utilitaires pour la gestion des fichiers sont produits (deuxième édition). Le système accepte alors
deux usagers et Thompson le baptise UNIX. Ken Kernighan avait, un jour, fait référence au système
par: « Uniplexed Information and Computing System » (UNICS) par opposition à MULTICS
(Multiplexed Information and Computing System).
• 1971 Le système est transporté sur un PDP 11/20 et un système de traitement de textes (roff) est
produit pour le service des brevets des Laboratoires Bell (le premier utilisateur extérieur de UNIX).
Thompson et Ritchie publient la première documentation du système. C'est la troisième édition.
• 1972 UNIX est amélioré en lui ajoutant la notion de relais (pipe). Thompson développe le langage B
(un descendant de BCPL) et réécrit l'assembleur du système en B. C'est un compilateur qui produit
du code interprétable, peu performant et Ritchie produit un générateur de code pour le PDP 11.
C'est le langage C. Il existe à l'époque environ 20 sites utilisant le système UNIX.
• 1973 UNIX est réécrit en langage C (quatrième édition). Il fonctionne alors sur un ordinateur avec un
disque rigide de 500K et peut supporter environ cinq usagers. Thompson se charge de la gestion de
processus tandis que Ritchie s'occupe de la gestion des entrées/sorties.
• 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
somme modique par AT&T.
• 1977 Près de 500 sites utilisent UNIX. Une nouvelle version pour un ordinateur Interdata 8/32 est
produite. Le langage C est aussi amélioré. John Reiser et Tom London, des Laboratoires Bell, écriront
UNIX 32V pour le VAX 11/780. C'est un descendant de cette version qui est actuellement distribué
par l'Université de Berkeley en Californie (UCB).
5
À partir de ce moment, les versions de UNIX vont se multiplier; BSD4.2 de Berkeley, A/UX de Apple
Computer, HP-UX de Hewlett-Packard, AIX de IBM, Domain/IX de Apollo Computer et SunOS de Sun
Microsystems. C'est à cette époque que débute le problème de standard.
•
•
•
•
•
•
•
•
1980 Il y a environ 100 000 sites UNIX! Le problème, c'est que personne ne supporte vraiment ce
système. Les détenteurs de licences sont laissés à eux-mêmes.
1983 AT&T annonce System V qui est complètement différent de la version de Berkeley.
1984 La cour des États-Unis brise le monopole de AT&T et l'oblige à se subdiviser. Sept compagnies
naîtront (les Baby Bells) et AT&T aura le droit de vendre des produits informatiques (de la
concurrence pour IBM). Elle décide de miser sur UNIX, produit la version 2 de System V et offre un
support complet pour le système d'exploitation et les utilitaires.
1986 AT&T annonce la version 3 de System V qui supporte RFS (Remote File Sharing).
1987 Une nouvelle version de UNIX compatible avec la version de AT&T, celle de Berkeley, de Sun et
XENIX de Microsoft est annoncée. C'est System V version 4.0 qui sera disponible à l'automne 1989.
Donc deux versions vont subsister: System V 5.3 de AT&T et BSD 4.3 de Berkeley.
1988 Un mouvement se forme pour produire une version compétitrice de UNIX. C'est OSF (Open
Software Foundation) qui regroupe: IBM, Hewlett-Packard, BULL, SIEMENS et Apollo.
1989 Au départ, toutes les sources de UNIX étaient disponibles, donc beaucoup de gens ont pu
contribuer à son expansion. Avec la commercialisation du système par AT&T, les sources n'étaient
offertes qu'à des prix exorbitants. Le projet GNU (GNU's not UNIX) a pour objectif (entre autres) de
remettre UNIX dans le domaine public. Sur une base de volontariat, les participants au projet GNU
produisent du code UNIX disponibles gratuitement.
1991 Linus Torvalds, étudiant à l'université d'Helsinki (Finlande) installe le système Minix sur son
i386. Le système s'avérant trop limité pour Linus, il décide d'aller plus loin sur la base de ce qui
existe... Linux (Linus' UNIX, l'UNIX de Linus) 0.0.1 est né au mois d'août 1991. Linus lance alors un
appel à contribution, et permet donc un libre accès au code source.
Cette version permet de faire tourner quelques applications GNU (logiciels libres) essentielles
comme le compilateur gcc ou le shell bash. Linus prend la décision de mettre le code source sous
licence GPL : tout le monde peut alors participer au développement de Linux.
•
1991-94 Le développement anarchique de Linux ne lui permet pas, au départ, de devenir un système
compétitif face aux autres systèmes du marché. Son point faible réside dans son système de fichiers
hérité de Minix. Seule l'intégration à Linux du Second Extended Filesystem (ext2fs), conçu par Rémi
Card à partir du système de fichiers de BSD, permet d'en faire un système fiable. Ext2fs offre enfin
les performances et les services de systèmes de fichiers professionnels. Il devient naturellement un
standard.
La présence dans le processus de développement de développeurs venant de nombreux horizons
permet à Linux d'exister sur de nombreuses plates-formes (Mac, Atari, Amiga, Alpha) autres que sa
plate-forme d'origine (Intel). Petit à petit, Linux devient un système UNIX complet compatible avec
les autres systèmes UNIX, offrant toujours plus de services de qualité professionnelle au plus grand
nombre.
•
1995 L'explosion d'Internet donne un second souffle au développement de Linux: non seulement
pour permettre à la communauté des développeurs de Linux de continuer à s'étendre, mais aussi et
surtout pour donner à Linux une existence réelle sur le marché des systèmes d'exploitation. Ainsi,
ses qualités d'OS libre (et gratuit), robuste et performant font qu'il est choisi par de plus en plus de
fournisseurs d'accès à Internet. Il est ainsi devenu aujourd'hui le leader sur le marché de
l'hébergement de sites Web.
6
Parallèlement, l'apparition et le développement de sociétés privées telles que RedHat, Caldera ou
VA Linux donne une envergure jusqu'alors inconnue à Linux: les distributions deviennent de plus en
plus conviviales et simples à installer, et des services professionnels sont mis en place pour faciliter
l'implantation de Linux dans les entreprises.
•
•
1996 Linux commence à faire parler de lui dans les média. Red Hat Linux est élu meilleur OS par
InfoWorld. Début du projet KDE : on commence à développer des projets conviviaux pour le grand
public.
1999 Linux est présenté comme une alternative au système Windows de Microsoft dans le domaine
des serveurs. Linux est présent sur 35% des serveurs d'entreprises. Les salons Linux se multiplient et
l'on observe une multiplication des revues spécialisées.
1.8 Conclusion
•
Les principaux mots clefs vus dans cette section sont:
o Unité centrale, mémoire centrale, périphériques
o Structuration logicielle en couches, système d’exploitation, applications
o Tâche, multitâche, multi-utilisateur, temps partagé
o Unix, noyau, langage C, GNU/Linux, distribution
7
Chapitre 2 : Le système de fichiers
2.1 Système de fichiers
2.2 Commandes de positionnement dans l’arborescence
2.3 Concept de l’inode
2.4 Fichiers ordinaires
2.5 Fichiers spéciaux: périphériques et pseudo-périphériques
2.6 Répertoires
2.7 Manipulations élémentaires
2.8 Droits d’accès
2.9 Conclusion
8
2.1 Système de fichiers
•
•
Un élément de l’arborescence est repéré par son nom précédé de
o Son chemin « absolu » et unique depuis la racine commençant par « / »
Par exemple: /mci/inf/bouillet/src/prog.c
o Son chemin « relatif », par rapport au répertoire courant
Par exemple: src/prog.c, prog.c...
Remarquez le double rôle de « / »
o Au début du nom absolu pour indiquer la racine de l’arborescence
o Ailleurs comme séparateur de répertoires
2.2 Commandes de positionnement dans l’arborescence
•
Dans une fenêtre de terminal, essayez les commandes suivantes:
o pwd: affiche le nom absolu du répertoire de travail
o cd: change le répertoire de travail
Avec argument: nom du répertoire destination (en absolu ou en relatif)
Sans argument: retour au répertoire de connexion
o ls: liste les entrées d’un répertoire
Sans argument: les entrées du répertoire de travail
Avec arguments: les entrées repérées par les arguments
Par exemple, ls, ls /, ls /usr, ls .bashrc
Dans la commande précédente (ls .bashrc), le fichier dont le nom commence par un
point (« . ») est appelé un fichier caché
La commande ls possède de nombreuses options: par exemple, -a pour visualiser les
fichiers cachés, -l pour tous les attributs (type, droits, liens physiques, propriétaire,
groupe, taille, date, nom)
2.3 Concept de l’inode
•
•
•
L’arborescence contient 3 types d’éléments:
o Des répertoires qui sont des sortes de dossiers ou classeurs;
o Des fichiers ordinaires contenant une suite séquentielle d’octets;
o Des fichiers spéciaux repérant les périphériques.
Le système d’exploitation possède une vision uniforme de ces entrées grâce au concept d’Inode
Un inode contient ces informations:
o Type (fichier, répertoire...)
9
o
o
o
o
•
Identité du propriétaire et du groupe
Droits d’accès
Dates de modification...
Autres (taille, liens, adresses...)
Un système de fichiers est structuré en 4 zones comme suit:
2.4 Fichiers ordinaires
•
•
•
•
Un fichier ordinaire ne possède aucune structure particulière:
c’est une suite d’octets stockée dans des blocs de données.
Dans le système de fichiers de GNU/Linux Ext2, les adresses de ces blocs de données sont organisées
dans l’inode du fichier comme suit:
o Dix adresses directes pour les 10 premiers blocs;
o Une adresse indirecte à un niveau d’indirection;
o Une adresse indirecte à deux niveaux d’indirection;
o Une adresse indirecte à trois niveaux d’indirection.
Ext3 ajoute la journalisation du système de fichiers à Ext2.
Ext4 permet d’étendre la description des inodes.
Voici les commandes de base pour consulter le contenu d’un fichier de texte:
o cat fich, less fich, more fich: affichage simple et page par page;
o head fich, head -n fich: affichage des n premières lignes;
o tail fich, tail -n fich: affichage des n dernières lignes;
o wc fich: affichage du nombre de lignes, de mots, de caractères
Options -l, -w et -c pour les nombres de lignes, de mots et de caractères.
2.5 Fichiers spéciaux: périphériques et pseudo-périphériques
•
Un périphérique est un matériel (physique) connecté à l’unité centrale d’un ordinateur: disque,
souris, écran, réseau...
o Les périphériques sont repérables par un nom dans l’arborescence (sous /dev).
10
Un pilote de périphériques est une fonction du système d’exploitation permettant de
manipuler une catégorie de périphériques via les opérations classiques autorisées par les
inodes: open, read, write, close.
Un pseudo-périphérique est une entrée gérée comme un périphérique bien que non associée à un
élément physique.
o La première utilisation est le repérage de périphériques dits virtuels, c.-à-d. des parties de
périphériques (physiques), par exemple: les écrans virtuels de l’écran (physique), les
partitions (logiques) du disque (physique)...
o La seconde utilisation est la mise en évidence de fonctionnalités du système d’exploitation
dans l’arborescence, par exemple: la « poubelle » qui a pour nom /dev/null.
o
•
2.6 Répertoires
•
•
•
•
Le contenu d’un répertoire est un catalogue qui met en correspondance des noms de fichiers, de
sous-répertoires avec des numéros d’inode.
Dès la création par la commande mkdir rep, deux entrées existent:
o La référence au répertoire parent (du répertoire créé) noté « .. »
o La référence (autoréférence) au répertoire lui-même noté « . »
Pour supprimer un répertoire, il faut qu’il soit « vide », ne contenir que « .. » et « . ».
La suppression s’effectue avec la commande rmdir rep.
11
2.7.1 Copie d’un élément
•
La copie d’une entrée de l’arborescence s’effectue avec la commande cp (copy).
o
Pour un fichier, un nouvel inode est créé et les blocs de données dupliqués.
2.7.2 Renommage ou déplacement d’un élément
•
Le renommage et le déplacement d’une entrée de l’arborescence s’effectue avec la commande mv
(move).
o
o
o
Le renommage consiste simplement à modifier le nom de l’entrée dans le contenu du
répertoire.
Le déplacement consiste à supprimer l’entrée du répertoire d’origine et à insérer une
nouvelle entrée dans le répertoire destination.
Les blocs de données ne sont en aucun cas déplacés.
12
2.7.3 Concept de lien physique
•
•
Un lien dit physique est une relation entre un répertoire et un fichier: plusieurs liens sur une entrée
signifie donc plusieurs repérages dans l’arborescence du même inode et du même contenu.
Il est possible de créer un nouveau lien sur une entrée déjà existante avec la commande ln (link).
•
o Une nouvelle entrée dans le répertoire R2 est créée.
L’inode 1953 est accessible à partir de R1 et de R2 par les noms fbis et lien, respectivement.
2.7.4 Suppression d’une entrée dans l’arborescence
•
•
Supprimer une entrée d’un répertoire correspond à la suppression d’un lien.
La suppression d’une entrée s’effectue avec la commande rm (remove)
•
Il reste un lien pour accéder à l’inode 1953, les blocs ne sont donc pas libérés.
•
La suppression du dernier lien provoque la libération du bloc inode et des blocs de données.
13
2.7.5 Concept de lien symbolique
•
•
•
Un lien physique utilisant un numéro d’inode, il se limite à la même partition.
Pour traverser les limites des partitions, Unix introduit des liens dits symboliques.
La création d’un lien symbolique s’effectue avec l’option -s de la commande ln.
•
•
Un nouvel inode est créé dans la partition d’origine.
Cet inode contient le nom (absolu ou relatif) de l’élément pointé, au lieu d’un numéro d’inode.
2.8 Droits d’accès
•
•
•
À tout élément de l’arborescence sont associés trois droits d’accès:
o En lecture: r pour read
o En écriture: w pour write
o En exécution: x pour execute
Pour trois catégories d’utilisateurs
o Le propriétaire: u pour user
o Le groupe: g pour group
o Les autres: o pour others
Un groupe est un ensemble d’utilisateurs ayant les mêmes droits d’accès par rapport aux
fichiers d’un utilisateur.
Par exemple: rwx r-x r-- s’interprète comme ceci:
o Lecture, écriture et exécution autorisées pour le propriétaire
o Lecture et exécution autorisées pour le groupe
o Lecture seule autorisée pour les autres
2.8.1 Modification des droits d’accès
•
Les droits sont modifiables avec la commande chmod (change mode):
o Méthode 1: valeur numérique calculée sur le poids de r, w et x pour chaque catégorie:
r = 4, w = 2 et x = 1
o Par exemple:
chmod 741 fichier
rwx r-- --x
chmod 600 fichier
rw- --- --o Méthode 2: valeur littérale:
Catégories: u, g, o ou tous (a = all = ugo)
14
Opérations: ajout (+), retrait (-) ou affectation (=)
Droits: r, w, x et d’autres (t, s...)
Par exemple: (fichier avec les droits rw- --- ---)
chmod g+r fichier
rw- r-- --chmod ug+x fichier
rwx r-x --chmod a=r fichier
r-- r-- r-chmod u+wx fichier
rwx r-- r-chmod go-r fichier
rwx --- --2.8.2 Droits d’accès: cas particuliers
•
•
•
•
Toute opération sur une entrée est contrôlée à partir des droits r, w et x.
La création, le renommage, le déplacement et la suppression, d’une entrée dans un répertoire sont
contrôlées par le droit w des répertoires.
o Pour la création, il faut avoir le droit de modifier le contenu du répertoire pour ajouter une
entrée.
o Pour le renommage et le déplacement, il faut avoir le droit de modifier le contenu du
répertoire pour modifier le nom d’une entrée ou/et ajouter une entrée.
o Pour la suppression, il faut avoir le droit de mettre le numéro d’inode à zéro.
Pour un répertoire, le droit x autorise la traversée et le positionnement dans celui-ci.
o Pour garder confidentiel le contenu d’un répertoire, un utilisateur enlève le droit r pour les
autres ou le groupe ou lui-même.
o Pour empêcher de se déplacer dans une partie de son arborescence, un utilisateur enlève le
droit x au répertoire à la racine de cette arborescence.
Pour un fichier spécial, le droit x n’a pas de signification.
2.8.3 Masque de création pour les droits d’accès
•
•
•
Les droits par défaut à la création d’une entrée sont affichables avec la commande umask (user mask
).
o umask affiche les droits à retirer dans un masque.
o En standard, les entrées sont créés avec les droits rwx r-x r-x.
o Dans ce cas, la commande umask donne la valeur 0022:
Le premier 0 indique que les chiffres sont en octal (base 8).
Le second 0 indique qu’aucun droit pour l’utilisateur n’est retiré, donc rwx.
Le 2 indique que le droit w (2) est retiré pour le groupe et les autres, donc r-x.
Bien sûr, les utilitaires, par exemple l’éditeur de texte emacs, peuvent restreindre encore les droits,
par exemple en enlevant le droit x à un fichier de texte.
Il est possible de modifier ces droits par défaut à la création en appelant la commande umask avec
en argument le nouveau masque:
o Entre les valeurs 022 et 077.
Bien sûr, l’action est valable pour les éléments créés ensuite, sans effet rétroactif sur les fichiers déjà créés.
2.9 Conclusion
•
En résumé, les principaux mots clefs sont les suivants:
o Système de fichiers, structure d’un système de fichiers, partition, disque logique;
o Arborescence, racine, nom absolu / relatif, répertoire de travail courant, répertoire de
connexion, fichier caché;
o Inode, fichier ordinaire, répertoire, fichier spécial, (pseudo-)périphérique;
15
Liens physique / symbolique;
Droits d’accès, types de droits, catégories d’utilisateurs, masque de création.
Les principales commandes étudiées dans cette section sont les suivantes:
o pwd, cd, ls;
o cat, more, head, tail, wc;
o mkdir, rmdir;
o cp, mv, ln, rm;
o chmod, umask.
o
o
•
16
Chapitre 3 : SHELL
3.1 Shell Unix
3.2 Concept de redirection de la sortie standard
3.3 Concept de tube
3.4 Exécution séquentielle, regroupement et imbrication de commandes
3.5 Désactivation de l’interprétation de caractères spéciaux
3.6 Méta-caractères pour l’interprétation des noms de fichiers
3.7 Historique
3.8 Concept de variable
3.9 Concept d’alias de commande
3.10 Configuration du shell
3.11 Conclusion
17
3.1 Shell Unix
•
•
•
À la connexion dans un terminal, l’utilisateur est mis en relation avec un interpréteur de commandes
(interface de dialogue homme/machine), appelé shell en Unix.
Le shell choisi dans ce cours est le bash: bourne again shell, apparu avec GNU/Linux.
Le shell possède un double rôle:
o C’est d’abord un interpréteur de commandes exécutant la boucle infinie suivante:
1. Affichage de l’invite de commande ou prompt (« $ ») d’attente de lecture au clavier.
2. Lecture d’une commande (validée par RETURN ou ENTRÉE).
3. Analyse syntaxique (découpage en mots).
4. Interprétation des caractères spéciaux.
5. Exécution de la commande et retour au début.
o Le shell est aussi un langage de programmation gérant des variables.
3.2 Concept de redirection de la sortie standard
•
•
•
•
•
À la connexion, le shell dispose de trois flots de communication:
o Entrée standard: stdin (numéro 0)
o Sortie standard et erreur standard: stdout et stderr (numéros 1 et 2)
L’association par défaut de ces flots est l’écran pour stdout et stderr, et le clavier pour stdin.
Une redirection est une modification de l’une ou de l’autre de ces associations.
o Elle est valable uniquement le temps de la commande sur laquelle elle porte.
Ainsi, la redirection de la sortie standard permet de récupérer le résultat dans un fichier: commande
> nom_fich. Par exemple,
Ceci est valable aussi pour la sortie sur l’erreur standard avec un « 2 » devant le « > »: commande 2>
nom_fich.
3.2.1 Redirection double de la sortie standard
•
Attention, avec « > », si le fichier de redirection existe, son contenu initial est perdu.
•
La redirection double (commande » nom_fich) permet de ne pas détruire le fichier existant, mais
ajoute le nouveau contenu en fin de fichier.
•
Avec « » », si le fichier n’existe pas, il est créé, comme pour une redirection simple.
18
3.2.2 Redirection de l’entrée standard
•
•
•
Moins utilisée que la redirection de la sortie standard, la redirection de l’entrée standard
(commande < nom_fich) permet à une commande d’utiliser comme données le contenu d’un fichier
à la place d’une lecture clavier.
Les exemples d’utilisation sont moins évidents.
Exemple avec la commande write:
o Envoi d’un message depuis l’entrée standard:
o
Envoi d’un autre message cette fois à partir d’un fichier message:
3.3 Concept de tube
•
•
•
•
Un tube (pipe) est une zone mémoire permettant à deux processus d’une même machine de
communiquer tout en étant synchronisés.
o L’écrivain attend une place disponible pour écrire.
o Le lecteur attend une information disponible à la lecture.
L’objectif d’utiliser un tube est de faire agir une commande sur le résultat d’une autre sans fichiers
intermédiaires.
Le symbole « | » placé entre deux commandes redirige la sortie standard de la première sur l’entrée
standard de la seconde.
Cela évite des entrées/sorties disques plus coûteuses:
3.4 Exécution séquentielle, regroupement et imbrication de commandes
•
Exécution séquentielle: le séparateur « ; » permet d’enchaîner des commandes sans relation entre
elles.
•
Regroupement: (...) permet de considérer les commandes incluses comme une seule pour un tube
ou une redirection.
•
Imbrication: entre « $( » et « ) » ou entre anti-quotes « ‘ », la commande à exécuter est remplacée
par son résultat.
o Cela permet d’utiliser le résultat d’une commande comme argument d’une autre.
19
3.5 Désactivation de l’interprétation de caractères spéciaux
•
Entre simple quotes (« ’ ») les caractères spéciaux ne sont pas interprétés par le shell mais
deviennent de simples caractères.
o Cela permet d’utiliser les caractères spéciaux dans les arguments.
•
Avec le caractère anti-slash « \ » le caractère (spécial) qui le suit n’est pas interprété.
•
Si on veut mélanger des caractères spéciaux, des variables, des commandes..., il faut utiliser les
guillemets (« " »).
o Seuls sont interprétés les méta-caractères « $ » (commandes et variables), « \ » (annulation)
et « ‘ » (commandes).
o
Avec de simples quotes, $(pwd) ne serait pas interprété.
3.6 Méta-caractères pour l’interprétation des noms de fichiers
•
•
•
•
Les caractères dits « Jokers » servent à référencer des noms de fichiers:
o «*»
une chaîne de caractères quelconque (même vide);
o «?»
UN caractère quelconque;
o [...] UN caractère quelconque dans l’ensemble défini entre « [ » et « ] »;
o [!...] UN caractère quelconque hors de l’ensemble.
Un ensemble est défini par une liste de caractères ([adefgw]) ou un intervalle ([0-9]) ou toute
combinaison des deux ([ab0-9A\;]).
Par exemple,
o *.c
noms suffixés .c
o *.[csp]
noms suffixés .c, .s ou .p
o [!0-9]*
noms ne commençant pas par un chiffre
Le caractère tilde (« ~ ») permet de repérer un nom de connexion:
o « ~ » seul pour le répertoire de connexion de l’utilisateur;
o ~nom pour le répertoire de connexion de l’utilisateur nom;
Par exemple, ls ~domy/public liste le sous-répertoire public de domy.
3.7 Historique
•
•
•
•
•
Le shell bash enregistre toutes les commandes tapées et permet de les rappeler pour les ré-exécuter
soit telles quelles, soit modifiées.
La commande history permet de lister le contenu de l’historique des commandes, de façon
numérotée.
Le caractère ! permet de rappeler une commande.
o !!
rappelle la dernière commande
o !n
rappelle la commande numéro n
o !chaine
rappelle la dernière commande commençant par chaine
On peut aussi utiliser les flèches haut et bas pour naviguer dans l’historique des commandes.
Le shell bash permet aussi d’utiliser les codes de contrôle de l’éditeur de texte sélectionné par
défaut dans votre configuration (echo $EDITOR, pour le connaître). Si cet éditeur est emacs,
o CTRL-P et CTRL-N pour récupérer la commande précédente (previous) et suivante (next);
20
o
CTRL-R puis une chaîne de caractères pour rappeler une commande contenant cette chaîne.
3.8 Concept de variable
•
•
•
•
•
•
Le nom d’une variable commence par une lettre ou le souligné (« _ ») suivi de lettres, chiffres et
« _ ».
Affectation d’une variable par nom_var=valeur: mois=janvier.
Attention ! pas d’espace autour du « = ».
Utilisation d’une variable par $nom_var: echo $mois.
Affichage de la liste des variables avec la commande set.
Suppression d’une variable avec la commande unset: unset mois
Quelques variables prédéfinies:
o HOME: répertoire de connexion (cd et cd ~ sont égales à cd $HOME)
o PATH: liste des répertoires de recherche des commandes séparés par « : »
L’ordre des répertoires est significatif, ce qui permet le choix de la version d’une
commande.
o PS1: invite de commande (par défaut « $ »)
o PS2: invite de commande de continuation (par défaut « > »)
o IFS: séparateurs de mots (par défaut, espace, tabulation et NEWLINE)
o PWD: répertoire courant
3.9 Concept d’alias de commande
•
•
Un alias sert à (re)définir le nom d’une commande.
Cela sert à créer des mnémoniques, des noms abrégés...
3.10 Configuration du shell
•
•
•
•
Comme la plupart des logiciels importants, le shell utilise des fichiers de configuration. Ceux-ci sont
exécutés au démarrage du shell.
Il existe 2 niveaux de configuration pour le shell: paramétrage global pour le site et paramétrage
individuel pour un compte utilisateur.
o /etc/profile est un fichier maintenu par l’administrateur pour la configuration par défaut des
comptes sur une machine.
o ~/.bash_profile, ~/.bash_login, ~/.bashrc et ~/.profile sont des fichiers maintenus par
l’utilisateur pour paramétrer son compte.
On y trouve des affectations de variables: PATH, MANPATH, PS1..., des (re-)définitions d’alias, le
positionnement de l’umask...
La commande set permet de modifier les valeurs par défaut des options du shell :
o set -o emacs: positionne emacs comme éditeur de ligne de commande de bash pour en
utiliser les raccourcis clavier:
21
o
CTRL-A et CTRL-E pour le début et la fin (end) de ligne;
CTRL-D pour la suppression du caractère sous le curseur (delete).
set -o ignoreeof: plus de déconnexion par CTRL-D, mais utiliser exit
3.11 Conclusion
•
•
•
En résumé, les principaux mots clefs sont les suivants:
o bash, interpréteur de commandes, langage de programmation, algorithme du shell
o Redirections (doubles) de la sortie standard et de la sortie d’erreur standard
o Tube, imbrication, regroupement, exécution en séquence de commandes
o Caractères spéciaux, méta-caractères, annulation de l’interprétation, jokers
o Historique
o Variable (prédéfinie), invite de commande, chemin d’accès aux programmes du système
d’exploitation
o Alias
Les principales commandes étudiées dans cette section sont les suivantes:
o history, alias, unalias, set, unset
Les principaux méta-caractères étudiés dans cette section sont les suivants:
o « > », « >> », « 2 > », « < », « | », « ’ », « \ », « $( » avec « ) », « ‘ », « " », « * », « ? », « [ »
avec « ] », « ! », « - », « ~ », « ; », « ( » avec « ) », « # » et « = »
22
Chapitre 4 : Les processus
4.1 Caractéristiques d’un processus
4.2 Arborescence des processus
4.3 Commande ps
4.4 Commandes pstree et top
4.5 Processus en avant-plan et en arrière-plan
4.6 Suspension et reprise d’un processus
4.7 Suppression d’un processus
4.8 Vision utilisateur des états d’un processus
4.9 Shell et processus
4.10 Conclusion
23
4.1 Caractéristiques d’un processus
•
•
•
Un processus est un programme en cours d’exécution. Un processus a besoin de ressources
matérielles: l’unité centrale, la mémoire centrale et l’accès à des périphériques d’entrées/sorties.
Ses caractéristiques statiques, c’est-à-dire ne variant pas au cours de sa vie, sont:
o Un numéro unique: PID (Process IDentifier),
o Un propriétaire déterminant les droits d’accès du processus aux ressources : ouverture de
fichiers...
o Un processus parent dont il hérite la plupart des caractéristiques,
o Un terminal d’attache pour les entrées/sorties.
Ses caractéristiques dynamiques sont:
o Priorité, environnement d’exécution...
o Quantité de ressources consommées (temps unité centrale utilisé...)
4.2 Arborescence des processus
•
Un processus est toujours créé par un autre processus appelé processus parent.
o Ainsi tout processus a un processus parent sauf le tout premier. Ce tout premier processus
est appelé init et son identifiant est égal à 1 (PID = 1).
•
Deux types de processus existent:
o Les processus utilisateurs, tous issus du shell de connexion;
o Les processus « démons »:
« démon » est une traduction abusive de daemon signifiant deferred auxiliary
executive monitor.
Ces processus daemon assurent un service et sont souvent lancés au démarrage de
la machine.
Les principaux services assurés par des processus daemon sont l’impression, les
tâches périodiques, les communications, la comptabilité, le suivi de tâche.
4.3 Commande ps
•
•
La commande ps affiche les caractéristiques des processus à un instant donné.
Par défaut, ps affiche les processus de l’utilisateur.
4.4 Commandes pstree et top
•
•
La commande pstree permet de visualiser l’arborescence des processus.
La commande top permet de visualiser dynamiquement les caractéristiques des processus
(l’affichage est actualisé périodiquement).
o En plus des informations sur les processus, top donne des indicateurs sur l’état du système:
occupation de la mémoire, de l’unité centrale...
o top montre l’évolution de ces indicateurs en « temps réel ».
4.5 Processus en avant-plan et en arrière-plan
•
Par défaut, une commande s’exécute en avant-plan (en anglais foreground).
o Par exemple, l’utilisateur saisit date.
o Le shell crée un processus enfant et attend qu’il se termine.
24
•
•
•
•
o Le processus enfant exécute la commande date.
Les processus parent et enfant s’exécutent séquentiellement (l’un après l’autre).
Une seule commande est donc exécutée à la fois.
Une commande peut aussi s’exécuter en arrière-plan (en anglais background).
o Utilisation du caractère « et » commercial (« & ») à la fin d’une commande
o Par exemple, l’utilisateur saisit date&.
o Le shell crée un processus enfant et n’attend pas qu’il se termine.
o Le processus enfant exécute la commande date.
Les deux processus, parent et enfant, s’exécutent alors « simultanément ».
4.5 Processus en avant-plan et en arrière-plan
•
•
•
•
•
Par défaut, une commande s’exécute en avant-plan (en anglais foreground).
o Par exemple, l’utilisateur saisit date.
o Le shell crée un processus enfant et attend qu’il se termine.
o Le processus enfant exécute la commande date.
Les processus parent et enfant s’exécutent séquentiellement (l’un après l’autre).
Une seule commande est donc exécutée à la fois.
Une commande peut aussi s’exécuter en arrière-plan (en anglais background).
o Utilisation du caractère « et » commercial (« & ») à la fin d’une commande
o Par exemple, l’utilisateur saisit date&.
o Le shell crée un processus enfant et n’attend pas qu’il se termine.
o Le processus enfant exécute la commande date.
Les deux processus, parent et enfant, s’exécutent alors « simultanément ».
4.6 Suspension et reprise d’un processus
•
•
•
•
Sous Unix, il est possible de suspendre le processus en avant-plan en tapant CTRL-Z.
o Le processus suspendu pourra reprendre ultérieurement.
Il existe deux façons de reprendre un processus suspendu:
o En avant-plan par la commande fg (foreground),
o En arrière-plan par la commande bg (background).
o emacs
lancement d’emacs en avant-plan
o CTRL-Z
édition suspendue
o bg
reprise de l’édition en arrière-plan
Un « job » est défini comme un processus en arrière-plan ou suspendu.
La commande jobs permet de lister ces processus.
4.7 Suppression d’un processus
•
•
•
Généralement un processus se termine à la fin de l’exécution de la dernière instruction; il est alors
détruit par le système d’exploitation.
Un utilisateur peut terminer un processus en avant-plan en tapant CTRL-C.
Un utilisateur peut aussi terminer un processus avec la commande kill envoyant un « signal » à un
processus.
o Par défaut, la commande kill envoie le signal 15 de terminaison (SIGTERM).
o
•
La commande kill peut aussi forcer la terminaison d’un processus en envoyant le signal 9 de
destruction (SIGKILL).
La commande GNU/Linux killall envoie un signal à tous les processus de même nom.
25
•
Notez que le droit de détruire un processus est réservé à son propriétaire.
4.8 Vision utilisateur des états d’un processus
•
Pour un utilisateur, un processus peut se trouver dans trois états: en exécution (exécution de la
commande), suspendu (CTRL-Z) ou terminé. Le schéma suivant récapitule les transitions permettant
de passer d’un état à un autre.
4.9 Shell et processus
•
•
Le shell est un langage de programmation dont les programmes sont appelés shell-script. En tant
que langage de programmation, le shell utilise des variables, des paramètres, des fonctions, des
structures de contrôle...
Quand le shell crée un processus pour exécuter une commande, le processus enfant hérite d’une
copie de l’environnement du processus parent.
Par défaut, les variables du processus parent ne se trouvent pas dans l’environnement. Ces variables
sont dites locales. Pour les rendre globales, c.-à-d. les mettre dans l’environnement, il faut les
exporter en utilisant export.
Il est possible d’exécuter un shell-script dans un processus enfant:
•
Il est aussi possible d’exécuter un shell-script dans le processus du shell courant:
•
•
o
o
Ceci est souvent utilisé pour prendre en compte les modifications dans les fichiers de
configuration du shell (abordés en section 6):
. .bashrc
Les fonctions « . » et source sont équivalentes pour le shell bash.
4.10 Conclusion
•
•
Les principaux mots clefs vus dans cette section sont:
o Processus, caractéristiques statiques et dynamiques, PID
o Processus parent, processus enfant, daemon
o Suspension / reprise de processus, exécution en avant-plan, exécution en arrière-plan,
suppression d’un processus
Les principales commandes vues dans cette section sont:
o ps, pstree, top
o CTRL-Z, fg, bg
o CTRL-C, kill, killall
26
Chapitre 5 : Quelques outils supplémentaires
5.1 Éditeurs de texte sous Unix
5.2 Recherche d’expression (grep) et sélection de champs (cut)
5.3 Tris (sort), fusion (paste) et éclatement (split) de fichiers
5.4 Recherche de fichiers (find)
5.5 Archivage (tar)
5.6 Autres utilitaires de gestion de l’espace de stockage
5.7 Conclusion
27
5.1 Éditeurs de texte sous Unix
•
•
•
Un éditeur de texte permet de saisir un texte brut, codé en ASCII ou Unicode, et de l’enregistrer
dans un fichier texte. Les styles offerts (souligné, italique...) sont très limités et aucune mise en
forme n’est possible.
Plusieurs éditeurs de texte sont disponibles sur Unix:
o L’éditeur Unix standard vi est très puissant mais peu convivial: le mode par défaut au
lancement est le mode « commande », le mode « saisie » n’est accessible qu’après la frappe
de la touche « a » ou « i ».
o L’autre éditeur parmi les plus populaires est emacs. Il est très puissant aussi mais plus
« gourmand » en ressources. À l’inverse du précédent, le mode « saisie » est prépondérant
sur le mode « commande » accessible par un menu déroulant et des touches de contrôle.
C’est l’éditeur que nous vous conseillons.
Des Clients XWindow permettent aussi de faire de l’édition de texte:
o kate et gedit sont les éditeurs standards de KDE et gnome respectivement. Ce sont des
versions très, voire trop, simplifiées de emacs.
5.2 Recherche d’expression (grep) et sélection de champs (cut)
•
La commande grep affiche les lignes d’un fichier de texte contenant une expression.
o Cette commande est très utilisée pour rechercher un mot donné dans un fichier.
Pour afficher les lignes contenant le mot evry du fichier /etc/hosts:
Pour afficher les lignes ne contenant pas evry, il faut utiliser l’option -v:
•
La commande cut affiche des parties de chaque ligne d’un fichier texte.
o Avec l’option -f, cut sélectionne des champs dans chaque ligne séparés par défaut avec une
tabulation et les lignes qui ne contiennent pas le séparateur sélectionné (l’option -s permet
d’ignorer ces dernières):
o
Avec l’option -c, cut sélectionne des caractères dans chaque ligne:
5.3 Tris (sort), fusion (paste) et éclatement (split) de fichiers
•
La commande sort trie les lignes d’un ou plusieurs fichiers de texte.
o Par défaut, le tri se fait suivant l’ordre lexicographique.
o Par exemple, la commande suivante trie le fichier /etc/passwd:
Un certain nombre d’options sont fournies pour modifier l’ordre du tri: -n pour tri
numérique, -r pour tri inversé, -k x pour tri à partir du champ x, -k x,y pour tri sur les champs
de x à y, -t c pour utiliser le séparateur de champs c...
La commande paste fusionne ligne à ligne des fichiers. Par exemple, la commande suivante fusionne
ligne à ligne les fichiers fic1 et fic2 en un fichier fic3:
o
•
28
•
•
La commande split éclate un fichier en plusieurs fichiers.
o Par défaut, split éclate un fichier en fichiers de 1000 lignes ayant pour nom xaa, xab...
Par exemple, pour éclater le fichier /etc/passwd en fichier(s) de 12 lignes:
5.4 Recherche de fichiers (find)
•
•
•
•
•
La commande find recherche les fichiers satisfaisant un ensemble de critères de sélection à partir
d’un répertoire.
Le principe de find est de parcourir récursivement l’arborescence du système de fichiers, et pour
chaque élément, de tester chaque critère:
o Si le critère est vérifié alors find teste le critère suivant,
o Sinon, find passe à l’élément suivant.
La syntaxe de find est la suivante:
La commande find est très utilisée, principalement pour rechercher des fichiers par nom (critère name) et affichage (critère -print).
Par exemple:
5.4.1 Recherche de fichiers (locate et which)
•
La commande locate recherche un fichier dans les « répertoires d’installation » du système
d’exploitation.
o La recherche se repose sur une base de données constituée automatiquement par le
système.
o Attention, si de nouveaux fichiers ont été ajoutés et que la base de données n’a pas encore
été mise à jour, locate ne trouvera pas ces fichiers.
o Par exemple, pour rechercher l’emplacement du fichier passwd:
•
La commande which affiche le nom absolu d’une commande en utilisant la variable PATH et les alias.
o Par exemple, pour savoir où se trouve bash:
5.5 Archivage (tar)
•
•
•
•
•
La commande tar (en anglais tape archive) sert à constituer une archive, en rassemblant en un seul
fichier une arborescence de fichiers ordinaires.
tar utilise la syntaxe suivante: tar clef [options] liste.
La clef c est utilisée pour créer une archive, t pour lister le contenu d’une archive et x pour extraire le
contenu d’une archive.
L’option v sert à obtenir un affichage (mode verbeux), f à préciser le nom de l’archive et z à
compresser ou décompresser.
Par exemple:
o Pour créer l’archive rep.tgz archivant le contenu du répertoire rep :
29
o
Pour extraire le contenu de l’archive rep.tgz:
5.6 Autres utilitaires de gestion de l’espace de stockage
•
•
Pour gagner de l’espace disque, il est utile de compresser des fichiers.
o La commande gzip compresse des fichiers.
o La commande gunzip décompresse des fichiers.
Les commandes donnant des informations sur l’occupation des disques sont:
o La commande df pour afficher l’occupation totale des disques,
o La commande quota -v pour afficher les quotas disque de l’utilisateur,
o La commande du pour afficher l’espace disque utilisé (par défaut, en nombre de blocs) par
chaque fichier récursivement.
5.7 Conclusion
•
•
Les principaux mots clefs de cette section sont:
o Utilitaire
o Recherche d’expression et sélection de champs dans un fichier de texte
o Tri, fusion, éclatement de fichiers, tri alphanumérique / numérique
o Recherche de fichiers dans une arborescence, critère de recherche
o Archivage, création / sauvegarde, extraction / restauration
o Compression, décompression de fichiers
o Espace de stockage, occupation disque, quotas
Les principales commandes de cette section sont:
o grep
o find, locate, which
o tar
o gzip, gunzip
o df, du, quota
30
Chapitre 6 : Communications sous Unix
6.1 Communication entre deux ordinateurs
6.2 Fonctionnement des logiciels de communication
6.3 Logiciels anciens non sécurisés
6.4 Le protocole SSH: les s-commandes
6.5 Applications communicant entre ordinateurs
6.6 Conclusion
31
6.1 Communication entre deux ordinateurs
•
•
•
Le système Unix facilite le transfert d’informations entre deux ordinateurs, par exemple, un
ordinateur « local », celui de la maison (ordinateur personnel) et un ordinateur « distant », celui du
lieu de travail.
Grâce à la communication entre ordinateurs, un utilisateur peut se connecter à distance pour:
o Transférer des fichiers pour, par exemple, récupérer le fichier de travail de la journée sur son
ordinateur personnel;
o Ouvrir une session sur un ordinateur distant lancée depuis son ordinateur personnel;
o Exécuter une commande à distance pour, par exemple, lancer une commande depuis son
ordinateur personnel sur un ordinateur distant.
Pour communiquer, les ordinateurs sont connectés en réseau. Deux grands types de réseaux
existent, basés en général sur la suite de protocoles TCP/IP:
o Réseaux locaux, internes aux entreprises, organismes...
o Internet.
6.2 Fonctionnement des logiciels de communication
•
•
•
Les logiciels de communications entre ordinateurs fonctionnent en mode client/serveur, c’est-à-dire
qu’un processus serveur sur l’ordinateur distant reste à l’écoute des requêtes clientes venant de
l’ordinateur local.
Pour transférer des informations, l’utilisateur doit préciser le nom de la commande, le nom de
l’ordinateur distant et le nom du compte distant.
o En général, l’utilisateur doit aussi fournir son mot de passe.
Il peut alors y avoir des problèmes de sécurité si:
o Un intrus est à l’écoute pour lire ou modifier les données transférées.
o Un imposteur se fait passer pour l’ordinateur distant et récupère les données transférées;
o Un imposteur s’interpose de manière transparente sur une connexion se faisant passer pour
le serveur d’un côté et pour le client de l’autre (attaque de type man-in-the-middle).
6.3 Logiciels anciens non sécurisés
•
•
•
•
•
Les logiciels suivants ne sont souvent plus utilisés parce qu’ils ne sont pas sécurisés.
Le programme ftp, basé sur le protocole FTP (File Transfer Protocol), permet de transférer des
fichiers. Il faut pour cela:
o Établir une connexion sur le site distant avec la commande: $ ftp nom_site
o Puis exécuter des commandes permettant le transfert de fichiers, par exemple:
get pour télécharger un fichier à partir du site distant vers l’ordinateur client,
put pour transférer un fichier à partir de l’ordinateur client vers le site distant.
o Terminer la connexion avec la commande quit.
La connexion FTP en mode anonyme permet de récupérer des fichiers sur des serveurs publics.
Le logiciel telnet permet de se connecter à distance: $ telnet nom_site
Les r-commandes, spécifiques à Unix, sont: rlogin pour se connecter à distance, rsh pour exécuter
n’importe quelle commande à distance, rcp pour transférer un fichier.
6.4 Le protocole SSH: les s-commandes
•
Le protocole SSH, Secure SHell, permet le transfert d’informations de manière sécurisée. Il existe
plusieurs commandes utilisant ce protocole:
32
o
o
•
scp et sftp pour le transfert de fichiers sécurisé,
ssh pour ouvrir une session à distance ou exécuter des commandes à distance de manière
sécurisée.
SSH fonctionne en mode client/serveur:
6.4.1 Mécanismes de sécurité de SSH
•
SSH garantit:
o l’identité du client et du serveur par des mécanismes d’authentification,
o la non-divulgation des données, c’est-à-dire la confidentialité,
o la non-modification des données, c’est-à-dire l’intégrité des données.
6.4.2 Méthodes de chiffrement pour l’authentification, la confidentialité et l’intégrité
•
•
L’authentification du serveur et du client utilise une méthode de chiffrement à clef publique.
o Le chiffrement à clef publique, appelé aussi asymétrique, utilise deux clefs, une publique et
l’autre privée liées mathématiquement.
o Par exemple, dans le cas de données transférées du client vers le serveur:
Ces données sont chiffrées par le client avec la clef publique du serveur.
Le serveur recevant les données les déchiffre avec sa clef privée.
La confidentialité et l’intégrité des données utilisent une méthode de chiffrement à clef secrète.
o Le chiffrement à clef secrète, appelé aussi symétrique, utilise une clef temporaire connue du
client et du serveur.
Le client et le serveur se mettent d’accord en début de session sur une clef; cette
clef est détruite en fin de session.
Les données transférées sont chiffrées et déchiffrées avec cette clef à la fois par le
client et par le serveur.
33
6.4.3 Lancement des commandes
•
Pour se connecter à distance, il faut utiliser la commande ssh en précisant le nom d’utilisateur sur la
machine distante et le nom de la machine distante:
•
Pour transférer un fichier avec la commande scp, il faut préciser le nom d’utilisateur sur la machine
distante et le nom de la machine distante (ici nom_hôte) ainsi que le nouveau nom du fichier.
o Copie du fichier rep1/fich1 dans rep2/fich2 sur la machine distante
o
Inversement, copie du fichier distant rep1/fich1 dans rep2/fich2
•
La commande sftp permet de se connecter à distance et de transférer des fichiers:
•
Les commandes sont identiques à celles de ftp.
La commande ssh permet aussi d’exécuter une commande à distance:
•
Toutes ces commandes demandent à l’utilisateur de saisir son mot de passe.
o
6.4.4 Concept de l’hôte connu
•
•
•
La première fois qu’un client SSH se connecte au serveur distant, il doit récupérer la clef publique du
serveur.
o L’utilisateur est informé de l’absence de la clef publique du serveur avec un message.
o Si l’utilisateur souhaite récupérer la clef publique du serveur, il doit continuer la connexion;
SSH met alors à jour le fichier ~/.ssh/known_hosts du client.
Lorsque la clef publique du serveur stockée sur le client ne correspond pas à la clef publique actuelle
du serveur, cela peut correspondre à deux cas:
o Soit le serveur a changé de clef publique et il faut mettre à jour le fichier
~/.ssh/known_hosts.
o Soit il y a une attaque de type man-in-the-middle.
Dans ces deux cas, SSH affiche un message plus insistant prévenant l’utilisateur d’une possible
attaque.
6.4.5 Authentification de l’utilisateur par clef publique *
•
•
L’authentification du client par SSH peut se faire de deux façons:
o Par mot de passe (utilisé par défaut), malheureusement « assez facilement » déchiffrable
malgré le chiffrement à clef secrète;
o Par chiffrement à clef publique, méthode plus sûre.
Pour mettre en place un chiffrement à clef publique, l’utilisateur doit placer la clef publique
correspondant à son compte local sur le compte distant. Pour cela, il doit:
o Si elle n’existe pas, générer une paire de clefs, clef publique et clef privée avec la commande
suivante générant par défaut des fichiers contenant la clef privée et la clef publique
correspondant au compte local de l’utilisateur:
o
Copier sa clé publique sur son compte distant dans le fichier ~/.ssh/authorized_keys.
34
•
•
Pour encore plus de sécurité, la clef privée de l’utilisateur peut être protégée par une phrase
d’authentification.
SSH offre, en outre, la possibilité d’exécuter un agent SSH fournissant un service d’authentification
aux clients SSH.
6.4.6 Agent SSH *
•
•
•
Lors d’une authentification de l’utilisateur par clef publique, l’utilisateur doit saisir à chaque
connexion sa phrase d’authentification.
L’agent SSH permet de ne saisir sa phrase d’authentification qu’une seule fois lors du chargement de
la clé par l’agent. Les fois suivantes, les clients SSH communiqueront directement avec l’agent.
o L’agent SSH fournit des services d’authentification aux clients.
o L’agent SSH conserve les clefs privées de l’utilisateur en mémoire.
Un agent SSH se lance, dans un processus fils, avec la commande
Il ne se terminera qu’à la demande de l’utilisateur.
Au premier appel, un agent SSH ne contient aucune clef.
L’ajout d’une clef privée gérée par l’agent se fait avec la commande: $ ssh-add.
o L’agent SSH demande alors la phrase d’authentification.
Le lancement de l’agent SSH peut être automatisé.
o
o
•
•
6.5 Applications communicant entre ordinateurs
•
•
Internet est basé sur le protocole de communication entre ordinateurs TCP/IP, IP pour Internet
Protocol.
o Les navigateurs web utilisent le protocole HTTP (HyperText Transfer Protocol) pour
transférer des pages HTML (HyperText Markup Language). HTTP s’appuie sur le protocole
TCP/IP.
o Pour l’utilisateur, l’utilisation du protocole HTTP est relativement transparente, il n’a qu’à
préciser l’adresse du site ou URL et le nom de la page web. Celle-ci est alors transférée à
partir du site web vers l’ordinateur de l’utilisateur et interprétée par le navigateur web.
Les outils pour l’envoi et la réception du courrier se basent, bien sûr, sur des protocoles de
communication entre ordinateurs comme SMTP (Simple Mail Transfer Protocol). SMTP s’appuie sur
IP. Vous utilisez les outils suivants:
o Thunderbird ou evolution,
o la page web du serveur Horde webmail.
6.6 Conclusion
•
•
Les mots clefs de cette section sont:
o Communications entre machines, réseaux locaux, Internet
o Ordinateur local, ordinateur distant
o Transfert de fichiers, exécution à distance, connexion à distance
o Mode client / serveur, sécurité
o Mécanisme de sécurité, authentification, confidentialité, intégrité
o SSH, chiffrement à clef publique, clefs privée / publique, chiffrement à clef secrète
Les principales commandes sont:
o ssh
o scp, sftp
35
Chapitre 7. UNIX et Scripts
7.1. Initialisation
7.2. Les variables d'environnement
7.3. Les caractères spéciaux du shell
7.4. Le passage des paramètres
7.5. Les entrées sorties
7.6. Les structures de contrôle
7.7. Les fonctions
7.8. Les alias
36
Le shell est un langage de programmation interprété autorisant la récursivité; mais c'est avant tout
l'interpréteur standard de UNIX. Lors de l'ouvertue d'une session, appelée login sous UNIX, un
processus shell est crée qui permet à l'utilisateur de dialoguer avec le système. Trois types de
commandes sont exécutées par le shell:
• Les commandes externes qui sont contenues dans des répertoires définis dans la variable
d'environnement PATH. Dans ce cas l'exécution de la commande est réalisé par un processus dédié
créé par le processus shell.
• Les commandes internes qui font partie du shell dont l'exécution ne nécessite pas la création de
nouveaux processus. Ces commandes peuvent être scindées en deux:
- Les commandes d'usage fréquent: cd, pwd, umask, set, …
- Les commandes composées de directives algorithmiques: if, then, else, while, case, for,
…
• Les commandes définies par une fonction ou un alias
(*) Priorité des commandes de même nom: d'abord les fonctions ensuite les commande internes et enfin les commandes
externes
Le bourne Shell est le premier shell crée et il reste celui dont tout système Unix a besoin pour lancer
les outils de configuration au démarrage de la machine. ksh, bash et zsh sont plus enrichis mais
restent compatibles avec le sh. Le csh et tcsh ont des syntaxes plus différentes de sh et très proches
de celle du langage C. L'important est qu'au moins un shell compatible avec sh existe sur une
machine UNIX.
7.1. Initialisation
Le shell exécute successivement deux fichiers avant d'afficher son caractère d'invite (par défaut $):
/etc/profile et le fichier .profile (se trouvant dans le répertoire HOME de l'utilisateur). Si la variable
ENV est définie (par un login korn shell) et si son contenu est la référence d'un fichier existant; ce
fichier est exécuté.
Exemple de .profile:
ls() #fonction ls() redéfinit ls
{
/bin/ls –al $*
}
rm() #fonction rm() redéfinit rm
{
/bin/rm –i $*
}
logout() #fonction logout() redéfinit exit
{
exit #commande interne de terminaison d'un shell
}
PS1= PS1="Mir[$LOGNAME]" #invite du shell
set -o vi #édition de l’historique en mode vi
alias p='ps -ef |sort |pg' #alias redéfinissant ps
Export PS1 #exportation de la variable d'environnement PS1
Il est très utile après une modification de .profile de faire prendre en compte son contenu sans fermer
et réouvrir une session. Ce lancement force l'exécution par le shell courant.
$. .profile
Ce tableau récapitule les différentes façons pour lancer un script shell:
Commande
Conditions sur ref
Effet
37
bash ref
ref ou ./ref
.ref
exec ref
Fichier lisible
Fichier lisible et exécutable
Fichier lisible
Fichier lisible et exécutable
Interprétation par un sous-processus bash
Interprétation par un sous-processus bash
Interprétation dans le bash courant
Recouvrement du bash par un bash non
intéractif interprétant le fichier ref
Les versions récéntes prennent en compte les premiers caractères de la procédure:
#!/bin/sh ou #!/bin/csh suivant le shell utilisé.
7.2. Les variables d'environnement
Elles sont utilisées par le shell ou le système. Certaines sont initialisées automatiquement et ne
peuvent être modifiées: HOME, LOGNAME ou USER. D'autres sont initialisées automatiquement et
peuvent être modifiées: PATH, TERM, SHELL. D'autres sont initialisées par l'utilisateur dans le
fichier .profile.
L'utilisateur a la possibilité de définir d'autres variables. Ces variables ne se déclarent pas et elles
sont locales au shell. Si on lance un autre shell la variable n'existe plus. La commande set permet de
visualiser toutes les variables d'un shell.
NomVar=valeur
affecte valeur à NomVar
$NomVar
représente le contenu de la variable.
export NomVar
export permet de répercuter une variable sur l'arborescence descendante
(shell fils).
Exemple:
Affectation des variables
$ var1=abc
$ var2="abc*toto"
$ var3=abc*toto
Affichage de variables
$ echo $var1 $var2 $var3
abc abc*toto abc*toto
Portée du métacaractère $ : utilisation de {}
$ var=toto
$ echo $vartiti
rien
$ echo ${var}titi
Tototiti
7.3. Les caractères spéciaux du shell
7.3.1. La génération des noms de fichiers
?
*
[
[!
]
-
un caractère quelconque
une chaîne de caractères (éventuellement vide)
début de définition d'un ensemble
début de définition du complément de l'ensemble
fin de définition d'un ensemble ou de son complément
marque d'intervalle dans un ensemble
Les caractères . en début de mot ou après un / ou / ne sont pas couverts par les abréviations. Les
expréssions construites à partir des caractères * ? [] sont appelées des expressions régulières.
[af69R] un caractère de la liste énumérée
38
[A-T] un caractère de l'intervalle alphabétique
7.3.2. Les autres caractères spéciaux
#
Introduit un commentaire
Introduit un nom de variable
Termine une commande lancée en arrière plan
Sépare des commandes se trouvant sur une même ligne
Caractères de redirection
Exécute une commande
Délimite une chaîne de caractères où les caractères spéciaux perdent
leur signification sauf lui-même
Délimite une chaîne de caractères où les caractères spéciaux perdent
leur signification sauf \ $ ` "
Déspécilise le caractère qui le suit
Exécuter une commande dans un shell fils
Regroupe des commandes
$
&
;
< > << >> |
``
''
""
\
()
{}
7.4. Le passage des paramètres
Le shell reçoit les arguments sur la ligne de commande sous la forme de variables $1 $2 $3 ...
$9. $0 est le nom de la commande. La commande interne shift permet de décaler les arguments
d'une position.
p1
$1
p2
$2
p3
$3
p4
$4
p5
$5
p6
$6
p7
$7
p8
$8
p9
$9
p10 p11 p12 p13 p14
p2
$1
p3
$2
p4
$3
p5
$4
p6
$5
p7
$6
p8
$7
p9
$8
p10
$9
shift
p1
p11 p12 p13 p14
Les autres variables du script correspondant à ces paramètres sont :
$#
le nombre de paramètres passés au script
$*
la liste des paramètres passés au script
$$
le PID du processus exécutant la commande
$!
le PID du dernier processus asynchrone
$?
le dernier status
7.5. Les entrées sorties
La commande read comme la commande echo peut recevoir plusieurs arguments séparés par des
espaces ou tabulations.
7.6. Les structures de contrôle
7.6.1. La commande test
test expression ou [ expression ]
39
Cette commande renvoie un code de retour égal à 0 si l'expression est vraie et une valeur différente
de 0 dans cas contraire.
[ -a fichier ] existence du fichier
[ -s fichier ] existence du fichier + taille non nulle
[ -d fichier ] existence + état de répertoire
[ -f fichier ] existence + état de fichier
[ -r fichier ] existence + autorisation de lecture
[ -w fichier ] existence + autorisation d'écriture
[ -x fichier ] existence + autorisation d'exécution
[ -n chaîne ] chaîne non nulle
[ -z chaîne ] chaîne nulle
Les chaînes de caractères
[ $var = chaîne ] égalité
[ $var != chaîne ] différence
Les expressions numériques
[ $var = valeur ]
[ $var != valeur ]
[ $var -opérateur valeur ]
opérateurs possibles :
-lt <
-le ≤
-gt >
-ge ≥
7.6.2. La commande expr
Pour évaluer une expression numérique contenant une variable, il faut utiliser la commande expr
. Les opérateurs autorisés sont + - * / %.
exemple :
[ `expr $var + 1` -gt 5 ]
a= `expr $var + 1`
remarque :
expr $var : '.*' renvoie le nombre de caractères de var
7.6.3. La condition if
if expression
then
commandes
else
commandes
fi
7.6.4. La boucle until
until expression
do
commandes
done
7.6.5. La boucle while
40
while expression
do
commandes
done
7.6.6. La condition for
for variable in liste de valeurs
do
commandes
done
7.6.7. La condition d'aiguillage case
case variable in
cas1) commandes;;
cas2 | cas3) commandes;;
…
Casn) commandes;;
esac
Les cas sont conformes à la syntaxe d'expressions régulières
7.6.8. Les directives break et continue
Ces deux directives peuvent être utilisées à l’intérieur des boucles for, while et until. Elles
peuvent être suivies d’un nombre qui correspond au nombre de niveaux d’imbrication pour lequel
les directives sont appliqués.
7.7. Les fonctions
Il est possible de déclarer une fonction dans le shell intéractif ou à l’intérieur d’un script shell.
Elles peuvent renvoyer un code de retour. A l’aide de la commande interne return. La syntaxe:
Nom_fonction() { liste de commandes }. Exemple:
isfile() {
if [ -f $f ]
then
return 0
else
return 1
fi
}
for i in $*
do
f=$i
if [ isfile ]
then
echo "$i est un fichier"
else
echo "$i n'est pas un fichier"
fi
41
done
7.8. Les alias
En bash , on peut renommer une commande:
alias nom=valeur
unalias nom
La commande alias sans arguments liste les alias déclarés. L'option –t liste ceux crées
automatiquement lorsqu’on utilise des commandes externes.
42
Rappel des principales commandes UNIX
Gestion de session, de compte, informations générales:
login
passwd
logname
who [am i]
id [a,u,g]
groups
uname[-a]
tty
stty
clear
date
cal i j
du
quota [-v]
création d'une session de travail
changer le mot de passe
afficher le login de l'utilisateur
liste des utilisateurs connectés à la machine
numéros et les noms d'identification de l'utilisateur et de son groupe
liste des groupes auxquels appartient l'utilisateur
nom de la machine, nom du système d'exploitation
afficher la référence absolue du terminal associé à l'entrée standard
visualiser et modifier la valeur de paramètres de communication entre le système et le terminal
effacer l'écran du terminal
date du jour et l'heure courante
calendrier du mois i (de 1 à 12) de l'année j (de 1 à 9999) par défaut le mois de l'année courant
fournit l'espace alloué (en nombre de blocs de 512 octets) aux différents fichiers
indique à l'utilisateur s'il est contrôlé par quotas et dans l'affirmative les valeurs limites
Gestion des processus:
ps [-e, a, d, g, p, t, u]
kill
fournit des informations sur les processus en cours
envoie un signal à un processus
Gestion de fichiers:
pwd
référence du répertoire de travail
cd
changement de répertoire de travail (~, ., ..)
ls [-l,a,i,d]
contenu d'un répertoire ou caractéristiques d'un fichier
cat
contenu d'un fichier
more
contenu par page
touch
modifier les dates de dernier accès en lecture et/ou écriture
cp[-i, r]
copie physique d'un fichier
cp ref_source ref_dest (les deux fichiers référencent un fichier ordinaire)
cp ref_source1 … ref_dest (les sources référencent des fichiers ordinaires et la destination référence
un répertoire)
cp –r ref_source1 … ref_dest (si l'un des sources et la destination référencent un répertoire)
ln
création de liens
ln ref_source ref_dest (les deux fichiers référencent un fichier ordinaire)
ln ref_source1 … ref_dest (les sources référencent des fichiers ordinaires et la destination référence
un répertoire)
mv
changement d'un nom de lien
mv ref_source ref_dest (les deux fichiers référencent un fichier ordinaire)
mv ref_source1 … ref_dest (les sources référencent des fichiers ordinaires et/ou répertoires et la
destination référence un répertoire)
rm [-r]
suppression de liens
mkdir
création d'un répertoire
rmdir
suppression d'un répertoire
chmod, chown, chgrp
modification de caractéristiques d'un nœud
D'autres commandes:
sort
trier un fichier
uniq [-c, -u] comparer des lignes de fichiers et ne conserver qu'un exemplaire de chaque ligne
paste
juxtaposer des lignes correspondantes de deux ou plusieurs fichiers
tr
copie sur la sortie standard les caractères lus sur l'entrée standard après avoir réalisé
des susbstitutions ou des suppressions de caractères définies dans les arguments
43
compress
uncompress
find
file
compression de fichiers
décompression de fichiers
rechercher dans un répertoire les fichiers d'un nom, d'un type , d'un user, …
classer le fichier ASCII, binaire, répertoire, source C, …
Fichiers administration utilisateurs:
Le fichier /etc/passwd a la structure suivante:
nom_login:x:UID:GID:commentaire:chemin_repertoire_login:chemin_shell
Le fichier /etc/group a la structure suivante:
nom_group::GID:liste_autres_utilisateurs_ayant_acces
Opérations sur les contenus de fichiers:
Sélection "verticale"
head [ -n ] fichier
Ecrit sur la sortie standard les n premières lignes du fichier
tail [ -nlcb ] fichier
Ecrit sur la sortie standard les n dernières lignes ou les n derniers caractères ou les n derniers blocs.
grep [-v] pattern fichier
Récupère les lignes du fichier contenant pattern (une expression régulière). L'option -v permet de
récupérer les
lignes du fichier ne contenant pas le pattern. ^pattern permet de spécifier une recherche en début de
ligne.
pattern$ permet de spécifier une recherche en fin de ligne.
Sélection "horizontale"
cut [ -ddélimiteur -fi,j ] fichier
Récupère les champs i et j séparés par le délimiteur indiqué après -d.
cut [ -ci-j ] fichier
Récupère les caractères i à j de chaque ligne : option -c.
Comptage
wc [ -lwc ] fichier
wc -l
wc -w
wc -c
wc
compte le nombre de lignes
compte le nombre de mots
compte le nombre de caractères
équivalent à wc –l
44
Téléchargement