Support de cours caractéristiques générales du système Unix, tutoriel & guide de travaux pratiques UNIX en pdf.
Le noyau:
Le noyau est la partie centrale d’Unix. Il est résident, il se charge en mémoire au démarrage. Sa structure est modulaire, ce qui rend aisées ses manipulations en termes de portabilité et l’utilisation des services qu’il offre via les primitives (ou appels systèmes). Ce fonctionnement par primitives permet de résoudre les problèmes d’accès concurrents aux informations du système. En effet, les appels systèmes font entrer l’exécution en mode noyau. Dans ce mode, le processus est assuré de garder le processeur jusqu’au retour au mode utilisateur lorsque l’appel système est terminé. Les différents noyaux Unix ont été réécrits afin de pouvoir s’adapter aux nouvelles machines multi-processeurs et de supporter le travail en temps réel. Ils sont le plus souvent réécrits en couches: les différentes fonctions du noyau sont implémentées dans des couches logicielles différentes qui communiquent entre elles par messages. La tendance actuelle est également de garder le moins de fonctions possibles dans le noyau afin de constituer un micro-noyau. Les fonctions écartées sont rejetées dans les modules exécutés en mode utilisateur.
L’interface entre le noyau Unix et les applications est définit par une bibliothèque (libc.a pour le langage C par exemple). Elle contient les modules permettant d’utiliser les primitives mais aussi des fonctions plus évoluées combinant plusieurs primitives. D’autres bibliothèques sont utilisées pour des services spécialisés (fonctions graphiques,…).
Le Shell:
L’interface utilisateur sous Unix est appelée shell. Lorsqu’un utilisateur tape des commandes Unix, ces commandes sont reçues par le shell qui les interprète avant de lancer l’exécution de cette commande. Le shell est une couche logicielle bien séparée du noyau. Il joue un double rôle celui d’interpréteur de commandes et celui de langage de programmation. Ce dernier rôle semblant parfois hermétique à des néophytes. Il existe plusieurs shells dont les plus répandus sont:
• le Bourne Shell (sh): le shell de base sous Unix A.T.&T.,
• le C-shell (csh): le shell Unix BSD,
• le Korn-Shell (ksh) qui est une extension du Bourne shell. Il possède toutes les com-mandes de son prédécesseur, ainsi que des commandes qui facilitent le travail de l’utilisateur comme des outils de gestion des historiques des commandes tapées…
• le Z-shell (zsh): extension de ksh, qui offre en particulier des modules de complétions des nom de programme, de fichiers, de variables utilisateur et système, l’envoie de message à l’utilisateur de correction en cas d’erreur de frappe.
L’utilisateur, à l’aide des commandes qu’il a à sa disposition, peut écrire ses propres fonctions et programmes en langage shell, ce sont alors des shellscripts. Une fois ceux-ci réalisés, ils peuvent être utilisés par l’utilisateur comme n’importe quelle commande du shell lui même.
Le système de gestion de fichiers:
Vision générale:
Sous UNIX, les fichiers sont enregistrés dans une structure hiérarchisée en arbre. Ce système de fichiers est donc composé d’une racine et de noeuds qui sont des répertoires et des feuilles qui sont des fichiers ordinaires qui contiennent les données et les programmes.
Au niveau de l’utilisateur, les entrées-sorties sont vues de façon uniforme c’est-à-dire avec les mêmes commandes, la même syntaxe et les mêmes attributs qu’il s’agisse d’un fichier ou d’un périphérique. Par exemple, la redirection d’une commande sur un fichier ou sur un périphérique utilise la même syntaxe: commande > sortie où sortie est le nom du fichier (ordinaire ou spécial) de redirection. Mais au niveau du noyau, ce dernier effectuera l’opération de redirection soit sur le système de fichiers, soit sur le périphérique selon le type du fichier sortie. Cette vision uniforme des entrées-sorties est caractérisée par un descripteur commun à tous ces éléments, qui est appelé inode. De fait, chaque fichier Unix à un inode comprenant les attributs suivants:
• un propriétaire: celui qui a créé le fichier,
• un groupe: le groupe auquel appartient le créateur au moment où il créé le fichier,
• des droits d’accès: (voir paragraphe s’y rapportant),
• des informations générales sur la taille, la date de la dernière opération effectuée sur le fichier, le nombre de liens sur ce fichier,…
droits d’accès:
Les autorisations d’accès sous UNIX sont de trois ordres: accès en lecture (r), en écriture (w) et en exécution (x). A partir de ces trois options, on pourra effectuer toutes les opérations de base sur les fichiers (création, copie, destruction,…). Ces droits vont être donnés pour trois niveaux d’utilisateurs: pour le propriétaire, pour le groupe auquel appartient le propriétaire et pour le reste des utilisateurs. En ce qui concerne les répertoires, l’attribut x est nécessaire pour pouvoir se déplacer dans ce répertoire ou pour y rechercher un fichier.
Les processus:
Vision générale:
Toute action, tout programme lancé est exécuté par un processus. Le processus est donc l’unité d’exécution pour Unix. Une commande entrée par un utilisateur peut ne pas créer de processus (commandes internes au shell de l’utilisateur), ou en créer un ou plusieurs. Lors de l’exécution de la commande, un processus peut être en mode utilisateur (mode normal) ou en mode noyau, mode dans lequel il entre quand il fait un appel système (par exemple pour demander plus de place en mémoire centrale). L’ensemble de ses processus apparaissent dans une table, consultable par tout utilisateur du système. Cette table recense l’ensemble des processus et donne des renseignements quand à l’utilisateur qui l’a lancé, son taux d’occupation de la mémoire centrale, son taux d’utilisation du temps CPU de la machine, son état à l’instant de l’affichage de l’image de la table…
Terminal de contrôle d’un processus, exécution en arrière plan:
Les processus lancés par un utilisateur sont liés au terminal depuis lequel ils ont été exécutés, et à l’utilisateur qui les a créés. Le système peut ainsi repérer les processus qui recevront un signal d’arrêt (Ctrl C par exemple). L’ensemble des processus qui partagent un terminal s’appelle un groupe de processus.
Un utilisateur peut aussi lancer un processus en arrière plan, si par exemple, il veut garder la main sur une fenêtre de commande et pouvoir bénéficier d’un autre programme. Ces processus acquièrent alors une certaine indépendance vis à vis du terminal depuis lequel ils ont été lancés: ils s’exécutent alors sans intervention de l’utilisateur et sans que celui-ci n’ait besoin d’attendre la fin de leur exécution (type de traitement en «batch»). On peut ainsi lancer plusieurs tâches simultanément. Ces processus sont alors protégés contre les annulations par clavier (d’autres mécanismes que nous verrons par la suite permettent d’arrêter ces processus). D’autres processus sont quand à eux lancés par le système ou par un utilisateur en fonction de ses besoins (cas de l’impression ou du mail), ils sont alors gérés par le système et sont appelés des daemons.
La propriété effective et réelle d’un processus:
Comme nous venons de le voir un processus à un propriétaire réel, qui est l’utilisateur qui l’a commandé. Il peut avoir aussi un propriétaire effectif, c’est à dire l’utilisateur a qui appartient le fichier exécutable (si le set user bit a été positionné). C’est le cas par exemple de la commande de changement de mot passe qui nécessite l’écriture dans des fichiers protégés et dans lequel seul l’administrateur système doit avoir le droit d’écrire. Dans ce cas là, le propriétaire réel du processus et l’utilisateur et le propriétaire effectif root.
Vous avez à votre disposition un certain nombre de machines. Parmi celles-ci, certaines sont dans le local technique (les serveurs) et d’autres sont à votre disposition (les stations de travail).
1. Les serveurs:
Ceux-ci ont plusieurs rôles: certains ont de l’espace disque pour les comptes utilisateurs (oslo en l’occurrence pour vous), d’autres jouent le rôle de machine d’«hébergement» pour les répertoires des machines diskless (mbds), d’autres encore sont des serveurs de fichiers et/ou d’exécution (lisboa, madrid ou mbds par exemple). Toutes ces machines ont entre 50 et 100 Mo de mémoire vive et un espace disque de l’ordre de 1 à 4 Go (variable selon les besoins et les périodes).
Ces serveurs sont de plusieurs types et vont vous permettre de travailler sur des environnements hétérogènes. Nous avons donc des serveurs de type Sun (madrid, mbds) avec différents systèmes d’exploitation: le serveur madrid est sous Solaris 2.5 (Unix System V) et mbds sous SunOs 4.1.3 (Unix BSD). Lisboa quand à elle est une RISC6000 et tourne sous AIX 3.5 (System V). Il y a aussi au sein du MBDS un certain nombre de serveurs qui servent à l‘administration système, ceux-ci sont des Hewlett Packard (rio, oslo, tunis…) et tournent sous HP-UX 9.05; ils devront être prochainement passés sous HP-UX 10.
2. Les stations de travail:
Vous allez travailler directement sur les stations de travail qui sont à votre disposition. Parmi celles-ci, un certain nombre sont diskless (les Suns noir/blanc), elles doivent récupérer leur noyau Unix ainsi que toutes leurs arborescences sur les serveurs. Vous avez aussi accès à des terminaux X (HP couleur) qui eux vous permettent d’accéder directement à un serveur ou à une machine autorisée. Vous pourrez aussi travailler sur les PCs sous Linux.
Voila, en quelques lignes le descriptif des matériels que vous avez à votre disposition. A ceci se rajoutent des imprimantes (HP4 n/b) et tous les autres PCs sous Windows for Workgroup ou Windows NT qui vous serviront à réaliser vos projets et autres TDs.
Utilisation du Shell
Introduction:
Qu’est ce que le Shell:
Comme nous l’avons vu précédemment, le shell est le programme interface entre l’utilisateur et le noyau Unix. Il est indépendant du noyau. A ce sujet, vous pouvez choisir le shell que vous voulez lors de vos sessions de travail (par contre, un shell vous est toujours affecté par défaut pour toutes vos sessions lors de la création de votre compte). Il a plusieurs rôles: il interprète les commandes passées par l’utilisateur afin qu’elles soient traitées par le noyau; il a aussi la fonction de langage de programmation, il est utile pour prototyper des applications, pour effectuer certaines tâches simples et répétitives. Le langage des scripts pouvant paraître compliqué au premier abord pour un non initié, on préférera utiliser le langage Perl (de plus en plus répandu et se rapprochant du langage C, il est aussi très utilisé dans l’écriture de scripts CGI pour tout ce qui concerne les interfaces entre les programmes utilisateurs et le langage HTML).
Les différents utilisateurs:
Nous allons voir dans cette partie les différents niveaux d’utilisateurs sous Unix. Quel que soit le type d’utilisateur, il y a un certain nombre de paramètres en commun.
Un utilisateur quelconque sous Unix est repéré par son nom (login) qu’il doit taper pour pouvoir entrer dans le système. A chaque nom, correspond un numéro d’utilisateur: l’uid. L’uid est donc le moyen pour le système de reconnaître l’utilisateur (en ce qui concerne l’attribution de la possession d’un fichier par exemple).
Afin d’authentifier l’utilisateur, un mot de passe lui est attribué lors de la création de son compte. Ce mot de passe est «secret», il ne doit pas être divulgué à autrui. De plus, en cas de problèmes lors de l’entrée dans le système sur le mot de passe, vérifiez le type de clavier que vous utilisez, que vous n’êtes pas en mode majuscule, et cas échéant, si vous avez oublié votre mot de passe, allez voir votre administrateur système afin qu’il le change. Il répond à des conditions bien précises de création. Par exemple, au MBDS, il vous faut donner un mot de passe de 8 caractères avec au moins 2 caractères non alpha-numériques.
L’utilisateur appartient aussi à au moins un groupe de travail et par la même a un numéro de groupe par défaut: le gid. En fonction de projets, et au vue de la notion de droits, un utilisateur peut donc appartenir à plusieurs groupes d’utilisateurs.
Lors de la création du compte, l’administrateur système fixe un répertoire de travail par défaut (la HOME dir) dans lequel l’utilisateur sera positionné à l’entrée dans le système. En règle générale, le nom terminal du chemin de ce répertoire représente le nom de login de l’utilisateur. De façon générale, l’utilisateur est propriétaire de son répertoire HOME.
Par défaut aussi, et lors de la phase de création du compte, on donne à l’utilisateur un shell qui sera exécuté lors de l’entrée dans le système.
En résumé, à un utilisateur correspond les renseignements suivants:
• un nom de login,
• un mot de passe,
• un iud,
• un ou plusieurs groupes de travail,
• un répertoire HOME,
• un shell par défaut.
Les informations que nous venons de donner ci-dessus sont enregistrées dans le fichier: /etc/passwd (/etc/group pour tout ce qui concerne les groupes. Pour des raisons de sécurité et de commodité, l’administrateur utilisera des outils de gestion du système type NIS ou Kerberos. Dans ce cas là, le fichier /etc/passwd ne contient que certaines informations sur certains utilisateurs, le reste étant placé dans les fichiers relatifs au système de gestion utilisé.
L’utilisateur de base:
Il utilise les applicatifs mis à sa disposition, il «customise» les applications, il possède des droits d’accès traditionnels, il doit veiller à utiliser les ressources (disques, CPU,…) avec modération afin de ne pas surcharger le système.
Le programmeur:
Il possède le même droits que l’utilisateur de base, il a en plus la possibilité de programmer ses propres applications, il utilise donc dans ce cas, les outils de développement installés sur le système, il a accès aux compilateurs et aux interpréteur.
………