Linux et Unix : Les bases

Historique rapide :

Linux est un système d'exploitation libre de droits, basé sur Unix (dont il existe depuis longtemps des versions commerciales). Il a été développé à l'initiative de Linus Torvalds, et est supporté par une communauté constituée de nombreux développeurs répartis dans le monde entier. Des sociétés proposent des distributions de Linux, et cherchent à fournir à leurs clients un système facilement installable et maintenable (Slackware, Debian, RedHat, Mandrake, Suse, ...) Ce système fonctionne sur les PC, mais aussi sur des stations de travail professionnelles (Sun, ...) et les MacIntoshes (LinuxPPC).

Unix : un système multi-tâches et multi-utilisateurs

Depuis sa création (dans les années 70, donc bien avant les interfaces graphiques multi-fenétrées) Unix est multi-tâches et multi-utilisateurs. Les utilisateurs pouvaient se connecter au moyen de terminaux reliés par des liaisons séries à la machine; à présent, on se connecte plutôt en réseau (local ou Internet) et éventuellement en utilisant un environnement graphique (coûteux en temps de communication si on passe par Internet).

Utilisateurs

Les utilisateurs doivent s'identifier lors de la connexion ("login") en fournissant leur identifiant et leur mot de passe. On peut se connecter à la console de la machine sous Unix (en mode texte ou en mode graphique selon la configuration de cette dernière) ou bien avec un terminal relié à un des ports série de la machine (de moins en moins utilisé) ou bien par réseau, à partir d'une autre machine qui sert alors de terminal. Cette autre machine n'est pas nécessairement sous Unix. Il suffit qu'elle possède un logiciel client "telnet". On peut alors ouvrir une session sur la machine Unix en spécifiant son nom ou son numéro Internet : on retrouve alors le "login" de la machine Unix, et les commandes qu'on va lancer seront éxécutées par le processeur de la machine Unix, mais leurs résultats seront affichés sur la machine locale, grâce au client telnet. On peut aussi utiliser un environnement graphique pour visualiser le résultat des programmes tournant sur la machine Unix, mais celà nécessite un équipement logiciel plus "lourd" qu'un simple telnet.

Les utilisateurs sont répartis en groupes : les utilisateurs "ordinaires" sont le plus souvent dans le groupe "users", mais on peut aussi les classer en plusieurs groupes. Il y a un "super-utilisateur" privilégié, correspondant à l'administrateur système. Son identifiant est "root". Il a en particulier le pouvoir de créer et modifier les utilisateurs et les groupes. Il y a aussi des "pseudo-utilisateurs" qui correspondent en fait à des fonctions du système. La liste des utilisateurs peut être visualisée par la commande : "cat /etc/passwd" (et les groupes par "cat /etc/group" ). On peut voir dans ces listes que chaque utilisateur ou groupe possède un numéro.

Espace de travail

Chaque utilisateur a son propre espace de travail, dans lequel il peut stocker ses fichiers, créer des sous-répertoires, ... Il peut bien entendu naviguer dans ces répertoires, ainsi que dans ceux des autres utilisateurs, sous réserve qu'il en ait le droit, et ceci au moyen de commandes lignes ressemblant à celles du DOS, ou d'un "file manager" graphique ressemblant à l'explorateur Windows ou au finder du Mac s'il travaille avec un environnement graphique.

Droits d'accès aux répertoires et fichiers

Un système n'est vraiment multi-utilisateurs que s'il permet de gérer les droits d'accès aux fichiers. Unix permet de spécifier pour chaque répertoire ou fichier les droits en lecture et écriture pour le propriétaire du fichier, les autres membres du même groupe que le propriétaire, et les autres utilisateurs. La commande "ls -l" permet de visualiser les informations sur les fichiers et sous-répertoires du répertoire courant. Exemple :

[jean@pc jean]$ ls -l
total 103134
-r-xr-xr-x   1 jean     users    95507104 Apr 23 15:10 heroes3-demo-x86.sh
drwxr-xr-x   5 jean     users        1024 Apr 23 15:13 heroes3_demo
-rw-r--r--   1 jean     users      207600 Dec 25 23:21 medaillon.gif
-rw-r--r--   1 jean     users        8659 Dec 23 18:52 moi.jpeg
drwx------   2 jean     users        1024 Dec  5 13:14 nsmail
drwxr-xr-x   3 jean     users        1024 Apr 23 21:23 rmc

Chaque ligne comporte les informations suivantes : nature et droits d'accès, nombre de liens, nom du propriétaire, groupe, taille, date de dernière modification, nom du fichier ou répertoire.

La première lettre donne la nature du fichier : d pour directory (répertoire) ou - pour fichier. Ensuite, on trouve trois groupes de trois lettres ou - : "rwx" ou "r-x", ... Ceci correspond aux droits d'accès du fichier : r pour read (lecture), w pour write (écriture), x pour éxecution, ou accessibilité dans le cas d'un répertoire.

Le premier groupe de trois caractères est pour le propriétaire du fichier ou répertoire, le deuxième groupe pour les autres utilisateurs du même groupe, et le troisième pour tous les autres utilisateurs.

Ainsi, dans l'exemple ci-dessus, on voit que la plupart des fichiers ou répertoires sont accessibles entièrement au propriétaire (jean), mais seulement en lecture aux autres. De plus, le programme éxécutable heroes3_demo peut être lancé par n'importe qui, et les sous-répertoires sont accessibles à tout le monde, à l'exception de nsmail qui n'est accessible qu'au propriétaire.

Pour changer le propriétaire, le groupe, les droits d'accès, voir les commandes chown, chgrp, chmod.

Système de fichiers Unix

Comme sur les autres systèmes, les répertoires et fichiers sont organisés en arborescence : chaque répertoire contient des fichiers et sous répertoires, qui sont eux-mêmes subdivisés en fichiers et sous-répertoires, ... Mais la différence avec MS/DOS-Windows ou MacOS est que l'ensemble des fichiers accessibles sur une machine est dans une arborescence unique. Il n'y a pas, comme sous MS/DOS, d'unités a:, c:, d:, ...

La "racine" de cette arborescence unique est notée "/". elle contient donc les répertoires de plus haut niveau, et en particulier les répertoires "standard" du système Unix (équivalents des "Program Files", "Mes Documents", ... de Windows). Ces répertoires et sous répertoires ne sont pas forcément situés physiquement sur le même disque : on peut par exemple avoir le répertoire "/home" (répertoire des utilisateurs) situé sur un disque différent des répertoires "systèmes" tels que bin, etc, usr, ...

De même, pour avoir accès à un disque fixe ou amovible autre que le disque système, il faudra le "monter", c'est à dire l'accrocher à un endroit de l'arborescence. Le répertoire "/mnt" est en particulier réservé à cet usage. Il permet de monter les disquettes, le CdRom, ...La commande "mount" est utilisée pour celà (et "umount" pour l'opération inverse). Toutefois, il existe un "automount" sur les distributions récentes de Linux.

Il existe comme en MS/DOS des commandes standard pour naviguer dans les répertoires, en créer, en supprimer.

Le langage de commande : le shell

En mode commande ligne, ce que tape l'utilisateur est interprété et exécuté par l'interpréteur de commande : le shell. Ce langage permet entre autres d'exécuter les commandes standard, mais il comporte également des structures de contrôle très puissantes, comparables à celles d'un langage de programmation. On peut ainsi créer des programmes écrits en shell, donc lisibles en mode texte (on peut comparer ceci aux fichiers .bat du DOS, mais en plus puissant). Pour pouvoir être exécutés, ces fichiers devront avoir les attributs de droits d'exécution adéquats.

Tout programme (en shell par exemple) exécuté sous Unix prend ses données éventuelles sur l'entrée standard (au clavier) et fournit ses résultats sur la sortie standard (à l'écran). Mais on peut rediriger cette entrée et/ou cette sortie vers des fichiers grâce aux signes "<" et ">"

Un exemple de script en shell

Cet exemple effectue les opérations suivantes sur tous les fichiers ".htm" du répertoire courant :

for i in `ls *.htm`
do 
ed $i <modifs
mv $i $i\l
done

le fichier modifs contient les instructions suivantes de l'éditeur de texte ed:

1,$s/\.htm/\.html/
w
q

Les processus

Unix est multi-tâches. Celà signifie que de nombreux processus peuvent s'éxecuter en parallèle. La commande "ps aux" permet de lister les caractéristiques principales des processus activés. On peut voir en particulier qu'il y a au moins un shell par utilisateur connecté, plus un certain nombre de processus "systèmes" (et donc lancés par root). Un utilisateur peut agir sur les processus lui appartenant, et en particulier les supprimer. Ceci peut être utile en cas de plantage d'un processus. Sous Unix, il est rarisssime que le système entier soit bloqué : seul un processus l'est. Il suffit alors de se connecter avec le même identifiant, et de "tuer" le processus défaillant pour que tout rentre dans l'ordre. Chaque processus est identifié par un numéro (pid) et on peut lui envoyer un signal au moyen de l'ordre :

kill no_de_signal no_de_processus

si on omet le no_de_signal, c'est un kill -1 qui est envoyé. En général, celà suffit pour stopper le processus en panne. Dans les cas graves, utiliser kill -9.

Au démarrage, Unix lance le processus "init" qui porte le numéro 1. Ce dernier lance ensuite, selon la configuration du système, tous les processus nécessaires à son bon fonctionnement. D'une manière générale, un processus ne peut être lancé qu'à partir d'un autre (le père) grâce au mécanisme de dédoublement (le "fork"). Par cette opération, le père continue de fonctionner, et un nouveau processus (le fils) est lancé.

Annexes

Les commandes de base

La plupart des commandes peuvent être utilisées avec des options (précédées d'un tiret). Celles-ci dépendent de chaque commande, mais il existe des options qu'on retrouve dans beaucoup de commandes, comme :

-a pour all : agit sur tous les objets possibles
-v pour verbose : mode "bavard"
-f pour force : ne demande pas confirmation
-r pour récursive : agit sur tous les sous répertoires
...

Les commandes peuvent être enchainées, la sortie de la première devenant l'entrée de la seconde, ceci au moyen de l'opératur "|"

Le détail de syntaxe de chaque commande peut être obtenu par :

manipulation de fichiers

modification des droits d'accès

gestion des processus

Les répertoires standard