1
ARCHITECTURES
MATÉRIELLES ET SYSTÈME D'EXPLOITATION
CHAPITRE 4 : LES SYSTÈMES
D'EXPLOITATION ET LES COMMANDES FONDAMENTALES SOUS LINUX
Principes généraux Un système d'exploitation est un programme ou un ensemble de
programmes dont le but est de gérer les ressources matérielles et logicielles d'un ordinateur. Il fournit en particulier aux programmes utilisateurs un accès unifié à ces ressources.
L'utilisateur interagit avec des programmes
(applications) (jeu, navigateur, web, traitement de texte…).
Ces derniers ont besoin d'utiliser les ressources de la machine pour effectuer leur tâches (lire ou sauvegarder des fichiers, afficher des images à l'écran, récupérer des caractères saisis au clavier ou la position du pointeur de la souris). C'est le rôle du système d'exploitation. Il offre un ensemble de fonctions primitives permettant
d'interagir avec le matériel.
3
Principes généraux Parmi les différents composants logiciels que l'on retrouve dans les
systèmes d'exploitation moderne on retrouve :
L'ordonnanceur qui décide quel programme s'exécute à un instant donné sur le processeur
Le gestionnaire de mémoire, qui répartit la mémoire vive entre les différents programmes en cours
d'exécution
Les différents systèmes de fichiers, qui définissent la manière de stocker les fichiers sur des supports
physiques (disque, clé USB, disques optiques..) La pile réseau qui implémente entre autres des protocoles tels que TCP/IP
Les pilotes de périphériques (ou drivers), dont le but est de gérer les périphériques matériels (carte graphique, disques durs, clavier etc.)
Historique
Avant 1950 : les premiers calculateurs, tels que l'ENIAC (1945) n'ont pas de système d'exploitation. Ils n'exécutent qu'un seul programme à la fois. Ce dernier est saisi en re-cablant physiquement l'ordinateur (en connectant des câbles entre différentes sections faisant des calculs élémentaires)
L'ENIAC : 1er ordinateur électronique pesait 30 tonnes
5
Historique
1956 : GM-NAA I/O est l'un des premiers systèmes d'exploitation.
C'est un programme qui fonctionne sur le calculateur IBM 704 (photo ci-contre) et dont le rôle est d'exécuter en séquence des programmes utilisateurs stockés sur des cartes perforées. Il
propose aussi des routines (ou fonctions) pour accéder simplement aux périphériques entrées/sortie.
1967 : MultICS (Multiplexed Information and Computing Service) développé à Bell Labs et au MIT est l'un des premiers systèmes d'exploitation à temps partagé : plusieurs programmes pouvaient s'exécuter en même temps. Il a largement influencé les systèmes
d'exploitation moderne. L'un de ses inventeurs : Fernando Corbato est également l'inventeur des comptes utilisateurs sécurisés à l'aide d'un mot de passe.
1970-1990 : Unix, développé à Bell Labs, est l'un des premiers systèmes d'exploitation multi-tâches et multi- utilisateurs. Les premiers versions du système sont écrites en assembleurs puis dans le langage C, nouvellement créé pour cela.
Historique
1960-1980 : les ordinateurs du constructeurs IBM utilisent différents variantes de systèmes d'exploitation, différents d'Unix. Ils utilisent en particulier à partir des années 1980 le système MS-DOS de Microsoft. Ce système est conçu pour fonctionner uniquement sur le processeur x86 d'Intel.
1980 - 1990 : Les succès de l'architecture x86 d'Intel et de l'ordinateur personnel (PC, par opposition aux calculateurs) installent MS-DOS comme le système d'exploitation principal pour les particuliers et de nombreux domaines d'activités.
1990 – présent : L'éditeur Microsoft développe un système graphique au dessus de MS-DOS, qui deviendra ensuite un système d'exploitation à part entière, le système Windows. Il
devient, à la suite de MS-DOS, le système d'exploitation le plus utilisé sur PC.
A gauche : Windows 1 (1985) A droite : Windows 10 (2015)
7
Historique
1984 - 2001 : En parallèle de Microsoft, l'entreprise Apple commercialise des ordinateurs personnels basés sur l'architecture Motorola puis PowerPC. Les machines sont équipées du système d'exploitation Mac Os, un système graphique
1991 : Linus Torvalds, alors étudiant à l'université d'Helsinki, souhaite modifier le système d'exploitation MINIX (une variante d'Unix pour processeur Intel
développe par S. Tanenbaum). Bien que les sources de MINIX soient disponibles, la licence logicielle ne permet pas la diffusion des modifications. Linus Torvalds décide donc de créer son propre système d'exploitation. Il le diffuse sous la licence libre GNU GPL. Le système d'exploitation Linux est né.
Historique
1991 – présent : Le système Linux connait une adoption rapide, principalement due à sa
diffusion sous licence libre. Il est particulièrement répandu comme système d'exploitation pour serveurs et machines de calculs ou de stockage.
2001 – présent : Apple crée un nouveau système d'exploitation, base sur un système BSD (variante d'Unix), le système macOS (d'abord appelé OS X)
2007 – présent : Apple reprend le cœur du système macOS et en développe une version pour les téléphones portables qu'il commercialise.
2008 – présent : Google diffuse le système d'exploitation Android pour téléphones mobiles.
Ce système utilise le noyau du système Linux, auquel sont ajoutés des programmes et bibliothèques non libres.
Le noyau : c'est le cœur du système d'exploitation qui fournit les fonctionnalités basiques aux programmes. Il consiste au moins en du code qui est exécuté au démarrage de l'ordinateur et dont le rôle est d'initialiser les périphériques
correctement. Le noyau Linux, de même que celui de nombreux autres systèmes ne contient ni programmes utilisateurs, ni interface (graphique ou texte). Un
ordinateur ne possédant que le noyau est donc inutilisable en l'état.
9
Le standard POSIX Malgré la grande diversité des
systèmes d'exploitation, il existe un ensemble de standards,
regroupés sous le nom de POSIX (Portable Operating System
Interface). Ce standard débute en 1985 grâce à Richard Stallman.
Cela peut s'expliquer par le fait que le standard POSIX est largement inspiré par le système d'exploitation Unix. Or à l'inverse de Linux,
Android, macOS ou iOS, le système d'exploitation Windows n'est pas un dérivé d'Unix, mais de MS-DOS.
Ces standards définissent aussi bien les fonctions de bibliothèques que doit offrit le système d'exploitation (par exemple pour lire et écrire dans les fichiers, accéder au réseau…) que les programmes de base permettant d'utiliser le système.
La plupart des systèmes d'exploitation modernes sont compatibles avec le standard POSIX à l'exception de Windows de Microsoft.
Si vous êtes utilisateurs Windows, vous allez découvrir un
environnement nouveau, peut-être un peu obscur, mais pourtant infiniment riche : la console de Linux
La console (ou invite de commandes) est né dans les années 70 à une
époque où les écrans couleurs étaient un luxe et ou la puissance de calculs était bien plus faible qu'aujourd'hui.
La console de Linux
Cette console (ou terminal également) attend des saisies de commandes de l'utilisateur. Ce sont ces commandes que nous allons découvrir dans la suite.
Même si les présentations peuvent varier entre les systèmes, le terminal affiche toujours une invite de commandes (constituée du nom de l'utilisateur courant, ici mark, suivi du nom de l'ordinateur, ici linux-desktop, séparé par un @). Un curseur clignotant apparaît après le symbole $, indiquant que le terminal attend la saisie d'une commande.
Ainsi, la gestion d'une souris et d'une interface graphique, chose qui aujourd'hui sont tout à fait normal, ne l'était pas à l'époque. On utilisait donc la console pour gérer l'ordinateur.
11
Les commandes que nous allons voir sont les mêmes que celles utilisées au début de l'informatique (à l'époque d'UNIX) soit depuis les années 60.
Pour les utilisateurs de MacOS X basé sur le noyau UNIX, toutes les commandes de ce cours sont utilisables
La console de Linux
Pour accéder à la console (en fait il en existe plusieurs) utiliser le raccourci suivant :
Ctrl + Alt + F1
ou + F2 pour la 2ème console, ou + F3 pour la 3ème etc…
Ctrl + Alt + F7 permet de retourner en mode graphique Il faudra alors entrer le login et le mot de passe (ne soyez pas étonné si lorsque vous tapez votre mot de passe, il ne se passe rien. C'est simplement une question de sécurité.)
Vous devriez avoir une ligne comme celle-ci :
steph@NSI:~$
Cependant, nous utiliserons plutôt la console en mode graphique
12
La console de Linux Sous Raspberry, voici une capture d'écran,
la console (ou terminale) en mode graphique se lance depuis cette icône
Et voici la console lancée
13
Nous allons dans un premier temps voir quelques commandes pour naviguer dans les fichiers.
Arborescence du système Linux
Voici une arborescence de dossier et de fichier tel que l'on pourrait en trouver dans le système Linux
La base de l'arbre s'appelle la racine et se représente par un "/"
Depuis cette racine se développe des branches menant à des
répertoires (ou dossiers), contenant d'autres répertoires et des fichiers (logo.png par exemple…)
Pour indiquer la position d'un fichier (ou d'un
répertoire) dans
l'arborescence, il existe 2 méthodes :
indiquer un chemin absolu ou
indiquer un chemin relatif.
Le chemin absolu doit indiquer "le chemin" depuis la racine.
Exemple le chemin absolu du fichier logo.png sera : /home/bob/images/logo.png
rq. on part bien de la racine car le 1er caractère est le "/"
Un chemin relatif commence depuis un répertoire quelconque.
Exemple le chemin pour aller à track1.mp3 depuis le répertoire music est : music/rock/track1.mp3
rq. pas de présence de "/" au début du chemin
Arborescence du système Linux
15
Et si nous désirons depuis le répertoire music
accéder au fichier logo.png ?
Dans ce cas le chemin relatif est le suivant : ../bob/images/logo.png
Trouver le chemin absolu permettant d'accéder au fichier :
• fichier.txt
• track2.mp3
Il faut dans ce cas remonter d'un niveau dans l'arborescence
Le "../" a permis de remonter d'un niveau.
Si on veut remonter de deux niveaux on écrira : "../../"
Trouver le chemin relatif permettant d'accéder au fichier :
• logo.png depuis le dossier alice
• track1.mp3 depuis le dossier home
Arborescence du système Linux
Dans l'arborescence précédente, vous remarquerez deux utilisateurs bob et alice.
Par défaut, lorsque l'on ouvre une console, on se trouve dans le répertoire personnel de l'utilisateur courant (donc ici dans le répertoire de bob ou alice)
Rq. le caractère "~" indique que vous êtes dans le répertoire courant.
steph@NSI:~$
Arborescence du système Linux
Attention : les systèmes de type "UNIX" sont "sensibles à la casse" (il faut différencier les caractères majuscules et les caractères minuscules) : le répertoire "Musique" et le répertoire "musique" sont 2 répertoires différents.
17
Pour se déplacer dans l'arborescence en utilisant les chemins absolu ou relatif, il faut utiliser la commande cd (abréviation de change directory)
steph@NSI:~$ cd Documents
Les commandes de navigation dans l'arborescence
Par exemple si je suis dans le répertoire courant et que je veux aller dans le dossier Documents, je peux écrire :
steph@NSI:~$ cd /home/steph/Documents
chemin relatif
chemin absolu
steph@NSI:~/Documents$ ls
'Cours ISN' 'Cours NSI première' 'Formation DU NSI' 'ICN'
Je veux maintenant connaitre le contenu du dossier dans lequel je me trouve, on utilise la commande ls (abréviation de list)
Entrer la commande ls pour connaître le contenu de votre répertoire personnel
RQ. On peut également afficher le contenu d'un répertoire dont on donne le chemin
steph@NSI:~$ ls Documents
'Cours ISN' 'Cours NSI première' 'Formation DU NSI' 'ICN' Par défaut, vous, êtes dans votre répertoire personnel soit "/home/utilisateur/", c'est donc votre répertoire courant (celui dans lequel vous êtes actuellement)
RQ. Le symbole "~" peut remplacer le chemin absolu vers votre répertoire personnel
Si vous êtes perdu, la commande pwd permet de savoir dans quel répertoire vous êtes localisé
18
Les commandes de navigation dans l'arborescence
steph@NSI:~/Documents$ ls –l total 16
drwxrwxr-x 17 steph steph 4096 juin 23 18:22 'Cours ISN'
drwxrwxr-x 6 steph steph 4096 juin 23 18:22 'Cours NSI première' drwxrwxr-x 5 steph steph 4096 juin 23 18:23 'Formation DU NSI' drwxrwxr-x 12 steph steph 4096 juin 23 18:26 'ICN'
Les commandes ont souvent des paramètres constitués d'une seule lettre précédée d'un tiret.
Ainsi la commande ls possède plusieurs paramètres : -l permet d'afficher les informations détaillées
-a permet d'afficher les fichiers cachés -h permet d'afficher la taille des fichiers
-R permet de visualiser le contenu des sous-dossiers (très pratique) etc…
RQ. Si vous cherchez les paramètres d'une commande, vous pouvez accéder à son manuel (man). Si vous cherchez les paramètres de la commande ls, il suffit d'entrer man ls
Utilisez la commande ls suivie d'un paramètre depuis votre répertoire personnel
19
Les commandes d'opération sur les répertoires/fichiers Depuis le terminal, on peut effectuer des opérations sur les répertoires et les fichiers
La commande mkdir (abréviation de make directory) permet de créer un nouveau répertoire
Utilisez cette commande pour créer un répertoire de votre choix dans votre répertoire personnel
steph@NSI:~/Documents$ ls
'Cours ISN' 'Cours NSI première' 'Formation DU NSI' 'ICN' steph@NSI:~/Documents$ mkdir test
steph@NSI:~/Documents$ ls
'Cours ISN' 'Cours NSI première' 'Formation DU NSI' 'ICN' 'test'
La commande rmdir (abréviation de remove directory) permet de
supprimer un répertoire uniquement si il est vide. La commande doit être suivie du nom du répertoire à supprimer
La commande touch permet de créer un fichier. Celle-ci doit être suivie du nom du fichier à créer en n'oubliant pas son extension (.txt, .jpg…)
La commande rm permet de supprimer un fichier ou un répertoire. Celle-ci doit être suivie du nom du fichier ou dossier à supprimer. Pour supprimer un dossier non vide, elle doit être suivie du paramètre -r :
'rm -r nom_du_répertoire'
Les commandes d'opération sur les répertoires/fichiers Encore quelques autres…
La commande cp (abréviation de copy) permet de copier un fichier. Elle s'écrit de la façon suivante :
"cp /répertoire_source/nom_fichier_à_copier /répertoire_destination/nom_fichier"
La commande mv (abréviation de move) permet de déplacer un fichier/dossier. Elle s'utilise comme la commande cp
La commande wc (abréviation de … word count) permet de compter le nombre de lignes, de mots , de caractères dans un fichier texte (-l pour lignes, -w pour les mots, -m pour les lettres…
La commande wget permet de copier un fichier distant sur l'ordinateur.
Exemple : wget http://site.org/rep/02/fichier.txt
La commande find permet de chercher un fichier dans le disque dur.
Elle s'écrit de la façon suivante :
find /adresse_du_repertoire/ element_a_trouver Et pleins d'autres…. des exemples à l'adresse :
https://buzut.developpez.com/tutoriels/101-commandes-indispensables- sous-linux/
21
La gestion des utilisateurs et des groupes Comme vous l'avez vu précédemment dans l'arborescence, les systèmes Linux sont des systèmes multi-utilisateurs.
C’est-à-dire que plusieurs utilisateurs peuvent partager le même ordinateur.
Cette particularité pourrait poser un problème car dans votre ordinateur certains fichiers sont personnels et vous ne voudriez pas forcément qu'un autre utilisateur de l'ordinateur puissent y accéder.
C'est pourquoi chaque utilisateur possède certains droits lui permettant d'effectuer certaines opérations mais lui en interdisant également d'autres.
Un utilisateur particulier a cependant tous les droits, il s'agit de l'administrateur (ou "root").
C'est lui qui pourra gérer les droits des utilisateurs et donc retirer ou
attribuer certains droits. Cependant d'un point de vue pratique au lieu de gréer les utilisateurs séparément, il est possible de créer des groupes
d'utilisateurs et d'attribuer des droits à un groupe au lieu d'attribuer les droits à chaque utilisateur du groupe.
22
La gestion des utilisateurs et des groupes Mais quels sont ces droits ?.
Regardons le résultat de ls –l que vous aviez vu précédemment.
steph@NSI:~/Documents$ ls –l total 16
drwxrwxr-x 17 steph steph 4096 juin 23 18:22 'Cours ISN'
drwxrwxr-x 6 steph steph 4096 juin 23 18:22 'Cours NSI première' drwxrwxr-x 5 steph steph 4096 juin 23 18:23 'Formation DU NSI' drwxrwxr-x 12 steph steph 4096 juin 23 18:26 'ICN'
Vous remarquez une suite curieuse de lettres au début de chaque ligne.
Chacune d'elle donne une information liée aux droits.
Les fichiers et les répertoires possèdent 3 types de droits :
• les droits en lecture (symbolisés par la lettre r (read)) : est-il possible de lire le contenu de ce fichier
• les droits en écriture (symbolisés par la lettre w (write)) : est-il possible de modifier le contenu de ce fichier
• les droits en exécution (symbolisés par la lettre x (execute)) : est-il possible d'exécuter le contenu de ce fichier (quand le fichier du code exécutable)
23
La gestion des utilisateurs et des groupes
steph@NSI:~/Documents$ ls –l total 16
drwxrwxr-x 17 steph steph 4096 juin 23 18:22 'Cours ISN'
drwxrwxr-x 6 steph steph 4096 juin 23 18:22 'Cours NSI première' drwxrwxr-x 5 steph steph 4096 juin 23 18:23 'Formation DU NSI' drwxrwxr-x 12 steph steph 4096 juin 23 18:26 'ICN'
Vous remarquerez que ces lettres se répètent, en effet, il existe 3 types d'utilisateurs pour un fichier ou un répertoire :
• le propriétaire du fichier (par défaut c'est la personne qui a créé le fichier), il est symbolisé par la lettre u
• un fichier est associé à un groupe, tous les utilisateurs appartenant à ce groupe possèdent des droits particuliers sur ce fichier. Le groupe est symbolisé par la lettre g
• tous les autres utilisateurs (ceux qui ne sont pas le propriétaire du fichier et qui n'appartiennent pas au groupe associé au fichier). Ces utilisateurs sont symbolisés la lettre "o"
Ces lettres ne sont pas visibles ici mais nous nous en serviront quand nous modifierons les droits.
La gestion des utilisateurs et des groupes
steph@NSI:~/Documents$ ls –l total 16
drwxrwxr-x 17 steph steph 4096 juin 23 18:22 'Cours ISN'
drwxrwxr-x 6 steph steph 4096 juin 23 18:22 'Cours NSI première' drwxrwxr-x 5 steph steph 4096 juin 23 18:23 'Formation DU NSI' drwxrwxr-x 12 steph steph 4096 juin 23 18:26 'ICN'
Analysons maintenant la première ligne :
drwxrwxr-x 17 steph steph 4096 juin 23 18:22 'Cours ISN'
• le premier symbole est un "d" ce qui signifie que nous avons affaire à un dossier, dans le cas d'un fichier nous aurions eu un "-"
• Les 3 symboles suivants : rwx donnent les droits du propriétaire du fichier : lecture autorisée (r), écriture autorisée(w) et exécution autorisée(x)
• Les 3 symboles suivants : rwx donnent les droits du groupe lié au fichier : lecture autorisée (r), écriture autorisée(w) et exécution autorisée(x)
• Les 3 symboles suivants : r-x donnent les droits des autres utilisateurs : lecture autorisée (r), écriture interdite(-) et exécution autorisée(x)
• Le caractère suivant 17 donnent le nombre de liens
• le premier steph donne le nom du propriétaire du fichier
• le second steph représente le nom du groupe lié au fichier
• le 4096 représente la taille du répertoire en octet
• le reste est assez évident
25
La gestion des utilisateurs et des groupes
-rw-r--r-- 1 steph steph 379894 juin 23 18:23 'Présentation_ICN.docx' drwxr-xr-x 6 steph steph 4096 avril 19 05:35 'Evènement'
Analysez les deux lignes ci-dessus :
Première ligne :
• le premier symbole est un "-" signifie que c'est un fichier
• Les 3 symboles suivants : rw- signifient que pour le propriétaire du fichier : lecture autorisée (r), écriture autorisée(w) et exécution interdite(-)
• Les 3 symboles suivants : r-- signifient que pour le groupe lié au fichier : lecture autorisée (r), écriture interdite(-) et exécution interdite(-)
• Les 3 symboles suivants : r-- signifient que pour les autres utilisateurs : lecture autorisée (r), écriture interdite(-) et exécution interdite(-)
• 1lien
• le premier steph donne le nom du propriétaire du fichier
• le second steph représente le nom du groupe lié au fichier
• le 379894 représente la taille du fichier en octet
La gestion des utilisateurs et des groupes Il est possible avec un terminal de modifier les droits d'un utilisateur.
On utilise pour cela la commande chmod
Cette commande ne sera utilisable que si vous êtes l'administrateur (qui par défaut à tous les droits) ou si vous êtes le propriétaire du fichier (ou du répertoire)
Pour l'utiliser, il est nécessaire de connaitre certains symboles :
• les symboles liés aux utilisateurs : "u" correspond au propriétaire, "g"
correspond au groupe lié au fichier (ou au répertoire), "o" correspond aux autres utilisateurs et "a" correspond à "tout le monde" (permet de modifier "u", "g" et "o" en même temps)
rq : u (user), g (group), o (other), a (all)
• les symboles liés à l'ajout ou la suppression des permissions : "+" on ajoute une permission, "-" on supprime une permission, "=" les permissions sont réinitialisées (permissions par défaut)
• les symboles liés aux permissions : "r" : lecture, "w" : écriture, "x" : exécution.
La commande a alors cette forme :
chmod [u g o a] [+ - =] [r w x] nom_du_fichier
27
La gestion des utilisateurs et des groupes Exemples :
chmod o-w NSI.txt permet de retirer aux autres utilisateurs le droit en écriture sur le fichier NSI.txt
chmod g+wx NSI.txt permet d'attribuer les droits en écriture et en exécution au groupe lié au fichier
Exercice : En ligne de commande uniquement :
• Créer dans le répertoire Documents un répertoire NSI
• Dans ce répertoire créer un fichier cours_nsi.txt
• Lister alors le contenu de ce répertoire pour avoir le détail des droits
• Modifier les droits pour que le groupe ne puisse pas écrire dans le fichier
• Modifier les droits pour que les autres utilisateurs ne puissent ni lire, ni écrire, ni exécuter le fichier.
• Modifier les droits pour que tout le monde puisse lire, écrire et exécuter ce fichier.
28
Exercice : En ligne de commande uniquement :
• Créer dans le répertoire Documents un répertoire NSI
• Dans ce répertoire créer un fichier cours_nsi.txt
• Lister alors le contenu de ce répertoire pour avoir le détail des droits
• Modifier les droits pour que le groupe ne puisse pas écrire dans le fichier
• Modifier les droits pour que les autres utilisateurs ne puissent ni lire, ni écrire, ni exécuter le fichier.
• Modifier les droits pour que tout le monde puisse lire, écrire et exécuter ce fichier.
steph@NSI:~$ cd Documents
steph@NSI:~/Documents $ mkdir NSI steph@NSI: :~/Documents $ cd NSI
steph@NSI: :~/Documents/NSI $ touch cours_nsi.txt
steph@NSI: :~/Documents/NSI $ ls -l
steph@NSI: :~/Documents/NSI $ chmod g-w cours_nsi.txt steph@NSI: :~/Documents/NSI $ chmod o-rwx cours_nsi.txt steph@NSI: :~/Documents/NSI $ chmod a+rwx cours_nsi.txt
29
La gestion des utilisateurs et des groupes
En ce qui concerne les répertoires, les trois types de permissions existent, mais ont un sens bien particulier.
• Le droit en lecture su un répertoire signifie que son contenu peut être listé.
• Le droit en écriture signifie que l'on peut modifier des entrées du
répertoire, c'est-à-dire créer des fichiers, les supprimer, les renommer. En particulier, il n'est pas nécessaire d'avoir les droits en écriture sur un fichier pour le supprimer, mais il faut avoir les droits en écriture sur son
répertoire parent.
• Le droit en exécution pour un répertoire signifie que l'on a le droit d'en faire le répertoire courant et d'afficher les informations détaillées sur les entrées du répertoire.
Par exemple, si l'on suppose qu'il existe deux utilisateurs : alice et bob.
Supposons qu'alice retire les droits en lecture de son répertoire personnel.
alice~$ chmod o-r /home/alice alice~$ ls -l -d /home/alice drwxrr-x--x 1 alice nsi 4096 ….
ici la commande -d de la commande ls permet d'afficher les informations du répertoire /home/alice
Si bob ouvre une session à son tour et utilise un terminal, il ne peut pas voir le contenu du répertoire personnel d'alice
bob~$ cd /home/alice bob~/home/alice$ ls -l
ls : impossible d'ouvrir le répertoire : permission non accordée
La gestion des utilisateurs et des groupes
Si maintenant alice remet les droits en lecture et retire les droits en exécution.
alice~$ chmod o+r,o-x /home/alice alice~$ ls -l -d /home/alice
drwxrr-xr-- 1 alice nsi 4096 ….
Si bob ouvre une session à son tour et utilise un terminal, il pourra alors lire les entrées, mais pas les informations associées et ne pourra pas pénétrer dans le répertoire.
bob~$ ls -l /home/alice
ls : impossible d'accéder à '/home/alice/photos' : permission non accordée ls : impossible d'accéder à '/home/alice/Documents' : permission non accordée bob~$ cd /home/alice
bash: cd: /home/alice/: Permission non accordée
31
La gestion des utilisateurs et des groupes Pour information, il est possible de modifier les droits lecture, écriture et exécution en utilisant un système de correspondance en binaire/octale.
Regardez le tableau ci-dessous :
Position Binaire Valeur octale Droits Signification
000 0 - - - Aucun droit
001 1 - -x Exécutable
010 2 - w - Ecriture
011 3 - w x Ecrire et exécuter
100 4 r - - Lire
101 5 r - x Lire et exécuter
110 6 r w - Lire et écrire
111 7 r w x Lire écrire et exécuter
Ainsi un chmod 751 fichier.txt attribuera la possibilité de lire,
écrire et exécuter le fichier au propriétaire, la lecture et l'exécution au groupe lié au fichier, et l'exécution aux autres utilisateurs.
32
Les motifs glob
Nous avons vu que l'écriture d'une ligne de commande peut se résumer ainsi : alice~$ commande arg1 arg2 …. argn.
Les arguments peuvent contenir des caractères normaux et des caractères spéciaux : " * ", " ? " et des ensembles de caractères entre crochets. Les expressions contenant de tels caractères sont appelées motifs glob.
Le caractère " * " signifie "n'importe quelle séquence de caractères (potentiellement vide)"
Ainsi, dans le répertoire d'alice, le motif glob Photos/img*.jpg permet de lister d'un seul coup tous les noms de fichiers qui commencent par img et qui se terminent par .jpg avec n'importe quelle suite de caractères entre les deux.
Le caractère " ? " est quant à lui remplacé par un seul caractère.
Ainsi, Photos/img_001.j?g dénotera bien des fichiers jpg , le caractère ? pouvant être remplacé par "p"
Enfin, il est possible d'utiliser des ensembles de caractères. Le motif [c1c2…cn]
représente n'importe lequel des caractères énumérés entre crochets.
Par exemple, le motif glob Photos/img_00[2345].jpg correspond au fichier jpg comme img_002.jpg car 2 est présent dans la liste.
Le motif [^c1,c2..cn] représente un caractère qui n'est pas un de ceux dans la liste.
Par exemple, le motifs Documents/[^abc]* représente bien le fichier Documents/diapos.pdf.
En effet, le nom du fichier ne doit pas commencer par "a","b" ou"c", et le motif "*"
indique que la suite de caractères peut être quelconque.
33
Les motifs glob Un exemple plus complexe mais très puissant :
le /*/ signifie que l'affichage du contenu peut se faire dans n'importe quel répertoire contenu dans le répertoire "alice"
le nom peut contenir un caractère , n'importe lequel après le img, ce caractère peut être suivi d'une suite de n'importe quel caractère. Ces caractères seront suivis obligatoirement de "2" ou "3" et de .jpg.
Par exemple : Le fichier /home/alice/Photos/img_002.jpg correspond à cette recherche.
alice~$ ls /home/alice/*/img?*[23].jpg
34
Les redirections L'opérateur > permet de rediriger la sortie standard d'un
programme vers un fichier.
Une opération puissante, introduite par le système d'exploitation Unix et repris par tous ses successeurs puis adoptée dans la norme POSIX, est la redirection entre commandes, effectuée au moyen de l'opérateur | .
Considérons trois commandes : alice~$ ls –l */*
-rw-r--r-- 1 alice nsi 500341 juil. 1 09:32 Documents/cours.odt -rw-r--r-- 1 alice nsi 201314 juil. 3 17:45 Documents/diapos/pdf -rw-r--r-- 1 alice nsi 1431099 juil. 1 15:06 Photos/img_001.jpg -rw-r--r-- 1 alice nsi 1300458 juil. 1 15:06 Photos/img_002.jpg Cette 1ère commande affiche simplement la liste des fichiers.
alice~$ ls -l Photos/* > liste_photos.txt
La commande ci-dessus ne provoque pas l'affichage classique de la liste, en revanche les lignes qui auraient dû être affichées dans la console ont été écrites dans le fichier liste_photos.txt.
Si ce dernier existait déjà, il sera écrasé, sinon il sera créé.
Rq. La sortie d'erreurs n'est pas concerné par cette redirection.
35
Les redirections
alice~$ ls –l */* | sort -k 5 -n -r
-rw-r--r-- 1 alice nsi 1431099 juil. 1 15:06 Photos/img_001.jpg -rw-r--r-- 1 alice nsi 1300458 juil. 1 15:06 Photos/img_002.jpg -rw-r--r-- 1 alice nsi 500341 juil. 1 09:32 Documents/cours.odt -rw-r--r-- 1 alice nsi 201314 juil. 3 17:45 Documents/diapos/pdf
Cette 2ème commande redirige la sortie standard de la commande ls vers l'entrée
standard de la commande sort. Celle-ci permet de trier les lignes d'un fichier. Ici, l'option -k 5 indique à sort de prendre le 5ième champ de chaque ligne comme clé de tri, l'option -n indique que cette clé doit être considérée comme un nombre (et non comme du texte), enfin l'opérateur -r inverse l'ordre de tri. Ces deux commandes reliées par l'opérateur |
permettent donc d'afficher les fichiers par ordre de taille décroissante.
alice~$ ls –l */* | sort -k 5 -n -r | head -n 1
-rw-r--r-- 1 alice nsi 1431099 juil. 1 15:06 Photos/img_001.jpg
Cette 3ème commande ajoute la commande head qui permet de ne garder que les n premières lignes d'un fichier. Ici on ne garde que la 1ère ligne (grâce à l'option -n 1).
L'enchainement de ces trois commandes nous permet donc de trouver le fichier le plus volumineux dans la liste initiale.
Les redirections L'opérateur > permet de rediriger la sortie standard d'un
programme vers un fichier et écrase le contenu du fichier vers lequel on redirige la sortie.
alice~$ ls Photos > liste.txt
La variante >> permet d'ajouter du nouveau contenu à la fin d'un fichier existant ou de le créer s'il n'existe pas.
alice~$ ls Document >> liste.txt
Dans ce cas la liste des fichiers contenu dans le répertoire Documents sera ajoutée à la fin du fichier liste.txt en préservant le contenu précédent.
37
Même si l'utilisation de la console semble dans un premier temps moins intuitive qu'une interface graphique (et c'est plutôt vrai), elle est à
l'usage bien plus puissante et beaucoup plus rapide pour qui sait s'en servir.
Ici 510 est le résultat.
Exemple : En mode graphique, allez dans un répertoire qui contient beaucoup de fichiers en tout genre : des fichiers texte, des images, des vidéos… Vous voudriez savoir combien il y a d'images JPEG dans ce dossier…
Avec la console, on peut obtenir ce résultat très facilement :
ls -l | grep jpg | wc -l 510
On peut même faire encore plus fort et enregistrer directement ce nombre dans un fichier texte :
ls -l | grep jpg | wc -l > nb_jpg.txt
La commande grep permet de rechercher une chaîne de caractères dans un fichier.
38
Correction exercice 1
1. cd ~ : permet de se déplacer dans le répertoire utilisateur qui devient alors le répertoire courant.
2. mkdir NSI : crée un répertoire NSI dans le répertoire courant (qui est donc le répertoire utilisateur).
3. mkdir NSI/TP_SHELL : crée un répertoire TP_SHELL dans le répertoire NSI
4. cd NSI/TP_SHELL : NSI/TP_SHELL devient le répertoire courant
5. cd .. : le répertoire parent devient le répertoire courant (on se trouve donc dans NSI) (vous êtes remonté d'un répertoire)
6. ls : affiche le contenu du répertoire courant (donc affiche TP_SHELL) 7. chmod u+rwx,g-rwx,o-rwx TP_SHELL : change les permissions de
TP_SHELL. Il devient accessible en lecture/écriture et "traversable" (on peut rentrer dedans) pour l'utilisateur et ni lisible, ni écrivable, ni
traversable par les autres.
39
Correction exercice 2
1. *.jpg : une chaîne quelconque se terminant par ".jpg" : helle.jpg par exemple
2. [0-9]*[a-z] : une chaîne commençant par un chiffre et finissant par une minuscule , par exemple : 1e ou 4_bonne_annee
3. *.??? : une chaîne se terminant par un "." suivi d'exactement trois caractères , par exemple .123 ou ABCDE.FGH ou hello.iii
4. *[^A-Z]* : une chaine contenant un caractère qui n'est pas une majuscule, par exemple ABCD_EFG ou 8AaBCD
5. ????? : une chaine de cinq caractères, par exemple : hello
6. ?*? : une chaîne d'au moins deux caractères (* peut être vide), par exemple : ab ou 1abracada_a
7. *[^.]??? : une chaîne de longueur au moins quatre, dont le quatrième caractère à partir de le fin n'est pas un ".", par exemple : hello ou TP\SHELL
Correction exercice 3
1. chmod u+rwx,g-rw,g+x,o-rw,o+x ~ 2. chmod u+rwx,g+rw,g-x,o+rw,o-x NSI
chmod u+rwx,g+rw,g-x,o+rw,o-x NSI/TP_SHELL
3. chmod u+rw,u-x,g+r,g-wx,o+r,o-wx NSI/TP_SHELL/lisible.txt 4. chmod u+rw,u-x,g-rwx,o-rwx NSI/TP_SHELL/secret.txt
Correction exercice 4
TEST
a b c
f
e g
foo.txt t.txt t.txt