Lignes de commandes et système de fichiers ========================================== <br><br> *Ce document est un diaporama qui résume le cours correspondant (accessible [ici](lignes-commandes-droits)).* --- # Introduction - Les premiers systèmes d'exploitation étaient dépourvus d'interface graphique : tout se faisait en **lignes de commandes** - Aujourd'hui, sur un ordi personnel, on peut (presque) tout faire via des interfaces graphiques ---- # Introduction - Mais il est nécessaire de connaître quelques lignes de commandes de base : - C'est important pour un informaticien - Cela permet souvent d'aller plus vite, voire de faire des choses que l'on ne pourrait pas effectuer via l'interface graphique - Ce permet d'exécuter des instructions sur un ordinateur distant (ex.: un serveur) ---- # Introduction - Pour écrire des lignes de commandes on utilise un **terminal** ou une **console** ou une **invite de commande** - Sous Linux : <img class="r-stretch centre image-responsive" src="data/terminal.png" alt="illustration"> ---- # Introduction ```bash eleve@nsi-mounier16:~$ ``` De la forme `nom_utilisateur@nom_machine:repertoire_courant$` --- # Système de fichiers --- ## Arborescence - Système de fichiers de Linux : représenté sous forme d'une **arborescence** - Exemple (incomplet) : <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers"> ---- ## Arborescence <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers"> - le **répertoire racine** `/` : tout en haut point d'entrée du système de fichiers - des **répertoires** (encadrés) contenant des **fichiers** (non encadrés) et/ou des répertoires, etc. ---- ## Arborescence <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers"> - le **répertoire des utilisateurs** : `/home` - contient les dossiers et fichiers personnels des utilisateurs - il y a **un sous-répertoire** par utilisateur : c'est ce répertoire qui est noté `~` --- ## Chemin absolu et chemin relatif - Il y a deux manières d'indiquer la position d'un répertoire ou d'un fichier dans l'arborescence - Chemin **absolu** : à partir de la racine `/` - Chemin **relatif** : à partir d'un répertoire quelconque ---- ### Chemin absolu <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers" width="350"> - Exemple : chemin absolu du fichier `fiche.ods` ```bash /home/elsa/documents/fiche.ods ``` ---- ### Chemin relatif <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers" width="350"> - Exemple : chemin relatif du fichier `photo_1.jpg` **depuis le répertoire** `max` : ```bash images/photo_vac/photo_1.jpg ``` ---- ### Chemin relatif (suite) - **Comment faire s'il faut remonter dans l'aborescence ?** --> on utilise `..` <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers" width="350"> - Chemin relatif de `photo_1.png` depuis le répertoire `ski` : ```bash ../photos_vac/photo_1.jpg ``` ---- # ✏️ À faire **EXERCICE 1** --- # Les commandes pour manipuler les fichiers et les répertoires ---- ## Écrire des commandes - Au lycée : on utilise le Terminal <img class="r-stretch centre image-responsive" src="data/terminal.png" alt="illustration"> - À la maison : une possibilité : https://www.cahier-nsi.fr/jslinux/ (login : Angie, mot de passe : NSI) --- ## Le répertoire courant - **Répertoire courant** = endroit où on se trouve dans l'arborescence - Indiqué juste après le `:` - par défaut à l'ouverture : répertoire courant = répertoire personnel de l'utilisateur, noté `~` <img class="r-t=stretch centre image-responsive" src="data/terminal_short.png" alt="illustration"> ---- ## Le répertoire courant (suite) - Exemple 1 : le répertoire courant est `~`, c'est-à-dire `/home/eleve` <img class="r-t=stretch centre image-responsive" src="data/terminal_short.png" alt="illustration"> - Exemple 2 : le répertoire courant est `~/Documents`, c'est-à-dire `/home/eleve/Documents` <img class="centre image-responsive" src="data/pwd.png" alt="illustration"> ---- ## Le répertoire courant (suite) - La commande `pwd` (**path working directory**) permet de connaitre le *chemin du répertoire courant* : <img class="centre image-responsive" src="data/pwd1.png" alt="illustration"> <img class="centre image-responsive" src="data/pwd2.png" alt="illustration"> --- ## Se déplacer dans l'arborescence : commande `cd` - Commande `cd` : pour **change directory**, soit *changer de répertoire* - À faire suivre par le chemin (absolu ou relatif) ```bash cd chemin ``` ---- ### Exemples <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers" width="350"> **Exemple 1** : On se trouve dans le répertoire `elsa` et on veut se rendre dans le répertoire `documents` : ```bash cd documents ``` ```bash cd /home/elsa/documents ``` ---- ### Exemples (suite) <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers" width="350"> **Exemple 2** : Le répertoire courant est `photos_vac` et que on veut se rendre dans le répertoire `ski` : ```bash cd ../ski ``` ```bash cd /home/max/images/ski ``` ---- ### Exemples (suite) <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers" width="350"> **Exemple 3** : Le répertoire courant est le répertoire `boulot` et on veut se rendre dans le répertoire `documents` : ```bash cd .. ``` ```bash cd /home/elsa/documents ``` ---- ### Exemples (suite) <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers" width="350"> **Exemple 4** : Pour revenir à son répertoire personnel, quel que soit l'endroit où on se trouve : ```bash cd ``` ```bash cd ~ ``` --- # ✏️ À faire **EXERCICE 2** --- ## Lister le contenu d'un répertoire : commande `ls` - Commande `ls` : pour **list**, soit *lister* - Liste le contenu (répertoires et fichiers) du répertoire courant : <img class="r-stretch centre image-responsive" src="data/arborescence.png" alt="arborescence de fichiers" width="350"> ```bash elsa@ordi:~/documents$ ls boulot fiche.ods ``` ---- ### Exemples <img class="r-strecth centre image-responsive" src="data/ls.png" alt="illustration"> - Le répertoire personnel de l'utilisateur `eleve` contient combien d'éléments ? - Que contient le répertoire `~/Documents` ? > Ne pas hésiter à comparer avec le navigateur de fichiers. --- ## Créer un répertoire : commande `mkdir` - Commande `mkdir` : pour **make directory**, soit *créer un répertoire* - À faire suivre par le nom (ou le chemin) du répertoire à créer : ```bash mkdir nom_repertoire ``` ---- ### Exemple - Pour créer un répertoire `NSI` dans le répertoire `Documents` en partant du répertoire personnel `~` : <img class="centre image-responsive" src="data/mkdir.png" alt="illustration"> --- # ✏️ À faire **EXERCICES 3 et 4** --- ## Supprimer des éléments : commande `rm` - Commande `rm` : pour **remove**, soit *supprimer* - Pour supprimer des fichiers ou des répertoires vides : à faire suivre par le nom du (ou des) fichier(s) à supprimer ```bash rm nom_fichier1 nom_fichier2 nom_fichier3 ``` - Pour supprimer un répertoire non vide (attention, cela supprimera tout ce qu'il contient !) il faut utiliser l'option `-r` (pour *récursif*) ```bash rm -r nom_repertoire ``` --- ## Créer un fichier : commande `touch` - Commande `touch` : pour créer un (ou des) fichier(s) vide(s) - À faire suivre par le nom du (ou des) fichier(s) à créer (attention, il faut indiquer l'extension du fichier) : ```bash touch nom_fichier.extension ``` - Exemple : pour créer un fichier Python vide appelé `main.py`, on exécute la commande `touch main.py`. --- ## Copier un fichier : commande `cp` - Commande `cp` : pour **copy**, soit *copier* - À faire suivre par le chemin du fichier à copier puis du chemin de destination de la copie : ```bash cp /repertoire_source/nom_fichier_a_copier /repertoire_destination/nom_fichier ``` - Remarques : - il y a un espace entre le chemin source et le chemin destination - Le nom du fichier et du chemin de destination ne sont pas forcément les mêmes que ceux de départ : on peut avoir ```cp main.py ../essai.py```. --- ## Déplacer un fichier : commande `mv` - Commande `mv` : pour **move**, soit *déplacer* - À faire suivre par le chemin du fichier à déplacer puis le chemin du répertoire cible - Exemple : pour déplacer `bar.txt` dans le répertoire `baz` : ```bash mv foo/bar.txt baz/ ``` - On peut utiliser `mv` pour renommer un fichier : la commande suivante renomme le fichier `foo_bar.txt` en `foo_baz.txt` : ```bash mv foo_bar.txt foo_baz.txt ``` --- # ✏️ À faire **EXERCICES 5 et 6** --- # Droits et permissions ---- # Droits et permissions - Les OS récents sont **multi-utilisateurs** : plusieurs utilisateurs se partagent le même ordinateur - Chaque utilisateur : - a un environnement qui lui est propre - n'a pas la possibilité de lire ou supprimer tout et n'importe quoi ! Et heureusement ! - L'OS gère pour cela les **droits et permissions** sur les fichiers et les répertoires pour les différents utilisateurs ---- # Droits et permissions - Il existe un utilisateur particulier qui possède tous les droits : l'**administrateur**, ou **root**. - Il peut définir des **groupes** d'utilisateurs et attribuer plusieurs utilisateurs à un groupe pour leur attribuer des droits communs - On va s'intéresser ici aux droits relatifs aux fichiers et répertoires : autrement dit ce que chaque utilisateur a le droit de faire d'un fichier ou d'un répertoire --- ## Utilisateurs et permissions ### Trois types d'utilisateurs Pour un fichier ou un répertoire on distingue trois types d’**utilisateurs** : - le *propriétaire* noté `u` (pour *user*) - le *groupe principal* noté `g` (pour *group*) - les *autres utilisateurs* notés `o` (pour *others*, ceux qui n'appartiennent pas au groupe associé au fichier) ---- ### Permissions pour les fichiers et les répertoires | Type de permission | pour un fichier | pour un répertoire | |---|---|---| | `r` (lecture) | lire le contenu | lister le contenu | | `w` (écriture) | modifier le contenu | ajouter, supprimer, renommer des fichiers | | `x` (exécution) | exécuter le fichier | entrer dedans | - Si une permission n'est pas attribué, la lettre `r`, `w` ou `x` est remplacée par un tiret `-` ---- ## Exemples de lectures de permissions - On peut afficher les droits des éléments d'un répertoire avec la commande ```ls -l``` <img class="r-stretch centre image-responsive" src="data/ls-l.png" alt="droits unix"> ---- ## Exemples de lectures de permissions | Droits et permissions | Nb de liens | propriétaire | groupe | taille | date modif | nom | | --- | --- | --- | --- | --- | --- | --- | | <div style="width:200px"><code>-rw-rw-r--</code></div> | 1 | eleve | eleve | 13197 | avril 18 14:09 | <code>terminal.png</code> | - Les 10 premiers caractères définissent l'ensemble des droits et permissions pour chaque élément ---- ## Exemples de lectures de permissions Permissions pour le fichier `terminal.png`: ```-rw-rw-r--``` - Premier caractère = nature de l'élément. Ici **`-`** pour indiquer qu'il s'agit d'un fichier (`d` : répertoire, `l` : lien). - Trois suivants = permissions pour le **propriétaire** (`u`) Ici **`rw-`** donc droits en lecture et en écriture mais pas en exécution (logique : un fichier image ne s'exécute pas) - Trois suivants = permissions pour le **groupe** (`g`) Ici **`rw-`** donc les mêmes que pour le propriétaire - Trois derniers = permissions pour les **autres utilisateurs** (`o`) Ici **`r--`** donc uniquement le droit en lecture ---- ## Exemples de lectures de permissions Résumé des permissions pour le fichier `terminal.png` : ```-rw-rw-r--``` | | Lecture | Écriture | Exécution | | ------------ | ------- | -------- | --------- | | Propriétaire | oui | oui | non | | Groupe | oui | oui | non | | Autres | oui | non | non | ---- ## Exemples de lectures de permissions Si on veut connaître les droits d'un seul fichier ou répertoire il suffit d'indiquer son nom après `ls -l` : <img class="r-stretch centre image-responsive" src="data/ls-l-nom.png" alt="droits unix"> --- # ✏️ À faire **EXERCICES 7 et 8** --- ## Modifier les permissions d'un fichier avec `chmod` - Il est possible de modifier les permissions d'un fichier ou d'un répertoire en utilisant la commande `chmod` - **Qui peut le faire ?** - le propriétaire du fichier - l'utilisateur `root` (administrateur) ---- ## Modifier les permissions d'un fichier avec `chmod` - Cette commande s'utilise avec diverses options facultatives : ```bash chmod [ugoa][+-=][rwx] fichier ``` Les options entre crochets désignent : - `u`, `g`, `o` : le propriétaire, le groupe, les autres utilisateurs - `a` : tous les utilisateurs (raccourci pour `ugo`) - `+`, `-`, `=` : pour ajouter, enlever ou positionner le(s) droit(s) - `r`, `w`, `x` : droits de lecture, d'écriture, d'exécution - `-R` : récursivement (nécessaire pour agir sur un répertoire) ---- ### Exemples On part avec les permissions ci-dessous : <img class="centre image-responsive" src="data/ls-l.png" alt="droits unix"> - **Exemple 1** : Pour ajouter le droit d'écriture aux autres utilisateurs sur le fichier `compte_rendu.odt` : ```bash chmod o+w compte_rendu.odt ``` - Dans ce cas, tous les autres utilisateurs pourront modifier le fichier en question. ---- ### Exemples (suite) On part avec les permissions ci-dessous : <img class="centre image-responsive" src="data/ls-l.png" alt="droits unix"> - **Exemple 2** : Pour retirer le droit de lecture au groupe sur `terminal.png` : ```bash chmod g-r terminal.png ``` - Dans ce cas, les utilisateurs du groupe ne pourront plus lire le fichier en question. ---- ### Exemples (suite) On part avec les permissions ci-dessous : <img class="centre image-responsive" src="data/ls-l.png" alt="droits unix"> - **Exemple 3** : Pour retirer les droits d'écriture et d'exécution au groupe et au propriétaire sur `fichier.txt` : ```bash chmod gu-wx fichier.txt ``` - Dans ce cas, ni les membres du groupe, ni les autres utilisateurs ne pourront ni lire ni écrire dans ce fichier. ---- ### Exemples (suite) On part avec les permissions ci-dessous : <img class="centre image-responsive" src="data/ls-l.png" alt="droits unix"> - **Exemple 4** : Pour ajouter les droits de lecture et d'écriture à tous les utilisateurs sur `fichier.txt` : ```bash chmod a+rw fichier.txt ``` ---- ### Exemples (suite) Après ce différentes modifications, on obtient les permissions suivantes : <img class="r-stretch centre image-responsive" src="data/ls-l_2.png" alt="droits unix"> --- # ✏️ À faire **EXERCICES 9 et 10** --- # Bilan - Il n'est pas nécessaire d'utiliser (ni d'avoir) une interface graphique pour utiliser un ordinateur : on peut tout faire en **lignes de commandes** dans un terminal. - Le système d'exploitation Linux repose entièrement sur une **arborescence de fichiers et de répertoires** - Il existe des commandes permettant de se déplacer dans cette arborescence et manipuler les fichiers - Les OS multi-utilisateurs permettent d'utiliser un même ordinateur à plusieurs, chacun ayant des **droits et des permissions** différentes et une interface propre. - Le propriétaire d'un fichier et l'administrateur peuvent modifier les permissions sur ce fichier avec la commande `chmod` --- **Références** : - Cours de David Roche sur les [Commandes Linux](https://dav74.github.io/site_nsi_prem/c14c/) - La documentation Ubuntu pour l'aborescence de Linux : [https://doc.ubuntu-fr.org/arborescence](https://doc.ubuntu-fr.org/arborescence) - Cours de Frédéric Junier : [Système d'exploitation et lignes de commande](https://frederic-junier.org/NSI/premiere/chapitre9/cours-systeme/systeme-cours-git/) (licence [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr)) - Mémento en ligne des commandes Linux de Julien Dubreuil : [https://juliend.github.io/linux-cheatsheet/](https://juliend.github.io/linux-cheatsheet/) --- Germain Becker & Sébastien Point, Lycée Emmanuel Mounier, Angers. Ressource éducative libre distribuée sous [Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International](http://creativecommons.org/licenses/by-nc-sa/4.0/) ![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)