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
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)
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 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
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).
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
.
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
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.
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).
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
…
$ mkfs -xfs /dev/sdb2
/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