Le système GNU/LINUX
1 – Historique
Né en 1991 de l'initiative d'un étudiant Finlandais (Linus Torvalds), Linux est un
système d'exploitation libre (c'est à dire que l'on peut l'utiliser librement, le
modifier et le redistribuer), contrairement aux OS Windows et MacOs X.
Il est multitâche et multi-utilisateurs.
Linux n'est pas qu'un système d'exploitation en ligne de commande prévu
uniquement pour fonctionner sur des serveurs, il possède également un système
graphique agréable, stable et relativement facile à utiliser.
On a l'habitude de dire que Linux est un système d'exploitation. En réalité, Linux
est uniquement le cœur (on dit le "noyau") du système d'exploitation GNU/Linux
(les systèmes d'exploitation Microsoft Windows 10 et 11 ont également un noyau,
mais différent puisqu'ils s'appuient sur le noyau NT).
Pour rappel, le noyau s'occupe des "basses besognes" : la gestion de la mémoire,
l'accès aux périphériques (disque dur, lecteur de CD-Rom, clavier, souris, carte
graphique...), le partage du temps processeur entre les programmes (multitâches),
la gestion du réseau, etc.
GNU est un projet né en 1983 par l'initiative de Richard Stallman. Il a permis,
grâce à la participation de nombreux bénévoles, de créer une multitude
d'utilitaires indispensable au noyau Linux comme le compilateur gcc, les éditeurs
de texte vim et emacs, ou encore des commandes comme tar, tail, man, bash, …
L'ensemble des programmes de base GNU, associé au noyau Linux, constitue donc
le système d'exploitation GNU/Linux qui, par abus de langage, est appelé "Linux"
au lieu de "GNU/Linux".
Contrairement à Windows dont l'environnement graphique est unique et imposé,
il existe différentes interfaces graphiques sous Linux, les principales étant Gnome
(simple et moderne), KDE Plasma (personnalisable, proche de Windows) et XFCE
(léger). Il est possible d'utiliser Linux sans ces gestionnaires de bureau (comme
initialement), et même de ne lancer l'interface graphique qu'à la demande.
GNU/Linux étant un système "gratuit", certaines sociétés l'ont reprises et
complétées afin de distribuer, à leur mesure, un système d'exploitation plus
complet. C'est ce que l'on appelle vulgairement les distributions qui finalement ne
se distinguent que par un "emballage" différent du système.
Parmi les plus connues, on trouve RedHat (orientée serveur), Fedora, Mandriva,
Debian, Suse, Slackware
Il existe des dérivés à des distributions. Ubuntu et Knoppix sont toutes les deux
issues de Debian.
2 - La console
La plupart des actions peut s'effectuer à partir de l'interface graphique X11 ou
Wayland (plus moderne), ou plutôt de ses surcouches comme KDE ou GNOME).
Cependant pour certains travaux, il est beaucoup plus rapide d'utiliser les lignes de
commandes dans une console plutôt que de faire appel à de lourdes solutions
graphiques. De plus se connecter à un serveur Linux à distance impose
obligatoirement l'utilisation du shell.
Le shell est la liaison la plus élémentaire entre l'utilisateur et le système
d'exploitation. C'est un programme qui reçoit des commandes (saisies par
l'utilisateur), les interprète et les transmet au système d'exploitation.
On ne peut pas utiliser la console directement, il faut au préalable se loguer avec
un compte existant ("login") puis renseigner le mot de passe correspondant.
Il existe, sous Linux, 6 consoles différentes que l'on peut utiliser simultanément
(accessible par Ctrl + Alt + F1 à Ctrl + Alt + F6).
a) Le prompt
Une fois logué sur l'invite de commandes, le shell affiche le "prompt". Voici un
exemple :
tux@clinux:~$
tux représente le compte connecté
@ ne signifie rien d'autre que "at" (traduction "chez")
clinux indique le nom de l'ordinateur
: est un simple séparateur
~ indique le répertoire dans lequel on se situe actuellement (ici le dossier
personnel de l'utilisateur tux soit /home/tux).
$ signifie que l'on s'est connecté avec le compte utilisateur "standard". Si l'on
s'était connecté avec le compte de super-utilisateur (root) alors ce serait le
symbole # qui serait affiché.
En résumé : je suis connecté avec le compte utilisateur standard tux sur la machine
s'appelant clinux et je me situe actuellement dans mon répertoire personnel.
b) L’auto complétion
L'auto complétion de commande (touche tabulation) permet, en outre, de
compléter le nom de la commande à partir de ses premières lettres.
Par exemple dans la console si l'on saisit chm et que l'on "tabule" alors la console
va compléter la commande en écrivant chmod.
On peut également, dans la console, sortir la liste des commandes commençant
par une séquence de lettre. Si l'on saisit "c" et que l'on "tabule" 2 fois alors la
console affiche la liste des commandes commençant par "c" (cat, chmod, chown,
…).
Attention cette liste peut parfois être très longue et le résultat sera alors affiché
page par page. Il est donc impératif de connaitre quelques raccourcis clavier pour
accéder à l'ensemble des résultats s'affichant sur plusieurs pages.
- la touche Espace permet d'afficher la page suivante
- la touche b (back) permet de revenir à la page précédente
- la touche Entrée permet d'afficher la ligne suivante
- la touche y permet de revenir à la ligne précédente
- la touche q (quit) permet d'arrêter l'affichage de la liste
Il est parfois bien pratique de ne pas avoir à retaper une longue commande que
l'on aurait saisie auparavant. En tapant successivement sur la touche , on
rappelle alors les commandes précédemment envoyées au shell.
La commande history permet d'afficher un historique numéroté des commandes
précédemment saisies.
c) Les paramètres de commande
Le but de la console est bien sûr de permettre d'envoyer des commandes
(constitué d'un seul mot sans espace) au système auxquelles on peut, pour
certaines, joindre des options (on parle plutôt de paramètres).
Ces paramètres peuvent être écrits de façon abrégée (constitué d'une seule lettre
et précédé d'un tiret "-") ou alors de façon complète (plusieurs lettres et précédé
alors de 2 tirets "- -"):
tux@clinux:~$ ls -a
. .bashrc images
.. .ssh musiques
tux@clinux:~$ ls --all
3 - Dossiers et fichiers sous Linux
a) La racine
Linux ne gère pas vraiment les fichiers de la même façon que Windows. En effet,
sous Linux, on ne trouve pas de lettres ("C:\", "D:\", "E:\", …) pour identifier les
disques-dur, lecteur CD et autres périphériques de stockage USB.
Linux place tout "au même endroit" qui part d'un seul et unique répertoire (le
dossier racine "/").
Le répertoire racine est donc le dossier de base du plus haut niveau qui contient
tous les autres dossiers et fichiers.
b) L'architecture des dossiers et ses fichiers
Sous Windows, un dossier peut être représenté comme ceci :
"C:\Windows\System32".
"System32" est donc un sous dossier du répertoire Windows lui-même situé à la
racine de la partition système du disque-dur "C:\". Ici c'est l'antislash "\" qui joue
le rôle de séparateur pour hiérarchiser le niveau des dossiers.
Sous linux, c'est le slash "/" qui sert de séparateur.
Si l'on observe le chemin suivant "/home/tux/", on peut donc dire que "tux" est un
sous répertoire du dossier "home" lui-même situé à la racine ("/").
Par habitude, on n'utilise pas d'espace, ni d'accents pour nommer des fichiers et
dossiers sous Linux mais rien ne l'en empêche.
Sous Windows, un fichier est uniquement un fichier.
Sous Linux, un fichier peut être un fichier ordinaire mais peut aussi représenter un
périphérique (port USB, carte son...), un programme en cours de fonctionnement,
une partition, un dossier, etc. Tous les périphériques matériels apparaissent
comme de simples fichiers dans lesquels on peut lire et/ou écrire des données.
c) Les dossiers de la racine
Linux possède de nombreux répertoires qui ont chacun leur rôle tous placés
quelque part en dessous de la racine.
Voici un schéma non exhaustif rassemblant les principaux dossiers de Linux (et
même de tous les systèmes de type Unix):
bin : commandes essentielles (ls, cd, mkdir, …) du système utilisés par les
utilisateurs et le super-utilisateur root
boot : fichiers de démarrage de Linux (noyau du système)
dev : fichiers représentant les périphériques (disque, carte son, trou noir (NULL),
…) en mode "données brutes"; il faut alors utiliser des programmes pour lire et
comprendre ces contenus (par exemple, en montant la partition /dev/sdb1 dans
/mnt/cle-usb pour accéder aux fichiers).
etc : fichiers de configuration du système propres à tous les utilisateurs
home : répertoires personnels des utilisateurs qui y stockent leurs fichiers
personnels et la configuration des programmes
lib : dossier contenant les bibliothèques partagées (généralement des fichiers .so)
utilisées par les programmes, c'est l'équivalent des DLL de Windows
mnt : dossiers représentant les périphériques amovibles "montés" (clé USB, cd-
rom, dossier partagé d'un serveur de fichier, …)
root : répertoire personnel du super-utilisateur "root" (l'administrateur de la
machine)
sbin : programmes binaires essentiels du système (adduser, usermod, …) réservés
à root
tmp : fichiers temporaires crées par les programmes et supprimés à leur fermeture
usr : répertoire prévu pour installer des programmes par les utilisateurs
var : dossier au contenu varié (journaux d'événement (log), file d'impression
(spool), mail en cours d'envoi, …)
d) Se déplacer et "lister" un dossier
L'installation de Linux crée un nombre de dossiers très important dans son système
de fichiers unifié. Sans explorateur graphique, on est vite perdu mais
heureusement certaines commandes bien pratiques permettent de nous situer et
de nous déplacer dans l'arborescence de ces dossiers.
Certains prompts (en fonction du fichier de configuration .bashrc) n'affiche pas
toujours le chemin du dossier dans lequel on se trouve. Il existe une commande
pwd (print working directory) qui permet d'afficher ce chemin permettant ainsi de
se situer par rapport à la racine.
root@clinux:~# pwd
/root
which est une autre commande intéressante qui situe l'emplacement d'une
commande (indiquée en paramètre).
root@clinux:~# which pwd
/bin/pwd
La commande ls (list) permet de lister les fichiers et sous-dossiers d'un répertoire.
tux@clinux:~$ ls
images musiques [Link]
Cette commande accepte un grand nombre de paramètres :
-a : affiche tous les sous-dossiers et fichiers cachés
- l : affiche le détail de chaque élément du dossier
-h : affiche une taille lisible (humaine) de chaque élément du dossier en indiquant
leur taille en Ko, Mo, Go, …
- t : trie la liste par date de dernière modification (le dernier fichier modifié
s'affiche en premier)
- r : en combinant les paramètres "t" et "r", on trie la liste dans l'autre sens (le
dernier fichier apparait en bas de la liste)
tux@clinux:~$ ls -larth
-rw - - - - - - - 1 tux tux 53K 2011-05-20 19:04 .bashrc
drwx - - - - - - 1 tux tux 29K 2011-05-21 18:59 .ssh
drwx - - - - - - 4 root root 4,0K 2011-05-22 13:47 ..
drwx - - - - - - 47 tux tux 4,0K 2011-09-17 13:47 .
drwx r - - r - - 2 tux tux 18M 2012-02-08 08:46 images
drwx r - - r - - 1 tux tux 94M 2012-03-02 17:10 musiques
-rw - - - - - - - 1 tux tux 1,2M 2014-09-20 17:29 [Link]
Ici, on peut lire, pour chaque fichier (dernière colonne), ses droits puis le nombre
de lien s physiques puis son propriétaire puis le groupe propriétaire puis sa taille
(en octet si l'unité n'est pas précisée) et sa date de dernière modification.
Pour se déplacer dans l'arborescence des dossiers, il faut utiliser la commande cd
(change directory).
On indique à la suite de cette commande le dossier dans lequel on souhaite aller
sous la forme d'un chemin.
Ce chemin peut être :
- un chemin absolu (on définit alors le chemin complet qui commence toujours par
le dossier racine /)
- un chemin relatif (on définit le chemin à partir de l'endroit où l'on se situe).
Le dossier ".." représente le dossier parent du dossier où l'on se situe
actuellement.
Le dossier "." représente le dossier dans lequel on se trouve actuellement.
Le dossier "~" correspond au dossier home de l'utilisateur qui est connecté (ici le
sous-dossier "tux" du dossier "home")
Si la commande cd est saisie sans paramètre (sans chemin) alors cela revient à
taper cd ~
tux@clinux:~$ cd /etc/bind
tux@clinux:/etc/bind$ cd ..
tux@clinux:/etc$ cd bind
tux@clinux:/etc/bind$ cd ../ssh
tux@clinux:/etc/ssh$ cd ../../home
tux@clinux:/home$ cd ~
L'auto-complétion de chemin fonctionne de la même manière que l'auto-
complétion de commande.
Si l'on saisit les premières lettres d'un dossier et que l'on tabule, la console
complétera alors automatiquement le nom du dossier (sous réserve qu'il n'y en ait
qu'un seul qui corresponde sinon il affichera une liste de tous les dossiers
commençant par la séquence de lettre saisie).
Pour connaitre la taille d'un dossier, on utilise la commande du (disk usage).
L'option -h permet d'avoir une valeur exprimée en taille humaine (Ko, Mo, Go, …)
L'option -s (sum) indiquera la taille totale du dossier (fichiers et sous-dossiers)
L'option -S permet de ne pas inclure la taille des sous-dossiers (seuls les fichiers du
dossier sont pris en compte)
tux@clinux:~$ du -sh
113 M .