Introduction à Linux
Crédit [1]
Origine
Pour la petite histoire, il faut savoir qu’au commencement de l’informatique professionnelle (dans les années 70), il existait :
-
Des mini ordinateurs (VAX, IBM, etc.) avec des systèmes d’exploitation tels que VMS, UNIX, etc. C’était des monstres ! Il fallait les installer dans des pièces séparées tant ils étaient volumineux.
-
Des micro ordinateurs (IBM, compatible, Apple) avec les systèmes d’exploitation MS-DOS, MINIX, IOS. Ils étaient employés dans les bureaux.
-
Des terminaux graphiques ou textes reliés aux mini ordinateurs.
L’informatique s’est ensuite démocratisée dans les foyers avec des ordinateurs tels que ATARI, Macintosch, IBM ou compatible, AMSTRAD, etc.
Dans les entreprises, les ordinateurs ont également considérablement réduit de volume.
N’ont réellement subsisté que les micro ordinateurs compatibles et Apple.
Au début des années 90, un étudiant finlandais, Linus Torvalds, reçoit un ordinateur avec le fameux micro processeur 80386 INTEL (jeu d’instructions 32 bits) muni du système d’exploitation MINIX (un mini UNIX). Il utilisait un émulateur de terminal pour se connecter à son université.
Étant déçu du fonctionnement de cet émulateur, il décida d’en créer un qui devint beaucoup plus performant, au point qu’il devint un vrai petit système d’exploitation. Il s’inspira profondément du système UNIX développé dans les années 70 par 2 américains travaillant pour AT&T Bell Laboratories. Le noyau Linux était né !
Sa grande force fut de développer ce système de manière ouverte, en distribuant les sources, sous licence libre, afin que la communauté mondiale des développeurs puisse apporter sa contribution. Il reste cependant le superviseur, celui qui valide les nouvelles versions.
Grâce aux contributions, le noyau Linux en est venu à supporter les derniers matériels, s’est étoffé d’outils logiciels pour tous les usages. Cela a contribué à sa rapide propagation dans les universités, les entreprises et même les familles.
Linux concurrence maintenant le géant Microsoft.
Description
A l’heure actuelle, Linux se trouve sous la forme de distribution (OpenSuSE, Ubuntu, Kali, etc.).
Au labo, nous utilisons la distribution OpenSUSE.
Une distribution contient :
-
Le noyau Linux (le minimum pour contrôler l’ordinateur) validé par Linus Torvalds.
-
Des interfaces graphiques (KDE, GNOME, etc.).
-
Toute une panoplie de logiciels pour tous les usages (LibreOffice, etc…).
-
Des outils spécifiques à la distribution pour installer et configurer.
Lorsque la version du noyau Linux est paire, le noyau est dit stable. Il vaut mieux choisir une distribution avec un noyau pair. |
Performances
Linux est multi tâches, multi utilisateurs.
-
Multi tâches signifie que plusieurs programmes peuvent être lancés simultanément. Si l’ordinateur ne possède qu’un seul processeur, Linux alloue une portion de temps de fonctionnement à chaque tâche ou processus (programme en cours d’exécution), ce qui donne l’impression aux utilisateurs que tous les processus fonctionnent en même temps. Le dispositif dans le noyau Linux permettant la gestion des processus est appelé l'ordonnanceur (scheduler en anglais).
-
Multi utilisateurs signifie que plusieurs utilisateurs peuvent travailler en même temps sur un système Linux. Bien sur, un ordinateur ne dispose en général que d’un clavier/écran. Par le biais d’autres ordinateurs connectés par le réseau informatique, il est possible de se connecter à distance au système Linux et de travailler comme si nous étions sur l’écran/clavier principal. Dans ce cas, on doit disposer d’un logiciel appelé émulateur de terminal. Il en existe en mode ligne de commande (putty ou ssh) ou graphique (Xming). Les émulateurs de terminaux graphiques consomment beaucoup de ressource réseaux et demande que l’ordinateur soit puissant. C’est la raison pour laquelle dans la plupart des cas, des émulateurs de terminaux en mode ligne de commande sont utilisés. L'administrateur
root
dispose de tous les droits sur le système. Son mot de passe — configuré lors de l’installation — est normalement “admin”.
Linux dispose d’un noyau à structure modulaire. Il est possible d’étendre ou de diminuer les fonctionnalités du noyau Linux en ajoutant ou retranchant des modules logiciels (commandes insmod
, lsmod
, rmmod
). Il faut être expert pour cela.
L’interface de commande
Sous Linux, nous utilisons souvent l’interface textuelle de commande. Elle se révèle souvent plus rapide et efficace. Cette interface est appelée shell. Il existe plusieurs variantes de shell.
Au labo, nous utilisons le shell bash.
Il existe bien sûr aussi une interface de commande graphique et même plusieurs (KDE, GNOME).
Au labo, nous utilisons l’interface graphique KDE.
Le système de fichiers
Le système de fichiers permet de gérer l’organisation et l’accès aux fichiers sur une partition du disque. Il est indispensable.
Il y a plusieurs types de systèmes de fichiers (ext4, btrfs …).
Le système de fichier est organisé sous forme d'arborescence.
La répertoire racine nommé invariablement ‘/’ est le répertoire de plus haut niveau.
Les chemins d’accés absolus et relatifs
Pour accéder à un fichier particulier, on doit généralement spécifier son emplacement — ou chemin d’accès (path en anglais) — en précédant son nom par la totalité des répertoires à traverser depuis le répertoire racine en les séparant par le caractère slash (/
) : c’est ce qu’on appelle un chemin absolu.
data.txt
situé dans le répertoire /home/ragnar/Documents/
ragnar@pluton:/> less /home/ragnar/Documents/data.txt
Un chemin absolu peut également débuter depuis le répertoire d’accueil de l’utilisateur courant (→ /home/<user>
, <user>
étant le nom de l’utilisateur) en spécifiant le caractère ‘~’ (→ tilde).
/home/ragnar
ragnar@pluton:/> less ~/Documents/data.txt
Il existe une autre manière de spécifier l’emplacement d’un fichier ou répertoire — nommée chemin relatif — qui est basée sur la notion de répertoire courant. Ce dernier représente le répertoire dans lequel l’utilisateur se trouve actuellement. Son emplacement peut évoluer au cours du temps en utilisant par exemple la commande cd
(Change Directory).
Le répertoire courant peut être obtenu :
-
en inspectant l’invite de commande (ou prompt en anglais) :
ragnar@pluton:~/Downloads> (1)
1 Le répertoire courant est ~/Downloads
c’est-à-dire/home/ragnar/Downloads
d’après le prompt qui indique le nom d’utilisateur avant le ‘@’ -
en tapant la commande
pwd
ragnar@pluton:~/Downloads> pwd (1) /home/ragnar/Downloads ragnar@pluton:~/Downloads>
1 On demande au shell d’afficher le répertoire courant avec la commande pwd
(→ Print Working Directory)
Pour spécifier le répertoire courant dans une commande, on utilise une abbréviation matérialisée par un point (‘.’).
ragnar@pluton:~> cd ./Downloads (1)
ragnar@pluton:~/Downloads>
1 | On demande au shell de se déplacer dans le sous-répertoire Downloads situé dans le répertoire courant c’est-à-dire /home/ragnar/Downloads . |
Le répertoire qui contient le répertoire courant est appelé le répertoire parent. Pour y faire référence dans une commande, on utilise 2 points (‘..’).
Ci-dessous un ensemble de commandes qui illustrent l’utilisation des chemins absolus et relatifs.
ragnar@pluton:~/Downloads> cd /usr/bin (1)
ragnar@pluton:/usr/bin> cd ~/Downloads/ (2)
ragnar@pluton:~/Downloads> cd .. (3)
ragnar@pluton:~> touch ./Documents/compte_rendu.txt (4)
ragnar@pluton:~> cd ../../usr/local/ (5)
ragnar@pluton:/usr/local>
1 | Quel que soit le répertoire courant, on se déplace à l’aide d’un chemin absolu dans /usr/bin/ . Le repertoire courant devient /usr/bin/ . |
2 | On se déplace dans le sous répertoire Downloads du répertoire de l’utilisateur courant (→ /home/ragnar/Downloads ) avec un chemin absolu. Celui-ci devient alors le répertoire courant. |
3 | On se déplace avec un chemin relatif dans le répertoire parent de ~/Downloads/ c-à-d ~ (→ /home/ragnar ). |
4 | On crée un fichier vide compte_rendu.txt dans le sous-répertoire Documents du répertoire courant à l’aide d’un chemin relatif. |
5 | On se déplace dans le répertoire /usr/local/ à partir du répertoire courant à l’aide d’un chemin relatif. Le chemin relatif spécifie de “remonter” de 2 niveaux dans l’arborescence de fichiers avant de “redescendre” dans le répertoire usr/ puis dans son sous-répertoire local/ . |
Propriétés des fichiers
Un fichier est caractérisé par :
-
son type,
-
ses droits d’accès,
-
son propriétaire,
-
son groupe.
La gestion des droits est la même quel que soit le système de fichier installé(ext4, btrfs …).
ragnar@pluton:~ > ls -l
rw-r--r-- 1 root root 269 Sep 13 19:50 .gtkrc-2.0
drwxr-xr-x 1 root root 10 Sep 13 19:50 .local
drwxr-xr-x 1 root root 20 Sep 14 15:41 Documents
drwxr-xr-x 1 root root 0 Sep 13 19:50 Downloads
drwxr-xr-x 1 root root 0 Sep 13 19:50 Music
drwxr-xr-x 1 root root 0 Sep 13 19:50 Pictures
drwxr-xr-x 1 root root 0 Sep 13 19:50 Videos
-rw-r--r-- 1 root root 0 Sep 14 15:42 readme.txt
Type (1erbit) |
Droits propriétaire (les 3 bits suivants) |
Droits du groupe (les 3 bits suivants) |
Droits des autres (les 3 bits suivants): |
Propriétaire |
Groupe |
|
|
|
|
Nom de l’utilisateur propriétaire du fichier |
Nom du groupe d’utilisateurs ayant des droits particuliers |
Lorsque la lettre est présente, le droit est effectif. Lorsque le caractère ‘-’ est présent, cela signifie que le droit est refusé.
Les droits ‘r’ et ‘w’ spécifient les droits en lecture (→ Read) et en écriture (→ Write) sur des fichiers ou répertoires.
L’affichage du contenu d’un fichier/répertoire, sa copie ou son déplacement impliquent l’autorisation de son droit ‘r’ pour l’utilisateur qui lance la commande .
La création, suppression, édition, copie ou déplacement d’un fichier/sous-répertoire dans un répertoire impliquent l’autorisation du droit ‘w’ dans ce dernier pour l’utilisateur qui lance la commande.
Le droit ‘x’ (→ eXecute) ne s’applique qu’aux fichiers exécutables (programmes ou scripts) et aux répertoires. Pour un répertoire, ce droit signifie qu’on peut le “traverser” pour accéder à ses sous répertoires.
La 3ème série de droits — “Droits des autres”) — s’applique aux utilisateurs n’étant ni le propriétaire du fichier/répertoire ni un membre du groupe indiqué.
suid, sgid, sticky bit
Ces droits spéciaux méritent une explication particulière
✓ suid
Ce droit ne s’applique qu’aux fichiers exécutables et non aux répertoires.
Un fichier exécutable possédant ce droit s’exécute sous l’identité de son propriétaire quel que soit l’utilisateur qui le lance.
Linux ignore ce droit pour les exécutables qui sont des scripts (Python, bash …) |
C’est très pratique mais peut s’avérer une faille de sécurité si le propriétaire du fichier est root
.
Exemple : la commande passwd
, qui permet à n’importe qui de changer son mot de passe, dispose de ce droit. Elle est exécutable par n’importe qui alors qu’elle doit modifier un fichier système (→ /etc/passwd
) possédé par l’utilisateur root
localhost:~ # ls -l /usr/bin/passwd
-rwsr-xr-x 1 root shadow 65208 Apr 19 09:36 /usr/bin/passwd (1)
1 | un s minuscule apparait à la place du droit x du propriétaire pour signaler l’autorisation du droit suid. Si le fichier n’est pas exécutable par le propriétaire, c’est un ‘S’ majuscule qui est indiqué. |
Si un pirate parvient, à l’aide d’un hack, à garder l’identité de root
après exécution de la commande, celui-ci prend le contrôle total de la machine. 😱
Pour donner ce droit à un fichier on utilise l’une ou l’autre des commandes suivantes :
-
chmod u+s <exécutable>
ex.
chmod u+s ~/app
-
chmod 4<droits-rwx-en-octal> <exécutable>
ex.
chmod 4755 ~/app
Pour le retirer :
-
chmod u-s <exécutable>
ex.
chmod u-s ~/app
-
chmod 00<droits-rwx-en-octal> <exécutable>
ex.
chmod 00755 ~/app
✓ sgid
Contrairement au droit suid, le droit sgid, s’applique aussi bien aux fichiers exécutables qu’aux répertoires.
Son rôle sur un fichier exécutable est à peu près semblable au suid en permettant de prendre l’identité du groupe — et non du propriétaire — durant son exécution.
Pour un répertoire son rôle est complètement différent. La création de fichiers ou de répertoires dans un répertoire ayant ce droit par un utilisateur aura pour effet qu’ils appartiendront au groupe propriétaire du répertoire.
Ce droit est particulièrement utile pour les répertoires utilisés dans le cadre d’un travail collaboratif entre membres d’un groupe.
Pour donner ce droit à un exécutable/répertoire on utilise l’une ou l’autre des commandes suivantes :
-
chmod g+s <exécutable-ou-répertoire>
ex.
chmod g+s ~/Documents/
-
chmod 2<droits-rwx-en-octal> <exécutable-ou-répertoire>
ex.
chmod 2755 ~/Documents/
Pour le retirer :
-
chmod g-s <exécutable-ou-répertoire>
ex.
chmod g-s ~/Documents/
-
chmod 00<droits-rwx-en-octal> <exécutable-ou-répertoire>
ex.
chmod 00755 ~/Documents/
✓ sticky bit
Ce droit, bien que possible pour un fichier, n’a de sens aujourd’hui que pour un répertoire.
Il n’accorde le droit de suppression d’un fichier dans ce répertoire qu’à son propriétaire (ou à l’utilisateur root
).
Pour donner ce droit à un répertoire on utilise l’une ou l’autre des commandes suivantes :
-
chmod o+t <répertoire>
ex.
chmod o+t ~/Documents/
-
chmod 1<droits-rwx-en-octal> <répertoire>
ex.
chmod 1755 ~/Documents
Pour le retirer :
-
chmod o-t <répertoire>
ex.
chmod o-t ~/Documents/
-
chmod 00<droits-rwx-en-octal> <répertoire>
ex.
chmod 00755 ~/Documents
Un bon exemple d’utilisation de ce droit est celui du répertoire /tmp
de Linux dans lequel tout le monde peut écrire mais
qui interdit à tout utilisateur, autre que le propriétaire du fichier, de le supprimer.
luc@localhost:~> ls -ld /tmp
drwxrwxrwt 1 root root 1618 Sep 21 19:06 /tmp (1)
luc@localhost:~> touch /tmp/dummy.txt (2)
luc@localhost:~> ls -l /tmp/dummy.txt (3)
-rw-r--r-- 1 luc ciel 0 Sep 21 19:06 /tmp/dummy.txt
luc@localhost:~> su john --login (4)
Password:
john@localhost:~> rm /tmp/dummy.txt (5)
rm: remove write-protected regular empty file '/tmp/dummy.txt'? y
rm: cannot remove '/tmp/dummy.txt': Operation not permitted
john@localhost:~> logout (6)
luc@localhost:~> rm /tmp/dummy.txt (7)
luc@localhost:~> ls -l /tmp/dummy.txt (8)
ls: cannot access '/tmp/dummy.txt': No such file or directory
luc@localhost:~>
1 | le sticky bit (→ bit t ) est positionné sur /tmp |
2 | l’utilisateur luc crée un fichier dummy.txt dans ce répertoire |
3 | le fichier appartient à luc |
4 | on se connecte en tant que l’utilisateur john |
5 | john essaye de supprimer le fichier mais ceci lui est refusé |
6 | on reprend l’identité de luc |
7 | luc supprime avec succès le fichier |
8 | effectivement, le fichier n’existe plus |
Commandes de base du système de fichiers
Les principales commandes à connaître qui s’appliquent au système de fichiers sont les suivantes :
|
(change directory) Permet de se déplacer dans un autre dossier. Exemples :
|
|
|
|
|
|
|
|
|
Il existe un caractère spécial (‘*’) permettant de remplacer une partie d’un nom.
Exemples :
-
vous voulez lister tous les fichiers d’un répertoire se terminant par
.c
.La commande à taper est la suivante :
ls *.c
-
vous voulez fixer les droits à un fichier personnel nommé
fichier.c
cd cd Documents chmod 640 fichier.c (1) chown ragnar fichier.c chgrp users fichiers.c
1 Explications du droit 640 : -
6 : en binaire 110|2 ⇒ “rw-”. Le propriétaire dispose des droits de lecture (→ ‘r’), d’écriture (→ ‘w’) mais pas d’exécution (→ ‘-’)
-
4 : en binaire 100|2 ⇒ “r--”. Le groupe dispose seulement du droit de lecture du fichier (sous réserve de pouvoir accéder au répertoire).
-
0 : en binaire 000|2 ⇒ “---”. Aucun droit pour tous les autres utilisateurs de Linux.
-
Outil de configuration OpenSUSE
Il existe un utilitaire de configuration graphique nommé YaST2 qui met à jour automatiquement les fichiers de configuration sous-jacent. L’extension de ces fichiers est la plus souvent .conf
et se trouve dans le répertoire /etc
.
A partir d’un terminal en ligne de commande, l’utilitaire est accessible en tapant la commande sudo yast
.
Consoles Linux additionnelles
Par défaut, Linux exécute l’interface graphique KDE.
Toutefois, il existe des terminaux en mode ligne de commande (texte) démarrés automatiquement lors de l’initialisation de Linux.
On y accède par la séquence de touches Ctrl + Alt +F<n> avec <n> valant 1,2,3…
Ctrl + Alt +F7 permet de revenir à l’interface graphique.
Le nom de l’administrateur est invariable : root
. Son mot de passe — configuré lors de l’installation — est admin
.
Le plus souvent possible, il faut se connecter avec son nom d’utilisateur reçu en début d’année.
Il sera nécessaire de se connecter administrateur pour les tâches d’administration.
Il est possible d’exécuter une commande en tant qu’administrateur, bien que connecté sur un compte standard, via la commande |
En agissant en tant qu’administrateur, il est possible de bloquer le système d’exploitation et de devoir tout réinstaller, en cas de fausses manipulations . |
N’hésitez pas à utiliser les pages de manuel Linux accessibles en ligne de commande via la commande Exemple pour la commande |
🞄 🞄 🞄