3 - Le SHELL, la séquence de boot et les disques

Démarrage du SHELL

Le Shell est un outil en ligne de commandes, qui permet d’utiliser toutes les ressources de l’ordinateur.

Toutes les configurations du matériel et des applications peuvent se faire par le Shell.

Il permet d’exécuter des commandes mais fournit aussi un langage de programmation incluant les structures de contrôle (boucles, conditions…)

Il permet de définir les entrées sorties telles que le clavier et l’écran.

Il se lance en choisissant l’application Terminal dans votre distribution.

Il existe plusieurs types de Shell:

  • sh : Bourne Shell

  • bash : Bourne Again Shell

  • csh : C Shell

  • tcsh : Tenex C Shell

  • ksh : Korn Shell

  • zsh : Zero Shell

Vous pouvez voir la liste des Shells présents dans votre distribution avec la comande:

$ cat /etc/shells
$ chsh -l

Vous pouvez voir le shell que vous utilisez actuellement:

$ echo $SHELL

Bash est le shell le plus utilisé.

Notez que les commandes se tapent à la suite d’un prompt qui se présente de la manière suivante:

[utilisateur@machine emplacement]$

Il est possible de paramétrer l’affichage du prompt.

$ signifie que vous êtes un utilisateur standard

# signifie que vous êtes le super-utilisateur root.

Pour le personnaliser (nous y reviendrons) vous pouvez utiliser le fichier $HOME/.bash_profile

Le shell qui vous est attribué est défini dans le fichier /etc/passwd

Visualisez ce fichier (de préférence avec less ou cat pour ne pas risquer de le modifier)

Notez la ligne de votre utilisateur, la dernière partie correspond à votre shell par défault.

Vous pouvez changer de shell avec par exemple:

$ /bin/tcsh

La ligne de commande

Une commande peut être composée de 1, 2 ou 3 éléments:

  • La commande

  • Le ou les commutateur(s)

  • Le ou les argument(s)

Commandes de base

Pour obtenir l’aide d’une commande :

$ man <commande>

Exemple :

$ man man

Pour lister le contenu d’un répertoire :

$ ls

Exemple :

$ ls -l /root

Pour changer de répertoire :

$ cd <répertoire>

Exemple :

$ cd /home

Pour exécuter une commande avec des privilèges :

$ sudo <commande>

Exemple :

$ sudo ls /root

Créer un répertoire:

$ mkdir <répertoire>

Exemple:

$ mkdir test

Supprimer un répertoire ou un fichier:

$ rm <fichier>
$ rm -r <répertoire>

Exemple:

$ rm -r test

Éditer un fichier texte:

$ vim <fichier>

Exemple:

$ vim fichiertexte

Afficher le contenu d’un fichier texte sans l’éditer:

$ cat <fichier>

Exemple:

$ cat /etc/services

Certaines commandes peuvent nécessiter plusieurs arguments. C’est le cas, par exemple des commandes de copie ou de déplacement. Pour copier un fichier ou un répertoire, il faut une ou plusieurs sources et une destination (fichier ou répertoire):

Copie de fichiers:

$ cp <source1> [source2 [source3[…]]] <destination>

Exemple:

$ cp fichier1 fichier2 fichier2 mon_repertoire

Copie de répertoires avec ou sans fichiers:

$ cp -r <source1> [source2[source3[…]]] <destination>

Exemple:

$ cp -r mon_repertoire fichier.txt /home

Le principe est le même avec la commande mv (move) qui permet de déplacer des fichiers ou des répertoires:

Exemple de fichiers:

$ mv fichier1 fichier2 mon_repertoire

Exemple de répertoire:

$ mv mon_repertoire fichier1 /home

Le processus d’amorçage

  1. Le BIOS (Basic Input Output System): mémoire morte (ne change pas, toujours le même code), s’active au démarrage et va chercher, sur le support de démarrage configuré (le disque dur, la clé USB,…), le MBR

  2. Le MBR (Master Boot Record): 512 octets, 1er secteur du disque qui contient la table des partitions. Son rôle est de charger le boot loader (Grub, Lilo).

  3. Le boot loader: permet de choisir parmi plusieurs systèmes ou plusieurs noyau. Il permet de charger le noyau qui monte la racine / puis charge les pilotes nécessaire et lance les processus systemd et kthreadd.

  4. Systemd: processus en charge de tout gérer (les autres processus, le noyau…). Il a le pid (processus id) 1. En fonction du niveau d’exécution, systemd démarre les services requis. Un autre processus est lancé par le noyau pour gérer ses différents processus: kthreadd (pid 2).

Les commandes permettant de lister les processus s’exécutant sur une machine sont:

$ ps -ef

Ou, pour pouvoir les parcourir plus simplement :

$ ps -ef | less

Le chargement du noyau lance le processus kthreadd qui permet d’interragir avec le matériel.

Il s’agit du deuxième processus à être lancé après le noyau, il aura donc le pid 2.

$ ps -ef --sort=pid

Cette commande affiche tous les processus classés dans l’ordre de leur pid.

$ ps -ef --sort=pid | less

Notez que tous les processus ont un pid.

Cibles systemd Utilité
poweroff ou runlevel 0 Arrêt du système
rescue ou runlevel 1 Mode utilisateur unique, mode de maintenance
multi-user ou runlevel3 Mode multi-utilisateur non graphique
graphical ou runlevel5 Mode multi-utilisateur graphique
reboot ou runlevel6 Redémarrage du système
emergency shell d’urgence

À votre avis, si vous tapez systemctl isolate reboot, que se passe-t-il?

Reboot du système.

Et

$ systemctl isolate poweroff
 ?

Arrêt du système.

La commande init permet d’appeler leur numéro:

$ init 0
$ init 6

Pour connaître le niveau d’exécution actuel, plusieurs méthodes:

$ who -r
$ runlevel

Avec la commande systemctl get-default vous pouvez voir quel est le niveau d’exécution par défaut.

Pour modifier le niveau par défaut:

$ systemctl set-default multi-user
$ systemctl set-default graphical

Pour se rendre directement au niveau d’exécution par défaut:

$ systemctl default
$ systemctl isolate default

Tout est fichier

Sous Linux, TOUT les éléments visibles dans l’arborescence du système de fichiers sont des fichiers.

  • Un fichier est un fichier

  • Un répertoire est un fichier

  • Une clé USB est un fichier

  • Une partition est un fichier

  • Un disque dur est un fichier

Pour différencier les fichiers, on leur donne des attributs.

Comme Linux est multi-utilisateurs, il faut aussi qu’il y ait des droits sur les fichiers ce qui implique des propriétaires de ces fichiers pour les protéger d’accès non désirés.

Pour afficher la liste de tous les attributs d’un fichier on utilise la commande :

$ ls -l

La première colonne: -rwxr-xr-x par exemple représente le type de fichier et les droits d’accès (abordés en détail dans un prochain cours) qui lui sont associés.

Attribut Définition
- Fichiers standards
d Répertoires
l Liens symboliques
s Socket (connexion réseau)
p Tube nommé
b Périphérique de type bloc (disque dur)
c Périphérique de type caractères (clavier)

Les 3 premiers sont les plus fréquents, les suivants sont des fichiers spéciaux qui seront principalement manipulés par root.

La seconde colonne : ce qu’elle représente dépend du type de fichier:

  • Répertoire: indique le nombre de sous-répertoires (+2 pour . et ..).

  • Fichier: nombre de lien physiques (vu plus loin dans ce cours).

Les troisième et quatrième colonnes représentent l’utilisateur propriétaire du fichier et le groupe propriétaire du fichier.

La cinquième colonne indique la taille du fichier (notez qu’un répertoire a une taille qui correspond à la taille du fichier répertoire sur le disque).

La sixième colonne indique la date de dernière modification.

La septième colonne est le nom du fichier.

Arborescence du système de fichiers

Arborescence

Avec Linux il n’y a qu’une seule racine /.

Si vous avez plusieurs partitions ou que vous insérez un CD/DVD ou une clé USB, ces nouveaux systèmes de fichiers seront montés dans des répertoires.

Il est ainsi possible d’avoir une partition dédiée pour les répertoires des utilisateurs, la partition sera alors montée dans le répertoire /home.

Si vous insérez une clé USB, la plupart des Linux actuels monteront automatiquement la clé USB. Le plus souvent ce sera dans le répertoire /mnt.

L’utilitaire pour monter des systèmes de fichier et voir ceux qui sont montés est mount.

L’utilitaire pour démonter les systèmes de fichiers est umount.

/bin: contient des exécutables (fichiers binaires), la plupart des commandes que vous utilisez.

/boot: contient le noyau vmlinuz et les fichiers de démarrage.

/dev: contient les fichiers spéciaux pour accéder aux périphériques (devices).

/etc: contient les fichiers de configuration du système et des applications.

  • /etc/X11: paramétrage du serveur X

  • /etc/sysconfig: configuration des périphériques

  • /etc/cron: planificateur de tâches

  • /etc/skel: création des profils par défaut des utilisateurs

/home: contient les répertoires des utilisateurs.

/lib: les bibliothèques et les modules du noyau.

/mnt: c’est là que seront montés les systèmes de fichiers ejectables.

/opt: pou l’installation de certaines applications.

/root: le home de root.

/sbin: les exécutables nécessaires à l’administration du système donc utilisés principalement par root.

/tmp: pour les fichiers temporaires, tout le monde peut écrire dedans.

/usr: répertoire général des applications.

/var: c’est dans ce répertoire que l’on trouve les logs et l’aide au débogage.

/proc: contient entre autres choses, la liste des processus en cours et une image de la RAM (kcore).

Utilisation d’un nouveau disque

Lorsque vous ajoutez un disque à votre système Linux, plusieurs étapes sont nécessaires pour pouvoir l’utiliser:

  • Repérer le disque dans le répertoire /dev. Il se nommera souvent /dev/sda, /dev/sdb, …

  • Il faut ensuite créer une ou plusieurs partitions sur le disque avec fdisk

$ fdisk /dev/sdb

On obtiendra alors des partitions comme /dev/sdb1, /dev/sdb2

  • Il faut ensuite formater la ou les partitions. C’est ici qu’on choisit le format du système de fichiers (FAT, ext2, ext3, ext4, xfs, zfs, BtrFS…):
$ mkfs -xfs /dev/sdb2
  • Enfin, il faut monter la partition dans un répertoire comme par exemple /mnt mais on peut la monter dans n’importe quel répertoire (vide de préférence car sinon les données deviendront inaccessibles jusqu’au démontage du disque) :
$ mount /dev/sdb1 /mnt
  • On peut maintenant accéder à notre disque en allant dans le répertoire /mnt.

  • Pour afficher les disques du système ainsi que l’espace utilisé et disponible sur chacun :

$ df -h