INTRODUCTION A LINUX

Introduction

Linux est une brique logicielle, le composant essentiel d'une famille de systèmes d'exploitation. On le nomme coeur ou noyau du système d'exploitation, ou encore kernel en anglais. Il est basé sur de nombreux modules pouvant être internes, c'est à dire compilés en même temps que le noyau, ou externes, rajoutés à la demande.

Linux est un système de type Unix, libre et documenté. Il présente plusieurs caractéristiques importantes :

Pour être exploitable, Linux doit être accompagné d'un interpréteur de commande, communément nommé shell qui signifie coquille en anglais. Cette interface en ligne de commande permet à l'utilisateur de piloter l'ordinateur, de dialoguer avec celui-ci. Il existe de nombreux shells. Le shell Bash, très populaire, comporte des commandes internes, c'est à dire intégrées au shell, et externes, pouvant être ajoutées à la demande.

Linux possède son propre système de fichiers appelé ext3 ou ext4, mais peut en gérer beaucoup d’autres : Vfat, Ntfs... Les systèmes Linux se différencient en particulier par leur environnement graphique, quand ils en ont un, et par la solution mise en place pour gérer l'installation de nouveaux programmes.

Les différents utilisateurs

Les utilisateurs

Linux étant un système multi-utilisateurs, il est possible de définir un grand nombre d'utilisateurs. Pour des raisons de sécurité, ces utilisateurs ont des droits limités sur le système d'exploitation.

Pour connaître l'utilisateur d'un terminal :

$ whoami
eric

Le super-utilisateur

Il existe un utilisateur spécial, le super-utilisateur ou root en anglais. Son rôle est d'administrer le système. Il possède tous les droits.

Les groupes d'utilisateurs

Linux utilise aussi les groupes d'utilisateurs. Avec la commande id, on constate que tout utilisateur appartient :

$ id eric
uid=1000(eric) gid=1000(eric) groupes=1000(eric),4(adm),24(cdrom),27(sudo)

La commande sudo

Parfois, on souhaite que le système d'exploitation puisse être géré par plusieurs utilisateurs, que l'on pourra qualifier d'administrateurs. Pour cela, on donne à ces utilisateurs le droit d'utiliser la commande sudo. Elle permet d'exécuter les commandes nécessitant les droits administrateur.

Les fichiers

Les types de fichiers

Sous Linux, comme pour tout système de type Unix, tout est fichier. Il existe donc plusieurs sortes de fichiers. A chaque type de fichier est associé à un symbole que la commande ls -l affiche.

 - Fichier régulier, contenant des données
dRépertoire, on dit aussi dossier
lLien vers un autre fichier

Avec la commande ls -l, on constate aussi que tout fichier :

Comme pour l’utilisateur tout est fichier, il est nécessaire d’affecter aux systèmes externes (partitions sur disque, cd...) un répertoire. Cette affectation sera réalisée à l’aide de la commande de montage : mount.

Les privilèges

On associe à chaque fichier trois types de droits :

Ces droits sont attribués à trois types d'utilisateurs :

L'arborescence

Les fichiers sont organisés suivant une arborescence dont la racine est /. La racine est le sommet de la hiérarchie des répertoires. Sa structure est standard avec des extensions imposées par les distributions. Toute modification est de la compétence exclusive de l’administrateur, à l’exception des répertoires personnels situés dans /home.

Liste des répertoires principaux et leur rôle :

/Le répertoire racine
/binLes fichiers exécutables
/bootLe noyau et les fichiers de démarrage
/devLes fichiers périphériques
/etcLes fichiers de configuration
/homeLa racine des répertoires personnels des utilisateurs
/mntLa racine des points de montage
/rootRépertoire personnel du super utilisateur
/sbinLes fichiers exécutables pour l’administration du système
/tmpStockage des fichiers temporaires
/usrProgrammes accessibles à tout utilisateur

Les processus

Un processus est une instance de programme en cours d'exécution. A une exception près, il est toujours créé par un autre processus :

Les processus peuvent se trouver dans quatre états :

La commande ps -aux permet de dresser la liste des processus.

$ ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 119620  5816 ?        Ss   13:06   0:02 /sbin/init spla
root         2  0.0  0.0      0     0 ?        S    13:06   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    13:06   0:00 [ksoftirqd/0]
...

La commande kill permet de détruire un processus. Par exemple, pour détruire le processus de PID 3518 :

$ kill 3518

Les commandes du shell

L'invite de commande

Pour signifier que le shell est prêt à recevoir des commandes, il affiche une invite de commande, ou prompt en anglais. Elle peut contenir un nombre variable d'informations selon la configuration. Nous y ferons référence avec le caractère $.

La syntaxe d'une commande

Le shell interprète la série de caractères tapés et affichés à l'écran, à chaque fois qu'un retour chariot (entrée) est reçu. Une ligne de commande comporte plusieurs éléments séparés par des espaces :

Nom_de_la_commande -option1 --option2 paramètre1 paramètre2

Exemple

La commande ls avec l'option -l et le paramètre /home affiche le contenu du répertoire /home :

$ ls -l /home

Les entrées-sorties

Dès qu'elle est lancée, une commande lit, le cas échéant, ses données d'entrée dans l’entrée standard et écrit sa sortie dans la sortie standard qui, par défaut, correspondent respectivement au clavier et à l'écran du terminal.

Les processus accèdent à ces périphériques comme s'ils accédaient à des fichiers normaux, par le biais de handle (descripteurs de fichiers). Voici donc un récapitulatif des périphériques, de leur association par défaut, ainsi que des descripteurs de fichiers.

PériphériqueAssociation par défautDescripteur de fichier
Standard input bufferClavier0
Standard outputEcran1
Standard output errorEcran2

Ils peuvent être matérialisés de la sorte :

Exemple

La commande tr avec les paramètres A-Z et a-z transforme les entrées Bonjour puis Eric :

$ tr A-Z a-z           (Entrée)
Bonjour                (Entrée)
bonjour
Eric                   (Entrée)
eric                   (Crtl d)
$

Les tubes

Le tube, ou pipe en anglais, est un mécanisme de branchement entre plusieurs commandes. Dans un tube, la sortie de la première commande devient l'entrée de la seconde. Le shell prend à sa charge la connexion de la sortie standard de la première commande sur l’entrée standard de la deuxième. Le signe représentant le tube est |.

Il peut être matérialisé de la sorte :

Les redirections

Le mécanisme de redirection des entrées-sorties géré par le shell permet de changer l’association par défaut des canaux de l’entrée standard et des sorties standards. Il s’agit d’utiliser des fichiers normaux en entrée et en sortie plutôt que le clavier et l’écran. Ces redirections sont effectuées grâce au symboles suivants :

< fichier.txtLit l’entrée depuis un fichier
> fichier.txtRedirige la sortie standard vers un fichier, créé ou écrasé
>> fichier.txtAjoute la sortie standard dans un fichier, créé s’il n’existe pas
2> fichier.txtRedirige la sortie d'erreurs vers un fichier, créé ou écrasé

Par exemple, pour créer le fichier test contenant /home :

echo /home > test

Pour afficher le nombre de lignes contenues dans le fichier test.txt :

wc -l < test.txt

Les groupes de commandes

Il existe plusieurs méthodes pour enchaîner des commandes sur une même ligne :

Les variables d'environnement

Les variables sont des valeurs associées à des noms explicites. On retrouve dans l'environnement standard du shell un certain nombre de variables dites d'environnement. Les plus utilisées sont :

HOMEContient le répertoire de connexion de l'utilisateur
PATHContient la liste des répertoires où effectuer une recherche de programmes entrés au clavier
PS1Contient les informations données dans l'invite de commande

Bien sûr, l'utilisateur peut définir ses propres variables, en respectant la syntaxe suivante :

$ nom_variable=valeur
/* Sans espace avant ni après le signe égal */

Pour récupérer le contenu d'une variable, l'utilisateur utilise le caractère $ suivi du nom de sa variable.

Exemple :

$ echo $LOGNAME
root
/* Les noms de variables distinguent aussi les minuscules des MAJUSCULES */