UNIX/LINUX : RÉSUMÉ •1. Présentation générale

Transcription

UNIX/LINUX : RÉSUMÉ •1. Présentation générale
UNIX/LINUX : RÉSUMÉ
1. Présentation générale
Vue générale du système
Linux est un système multi-utilisateur "temps partagé", c'est à dire qu'il est possible de connecter sous Linux
plusieurs utilisateurs simultanément. Chacun aura à sa disposition l'ensemble des ressources du système, le
partage étant effectué par découpage du temps CPU.
Linux est un système multi-tâches, c'est à dire qu'un utilisateur peut lancer plusieurs tâches simultanément depuis
une même console.
Linux est un système ouvert car il n’est lié ni à une plate forme matériel, ni à un constructeur.
Le système est modulaire et écrit à 90 % en C, ce qui permet aux utilisateurs d'écrire des applications en langage
C, faisant appel au noyau.
Linux possède un ou plusieurs langages de commandes qui constituent de véritables langages évolués
(nombreuses fonctionnalités, structures algorithmiques riches, etc..). Il est possible, à tout moment, de changer de
langage de commandes (bourne shell, korn shell, etc...).
Les entrées/sorties sont généralisées, les périphériques sont considérés du point de vue de l'utilisateur comme
des fichiers. La possibilité de rediriger les flux d’informations est à l’origine de la technique des tubes (pipes) qui
est une des forces du système d’exploitation.
Le système possède, en standard, un grand nombre d'utilitaires de tous types ( logiciels de communications, etc..)
Historique
Unix est né, en 1969, dans les Bell Laboratories (American Telegraph and Telephone Laboratories) sous
l'impulsion de deux hommes Ken Thompson et Dennis Ritchie. Il était destiné à fournir aux programmeurs
“maison“, un environnement de développement auquel ils avaient goûté avec Multics. Le système fut écrit en
assembleur sur un PDP 7 "qui traînait par là".
En 72, D.Ritchie réécrit le système en langage C, qu'il vient de mettre au point pour l'occasion !
Jusqu'en 74, différentes versions du système vont apparaître jusqu'à la version 4. Les sources de cette dernière
seront "données" à l'université de Berkeley (Californie).
A partir de cette date, on verra se développer deux "grandes familles" de système Linux: les versions Bell-AT&T
et les versions BSD (Berkeley Software Distribution) sous l'impulsion de Bill Joye (le cofondateur de SUN !).
C'est à cette époque qu'Unix commence à se faire connaître.
L'année 83 est une date importante dans l'histoire d'Unix, en effet AT&T annonce qu'elle distribuera désormais
une nouvelle version baptisée SYSTEM V qui inclut toutes les extensions intéressantes des dernières versions
Berkeley.
C'est cette version, modifiée depuis (release 3.2, puis 4), qui a servi de base aux systèmes Unix actuels.
A côté des 2 grands courants ATT et BSD, se sont développés d’autres systèmes Unix comme Xenix de
Microsoft, SCO Unix, etc...
Il n’y a pas de standard Unix. Il y a une interface normalisée : POSIX qui définit ce qu’un utilisateur est en droit
d’attendre d’un système ouvert comme Linux, mais les noyaux des systèmes d’exploitation sont différents.
Il est bon également de noter qu’il existe une version d’Unix gratuite et librement diffusable qui s’appelle LINUX
1
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
(du nom de son auteur : Linus Torvald étudiant finlandais). Cette version fonctionne sur un PC.
SOLARIS est un ensemble comprenant SUN OS (Unix de SUN) + Open Window (environnement graphique) +
outils réseaux.
Unix/Linux : Points forts et points faibles
Unix, bien qu’étant un système ancien (+ de 20 ans) a toujours été considéré comme un modèle de système
d’exploitation, sa progression dans les entreprises est constante bien que récemment freinée par l’émergence de
Windows 2003 ou 2008 Server son principal concurrent.
Les points forts de Linux sont :
 son indépendance vis à vis des constructeurs, Linux est un système ouvert. Linux peut fonctionner sur
n’importe quel type de machine.
 la modularité du système qui permet de disposer d’une véritable plate forme de développement
 son aspect communiquant (l'histoire d'Unix est très liée à celle d'Internet). Unix possède en standard
tous les moyens de communiquer avec d’autres systèmes.
Néanmoins Linux/Unix a un certain nombre de points faibles qui ont toujours freiné sa croissance :
 le peu de convivialité de son interface. Il existe désormais des interfaces graphiques tournant sous Linux
(KDE, GNOME, etc...) qui proposent désormais les traditionnelles icônes, boutons, fenêtres, etc..
 le manque de standard. Il existe en effet de multiples versions pas toujours compatibles entre elles. La
norme POSIX permet d’avoir au moins une standardisation de l’interface.
2. LINUX et les utilisateurs
Le profil d’un utilisateur
Linux étant un système multi utilisateurs, il doit être connu du système d’exploitation pour pouvoir travailler.
L’ensemble des utilisateurs est scindé en groupes :
U
tilisateursduSystèm
e
G
R
O
U
PE
SuperU
tilisateur
(root)
U
tilisateur
Le super utilisateur est l’administrateur du système, il a tout les droits !
Pour la plupart des utilisateurs on aura :
 un n° unique (uid) ;
 un nom de login (8 lettres) ;
 un répertoire de travail (Home Directory) : répertoire où l’utilisateur se retrouve lorsqu’il se connecte ;
 un mot de passe ;
2
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
Il est bon de remarquer que c’est ce mot de passe qui garantie l’intégrité, la sécurité et la
confidentialité des données d’un utilisateur. Il doit être choisi en connaissance de cause ( pas de mots
du langage courant pouvant se trouver dans un dictionnaire, pas de date de naissance trop facile à
trouver, de prénom, etc..), il doit être changé régulièrement et ne doit être communiquer à personne et
surtout pas inscrit dans un calepin ou pire sur un post’it collé sur la console.
 un langage de commande prédéfini (shell). Il existe plusieurs langages de commande dans le système
Linux (en fait, on peut en créer autant qu’on veut), il faut donc définir quel est celui qui va être utilisé
lors de la connexion de l’utilisateur ;
 des fichiers d’initialisation paramétrables par l’utilisateur lui même (.profile, .bah_profile, etc...) pour le
lancement de certaines tâches, la redéfinition de certaines commandes, le paramétrage de sa console de
travail, etc ;
 un ensemble de fichiers qui lui appartiennent ;
 des processus lancés par l’utilisateur à partir de commandes de base du système ou de programmes ;
 une boite aux lettres permettant de recevoir et d’envoyer du courrier (mail).
On retrouve la plupart de ces informations dans le fichier passwd qui se trouve dans le répertoire etc.
Extrait d’un fichier passwd :
On peut y lire respectivement :
 le nom de login
 un code indiquant l’existence d’un mot de passe dans le fichier /etc/shadow
 l’UID : n° d’utilisateur
 le n° du groupe
 un commentaire (identité de l’utilisateur)
 le chemin d’accès absolu du répertoire privé (Home Directory de l’utilisateur)
 le chemin d’accès absolu du shell lancé à la connexion (le shell est un programme)
Sur le système LINUX, les mots de passe sont souvent stockés dans un fichier qui porte le nom de shadow et qui n’est
3
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
visible que par le super utilisateur.
La session de travail
Chaque session de travail d’un utilisateur commence par une phase de login où l’identification se fait par la saisie
du nom de login et du mot de passe.
L’utilisateur se retrouve alors dans son répertoire privé (Home Directory), l’interpréteur de commande (shell)
qui lui est associé est lancé, le fichier .profile, .bash_profile ou un fichier similaire (dépendant du shell) est lu par
le shell et les commandes y figurant sont exécutées. Généralement l’utilisateur voit enfin s’afficher un prompt
(paramétrable également) qui l’invite à taper des commandes.
La session se terminera par la déconnexion de l’utilisateur par la commande exit ou logout. Cette opération est
fondamentale car n’importe qui arrivant sur la console pourrait travailler sur le système en ayant l’identité de
l’utilisateur qui est parti sans se déloguer.
3. Le système de fichiers
Chemin d’accès
Le système de gestion de fichier s'appuie sur une structure arborescente .Cette structure ressemble beaucoup à
celle que l'on peut trouver sur d'autres systèmes, MS-DOS par exemple.
La racine de cette arborescence est la racine du système de fichiers. Ce répertoire (directory ou catalogue)
contient lui même d'autres répertoires ou fichiers.
Le répertoire privé est celui dans lequel l'utilisateur se retrouvera lors de sa connexion au système, généralement,
il est différent pour chaque utilisateur.
Chaque utilisateur doit pouvoir désigner un répertoire autre que le sien, pour un changement de répertoire, une
copie de fichier, etc..
Cette désignation se fait à l'aide d'un chemin d'accès ou pathname qui permet de repérer de façon absolue tout
endroit de l'arborescence.
4
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
Pour construire un pathname on utilisera les symboles suivants:
..
Désigne le répertoire père
/
Indique un changement de niveau
Il existe deux types de chemin d'accès: les chemins d'accès absolus et les chemins d'accès relatifs.
Les chemins d’accès absolus indiquent le chemin depuis la racine, les relatifs à partir du répertoire où l’on se
trouve.
Remarque: Un chemin d'accès absolu commencera toujours par le symbole / , car la racine n'a pas de nom.
Exemple : /home/delmp désigne de façon absolue le répertoire delmp se trouvant dans le répertoire home qui se
trouve lui même sous la racine.
Protections des fichiers.
Chaque utilisateur d'un système Linux fait partie d'un groupe.
Les différents utilisateurs d'un systèmeUnix
Les autres
Votre groupe
Vous
Le Super Utilisateur
Chaque utilisateur peut, pour tous les fichiers dont il est propriétaire, mettre ou annuler un certain nombre de
permissions.
Ces permissions concernent:
- le propriétaire ................................................................ u user
- les membres d'un groupe ............................................... g group
- tous les autres ................................................................ o other
(On peut désigner l'ensemble de ces 3 catégories par a all )
Les opérations concernées par ces permissions sont:
- lecture ........................................................................... r read
- écriture ......................................................................... w write
- exécution ...................................................................... x execute
Ces permissions ont une signification particulière lorsqu'il s'agit d'un répertoire:
-lecture: Ce droit permet uniquement de lire les noms des fichiers du répertoire (ls par exemple).
-écriture: On pourra, si cette permission existe, créer des nouveaux fichiers dans ce répertoire mais également en
détruire !
-exécution: Ce droit indique que l'on pourra passer par ce répertoire (cd par exemple).
5
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
Extrait du contenu d'un répertoire avec les différents droits:
A la création d'un fichier, celui-ci se voit attribuer des permissions standards qui peuvent être les suivantes :
-rw-r--r-Le propriétaire peut tout faire sauf exécuter, les membres de son groupe et tous les autres ne peuvent que lire ce
fichier.
Le premier tiret indique qu'il s'agit d'un fichier et non pas d'un répertoire.
Pour changer cette configuration on utilisera la commande chmod de la façon suivante:
chmod <qui?>+<opérations><nom du fichier> pour ajouter une ou plusieurs permissions.
chmod <qui?>-<opérations><nom du fichier> pour supprimer une ou plusieurs permissions.
Exemple:
chmod go+w f1
autorise le groupe et les autres à écrire dans f1.
Remarques:
Les permissions sont représentées par 3 groupes de 3 valeurs (1 si la permission est autorisée, 0 sinon):
rw-r--r-- sera représenté par: 110 100 100 ou en notation octale: 644
Les permissions peuvent être modifiées directement en donnant la valeur octale des 3 groupes de 3 bits. Exemple:
chmod 600 fich aura pour effet de fixer les permissions de la façon suivante : rw------Ces protections peuvent également être prédéfinies à l'aide de la commande umask .(Ex: umask 033 aura pour
effet que tous les fichiers qui seront créés ensuite auront comme permissions les valeurs obtenues en enlevant 033
à 666 -la permission maximale pour un fichier texte- , c.a.d rw-rw-rw- )
Attention: Un fichier aura beau être protégé en lecture, écriture et exécution, il pourra quand même être détruit
si le répertoire dans lequel il se trouve n'est pas lui même protégé en écriture !
Remarque: Trop protéger un répertoire peut causer certains problèmes, le démon d'impression, par exemple, doit
pouvoir avoir les droits en lecture sur les fichiers à imprimer.
6
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
Les droits d’ACCÈS étendus
Ils permettent d’affecter à un programme le numéro d’utilisateur du propriétaire du fichier
(SUID ) ainsi que son numéro de groupe (SGID ).
SUID (Set User ID) bit et SGID (Set Group ID) bit ne sont utilisables qu’avec des programmes binaires et non
avec les scripts du shell.
Le SUID bit est matérialisé par la lettre s dans les autorisations d’accès de l’utilisateur, à l’endroit où,
normalement, est placé la lettre x.
On peut ajouter ce droit en utilisant la commande chmod.
Exemple :
chmod u + s
fic1
chmod
fic1
g+s
en base 8, on positionne les autorisations d’accès étendus à la position des milliers du chiffre en
base 8
SUID bit
4000
SGID bit
2000
chmod 4755
fic1
chmod 2755
fic1
Le SUID bit et le SGID bit ne sont utiles que si les autorisations d’exécution sont définies en conséquence. Si
elles font défaut pour le propriétaire ou pour le groupe propriétaire du fichier, l’identificateur « s » est affiché en
majuscule (S).
Comme pour les autres droits d’accès, les SUID bit et SGID bit ne peuvent être attribués que par le propriétaire
ou l’administrateur système.
Exemple d’utilisation de ces droits.
Les droits d’accès de la commande passwd dans le répertoire /usr/bin sont :
root@ubuntu:~# ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 41292 2009-07-31 06:55 /usr/bin/passwd
Dans les droits du propriétaire le droit « s » est positionné. Avec la commande passwd, l’utilisateur individuel
peut modifier son mot de passe.
Ce mot de passe est stocké sous forme codée dans le fichier /etc/shadow qui a en général les droits d’accès rw- r---- et comme propriétaire root.
root@ubuntu:~# ls -al /etc/shadow
-rw-r----- 1 root shadow 861 2011-08-06 04:13 /etc/shadow
Un utilisateur quelconque n’a qu’un accès en lecture à ce fichier. Une modification du mot de passe n’est donc
théoriquement pas possible.
La solution est d’utiliser le SUID bit. Comme le SUID est placé pour le fichier /usr/bin/passwd, chaque utilisateur
qui lance le programme passwd se voit affecté du numéro d’utilisateur 0 (le numéro de root), puisque ce fichier
programme appartient à l’utilisateur root. Avec ces nouveaux droits, il a également la possibilité d’accéder en
modification au fichier /etc/shadow et ainsi de changer son mot de passe. Lorsque le programme passwd a terminé
son travail, l’utilisateur retourne au shell et reprend ses anciens droits d’accès.
7
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
 Les fichiers cachés.
Tout fichier dont le nom commence par un . est dit caché, cela signifie 2 choses:
 Le fichier ne sera pas vu au cours d’une commande de listage de répertoire classique: ls
 Lors de la destruction du contenu d’un répertoire par une commande utilisant un joker comme * , ce
fichier ne sera pas détruit.
4. Redirections et tubes
Pour chaque terminal, il existe 3 fichiers spéciaux:
- L'entrée standard (stdin): C'est dans ce fichier que sont lues les données des différents processus s'exécutant
sur ce terminal. C'est normalement le clavier.
- La sortie standard (stdout): C'est dans ce fichier que sont écrits les résultats des commandes. C'est
normalement l'écran.
- La sortie erreur standard (stderr ): C'est dans ce fichier que seront écrits les différents messages d'erreur
d'une commande . C'est normalement l'écran.
 Redirection du fichier standard de sortie:
commande > nom de fichier
Exemple: ls>liste
Le contenu du répertoire n’apparaîtra pas à l'écran mais sera écrit dans le fichier liste. Si ce fichier n'existe pas, il
sera créé; s'il existe son contenu antérieur sera perdu, pour que cela ne soit pas le cas il faut utiliser >> à la place
de >.
 Redirection du fichier standard d'entrée:
commande < nom de fichier
Cette redirection ne fonctionne qu’avec des commandes qui peuvent travailler directement sur l’entrée standard. Il
y a beaucoup de commandes Linux (on les appelle des filtres) qui fonctionnent comme cela, en fait la plupart des
commandes qui travaillent sur des fichiers autorisent également qu'on les utilise sans argument, dans ce cas elles
rendent la main à l'utilisateur et c'est l'entrée standard (par défaut le clavier) qui sera traitée.
Exemple: mail jean <lettre
D'ordinaire la commande mail rend la main à l'utilisateur afin qu'il puisse taper sa lettre, ici mail travaillera
directement avec le fichier lettre sans intervention de l'utilisateur.
 Redirection du fichier standard d'erreur:
commande 2> nom de fichier
Exemple: cat toto 2> erreur
Si le fichier toto n'existe pas aucune erreur n'apparaîtra sur l'écran, mais par contre le message d'erreur sera écrit
dans le fichier erreur. Il est possible également d'utiliser 2>> pour compléter le fichier sans perdre les
informations qui s'y trouvaient.
8
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
5. Enchainement des processus.
Enchainement simple.
But: Lancer plusieurs processus successivement de façon totalement indépendante.
commande;commande;commmande;.....
Exemple: date;who;echo salut
Ces 3 commandes vont s'exécuter les unes après les autres pour donner sur l'écran :
root@ubuntu:~# date; who;echo salut
mardi 16 août 2011, 04:37:13 (UTC-0700)
delmp
:0
delmp
pts/0
2011-08-16 04:20
2011-08-16 04:20 (:0)
salut
Les "pipes" ou tubes.
But: Faire exécuter des processus de manière concurrente (en parallèle) et communiquant entre eux par
l'intermédiaire de zones mémoires.
Le paragraphe précédent a montré qu'il était possible de rediriger la sortie ou l'entrée d'une commande. Avec ce
système, on peut donc imaginer des traitements «à la chaîne» qui utiliseraient plusieurs commandes.
Exemple: On veut afficher la liste des fichiers se trouvant dans le répertoire courant, trié par nom et obtenir une
visualisation page par page:
ls > fic1
sort fic1 > fic2
more fic2
Ces opérations peuvent se résumer avec le schéma suivant:
sort
ls
fic1
more
fic2
Les inconvénients sont les suivants:
- création de fichiers intermédiaires qu'il faudra détruire.
- temps d'exécution très lent (accès disque).
La notion de pipe ou tube va résoudre ces problèmes, un tube est symbolisé par le symbole | :
ls | sort | more
ls
sort
more
Le système Linux assure la synchronisation de l'ensemble :
- Les 3 processus correspondant aux 3 commandes s'exécutent en parallèle.
- Chaque processus qui lit dans un tube se bloque lorsque le tube est vide.
- Chaque processus qui écrit dans un tube s'arrête lorsque le tube est plein.
9
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.
Les processus en background .
Il est possible pour chaque utilisateur de lancer des processus en différé. Ces processus sont dits background. Ce
mécanisme permet à un utilisateur de lancer depuis une seule console plusieurs tâches différentes.
Pour lancer une commande en background, il faut qu'elle soit suivie du caractère &.
Exemple: cc prog.c& aura pour but de lancer la compilation du programme prog.c et de rendre la main
aussitôt à l'utilisateur.
On aura tout intérêt à rediriger les entrées et les sorties standard des processus exécutés en background, sinon
celles-ci vont interférer avec celles du processus en cours.
De toute façon, il est bon de placer un message à la fin de la commande, en utilisant la commande echo. Exemple:
(commande;echo 'fin de la commande' )&
Attention, l'utilisation de processus en background a la fâcheuse tendance de surcharger le système !!
Le fait de se déloguer tue tous les processus attachés à ce terminal, même les processus lancés en background, ce
qui est très embêtant ! C'est pourquoi il existe la commande nohup qui permet aux processus de continuer de
s'exécuter, même si l'utilisateur c'est délogué.
Exemple: nohup commande&
Le lancement différé d'une commande.
Il peut être intéressant de demander l'exécution d'un travail à une certaine heure, voire une certaine date, la
commande at heure [jour] permet le lancement différé d'une commande.
Exemple:
at 2300
lp grosfichier
cc prog.c
CTRL D
Cette commande aura pour effet de demander l'impression de grosfichier ainsi que la compilation de prog.c à
23h00, ce jour.
Le super utilisateur peut interdire ou autoriser l'exécution de cette commande par certains utilisateurs.
Le lancement périodique de commande.
Linux permet également d'exécuter certaines commandes à date (ou à heure) fixe, cette possibilité est fournie par
le cron. Nous verrons cela plus tard.
10
Marie-pascale Delamare à partir d’un travail original d’un professeur du lycée Flaubert à Rouen.