Activité pratique
Durée2h30Présentation & objectifs
Dans cette activité pratique, vous apprendrez comment les fichiers sont organisés dans votre ordinateur. Vous découvrirez également les permissions des fichiers, un élément essentiel de la sécurité.
Contenu de l’activité
Systèmes de fichiers
Introduction
Quelques points :
- Un fichier est un ensemble (éventuellement vide) d’octets, associé à un nom et éventuellement à des métadonnées (comme la date, le propriétaire, etc.)
- Un répertoire est un ensemble (éventuellement vide) de fichiers ou de sous-répertoires. Il est lui-même associé à un nom et à des métadonnées. Les fichiers peuvent alors être organisés hiérarchiquement dans des répertoires et sous-répertoires.
- Les systèmes d’exploitation adoptent généralement certaines stratégies dans la manière dont ils choisissent d’organiser leur hiérarchie de fichiers. (Où stocker les ressources système, les fichiers de configuration, les applications, les bibliothèques, les données utilisateur, etc.)
- Les fichiers sont enregistrés sur un dispositif de stockage, tel qu’un disque dur, un disque SSD, une clé USB, un DVD, une disquette, une bande magnétique, etc. (Selon la technologie sous-jacente, un dispositif de stockage peut être divisé en parties appelées partitions ou volumes.)
- Certains de ces dispositifs de stockage sont locaux (physiquement à l’intérieur ou branchés sur votre ordinateur), ou sur un ordinateur distant accessible via le réseau.
- La manière dont les octets sont organisés sur le stockage s’appelle un système de gestion de fichiers (qui décide quels octets sont pour le nom, les données, les métadonnées, etc.)
- Certains systèmes d’exploitation étendent le concept de fichiers dans plusieurs directions :
- liens ou raccourcis : la possibilité pour un fichier d’avoir plusieurs noms. Lorsque certains nœuds d’une hiérarchie peuvent être atteints par plusieurs chemins, on obtient un graphe. Cela étend la manière dont les fichiers peuvent être organisés.
- fichiers spéciaux : Linux, Mac, et Unix en général, aiment utiliser les noms de fichiers comme points d’entrée vers les services du noyau du système d’exploitation. Ces noms de fichiers ne sont pas associés à des données stockées, mais à des attributs ou métadonnées spécifiques. Ainsi, lorsqu’une application effectue des opérations de lecture-écriture, les données sont transmises au pilote de périphérique correspondant dans le noyau, qui active alors le périphérique. Dans d’autres cas, cela permet l’utilisation de services de sockets, de pipelines, de mémoire partagée, etc. Dans d’autres cas encore, cela permet de configurer ou d’inspecter dynamiquement le noyau. Bon, c’est spécial. Pour l’instant, il suffit de savoir que cela existe.
Explorer la documentation
Alors, selon la documentation et les pages Wikipédia mentionnées ci-dessus, quel devrait être le nom du système de fichiers utilisé sur votre propre ordinateur ? (FAT32, NTFS, Ext4, APFS, etc.)
Explorer votre disque
C’est votre propre ordinateur. Regardez une application nommée “Explorateur de fichiers”, “Gestionnaire de fichiers”, “Fichiers”, “Poste de travail”, “Finder” ou similaire. (Typiquement, l’icône ressemble à un dossier ou un classeur.) Sachez comment lancer cette application. Gardez à l’esprit que ce n’est qu’une application. (Vous pouvez en installer d’autres qui font la même chose.) Elle vous donne une belle vue des fichiers stockés sur votre ordinateur ; elle utilise les services du système de fichiers fournis par le système d’exploitation, mais cette application n’est pas le système d’exploitation.
Ainsi, cette application vous permet de naviguer dans la hiérarchie des fichiers de votre ordinateur. Veuillez la lancer.
- Vérifiez d’abord votre position actuelle dans cette hiérarchie, et rappelez-vous comment afficher cette information.
- Puis essayez de naviguer vers le haut, vers le bas, latéralement. Pensez à un arbre, avec des branches, des racines et des feuilles.
- Essayez de revenir à votre tout premier emplacement.
- Vous pouvez aussi jeter un œil aux options de configuration de cette application, cela peut vous donner des idées. Soyez curieux.
Au cours de votre exploration de vos fichiers, vous avez rencontré différentes catégories : ressources système, applications, bibliothèques et données utilisateur. Avez-vous identifié qui est qui ?
Soyez à l’aise avec votre hiérarchie de fichiers
Microsoft ne fournit pas de documentation officielle spécifiant l’organisation de son système Windows. (Si vous connaissez, merci de me le faire savoir.) Cependant, il est possible de trouver de bons tutoriels tiers.
Le système est organisé en plusieurs arbres de fichiers, chacun commençant par une lettre majuscule.
(“Plusieurs” peut se réduire à un seul sur un système simple.)
La lettre majuscule est probablement C:
sur votre système.
Cela est dû à des raisons historiques. Les premiers PC IBM vendus étaient équipés d’un ou deux lecteurs de disquettes, auxquels les lettres A et B étaient attribuées,
puis le disque dur a reçu la lettre C. Cela est resté ainsi (sauf pour les disquettes, qui ne sont plus utilisées).
Les disques durs supplémentaires, partitions ou lecteurs réseau reçoivent les lettres suivantes.
Dossiers clés :
C:\Windows
: Ressources pour le système Windows lui-même.
Il inclut ‘C:\Windows\System’ (ressources globales), ‘C:\Windows\System32’ (bibliothèques pour systèmes 32 bits), ‘C:\Windows\SysWOW64’ (pour systèmes 64 bits).
Ceci est parfois caché par les applications, pour “améliorer l’expérience utilisateur”… Si vous insistez, vous pouvez y aller, après avoir cliqué plusieurs fois sur Ok.C:\Program Files
C:\Program Files (x86)
: Emplacement par défaut pour les applications installées (pour systèmes 64 bits et pour les 32 bits classiques)C:\Users\username
: Emplacements dédiés aux fichiers de chaque utilisateur
Donc, utilisez votre Explorateur de fichiers pour y aller et vérifier par vous-même. Faites-le, vraiment, maintenant.
Le système est organisé en une seule hiérarchie globale (contrairement à Windows). La racine de cet arbre s’appelle “/”. La hiérarchie suit une spécification : le Filesystem Hierarchy Standard. La plupart des variantes Linux, comme tous les autres systèmes Unix, respectent (plus ou moins) cette spécification.
Dossiers clés :
/boot
: Ressources pour démarrer le système (le chargeur de démarrage, le noyau, etc.)/etc
: Fichiers de configuration système spécifiques à l’hôte. (Ce nom surprenant est celui de “etc.”, la locution latine “et cetera”.)/bin
: Binaries essentiels pour l’utilisateur en ligne de commande./sbin
: Binaries essentiels pour le système./lib
: Bibliothèques pour les binaries dans ‘/bin’ et ‘/sbin’./usr
: Hiérarchie secondaire, pour les ressources non essentielles. Elle inclut ‘/usr/bin’, ‘/usr/sbin’, ‘/usr/lib’.
(La séparation entre essentiel et non essentiel est le résultat d’une longue histoire commencée dans les années 70. Mais gardez en tête que “usr” n’est pas l’abréviation de “users” ; les utilisateurs vont ailleurs…)/dev
: Fichiers spéciaux relatifs aux périphériques./proc
/sys
: Fichiers spéciaux relatifs au noyau./home/username
: Emplacements dédiés aux fichiers de chaque utilisateur.
Donc, utilisez votre Explorateur de fichiers pour y aller et vérifier par vous-même. Faites-le, vraiment, maintenant.
Le système est organisé en une seule hiérarchie globale (contrairement à Windows). La racine de cet arbre s’appelle “/”. Comme les autres systèmes Unix, il suit plus ou moins le Filesystem Hierarchy Standard (en fait, plutôt moins). Mais il a ses propres spécificités. Les ressources Unix traditionnelles sont généralement cachées par les applications Mac, pour “améliorer l’expérience utilisateur”… D’autres sont renommées pour être plus explicites.
Dossiers clés :
/System
: Ressources pour le système/Applications
: Emplacement par défaut pour les applications destinées à tous les utilisateurs/Library
: Bibliothèques pour les applications dans ‘/Applications’/Users/username
: Emplacements dédiés aux fichiers de chaque utilisateur (avec des sous-répertoires pour leurs propres ‘Applications’ et ‘Library’ installées)
Donc, utilisez Finder (ou votre explorateur de fichiers préféré) pour y aller et vérifier par vous-même. Faites-le, vraiment, maintenant.
Essayez la ligne de commande
La ligne de commande n’est pas réservée aux scènes de cinéma avec des stéréotypes de geeks, c’est en réalité une manière pratique d’utiliser votre ordinateur.
En résumé, une interface en ligne de commande (CLI) est une application (ou une partie d’une application) offrant une interaction textuelle entre l’humain et la machine. L’humain est invité à taper une phrase, la machine la comprend (ou pas) et fournit sa réponse. Pour que cela fonctionne, la phrase doit être simple et stricte, essentiellement un mot de commande suivi de quelques paramètres ou options. L’humain doit connaître les mots que la machine peut comprendre, et les taper avec ses doigts sur le clavier sans cliquer la souris. (Cette compétence extraordinaire est probablement à l’origine de ces stéréotypes cinématographiques.)
Autrefois, l’interface en ligne de commande était une console physique, nommée terminal, un appareil composé d’un écran cathodique et d’un clavier, connecté à un ordinateur de la taille d’une armoire. (Un grand succès commercial de Teletype Corp. dans les années 70, qui a laissé le mot courant TTY pour ces dispositifs.) Maintenant, c’est juste une application sur votre PC. Ainsi, “ligne de commande”, “cli”, “shell”, “console”, “rollover”, “terminal”, “tty” sont plus ou moins synonymes avec quelques particularités mineures.
Essayons.
Explorez les menus et cherchez une application appelée “Invite de commandes” ou similaire. Vous pouvez aussi utiliser la barre de recherche pour “Command”, “Prompt”, “cmd.” ou une combinaison. Cliquez dessus. Et gardez en tête comment la lancer.
Cela lance une application textuelle. C’est soit le traditionnel “cmd”, soit le moderne “powershell” de Windows. Les deux conviennent pour nos besoins aujourd’hui. (Ce dernier en fait plus dans le sens où son langage de script étend celui de l’ancien, plus des commandes supplémentaires. Oubliez cela pour l’instant.)
Les commandes de base que vous devriez connaître sont :
help
: Oui, c’est une commande. Elle fournit soit la liste des commandes supportées, soit des détails sur une commande donnée (ex. demandez “help cd”).
De plus, chacune des commandes suivantes affiche un bref texte d’aide lorsqu’elle est suivie de l’option “/?” (ex. tapez “dir /?”).dir
: Liste le contenu d’un répertoire (le Directory).cd
: Change Directory. Allez dans le répertoire indiqué (ex. “cd C:\Users", ou “cd ..” où le nom spécial de répertoire “..” signifie un pas en arrière dans la hiérarchie.)c:
d:
a:
Passe à la hiérarchie du disque attaché à la lettre, si actif.mkdir
rmdir
: Crée ou supprime un répertoire.copy
: Copie un fichier ou un répertoire. (Notez aussi “xcopy”, sa version étendue – extended)del
: Supprime des fichiers.ren
: Renomme un fichier ou un répertoire.tree
: Affiche l’arborescence depuis votre position actuelle dans la hiérarchie.app_name
: Lance une application, tapez simplement le nom du fichier exécutable. (Ex. tapez “notepad” ou “explorer”, etc.)exit
: Pour sortir.
Utilisez donc l’interface en ligne de commande pour parcourir votre hiérarchie de fichiers.
Notez l’usage particulier du caractère “\” (antislash). C’est le séparateur de fichiers. Il ne fait pas partie du nom, il est utilisé pour séparer les noms dans la chaîne de caractères. Une série de noms de répertoires et sous-répertoires séparés par ce séparateur s’appelle un chemin.
On peut distinguer :
- chemin absolu : Le chemin commence par une lettre de lecteur.
- chemin relatif : Le chemin commence par le nom d’un sous-répertoire du répertoire courant. Il est relatif à ‘ici’. Il n’est donc valide que si vous partez du bon endroit.
Notez l’intérêt des noms de sous-répertoires spéciaux “.” (ici) et “..” (un pas en arrière).
Questions (chemin absolu ou relatif) :
- Qu’est-ce que “C:\Users” ?
- Qu’est-ce que “C:\Windows” ?
- Qu’est-ce que “Windows\System” ?
- Qu’est-ce que “..\..\Users” ?
- Qu’est-ce que “C:\Windows\.\System” ?
Réponse :
- Demandez à votre ordinateur ! (C.à.d. essayez avec la commande “cd”)
Question :
- Existe-t-il un endroit où “.” = “..” ?
Notez que Windows n’est pas sensible à la case (minuscule vs. majuscule, contrairement à Unix.)
Astuce : Si un nom de répertoire ou de fichier contient des espaces, utilisez des guillemets.
Pour aller plus loin
Si vous avez installé WSL (Windows Subsystem for Linux), vous pouvez le lancer, et passer à l’onglet Linux suivant.
Linux et Mac sont tous deux des variantes appartenant à la famille Unix. Ce sont des cousins assez éloignés, mais dans ce cas, on peut les considérer de la même manière.
Explorez les menus et cherchez une application appelée “Terminal”, “Command”, “Shell” ou similaire. C’est probablement une icône représentant un écran rectangulaire noir et blanc affichant le texte “>_” (l’invite historique Unix). Juste au cas où, quelques indications pour Linux Ubuntu et Mac.
Les commandes de base que vous devriez connaître sont :
help
: Oui, c’est une commande. Elle fournit soit la liste des commandes supportées, soit des détails sur une commande donnée (ex. demandez “help cd”).ls
: Liste le contenu d’un répertoire.cd
: Change Directory. Allez dans le répertoire indiqué (ex. “cd /home”, ou “cd ..” où le nom spécial de répertoire “..” signifie un pas en arrière dans la hiérarchie ; notez aussi le nom spécial de répertoire “~” comme alias pour votre propre répertoire personnel.)pwd
: Print working directory, votre position actuelle dans la hiérarchie.mkdir
rmdir
: Crée ou supprime un répertoire.cp
: Copie un fichier ou un répertoire.rm
: Supprime des fichiers.mv
: Déplace un fichier ou un répertoire.tree
: Affiche l’arborescence depuis votre position actuelle dans la hiérarchie.app_name
: Lance une application, tapez simplement le nom du fichier exécutable. (Ex. tapez “gedit” ou “firefox”, etc.)man
: Affiche une page de manuel relative à une application ou au système.
Unix a la bonne idée de fournir sa propre documentation officielle. (Ex. tapez “man gedit” ; appuyez sur ‘Q’ pour quitter)
Tapez “man hier” pour une explication de la hiérarchie des fichiers de votre système.exit
: Pour sortir.
Utilisez donc l’interface en ligne de commande pour parcourir votre hiérarchie de fichiers.
Notez l’usage particulier du caractère “/” (slash). C’est le séparateur de fichiers. Il ne fait pas partie du nom, il est utilisé pour séparer les noms dans la chaîne de caractères. Une série de noms de répertoires et sous-répertoires séparés par ce séparateur s’appelle un chemin.
On peut distinguer :
- chemin absolu : Le chemin commence par la racine de la hiérarchie, nommée “/”.
- chemin relatif : Le chemin commence par le nom d’un sous-répertoire du répertoire courant. Il est relatif à ‘ici’. Il n’est donc valide que si vous partez du bon endroit.
Notez l’intérêt des noms de sous-répertoires spéciaux “.” (ici) et “..” (un pas en arrière).
Questions (chemin absolu ou relatif) :
- Qu’est-ce que “/home” ?
- Qu’est-ce que “/sbin” ?
- Qu’est-ce que “usr/bin” ?
- Qu’est-ce que “../../sbin” ?
- Qu’est-ce que “/usr/./bin” ?
Réponse :
- Demandez à votre ordinateur ! (C.à.d. essayez avec la commande “cd”)
Question :
- Existe-t-il un endroit où “.” = “..” ?
Notez que Linux & Mac (et autres Unixes) sont sensibles à la case (minuscule vs. majuscule, contrairement à Windows.)
Astuce : Si un nom de répertoire ou de fichier contient des espaces, utilisez des guillemets.
“Oh, dommage, j’ai oublié mon PC à la maison…”
Ne vous inquiétez pas, vous pouvez installer une application terminal sur votre smartphone ! Par exemple, regardez “termux” (Android) ou “iSH” (iPhone).
Ces systèmes sont basés sur Unix, vous pouvez donc passer à l’onglet Linux & MacOS et expérimenter les activités proposées et explorer l’intérieur de votre smartphone.
Permissions
Votre ordinateur est certainement un système multi-utilisateur. Cela signifie que plusieurs utilisateurs peuvent l’utiliser (simultanément ou alternativement), et que le système fait de son mieux pour préserver l’intégrité des données de chacun. Les utilisateurs ici peuvent être une personne physique, ou non : sur votre ordinateur vous jouez deux rôles, le rôle d’administrateur système (installer, désinstaller, configurer le système et les applications), et le rôle d’un simple utilisateur (utilisateur heureux qui clique, profite et code). Les systèmes modernes mettent donc en œuvre des moyens d’isoler et de séparer les choses. D’abord à la connexion : avant de démarrer votre session, l’ordinateur vous demande qui vous êtes et de le prouver (ex. nom d’utilisateur + mot de passe). Puis, pendant votre session, le système vous empêche d’endommager les fichiers des autres (accidentellement ou délibérément), sauf autorisation explicite. De plus, il est généralement considéré comme une mauvaise idée d’ouvrir sa session de tous les jours en tant qu’administrateur, ou de lancer des simples applications utilisateur en tant qu’administrateur. (Même si vous êtes l’administrateur de votre ordinateur, créez un compte utilisateur normal et utilisez-le pour vous connecter pour un usage normal. Limitez votre rôle d’administrateur à un temps très limité, et pour uniquement des tâches d’administration.)
De manière générale, le système d’exploitation s’occupe de sécuriser les choses via son système de gestion de fichiers ; chaque fichier est stocké avec des métadonnées indiquant d’une manière ou d’une autre quel utilisateur est autorisé à lire, écrire ou exécuter le fichier. Les détails dépendent du système en question.
Notez aussi que les permissions sur les répertoires doivent être comprises avec soin.
Être autorisé à lire un répertoire signifie être autorisé à obtenir la liste des noms de fichiers et sous-répertoires qu’il contient.
Être autorisé à écrire dans un répertoire signifie être autorisé à ajouter ou supprimer un fichier dans ce répertoire, indépendamment d’être autorisé à accéder au contenu du fichier.
Être autorisé à exécuter un répertoire n’a pas de sens (contrairement à un fichier, qui peut être une application).
Cela est remplacé par l’idée d’être autorisé à le traverser, c’est-à-dire à accéder à son contenu sans l’autorisation de le lire.
Windows utilise généralement NTFS comme système de gestion de fichiers. (Donc c’est la réponse à la première question de cette session, vous l’aviez trouvée ?)
Les autorisations sont mises en œuvre à l’aide de listes d’accès (ACL) attachées aux fichiers : une liste explicite de qui est autorisé à faire quoi.
À faire : Lancez votre gestionnaire de fichiers. Sélectionnez un fichier quelque part et faites un clic-droit. Sélectionnez l’onglet “Sécurité”. Vous obtenez une liste d’utilisateurs et, pour chacun d’eux, les actions autorisées ou refusées. Vous pouvez supprimer un utilisateur de la liste, ou en ajouter un nouveau parmi ceux existant sur votre système. (Cela peut aussi être le nom d’un “groupe” d’utilisateurs.) Pour chacun d’eux, vous pouvez modifier les permissions dites “Basique” ou “Avancée” (ou “Spéciale”). Les autorisations basiques sont assez évidentes : lire, écrire, exécuter, modifier les propriétés. Les plus avancées reposent sur le fait que cela peut être hérité du répertoire parent ou non, ou permettre la création/suppression de fichiers ou sous-répertoires, etc.
Pour vos tests, vous pouvez créer des fichiers ou répertoires factices et modifier leurs permissions, sans toucher à vos fichiers précieux habituels.
Vous pouvez aussi vérifier ou modifier les permissions avec l’outil en ligne de commande “icacls”.
Pour aller plus loin
Si vous avez installé WSL (Windows Subsystem for Linux), vous pouvez le lancer, et passer à l’onglet Linux suivant.
Encore une fois, nous allons traiter Linux et Mac ensemble.
Linux utilise généralement Ext3 ou Ext4 comme système de gestion de fichiers, tandis que Mac utilise maintenant APFS. (Donc c’est la réponse à la première question de cette session, vous l’aviez trouvée ?)
Les permissions sont mises en œuvre à l’aide des permissions Unix : un ensemble de 3x3 bits, indiquant les permissions lecture/écriture/exécution pour le propriétaire du fichier, pour les utilisateurs du groupe auquel appartient le fichier, et pour les autres utilisateurs.
(Il existe de nombreux systèmes de gestion de fichiers pour Unix, mais ils implémentent tous ce principe. Certains offrent aussi des listes d’accès ou des attributs étendus. Mais cela dépasse le cadre ici.)
À faire : Lancez votre gestionnaire de fichiers. Sélectionnez un fichier quelque part et faites un clic-droit. Sélectionnez l’onglet “Permission”. Vous obtenez les permissions lecture/écriture/exécution mentionnées ci-dessus pour utilisateurs/groupes/autres.
Ouvrez maintenant votre interface en ligne de commande préférée.
Tapez ls -l
. (L’option “-l” demande la description longue des fichiers listés. Lisez la page de manuel avec “man ls”.)
$ ls -l
total 8
-rwx--x--x 1 clohr info-perm 92 juil. 15 17:33 helloworld.py*
-rw-r--r-- 1 clohr info-perm 33 juil. 15 17:34 readme.txt
drwx------ 2 clohr info-perm 4096 juil. 15 17:35 session1/
- Vous pouvez deviner des informations classiques : un nom de fichier, une date, une taille.
La taille du fichier est exprimée en octets. Le total est exprimé en blocs occupés ; oubliez cela.
La date affichée est la date à laquelle le contenu a été modifié pour la dernière fois. Unix enregistre aussi la dernière date de lecture et la dernière fois où les attributs ont été modifiés. (Chacune des trois dates enregistrées peut être obtenue avec certaines options de “ls”.) - Vous pouvez voir un nom d’utilisateur (“clohr” dans cet exemple), et un nom de groupe (“info-perm” dans cet exemple).
- La deuxième colonne contient un petit nombre (1 ou 2 dans cet exemple). C’est le nombre de liens directs vers le fichier, c’est-à-dire le nombre de noms dans la hiérarchie des fichiers pour atteindre les données.
- Mais la partie la plus intéressante pour nous est la première colonne : l’ensemble mystérieux de lettres et tirets. Ce sont les permissions Unix sur les fichiers. (Affichées ici symboliquement ; les valeurs binaires correspondantes sont parfois affichées en octal, et rarement en hexadécimal).
Explication des symboles d’autorisation :
- La première lettre indique si le fichier est un fichier régulier (le tiret ‘-’), ou un répertoire (un ’d’).
(Pour les fichiers spéciaux, cela peut aussi être ‘c’ (périphérique caractère), ‘b’ (périphérique bloc), ‘p’ (pipe) ou ’s’ (socket unix). Oubliez cela.) - Ensuite, trois groupes de trois lettres : ‘rwx’ (lecture, écriture, exécution, ou un tiret si non autorisé), pour l’utilisateur, pour le groupe et pour les autres.
(En plus, Unix a les set user-id et sticky bits, avec des lettres ’s’ ou ’t’ à la place du ‘x’. Oubliez cela.)
Points clés à retenir :
- (r)ead (w)rite e(x)ecute, pour (u)ser (g)roup (o)thers
- signification pour les répertoires : r = obtenir la liste des fichiers qu’il contient, w = écrire cette liste en ajoutant ou supprimant des fichiers, x = traverser pour atteindre les fichiers sans les lister
Les permissions Unix (ou modes) peuvent être modifiées avec la commande chmod
.
Jetez un œil à la page de manuel (“man chmod”).
En gros, la syntaxe est “chmod [ugo+=-rwx] [filename]”, où “ugo” et “rwx” sont comme ci-dessus, et “+=-” est l’action pour ajouter, définir ou retirer ces permissions pour ces personnes.
Pour tester, créez un fichier factice et changez ses permissions :
$ echo "Hello world" > dummy.txt
$ ls -l ./dummy.txt
-rw-rw-r-- 1 clohr info-perm 12 16 juil. 09:22 ./dummy.txt
$ chmod go-r ./dummy.txt
$ ls -l ./dummy.txt
-rw--w---- 1 clohr info-perm 12 16 juil. 09:22 ./dummy.txt
$ chmod a+x ./dummy.txt
$ ls -l ./dummy.txt
-rwx-wx--x 1 clohr info-perm 12 16 juil. 09:22 ./dummy.txt
...
Avez-vous vraiment lu la page de manuel ? Quelle est la signification de ‘a’ dans la dernière commande “chmod” ?
Notez aussi qu’il existe une syntaxe octale classique. Mais vous devriez au moins connaître la syntaxe symbolique.
Fichiers cachés : Les fichiers peuvent être cachés. Mais ce n’est pas dû à un type d’attribut spécial ou à une propriété de permission, c’est juste une convention de la part des applications. Les fichiers ou répertoires dont le nom commence par un point ne sont généralement pas affichés à l’utilisateur, sauf demande explicite. Par exemple, vos fichiers de configuration de session sont généralement cachés (pour votre confort). Pour les voir, passez l’option “-a” (all) à “ls” :
$ cd
$ ls -la
...
De même, regardez comment configurer votre gestionnaire de fichiers pour afficher les fichiers cachés.
Sachez où trouver les fichiers téléchargés et divers fichiers d’applications
Les applications utilisent et produisent des fichiers, mais où sont-ils ?
Considérez un premier scénario
Vous visitez une page web d’un truc épatant. Vous avez lu la documentation attentivement. Vous êtes maintenant convaincu que c’est le truc dont vous avez besoin. Vous cliquez sur télécharger.
Que se passe-t-il ?
Votre navigateur web (qui n’est qu’une autre application) télécharge le fichier demandé et le stocke quelque part sur votre ordinateur. Où ce nouveau fichier a-t-il été placé dans votre hiérarchie de fichiers ?
-
Ouvrez votre gestionnaire de fichiers. Sur l’espace de fichiers affiché, vous trouvez quelque chose appelé “Téléchargements” (ou similaire). C’est probablement là que votre navigateur web a enregistré le fichier téléchargé. (Vérifiez.) Mais est-ce vraiment la bonne réponse à la question ? Où se trouve ce sous-répertoire “Téléchargements” dans votre hiérarchie de fichiers ? En fait, vous le voyez dans un dossier nommé “Homes” (ou similaire, comme un raccourci, pour “améliorer l’expérience utilisateur”). Mais un raccourci vers où ? Comment et qui a créé ce raccourci ?
Votre explorateur de fichiers propose certainement aussi un élément appelé “Ce PC” ou “Système” (ou similaire), un point d’entrée dans la hiérarchie des fichiers de votre ordinateur, offrant une vue concrète des fichiers et de leur emplacement (sans stratégies de masquage pour améliorer l’expérience utilisateur). Parcourez-le donc pour trouver votre fichier téléchargé. Trouvé ? Gardez en tête la vraie localisation. Notez aussi que le raccourci mentionné ci-dessus n’est qu’une astuce réalisée par votre gestionnaire de fichiers, à des fins d’affichage. -
Ouvrez votre terminal de commande (ou le nom utilisé sur votre système). Répétez l’exploration, mais en utilisant l’interface en ligne de commande. Utilisez les commandes décrites ci-dessus pour parcourir les répertoires, et trouver le fichier téléchargé. Gardez en tête la localisation actuelle.
-
Considérations de sécurité.
Les éléments que vous avez téléchargés peuvent contenir des programmes exécutables. Si vous cliquez dessus, vous demandez à votre ordinateur de suivre des instructions décidées (codées) par quelqu’un d’autre. (D’accord, tout le reste sur votre ordinateur l’est déjà.) Mais, êtes-vous sûr que cet exécutable est bon pour vous ? Qu’il n’y a pas d’action cachée ? Votre système peut (ou non) incorporer un “antivirus”, c’est-à-dire une application qui examine les instructions exécutables et détecte (ou non) un code inapproprié. Cela augmente la confiance, mais ce n’est pas magique. La première ligne de défense, c’est vous. Avez-vous lu la documentation attentivement ? L’avez-vous téléchargé depuis une source fiable ? Est-ce la source originale de cette application et non un site tiers (qui pourrait injecter du code supplémentaire) ? Gardez ces questions en tête lorsque vous cliquez sur ok. Il n’y a probablement pas de réponse définitive, juste des moyens d’élever la confiance.
Considérez un second scénario
Vous commencez maintenant à devenir un codeur (et bientôt un développeur), avec Python, Java, etc. et un IDE (ex. VS Code). Donc, vous avez joué avec un IDE. C’est une application, qui stocke des fichiers. Mais où ?
Les mêmes questions que pour le premier scénario :
- Utilisez votre gestionnaire de fichiers pour trouver l’emplacement réel de vos fichiers de code dans la hiérarchie des fichiers.
- Utilisez votre interface en ligne de commande pour trouver l’emplacement réel de vos fichiers de code dans la hiérarchie des fichiers.
Organisez votre propre espace utilisateur par leçons/sessions/etc.
Vous ne mettez probablement pas vos pantalons, chaussettes, maillots de bain et manteaux dans le même tiroir. Vous essayez probablement d’organiser vos affaires pour regrouper les éléments qui vont ensemble.
Faites de même avec vos biens numériques.
Votre session propose peut-être déjà une organisation : “Ma musique”, “Mes vidéos”, “Mes images”, “Mes téléchargements”, “Mon bureau”, “Mes documents”, … C’est une organisation par type de fichiers. (Bon, “Documents” c’est plutôt flou, et il n’y a pas de “Mes codes”.) Vous pouvez donc préférer une autre stratégie pour organiser les fichiers que vous aurez à gérer pendant votre formation. Pourquoi ne pas organiser cela par sous-répertoires correspondant aux disciplines / leçons / sessions / activités. Ce n’est certainement pas une bonne idée d’avoir tous vos fichiers de travail dans le même dossier, de manière plate, et d’avoir beaucoup de choses simplement nommées “exercice” “projet” “rapport” (de quoi ??). Essayez de trouver votre propre stratégie pour organiser vos fichiers et suivez-la.
Faites-le maintenant. Vous avez déjà créé des fichiers dans les sessions précédentes. Créez donc des sous-répertoires, maintenant, avec des noms qui ont du sens pour vous, et déplacez-y les fichiers. Ne vous inquiétez pas si vous changez d’avis et optez pour une autre stratégie plus tard, vous pouvez toujours réorganiser et déplacer vos fichiers en conséquence. Soyez juste cohérent.
Gérer les archives
Une archive est un gros fichier contenant plusieurs fichiers. Elle est utile pour gérer des sauvegardes, ou pour distribuer un projet.
En plus de la collection de fichiers, certaines solutions offrent aussi la compression. Cela peut être fait séparément ou en combinaison. La protection par mot de passe peut aussi être proposée. Il est traditionnel dans le monde Unix d’utiliser le format “tar” (Tape ARchiver, historiquement utilisé pour les sauvegardes sur bande magnétique), suivi d’une compression (gzip, bzip2, xz, …) On obtient des extensions de fichiers telles que “.tar.gz” “.tgz” “.tar.bz2” “.tar.xz” etc. Il est traditionnel dans le monde Windows d’utiliser le format “.zip” ou “.7z” (ou d’autres formats propriétaires tels que “.arj” ou “.rar”). Mais de nombreux formats existent, avec des différences en termes de latence d’accès, taux de compression et licence. La plupart des formats différents sont disponibles sur toutes les plateformes.
Les opérations de base sont : créer, lister, extraire. La plupart permettent aussi d’ajouter un fichier à une archive existante, de remplacer un fichier par un nouveau contenu ou d’extraire un fichier sans extraire l’ensemble.
-
Ouvrir une archive de fichiers.
C’est typiquement l’opération que vous effectuez pour obtenir les fichiers fournis par les enseignants pour une séance de travaux pratiques.
Téléchargez archive_tuto.zip ou archive_tuto.tar.bz2 proposés ici (ou les deux), et enregistrez-les dans votre espace de travail. Si votre système propose de l’ouvrir directement avec un gestionnaire d’archives (ou similaire), refusez et choisissez de l’enregistrer. Maintenant, vous savez où vos fichiers téléchargés sont stockés et comment y accéder avec votre gestionnaire de fichiers. Allez-y et cliquez dessus. Si votre système ne propose pas de gestionnaire d’archives, vous pouvez installer 7-zip ou peazip.
Le gestionnaire d’archives vous permet de lister le contenu de cette archive. Notez qu’il y a deux écoles concernant la construction des archives : faut-il placer tout le contenu dans un sous-répertoire à l’intérieur de l’archive, ou faut-il le placer directement à la racine de l’archive ? Cela aura un impact pratique au moment de l’extraction. Dans le premier cas, tout le contenu extrait sera stocké et regroupé dans un sous-répertoire approprié. Tandis que dans le second cas, les fichiers seront mélangés avec ceux déjà existants dans le répertoire de travail. Dans ce cas, il est conseillé de préparer en créant un sous-répertoire pour l’extraction de l’archive. Donc, la première chose à faire est de regarder la liste du contenu de l’archive et vérifier son organisation interne.
Vous pouvez maintenant procéder à l’extraction des fichiers. Décidez où extraire les fichiers, et souvenez-vous-en.
Les utilisateurs Unix peuvent préférer les outils en ligne de commande :
tar
etunzip
sont vos amis. (Lisez les pages de manuel ! pour lister : “tar tvf <archive.tar.bz2>” “unzip -l <archive.zip>” ; pour extraire : “tar xvf <archive.tar.bz2>” “unzip <archive.zip>”.) Puis, regardez les nouveaux fichiers. -
Créer une archive de fichiers.
C’est typiquement l’opération que vous effectuez lorsque vous remettez votre travail aux enseignants.
Créez un sous-répertoire (ex. “my_homework”). Créez quelques fichiers dedans (ex. “foo.py” “bar.txt” …) Revenez au répertoire précédent, c’est-à-dire celui contenant “my_homework”. Votre gestionnaire d’archives préféré peut être intégré à votre gestionnaire de fichiers. Dans ce cas, en cliquant sur un élément (ex. “my_homework”), il propose une nouvelle action telle que “archiver”. Sinon, vous devez lancer ce gestionnaire d’archive depuis le menu de vos applications. En gros, ces gestionnaires d’archives proposent de sélectionner des fichiers ou répertoires sur votre disque, puis vous demandent un nom d’archive et un emplacement pour créer l’archive.
Les utilisateurs Unix peuvent préférer les outils en ligne de commande :
tar
etzip
sont vos amis. (Lisez les pages de manuel ! pour archiver : “tar cvfj <archive.tar.bz2> <my_homework/>” “zip -r <archive.zip> <my_homework/>”)Regardez d’abord le contenu de l’archive que vous avez créée, à la liste, pour vous assurer que vous n’avez oublié aucun fichier. Ensuite, envoyez votre fichier d’archive à votre camarade de classe et demandez-lui de le regarder.
Utilisation avancée du shell
Les redirections du shell
Revenons à notre terminal en ligne de commande (le shell). Vous tapez un mot clef (le nom d’une commande, éventuellement avec des options), et l’ordinateur vous obéit et vous affiche le résultat.
Mais supposions que vous préféreriez que le résultat soit sauvegardé dans un fichier, plutôt que de s’afficher brièvement sur la console. C’est là qu’intervient une nouvelle fonctionnalité: la redirection.
Ouvrez votre terminal de commande préférez.
(Note: les commandes que nous allons essayer maintenant fonctionnent de manière quasi identique sous Windows, Linux, ou Mac.)
Redirection dans un fichier avec ’>’
-
Tapez la commande
tree
.Cela affiche l’arborescence des répertoires.
(C’est juste un exemple, car il nous fallait bien une commande pour l’exercice, mais on aurait pu prendre n’importe quelle autre commande qui affiche quelque chose dans la console. )Ayez le réflexe de regarder sa documentation (’tree /?’ (Windows) ou ’tree −−help’ (Unix)).
Notez que si vous êtes dans un répertoire qui contient ne rien, il n’y aura pas grand chose à afficher. Auquel cas, essayez
tree ..
, ou bientree /
. (Vous vous souvenez de la signification de ‘..’ ou de ‘/’ ? On en a parlé au début de la séance.) -
Supposons que vous vouliez sauvegarder le résultat dans un fichier. Bon, vous pouvez toujours faire un copier-collé à la souris dans le notepad. Mais il y a mieux.
Tapez
tree > fichier.txt
La sortie de la commande ’tree’ est alors redirigée dans le fichier appelé ‘fichier.txt’ qui vient d’être créé dans le répertoire courant. Notez que si vous n’avez pas les droits d’écriture dans le répertoire courant, le système va râler. Auquel cas, allez dans votre répertoire de travail. (E.g. ‘cd %USERPROFILE%’ (Windows cmd), ‘cd $env:USERPROFILE’ (Windows powershell), ou ‘cd ~’ (Unix))
-
Listez le contenu du répertoire courant (commande ‘dir’ ou ’ls’), et vous observez qu’un nouveau fichier a été créé: ‘fichier.txt’
Affichez le contenu de ce fichier:
more fichier.txt
(Notez que la commande ‘more’ affiche sur la console le contenu du fichier texte qu’on lui a indiqué. Quand elle est lancée, tapez <entrée> pour afficher la ligne suivante, <espace> pour afficher la page suivante, ou Q pour quitter. Au besoin, regardez sa documentation.)Alors, convaincu ? Le caractère ‘>’ sur la ligne de commande a bien redirigé la sortie de la commande dans un fichier.
Redirection dans un fichier en mode ajout avec ’>>’
-
La manipulation précédente a créé le fichier ‘fichier.txt’. Mais en fait, c’est une chance, car il n’existait pas déjà. Mais s’il y en avait déjà un, et qu’il contenait quelque chose, il aurait été écrasé avec ce nouveau contenu !
-
Tapez
tree >> fichier.txt
Notez bien que cette fois-ci, il y a deux caractères supérieur.
Regardez le contenu (‘more fichier.txt’)
-
Essayez la manipulation plusieurs fois de suite. Vous constaterez que cette fois-ci, on a redirigé dans un fichier, mais en ajoutant à chaque fois à la fin de ce qu’il y avait déjà.
Bien. Vous pouvez maintenant effacer ce fichier, on n’en n’a plus besoin, il faut toujours faire le ménage derrière soi. (‘rm fichier.txt’ ou ‘del fichier.txt’)
Redirection dans une autre commande avec ’|’
(Ce caractère est appelé pipe)
-
Tapez
tree | more
Vous noterez que l’on a deux commandes (’tree’ et ‘more’, on les a expérimentées séparément), et qu’elles sont ici associées en une seule instruction : la sortie de ’tree’ est redirigée vers l’entrée de ‘more’. (Comme s’il y avait un tuyau entre les deux, d’où le pipe.)
Petite parenthèse technique: Sous Unix, le pipe est implémenté par un service du système d’exploitation qui gère un buffer de type fifo entre les deux applications qui sont exécutées en parallèle. Sous Windows, le pipe est un fichier temporaire, et les applications sont exécutées en séquence. Mais globalement, le résultat final est à peu près le même.
Les variables du shell
L’interpréteur de la ligne de commande (le shell), est en fait un petit langage de script, avec des structures de contrôle (boucles, tests, etc.), et des variables. On va se contenter ici de découvrir ces variables.
En effet, ces variables, outre le fait qu’elles jouent le même rôle dans ces scripts que pour n’importe quel autre langage de programmation informatique, elles ont ici un impact supplémentaire : elles sont visibles par les commandes elles-mêmes lancées dans le shell.
Ainsi, déclarer ou modifier des variables du shell peut modifier le comportement des commandes que l’on tape dans le shell. C’est pourquoi on les appelle également variables d’environnement.
Lister les variables d’environnement déjà existantes.
Tapez :
set
(Windows cmd)gci env:*
(Windows powershell)env
(Unix)
A l’initialisation du système et de votre session, un certain nombre de variables d’environnement ont été positionnées. Elles se propagent naturellement dans les shell et sous-shell, et toute autres applications.
Afficher quelques variables principales.
-
Le répertoire utilisateur, là où il est censé ranger ses propres fichiers :
echo %USERPROFILE%
(Windows cmd)
qui se décompose en fait en ‘%HOMEDRIVE%’ et ‘%HOMEPATH%’echo $env:USERPROFILE
(Windows powershell)echo $HOME
, ou plus simplementecho ~
(Unix)
-
Le nom de l’utilisateur :
echo %USERNAME%
(Windows cmd)echo $env:USERNAME
(Windows powershell)echo $USER
(Unix)
-
Le fameux PATH, la liste des répertoires où se trouvent les commandes et applications bien connues :
echo %PATH%
(Windows cmd)echo $env:PATH
(Windows powershell)echo $PATH
(Unix)
Créer ou modifier une variable.
-
Windows cmd :
set A=10
echo %A%
-
Windows powershell :
$A = 10
echo $A
Notez que PowerShell fait la distinction entre des variables locales au shell en cours, et des variables d’environnement, qui seront alors propagées dans les commandes et sous-commandes appelées depuis ce shell. Ces variables d’environnement sont alors préfixées par ’env:’ (et donc, dans l’exemple précédent cela deviendrait ’env:A’)
-
Unix :
A=10
echo $A
Notez que les shells Unix font aussi la distinction entre les variables locales et les variables d’environnement. Par défaut, elles sont créées dans le tableau des variables locales, et pour les passer dans le tableau des variables d’environnement, il faut employer la commande ’export’.
Portée des variables
Les variables que vous avez ainsi créées sont connues dans le shell en cours, et éventuellement dans les sous-shells et commandes lancées depuis ce shell. Par contre, elles sont inconnues des autres shells lancés par ailleurs. De plus, elles disparaîtront lorsque vous quitterez ce shell.
Pour les rendre persistantes où globales, il faut passer par des fichiers et outils de configuration de la session utilisateur, voir du système. On ne traitera pas cela ici.
Exemple pratique.
Au cours des sessions précédentes, on vous a présenté l’environnement de développement Python. Et notemment, pour démarrer un projet dans de bonnes conditions, il convient de lui créer un sous répertoire et de taper la commande ‘virtualenv’. Cela crée divers fichiers et sous-répertoires (p.ex. ‘bin/’ ’lib/’ etc.).
Notamment, vous trouverez:
- ‘bin/activate.bat’ (Windows cmd)
- ‘bin/activate.ps1’ (Windows powershell)
- ‘bin/activate’ (Unix)
Il s’agit de script pour votre shell préféré. Ces scripts, relativement complexes pour traiter différents cas de figure d’environnement informatiques variés, ont pour but au final de positionner un certain nombre de variables d’environnement qui vont être utiles à votre Python (emplacement de l’interpréteur, des librairies, etc.)
Retournez donc dans le répertoire d’un projet Python que vous avez créé lors d’une séance précédente, et affichez le contenu de ce script (commande ‘more’, vous l’aviez déjà oubliée ?) (PS: j’ai dit afficher, pas exécuter…)
Admirez ces déclarations de variables (et structures de contrôle). Voilà à quoi sert un script shell typique.
Pour aller plus loin
GameShell
-
Installer & jouer à GameShell.
C’est un petit jeu pour apprendre à utiliser le terminal Linux de manière interactive. C’est amusant !
Les utilisateurs Windows peuvent l’installer dans WSL.
-
Lecture supplémentaire : “19 Absolute Simple Things About Linux Terminal”
Pour aller encore plus loin
On dirait que cette section est vide !
Y a-t-il quelque chose que vous auriez aimé voir ici ? Faites-le nous savoir sur le serveur Discord ! Peut-être pouvons-nous l’ajouter rapidement. Sinon, cela nous aidera à améliorer le cours pour l’année prochaine !