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.
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
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.
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)
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.
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 |
---|---|
d | Répertoire, on dit aussi dossier |
l | Lien 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.
On associe à chaque fichier trois types de droits :
Ces droits sont attribués à trois types d'utilisateurs :
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 |
---|---|
/bin | Les fichiers exécutables |
/boot | Le noyau et les fichiers de démarrage |
/dev | Les fichiers périphériques |
/etc | Les fichiers de configuration |
/home | La racine des répertoires personnels des utilisateurs |
/mnt | La racine des points de montage |
/root | Répertoire personnel du super utilisateur |
/sbin | Les fichiers exécutables pour l’administration du système |
/tmp | Stockage des fichiers temporaires |
/usr | Programmes accessibles à tout utilisateur |
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
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 $.
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
La commande ls avec l'option -l et le paramètre /home affiche le contenu du répertoire /home :
$ ls -l /home
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érique | Association par défaut | Descripteur de fichier |
---|---|---|
Standard input buffer | Clavier | 0 |
Standard output | Ecran | 1 |
Standard output error | Ecran | 2 |
Ils peuvent être matérialisés de la sorte :
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) $
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 :
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.txt | Lit l’entrée depuis un fichier |
---|---|
> fichier.txt | Redirige la sortie standard vers un fichier, créé ou écrasé |
>> fichier.txt | Ajoute la sortie standard dans un fichier, créé s’il n’existe pas |
2> fichier.txt | Redirige 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
Il existe plusieurs méthodes pour enchaîner des commandes sur une même ligne :
cmd1; cmd2;...; cmdN
cmd1 || cmd2 || ... || cmdN
Si cmd1 ne se termine pas correctement, alors cmd2 est exécutée, et ainsi de suite.
cmd1 && cmd2 && ... && cmdN
Si cmd1 s'est bien déroulée, alors cmd2 sera exécutée, et ainsi de suite.
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 :
HOME | Contient le répertoire de connexion de l'utilisateur |
---|---|
PATH | Contient la liste des répertoires où effectuer une recherche de programmes entrés au clavier |
PS1 | Contient 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 */