TP : Initiation Unix
ENP/ ABDELOUEL Page
15
A5 Gestion des droits d’accès
5.1 Catégories et droits d’accès
Unix défirencie trois catégories de personnes:
L’utilisateur (user) est le propriétaire du fichier.
Chaque utilisateur appartient à un ou plusieurs groupes. La troisième catégorie concerne les droits de toute autre personne connectée à la machine.
Les codes utilisés sont les suivants
u Le propriétaire du fichier: (owner) (u) User g Les membres du groupe de l’utilisateur:
o Les autres utilisateurs (o) Others Sous unix, on ne compte que trois permissions11 distinctes
r Read : Permission de lecture -_, d r w x r w x r w x
w Write : Permission d'écriture
x EXecute : Permission d'exécuter Octale 400 200 100 40 20 10 4 2 1 Lorsqu'on lit les permissions sur un fichier
(cmd ls), on obtient le format suivant : Type User
u Group
g Others
o Le premier groupe de « rwx» concerne les droits du propriétaire (User), le second ceux du groupe et le dernier ceux des autres. Si la lettre apparaît, le droit correspondant est donné. Si la lettre est remplacée par un tiret, le droit correspondant est refusé.
5.2 Droits d’accès : notation octale
Dans la table des i-nodes, les permissions d'accès sont représentées par des "bits" dans un mot qui en contient neuf. Si le bit est activé, alors l'opération correspondante pour le ou les usagers (u,g,o) est permise. La notation octale permet d'attribuer les permissions de manière beaucoup plus efficace et concise. (voir la valeur des différentes permissions dans la notation octale). Ci-après quelques exemples:
Octal Total en binaire Droits Commentaires
644 110 100 100 rw-r--r Le propriétaire peut lire et écrire, les autres peuvent uniquement lire.
755 111 101 101 rwxr-xr-x Comme ci-dessus+exécution permise pour tout le monde 600 110 000 000 rw--- Seul le propriétaire peut lire et écrire.
Remarque : Seul le propriétaire des fichiers ou un utilisateur ayant des droits particuliers (root) peut changer le mode d'accès.
5.3 Signification des permissions
Les droits d’accès s’interprètent de manière différente selon qu’il s’agisse de fichiers ou de répertoires
Fichier (-) Répertoire (d)
r Lecture autorisée La lecture d’un répertoire se fait lorsqu’on liste son contenu en absence de ce droit, on peut néanmoins atteindre et lister les fichiers des sous- répertoires, s’il en existe, et si on connaît leur nom.
w Ecriture autorisée l’écriture dans un répertoire se fait lorsqu’on crée ou détruit un fichier x Exécution autorisée l’exécution se fait lorsqu’un chemin de fichier ou une commande cd
spécifie le nom de ce répertoire En absence de ce droit, aucun accès au répertoire et a la sous arborescence issue du répertoire n'est possible.
5.4 La commande umask
La commande umask permet de déterminer les droits par défaut avec lesquels tout fichier sera créé.
La commandeumask valUmask provoque la prise en compte des droits de base rw-rw-rw- (666 en octal), puis on fait l'opération : (droits de base) et (non umask). Ce qui revient à retirer chaque élément correspondant à un 1 binaire de valUmask. Par exemple :
Droits de base 110 110 110 Droits à la
creation Conséquences
umask 022 000 010 010 110100100 crée les fichiers avec les droits rw-r--r--
11 Il y a des fichiers dont les droits contiennent d’autres lettres que r,w et x. On trouve les lettres s, S, t. Pour en savoir plus, consultez le manuel en ligne de la commande chmod.
TP : Initiation Unix
ENP/ ABDELOUEL Page
16
A6 Unix : Gestion des processus
6.1 Les processus Unix
o Tous les systèmes multitaches permettent d'avoir plusieurs programmes exécutables en même temps o Un processus est un programme en exécution (vue de
l'usager qui lance des commandes). Une commande donnée peut lancer plusieurs processus.
Principaux attributs d'un processus
Unix assigne un numéro unique à tous les processus actifs pour les différencier et de les contrôler.Chaque processus est donc repéré par un identificateur de processus (PID – Processus IDentifier) qui se présente sous la forme d'un nombre entier. Ainsi, lorsqu'on veut effectuer une action sur un processus donné, on le repère exclusivement par son PID.
Principaux attributs d'un processus PID identificateur de processus PPID Id du processus père
COMMAND intitulé de la commande correspondant au processus PRI Priorité du processus TTY Terminal d’execution UID
et GID propriétaire actif12 réel et effectif.
NI La valeur Nice o Toutes les informations concernant les processus s’obtiennent avec la commande "ps"
6.2 Exécution d’une commande dans le Shell
La gestion des processus sous Unix est dite hiérarchisée. Lorsqu’on lance une commande externe au shell (par exemple ls), un processus fils du shell est créé et la commande s’execute dans celui-ci. Le processus père (le shell) attend que la commande soit exécutée pour redevenir actif.
Ainsi, lorsqu'on demande l'exécution d'une commande, le shell lance la commande et se met en attente de sa terminaison. Ceci est mis en évidence aux yeux de l'utilisateur par le fait que le shell n'imprime un prompt que lorsque la commande en cours est terminée. Quand on travaille de cette maniére on dit que l'on exécute les programmes en premier plan (foreground)
Il existe donc une possibilité pour l'utilisateur de demander au shell de lancer l'exécution d'un programme et de ne pas attendre la fin de son exécution( exécution en arrière-plan :background). Il suffit de taper le caractére & à la fin de la commande
Execution d’une commande dans le Shell Une commande
est Lancée dans le Shell courant
Le processus Père (shell) Le processus Fils (commande)
Dort Est exécuté
Est Informé de la fin d’exécution
Se Réveil Meurt
Comme il ne peut y avoir pour un shell intéractif qu’un processus en avant-plan à la fois, on comprend qu’il est facile de le gérer, en particulier grâce aux caractères (par exemple : arrêt par "CTRL C")..
Par contre, il est possible d’avoir simultanément plusieurs processus en arrière-plan, lancés à partir du même shell intéractif. Dans ce cas, on contrôle ces processus en obtenant leur identifiant et leur état par les commandes ps/jobs, puis éventuellement en modifiant leur état par les commandes fg, bg ou kill13.
12 Propriétaire actif réel et effectif. Le réel est celui qui lance en premier le processus. L'effectif est celui qui exécute le processus avec les mêmes droits que le réel mais avec parfois des droits supplémentaires durant l'exécution du processus
13 Contrairement à son nom, cette commande n’est pas destinée réellement à tuer un processus, mais plutôt à lui envoyer un signal. La commande suspend n’existe pas en standard, mais on peut la définir avec un alias : alias suspend=’kill -STOP’
TP : Initiation Unix
ENP/ ABDELOUEL Page
17
A7 L'interpréteur de commandes : shell
7.1 L'interpréteur de commandes : shell
Le Shell c’est Les différents Shell
• Une Interface utilisateur avec le système Unix
• Un Interpréteur de commandes
• Un langage de programmation
Le shell est un interpréteur de commandes. Il permet
Shell
sh C Shell csh Bourne Shell bsh Korn Shell ksh
Bourne Again Shell
bash Trusted Shell
tsh Restricted Shell
Rsh Remote Shell
rsh de lancer les commandes UNIX disponibles en leur
affectant un certain nombre de paramètres d’exécution, de contrôler les données d’entrée et de sortie, les messages d’erreur éventuels et surtout de les enchaîner de manière efficace et pratique
Les différences entre ces shells portent essentiellement sur la syntaxe des constructions du langage et sur la richesse fonctionnelle. Mais certaines fonctionnalités sont proposées d'une manière ou d'une autre par tous les shells.
• Le shell est lui même un fichier binaire, qu’il est possible de lancer comme n’importe quelle autre commande UNIX.
• Un shell est démarré pour chaque console ouverte (ou fenêtre X11 équivalente créée); il est interactif dans ce cas, car les lignes de commande tapées au clavier sont exécutées une par une avec confirmation systématique (touche <return>).
7.2 Les méta caractères du shell
Les méta caractères du shell permettent de construire des chaînes de caractères génériques ou de modifier l'interprétation d'une commande: Le shell interprète les caractères spéciaux avant d'exécuter la commande
* désigne une chaîne de caractères quelconque
? désigne un caractère quelconque
[...] désigne les caractères entre crochets, définis par énumération ou par un intervalle
{ et } permettent de regrouper un ensemble de commandes et de les exécuter dans le "shell courant"
( et ) permettent de regrouper un ensemble de commandes et de les exécuter dans un "shell fils".
; sépare deux commandes sur une même ligne
' délimite une chaîne de caractères contenant des espaces (à l'intérieur, tous les méta caractères perdent leur signification)
" délimite une chaîne de caractères contenant des espaces (à l'intérieur, tous les méta caractères perdent leur signification, à l'exception des méta caractères ` et $)
` ou $( ) Le texte donné entre anti-quotes (`) ou $( ) est considéré comme une commande à exécuter et remplacé par son résultat. Cela permet d'utiliser le résultat d'une commande comme argument d'une autre.
\ annule la signification du méta caractère qui suit Exemples
ls *.[csp] Liste de tous les fichiers ayant l'un des suffixes .c, .s ou .p
ls /usr/[a-z][0-9] Liste de tous les éléments de /usr dont le nom est composé de deux caractères : une minuscule suivie d'un chiffre
ls /bin/[!a-z]* Liste de tous les éléments de /bin dont le nom ne commence pas par une minuscule
$ echo Je suis sous `pwd`
TP : Initiation Unix
ENP/ ABDELOUEL Page
18
7.3 Variables du shell
Comme dans la plupart des langages, il est possible d'utiliser des variables dans un script. Les variables du shell contiennent des chaînes de caractères. Elles n'ont pas besoin d'être déclarées. Elles prennent vie lors de la première affectation (avant la première affectation, elles ont pour valeur la chaîne vide).
Bash, ksh csh Remarques
variable=chaine set variable valeur Affectation de valeur à variable
Attention, Il ne doit pas y avoir d'espace autour du signe =
$variable Valeur de la variable
${variable} Valeur de la variable (permet d'éviter certaines ambiguïtés:
si a="var",${a}b renvoie varb alors que $ab est invalide) Exemple ENP="Ecole Nationale Polytechnique"
On récupère le contenu de la variable en la préfixant du signe $: echo $ENP
Variables pré positionnées
Lorsque le shell courant ou un programme en shell démarre, son environnement contient un certain nombre de variables qui sont positionnées dynamiquement, et dont le contenu (pour les principales,) est le suivant :
$0 Le nom du programme shell en cours.
$1,..${N} Les N paramètres passés au programme (au shell) lors de son appel.
$# Le nombre de paramètres passés à l’appel du programme shell (non compris le paramètre $0)
$* La liste des paramètres passés à l’appel du programme shell (non compris le paramètre $0)
$? Le code d’erreur de la dernière commande exécutée
$HOME Votre répertoire principal
$PWD Le répertoire courant
$PATH La liste des répertoires où le shell est susceptible de trouver les commandes élémentaires à exécuter. Cette variable est toujours positionnée dans les fichiers profile (/etc/profile et .profile) au moment du démarrage
$PS1
$prompt Le prompt (ce qui s’affiche après chaque ligne de commande en mode interactif)
Ces variables d’environnement sont transmises par le système d’exploitation à tous les processus. Chaque processus hérite des variables de son père (le processus qui l’a lancé, ici en général le shell). Ces variables peuvent être consultées ou modifiées.
Exemple :
La variable PS1 contient la forme de votre invite : exemple : PS1="[\u@\h \w] 7.4 Les Scripts shell :
Les scripts shell sont des programmes courts (et parfois un peu moins courts) interprétés, constitués d'appels de commande et de constructions du langage proposé par le shell correspondant. Ils permettent notamment de contrôler les informations transmises aux programmes et d'analyser de manière rudimentaire les sorties générées par de tels programmes. Pour faire des traitements plus complexes, tout en gardant la souplesse d'utilisation des scripts, on peut faire appel à l'un des nombreux langages de scripts tels que PERL, Python ou encore TCL.
Écriture et exécution d'un script
Un script shell est un fichier texte contenant des instructions, des commandes et des symboles spéciaux. On exécute le script en passant le nom du fichier en paramètre au shell.
% cat exemple #!/bin/sh echo hello
% chmod +x exemple
% ./exemple
Le premier symbole spécial est le #. Tout mot commençant par un # est ignoré et le reste de la ligne également. Le caractère # introduit donc un commentaire.
Il existe un commentaire spécial de la forme #!programme que l'on peut mettre sur la première ligne du script.
Dans ce cas, si le fichier contenant le script a le droit d'exécution, il peut être exécuté comme un programme normal