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. Exemple d’affichage du fichier 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). Le même exemple que ci-dessus mais accès en utilisant le “raccourci” ‘~’ à la place de /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 (‘.’). Exemple de changement de répertoire à partir du répertoire courant 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. Exemple : 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 …). Exemple de contenu d’un répertoire 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 Les droits des fichiers sous Linux 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 ‘-’ : fichier régulier ‘d’ : répertoire ‘r’ : read ‘w’ : write ‘x’ : execute ou ‘s’ : suid ‘r’ : read ‘w’ : write ‘x’ : execute ou ‘s’ : sgid ‘r’ : read ‘w’ : write ‘x’ : execute ou ‘t’ : sticky bit 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 : Les principales commandes du shell bash cd (change directory) Permet de se déplacer dans un autre dossier. Exemples : cd / : Retour au répertoire racine. cd : Retour au dossier personnel. cd ..: Déplacement dans le répertoire père. cd .: Pas de déplacement. cd /home/nom/doc : Déplacement à partir de la racine. cd ../doc/travail : Déplacement relatif au répertoire courant. ls ou ll ls (list) liste le contenu d’un répertoire. chown chgrp chmod chown (change owner) change le nom du propriétaire. chgrp (change group) change le nom du groupe. chmod (change mode) affecte les droits pour les trois parties. mkdir rmdir mkdir (make directory) permet la création d’un répertoire. rmdir (remove directory) permet la destruction d’un répertoire vide. cp mv rm cp (copy) permet la copie d’un fichier mv (move) permet de renommer un fichier ou de le déplacer dans un autre répertoire. rm (remove) permet la suppression d’un fichier. 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 sudo. 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 man Exemple pour la commande cp : man cp. 1. M.Antoine est l’auteur de la 1ère version de ce document 🞄 🞄 🞄 Linux Shell Linux