Archi OS

Identification

Infoforall

10 - Système d'exploitation


Vous savez maintenant qu'un ordinateur est composé

  • D'une CPU (central processing unit) comportant notamment
    • UAL (unité arithmétique et logique),
    • UDC (unité de contrôle),
    • de registres (de petites mais très rapides mémoires),
    • et d'autres choses encore...
  • D'une mémoire rapide volatile (qui s'efface à l'arrêt, on parle de mémoire vive, ou de RAM par exemple)
  • D'une mémoire rapide non volatile (qui ne s'efface pas à l'arrêt : la mémoire morte ou de ROM contenant les instructions au démarrage fait partie de cette catégorie)
  • De mémoires lentes de stockage gros volume (dique dur, clé USB...)
  • De périphériques divers et variés (écran, clavier, souris, écran tactile...)

Et le système d'exploitation dans tout ça ?

Evaluation ✎ : questions 03-04-07-12-15-21

Documents de cours :

1 - Démarrage

Que se passe-t-il au démarrage de votre ordinateur ?

L'ordinateur commence par charger un petit programme qui se nomme le chargeur d'amorçage (bootloader en anglais).

Ce programme provoque le chargement en mémoire vive d'un autre programme, qui se trouve être ... le système d'exploitation. En anglais, Système d'Exploitation se dit Operating System et l'acronyme est donc OS.

Ce système du chargeur d'amorçage permet notamment d'installer plusieurs systèmes d'exploitation sur un ordinateur et de faire ainsi ce qu'on nomme du dual-boot.

Le chargeur d'amorçage va placer la partie "fondamentale" de l'OS en mémoire vive, le noyau en français (kernell en anglais).

Le bootloader provoque la mise en mémoire vive du noyau de l'OS
Le bootloader provoque la mise en mémoire vive du noyau de l'OS

Bien. La RAM contient maintenant ce programme (ou plutôt cet ensemble de programmes). Mais à quoi servent-ils ?

2 - Rôles du système d'exploitation

Les systèmes d'exploitation font office de tampon entre les programmes et le matériel technologique physique. Ils ont pour rôles :

  1. de garantir l'intégrité du système en vérifiant qu'un programme ne puisse pas provoquer d'erreur fatale
  2. de permettre la communication entre programmes et périphériques sans que le logiciel n'ai besoin de connaitre exactement les détails du matériel sur lequel il agit
  3. de gérer les ressources communes disponibles sur l'ordinateur

En réalité, les trois sont intimement liés comme nous allons le voir.

Comme l'OS ne peut pas savoir de lui-même comment fonctionne chacun de ses périphériques, certains des programmes qui le compose sont ce qu'on nomme des pilotes (drivers en anglais). Comme leur nom l'indique, les pilotes sont des programmes qui permettent de piloter-commander-surveiller les périphériques.

Et comment fait le système d'exploitation pour permettre d'interagir avec le matériel ?

Les programmes utilisent des appels systèmes, des commandes que l'OS reçoit, analyse et exécute s'il le décide : le principe est que le système d'exploitation est le seul à interagir directement avec le matériel.

Imaginons que vous vouliez supprimer un fichier présent sur votre clé USB. Que vous le fassiez via l'interface graphique, via une programme Python ou en utilisant la console, l'OS va recevoir une demande delete :

Actions de l'OS
Dans les 3 cas, l'action interne est la même !

En réalité, dans les trois cas, le système d'exploitation va réagir de la même manière :

  • Il reçoit la demande
  • Il vérifie la validité de la demande
  • Il utilise les pilotes qui vont bien pour réaliser l'ordre.

Les programmes n'ont pas besoin de connaître quoi que ce soit sur la clé USB, à part son identifiant : c'est l'OS qui se charge de tout.

Les systèmes d'exploitation disposent donc d'un ensemble d'appels systèmes basiques permettant de gérer correctement les ressources communes : les périphériques, le CPU, la mémoire...

Imaginons un CPU 4 coeurs. 4 coeurs donc 4 processeurs. On ne devrait donc faire tourner que 4 programmes en même temps.

Trop de programmes pour 4 processeurs
4 processeurs mais 7 programmes !

Quel est le rôle de l'OS là dedans ? Repartir la ressource CPU entre les programmes, et faire de même avec la mémoire vive !

OS c'est pas un métier, c'est une vocation. Jamais un instant de calme. Il s'agit du chef d'orchestre de votre ordinateur. Un programme complexe composé de plusieurs autres programmes et en interaction avec tous les autres programmes tournant sur la machine (et sur le réseau, si on tient compte de la gestion de TCP/IP !)

Voilà pour les idées principales d'introduction.

Rôles du système d'exploitation

Le système d'exploitation, souvent noté OS (operating system) a pour but :

  • d'être une interface entre le matériel et les autres programmes : l'OS commande les périphériques via les pilotes et accepte (ou pas) d'exécuter les appels systèmes que les programmes lui demandent d'effectuer.
  • d'être une interface entre l'ordinateur et les réseaux extérieurs, il gère donc les cartes réseaux.
  • de partager les ressources de l'ordinateurs entre les différents programmes :
    • Puissance de calculs (CPU)
    • Mémoire vive (RAM)
Rôles de l'OS
Schéma global de la place de l'OS dans l'ensemble de la structure

Les premiers systèmes d'exploitation ne comportaient pas d'interface graphique. On passait donc nécessairement par une console d'interfacage textuelle.

Aujourd'hui, on utilise encore beaucoup ces commandes lorsqu'on désire commander un ordinateur à distance ou les configurer via un programme plutôt que de cliquer un nombre de fois hallucinant sur une interface graphique.

3 - Accès à un terminal Linux

Comme vous n'avez pas nécessairement une version de Linux sous la main, vous allez travailler avec votre OS et avec une serveur distant permettant d'accèder à un terminal Linux.

Trois solutions donc :

  1. Option A : Vous utilisez les ordinateurs Linux de la salle de cours. Ou vous avez déjà une version exploitable de Linux chez vous (Bravo, + 12 points). Si vous avez un Mac sachez que vous pourrez également faire une très grande partie des manipulations : Linux et MacOS partagent le même ancêtre commun : UNIX.
  2. Option B : Vous voulez bien vous créer un compte chez un hébergeur Web et je vais alors vous montrer comment contrôler votre configuration.
  3. Option C : Vous ne voulez pas créer de compte (et c'est votre droit), vous vous propose un site permettant néanmoins de taper quelques commandes dans un terminal. Mais c'est lent.

Les trois sections sont au moins à lire. La fiche de connexion à Alwaysdata vous permettra de vous créer un compte chez un hébergeur pour réaliser votre première page réellement accessible sur Internet. L'option C vous permettra d'un peu travailler si vous n'avez pas accès à vos mails. Mais vous ne pourrez pas réellement faire tourner les scripts ou autres. Trop lent.

Option a - Votre installation Linux

Bon, si vous avez accès à votre propre installation Linux, il est probable que vous sachiez déjà où se trouve votre terminal.

Sous Linux-Ubuntu, vous le trouverez dans les applications. Son icône est un petit écran noir.

Icône du terminal

Sinon, le raccourci clavier est  CTRL+ALT+T .

Si vous avez une version Linux-Debian, vous pouvez accéder à l'un des terminaux avec par exemple  CTRL+ALT+F3 ,  CTRL+ALT+F4 ... Ca fonctionne bien entendu aussi sur Ubuntu puisqu'il est basé sur la Debian.

Résultat en ouvrant une émulation graphique de terminal-texte:

Exemple de terminal

Cette console est donc bien une application graphique : il y a des icônes cliquables et une fenêtre aux dimensions visibles.

rv@monordi:~$ _

On voit que l'utilisateur se nomme rv et qu'il est connecté (@) sur un ordinateur qui se nomme monordi.

Le caractère tilde ~ veut dire que la console pointe pour l'instant à la racine du répertoire personnel de l'utilisateur.

Enfin le signe dollar $ est l'invite de commande. L'équivalent sur Windows, c'est le signe >.

01° Sur l'exemple ci-dessous :

totolasticot@monordi:/bin$ _

Comment se nomme l'utilisateur ?

Sur quel poste est-il connecté ?

Sur quel répertoire pointe le terminal pour l'instant ?

...CORRECTION...

Il s'agit de l'utilisateur totolasticot.

Il est connecté sur la machine monordi.

Et le terminal pointe à ce moment sur le répertoire /bin.

02° Voici un apercu de deux appels systèmes :

  • La commande whoami (qui suis-je en français) affiche le nom de l'utilisateur ayant lancé cette commande.
  • La commande pwd ("print working directory", "affiche le répertoire courant" en français) provoque l'affichage du répertoire sur lequel pointe actuellement ce terminal.
rv@monordi:~$ whoami rv rv@monordi:~$ pwd /home/rv

Question 1 : les réponses fournies sont-elles bien compatibles avec l'étude de la ligne décrivant l'utilisateur ?

Question 2 : d'après la réponse du pwd, à quel répertoire fait référence en réalité le symbole tilde ~ ?

...CORRECTION...

Oui, il s'agit de bien l'utilisateur rv.

Et le terminal pointe bien à ce moment sur le répertoire /home/rv qui est le répertoire personnel de l'utilisateur. Répertoire qu'on représente plus simplement par ~.

Option B - Passer par un hébergeur

Passer par un hébergeur peut être un bon choix puisqu'à partir de là, vous aurez un compte actif gratuit et vous pourrez commencer à y placer des pages et applications Web qui seront vraiment accessibles depuis un accès Internet.

Je vous présente ici une manière d'accéder à une telle console en passant par l'hébergeur alwaysdata qui propose des interfaces assez claires permettant d'installer plein de choses basées sur Python.

Si vous choississez cette solution (ce n'est pas long, il vous faut juste un e-mail valide), voici la fiche qui vous permettra de créer ce compte :

ACCESS SSH VIA LE WEB CHEZ ALWAYSDATA

✎ 03° Vous avez le résultat d'une connexion réussi en SSH avec alwaysdata ci-dessous

testprofad@ssh1:~$ _

Comment se nomme l'utilisateur ?

Sur quel poste est-il connecté ?

Sur quel répertoire pointe le terminal pour l'instant ?

✎ 04° Observer les réponses fournies lors de l'utilisation du terminal. Répondre ensuite aux questions (les explications se trouvent question 2 si vous les avez zappé...)

testprofad@ssh1:~$ whoami testprofad testprofad@ssh1:~$ pwd /home/testprofad

Question 1 : les réponses fournies sont-elles bien compatibles avec l'étude de la ligne décrivant l'utilisateur ?

Question 2 : à quel endroit se trouve le répertoire personnel de l'utilisateur, celui symbolisé par le tilde ?

Option C - Passer par un site proposant ce service

Certains sites proposent de lancer une machine Linux virtuelle.

Par exemple, ce site https://www.offidocs.com/index.php/ vous le propose (en installant au passage quelques cookies en lien avec google..).

Si vous cliquez sur le lien, vous allez aboutir à une page vous montrant la mise en place d'une machine virtuelle Linux.

Il faut suffit d'appuyer sur le bouton ENTER et de fournir un nom d'utilisateur.

Après la multitude de lignes descriptives, on arrive enfin à ceci :

~ $ whoami user ~ $ pwd /home/user ~ $ _

05° comment se nomme ici l'utilisateur ? A quel endroit se trouve le répertoire personnel de l'utilisateur, celui symbolisé par le tilde ?

...CORRECTION...

Il s'agit juste de user.

Le terminal pointe bien à ce moment sur le répertoire /home/user qui est le répertoire personnel de l'utilisateur. Répertoire qu'on représente plus simplement par ~.

Où se situe votre terminal dans la structure de l'ordinateur ? Ce n'est pas le noyau de Linux mais un programme en interaction avec l'OS. Comme une coquille autour du noyau. Et comment dit-on coquille en anglais ? Shell.

Le Shell constitue donc un programme d'interface qui permet à l'utilisateur de communiquer avec le noyau.

Utilisateur - Shell - Kernell

Maintenant que vous avez au moins une solution valide, passons aux choses sérieuses.

4 - Inspection de contenu

Le programme de NSI vous demande de connaître les commandes de base. Nous allons en voir quelques unes aujourd'hui.

La question 06 est une longue suite de petites manipulation. Suivre les exemples ci-dessous en utilisant les commandes sur votre propre système au fur et à mesure. Bien entendu, les réponses ne seront pas les mêmes.

A - Voir le contenu d'un répertoire

Commençons par voir comment on peut regarder le contenu du répertoire courant, le répertoire sur lequel le terminal pointe.

Commande ls

La commande ls (comme list en anglais) permet de lister le contenu du répertoire courant.

Que peut contenir un répertoire ?

  • des fichiers
  • d'autres répertoires

Exemple chez alwaysdata :

06-A° Commençons par voir ce que contient le répertoire courant avec la commande ls :

testprofad@ssh1:~$ ls admin www

On voit qu'il contient deux répertoires nommés admin et www

06-B° On peut rajouter des options courtes à une commande en utilisant un tiret et une lettre représentant l'option.

Ici ls -a veut dire d'afficher tout le contenu du répertoire, même les fichiers cachés. Pourquoi a ? Pour all.

testprofad@ssh1:~$ ls -a . .. admin .bash_history www

    On observe donc qu'il existe plusieurs choses cachées dans ce répertoire :

    • Un simple fichier nommé .bash_history
    • Un répertoire nommé .
    • Un répertoire nommé ..

06-C° Il existe également des options plus longues qu'une simple lettre à taper.

Dans ce cas, on doit placer deux tirets devant le nom de l'option. A titre d'exemple, voici la version longue de la commande all.

testprofad@ssh1:~$ ls --all . .. admin .bash_history www

06-D° Comment est-ce que je sais que ce sont des fichiers ou des répertoires ? C'est facile, il y a la couleur.

Sinon, il suffit de lui demander poliment avec l'option -l qui fournit un plus long descriptif du contenu.

testprofad@ssh1:~$ ls -l total 0 drwxr-xr-x 5 root root 69 May 31 12:46 admin drwxr-xr-x 2 testprofad testprofad 24 May 31 12:46 www

    Chaque objet présent est décrit par une ligne que nous détaillerons dans l'activité suivante. Aujourd'hui, je ne m'intéresse qu'à la première colonne :

    • C'est un d s'il s'agit d'un répertoire
    • C'est un - s'il s'agit d'un fichier

06-E° Pour observer le type des objets cachés, il suffit donc d'utiliser les deux options courtes à la fois en les plaçant derrière le même tiret :

testprofad@ssh1:~$ ls -la total 4 drwxrwx--- 4 root testprofad 51 May 31 18:29 . drwxr-x--x 826 root root 0 May 31 22:06 .. drwxr-xr-x 5 root root 69 May 31 12:46 admin -rw------- 1 testprofad testprofad 18 May 31 18:29 .bash_history drwxr-xr-x 2 testprofad testprofad 24 May 31 12:46 www

    C'est l'avantage des options courtes. On peut les regrouper pour obtenir un effet global. Par exemple, si on veut la taille mémoire en octets plutôt qu'en blocs, il suffit de rajouter l'option h. Ci-dessous, vous pourrez constater que le contenu affiché occupe 4 ko.

    testprofad@ssh1:~$ ls -lah total 4.0K drwxrwx--- 4 root testprofad 51 May 31 18:29 . drwxr-x--x 823 root root 0 May 31 22:27 .. drwxr-xr-x 5 root root 69 May 31 12:46 admin -rw------- 1 testprofad testprofad 18 May 31 18:29 .bash_history drwxr-xr-x 2 testprofad testprofad 24 May 31 12:46 www

Nous n'allons pas faire le tour de toutes les options de la commande ls. Posons-nous une dernière question.

06-E° Comment obtenir de l'aide si l'accès Internet est en panne ? En utilisant l'option longue --help.

testprofad@ssh1:~$ ls --help

B - Voir le contenu d'un fichier

Comme nous sommes en mode texte, on ne peut pas faire ce que vous avez l'habitude de faire : un double-clic sur le fichier.

Commande cat pour lire un fichier

La commande cat (pour concaténation) permet, notamment, d'afficher le contenu d'un fichier dans la console.

Comme la concaténation des strings : on va ajouter l'entrée fournie à la suite des données contenues dans une sortie (un fichier, un terminal, une connexion réseau...)

Regardons ce que contient le fichier .bash_history ou .ash_history en fonction de votre système.

Utilisation de cat sans sortie définie
Commande cat avec .bash_history en entrée mais rien d'indiqué en sortie
  1. cat : la commande utilisée
  2. .bash_history : l'entrée (ce que nous voulons lire) est à placer derrière la commande cat.
  3. vide sur cet exemple : la sortie qui doit ajouter l'entrée à la suite de ses données. Si on ne place rien, l'entrée va être envoyée par défaut sur le terminal.
testprofad@ssh1:~$ cat .bash_history ls ls -a ls --all ls -l ls -la ls -lah ls --help

Comme vous pouvez le voir, ce fichier .bash_history contient donc l'historique de toutes les commandes qui ont été utilisées sur le terminal. C'est très pratique dans le cadre d'un service en ligne : vous avez installé quelque chose et plusieurs mois plus tard, vous voulez faire pareil sans vous souvenir de la démarche à suivre. Il suffit d'aller voir l'historique.

C - Création rapide d'un fichier

On peut créer très facilement un fichier depuis le terminal en utilisant encore une fois la commande cat. Cette fois, nous allons indiquer une sortie : le fichier de destination !

Commande cat avec > pour créer un fichier

On indique avec le signe >.

Si on ne précise aucune entrée, l'entrée par défaut est alors le terminal : c'est vous qui allez taper le texte.

Utilisation de cat sans entrée définie
Commande cat avec la sortie orientée vers un fichier
  1. cat : la commande utilisée
  2. vide : par défaut l'entrée est le terminal lui-même
  3. > : on indique qu'on veut placer ce contenu en mode écrasement ('w' comme write dans Python)
  4. fichier_magique : la sortie qui doit recevoir l'entrée.

Voici un exemple de commandes où on crée un fichier et on le lit juste après. On notera que si le fichier n'existe pas au préalable, il va être créé. Si le fichier existe déjà, son contenu va être écrasé.

  • Pour passer à la ligne, on appuie sur ENTREE.
  • Pour sortir du mode "saisie", on appuie simultanément sur  CTRL + C .
testprofad@ssh1:~$ cat > fichier_magique Bonjour. Je viens de créer mon premier fichier texte ^C <-- Ceci n'est pas à taper : c'est CTRL+C pour sortir testprofad@ssh1:~$ cat fichier_magique Bonjour. Je viens de créer mon premier fichier texte

Attention à bien vous placer dans un répertoire où vous avez les droits : ne restez pas à la racine du serveur !

Votre répertoire personnel ~ semble un bon choix

Le plus beau, c'est qu'on peut rajouter des choses à la suite du fichier plutôt que de l'écraser. En Python, cela correspondrait à l'ouverture d'un fichier en mode 'a' pour append.

Commande cat avec >> pour créer un fichier

Avec ce double signe, on va indiquer qu'on veut rajouter à la fin et pas écraser le contenu.

testprofad@ssh1:~$ cat fichier_magique Bonjour. Je viens de créer mon premier fichier texte testprofad@ssh1:~$ cat >> fichier_magique Et encore une ligne de plus, rajouté bien après les premières ! ^C testprofad@ssh1:~$ cat fichier_magique Bonjour. Je viens de créer mon premier fichier texte Et encore une ligne de plus, rajouté bien après les premières !

✎ 07° Créer deux fichiers comportant chacun deux lignes. On les nommera fichier1 et fichier2.

Placer dans la copie numérique les codes nécessaires à cette création.

Pour la rédaction du Markdown : il ne s'agit pas de Python mais bien d'un code Bash. Le code sur votre copie markdown devra donc commencer par cela :

#!bash

08° A votre avis, que va contenir fichier3 après les commandes suivantes ?

testprofad@ssh1:~$ cat fichier1 Je suis le contenu du fichier 1 Pas grand chose à dire... testprofad@ssh1:~$ cat fichier2 Moi, je suis le deuxième. Je n'ai pas pour autant plus de choses à dire. testprofad@ssh1:~$ cat fichier1 > fichier3 testprofad@ssh1:~$ cat fichier2 >> fichier3 testprofad@ssh1:~$ cat fichier3 ??? on obtient quoi ???

...CORRECTION...

La première commande cat fichier1 > fichier3 place le contenu du fichier1 dans un nouveau fichier3 en écrasant l'éventuel contenu précédent puisqu'il n'y a qu'un seul signe supérieur.

Par contre, dans la deuxième concaténation, cat fichier2 >> fichier3, on précise bien qu'on ne veut pas écraser le contenu. On va donc placer le contenu de fichier2 à la suite du contenu déjà présent.

On obtient donc cela :

testprofad@ssh1:~$ cat fichier3 Je suis le contenu du fichier 1 Pas grand chose à dire... Moi, je suis le deuxième. Je n'ai pas pour autant plus de choses à dire.

Avec Linux (et Unix), les répertoires et fichiers cachés sont simplement ceux dont le nom commence par un point.

Nous verrons dans la prochaine activité qu'on peut réellement trendre invisible certains répertoires et fichiers pour certains utilisateurs. C'est l'une des puissances de Linux : on contrôle très finement les droits accordés.

5 - Se déplacer dans l'arborescence

S'il y a des répertoires, c'est bien qu'on doit pouvoir s'y "rendre". C'est ce que nous allons voir.

Voici l'arborescence visible que nous avions lorsqu'on avait lister le contenu du terminal pointant sur le répertoire personnel chez alwaysdata :

testprofad@ssh1:~$ ls admin www

Pour rappel, ce répertoire personnel de l'utilisateur, tilde ~, possède une adresse dans la structure globale du serveur :

testprofad@ssh1:~$ pwd /home/testprofad

Cela veut dire que le terminal aurait pu afficher ceci :

testprofad@ssh1:/home/testprofad$ _

Comme nous passons souvent beaucoup de temps dans ce répertoire spécifique à l'utilisateur, la version de l'alias ~ a été adoptée.

Si on devait représenter cela sous la forme d'une vraie structure de type répertoires imbriqués les uns dans les autres, ça donnerait donc ceci :

📁 / (la racine de l'ordinateur)

📁 home

📁 testprofad

📁 admin

📄 fichier_magique

📄 fichier1

📄 fichier2

📄 fichier3

📁 www

Nous allons remplir le répertoire www dans la partie finale de cette activité : c'est là qu'il faut placer vos fichiers statiques html, css, javascript et autres fichiers images pour qu'ils soient accessibles depuis un navigateur.

Nous y revenons donc bientôt.

D - Changer de répertoire (en fournissant une adresse relative)

Commande cd pour s'enfoncer dans l'arborescence (version adresse relative)

La commande cd (pour change directory) permet de ...changer de répertoire.

Il y a deux façons d'utiliser la commande cd :

  • on peut lui fournir une adresse relative au répertoire courant (celui sur lequel pointe le terminal actuellement). Cela sous-entend que le chemin est donné en disant "en partant du répertoire où te trouves actuellement, ..."
  • on peut lui fournir une adresse absolue sur l'ordinateur : c'est une adresse qui commence par /. Cela sous-entend que le chemin est donné en disant "en partant de la racine du système, ..."

Dans cette partie, nous allons utiliser l'adressage relatif.

Pour "rentrer" dans l'un des répertoires visibles depuis le répertoire courant, il suffit de taper son nom à la suite de cd.

testprofad@ssh1:~$ ls admin www testprofad@ssh1:~$ cd admin testprofad@ssh1:~/admin$ _

On remarque immédiatement que le terminal pointe maintenant sur ~/admin. On peut donc regarder ce qui s'y trouve.

testprofad@ssh1:~/admin$ ls backup config logs mail tmp

Vous y trouverez donc les sauvegardes de vos projets, les fichiers de configuration, les fichiers de logs qui stockent tout ce qui se passe sur vos sites...

Imaginons que nous voulions voir les connexions effectuées en http sur votre site, il faudra aller dans le répertoire log jusqu'à trouver un fichier texte d'extension .log qui contiendra toutes ses informations. Par exemple :

testprofad@ssh1:~/admin$ cd logs testprofad@ssh1:~/admin/logs$ ls apache http sites testprofad@ssh1:~/admin/logs$ cd http testprofad@ssh1:~/admin/logs/http$ ls 2020 testprofad@ssh1:~/admin/logs/http/2020$ cd 2020 testprofad@ssh1:~/admin/logs/http/2020$ ls http-2020-06-01.log testprofad@ssh1:~/admin/logs/http/2020$ cat http-2020-06-01.log testprofad.alwaysdata.net 2a01:cb0c:96c:d400:2123:f77f:5555:f1fab - - [01/Jun/2020:21:01:21 +0200] "GET / HTTP/1.1" 200 82 "-" "Mozil la/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0"

C'est malin, nous sommes maintenant au plus bas de l'arborescence... Comment remonter dans le répertoire situé juste au dessus ?

Commande cd .. pour remonter dans l'arborescence

C'est là qu'intervient le fameux répertoire caché qui portait un nom bizarre ... Cet alias désigne simplement le répertoire-parent, celui d'où on vient.

Taper cd .. veut donc dire de remonter dans le répertoire du dessus.

Voici donc un exemple pour voir comment on peut remonter :

testprofad@ssh1:~/admin/logs/http/2020$ cd .. testprofad@ssh1:~/admin/logs/http$ cd .. testprofad@ssh1:~/admin/logs$ cd .. testprofad@ssh1:~/admin$ cd .. testprofad@ssh1:~$

Nous voici donc revenus dans notre répertoire personnel

  • qu'on note ~ mais
  • dont l'adresse absolue est en réalité /home/testprofad : notez bien qu'elle commence par un SLASH / comme toute adresse absolue.

📁  /  (la racine de l'ordinateur)

📁 home

📁 testprofad (nous sommes ici pour l'instant)

📁 admin

📄 fichier_magique

📄 fichier1

📄 fichier2

📄 fichier3

📁 www

09° Avec une commande, remonter dans le dossier parent de votre répertoire personnel quelque soit votre configuration de connexion (personnel, chez alwaysdata ou sur le terminal virtuel de www.offidocs.com). Examiner alors son contenu. Il devrait vous paraître vide. Tenter avec un affichage des fichiers cachés.

Quelque chose devrait vous surprendre chez alwaysdata...

...CORRECTION...

Pour remonter, un simple cd .. suffit.

Pour observer le contenu, on utilisera un ls.

Pour observer même les contenus cachés, on utilisera ls -a.

Voici ce qu'on obtient sur mon système

rv@monordi:~$ cd .. rv@monordi:/home$ ls rv totolasticot rv@monordi:/home$ ls -a . .. rv totolasticot

Rien de particulier donc. Visiblement, il y a deux utilisateurs sur cette machine.

Vous devriez obtenir quelque chose de similaire sur le site www.offidocs.com, si ce n'est qu'il n'y a qu'un seul utilisateur qui se nomme user.

Voici ce qu'on obtient chez alwaysdata

testprofad@ssh1:~$ cd .. testprofad@ssh1:/home$ ls ls: cannot open directory '.': Permission denied testprofad@ssh1:/home$ ls -a ls: cannot open directory '.': Permission denied

Comme vous le voyez, vous n'avez pas le droit en tant que simple utilisateur de pouvoir visualiser les noms des autres utilisateurs. D'ailleurs, même votre compte n'est pas visualisable. Par contre, vous avez le droit de l'ouvrir... C'est ce qui fait la force en terme de sécurité de Linux et l'une des raisons qui ont propulsé cet OS en tête des OS placés sur les ordinateurs-serveurs.

10° Regarder le message d'interdiction. Nous avons vu que le code .. signifiait le répertoire-parent. Que semble signifier le simple point unique . ?

Vous pouvez tenter des commandes comme ls . ou cd .

...CORRECTION...

Il s'agit du nom du répertoire courant. Celui dans lequel le terminal pointe.

Actuellement, vous êtes dans /home. Il s'agit donc du nom de répertoire que fournirait la commande pwd.

11° Remonter encore une fois dans le dossier parent à l'aide d'une commande texte. Vous devriez atteindre la racine / du système.

Questions

  • Quels sont les éléments présents dans ce répertoire ?
  • Lancer une commande de type ls . pour vous convaincre que le point symbolise bien le répertoire courant.
  • Peut-on encore remonter plus haut avec un cd .. ou est-on bien à la racine de l'arborescence de la machine ?

Résultats chez alwaysdata

testprofad@ssh1:/home$ cd .. testprofad@ssh1:/$ ls alwaysdata boot etc lib lib64 media nfs proc run srv tmp var bin dev home lib32 libx32 mnt opt root sbin sys usr testprofad@ssh1:/$ ls -a . alwaysdata boot etc lib lib64 .local mnt opt root sbin sys usr .. bin dev home lib32 libx32 media nfs proc run srv tmp var testprofad@ssh1:/$ ls -al total 60 drwxr-xr-x 20 root root 4096 May 19 09:29 . drwxr-xr-x 20 root root 4096 May 19 09:29 .. drwxr-xr-x 7 root root 4096 May 29 09:12 alwaysdata lrwxrwxrwx 1 root root 7 Mar 23 14:16 bin -> usr/bin drwx------ 3 root root 4096 Apr 16 08:41 boot drwxr-xr-x 13 root root 13160 May 19 09:29 dev drwxr-xr-x 128 root root 12288 May 29 09:12 etc drwxr-x--x 979 root root 0 Jun 1 22:57 home lrwxrwxrwx 1 root root 7 Mar 23 14:16 lib -> usr/lib lrwxrwxrwx 1 root root 9 Mar 23 14:16 lib32 -> usr/lib32 lrwxrwxrwx 1 root root 9 Mar 23 14:16 lib64 -> usr/lib64 lrwxrwxrwx 1 root root 10 Mar 23 14:16 libx32 -> usr/libx32 drwxr-xr-x 3 root root 4096 Mar 23 14:24 .local drwxr-xr-x 2 root root 4096 Mar 23 14:16 media drwxr-xr-x 2 root root 4096 Mar 23 14:16 mnt drwxr-xr-x 2 root root 0 Jun 1 21:53 nfs drwxr-xr-x 2 root root 4096 Mar 23 14:16 opt dr-xr-xr-x 177 root root 0 May 19 09:29 proc drwx------ 5 root root 4096 Jun 1 12:03 root drwxr-xr-x 25 root root 900 Jun 1 22:12 run lrwxrwxrwx 1 root root 8 Mar 23 14:16 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Mar 23 14:16 srv dr-xr-xr-x 12 root root 0 May 19 09:29 sys drwxrwxrwt 98 root root 2500 Jun 1 22:17 tmp drwxr-xr-x 15 root root 4096 Apr 16 08:39 usr drwxr-xr-x 12 root root 4096 Apr 13 2016 var

Nous remarquerons qu'il y a un nouveau type de fichiers.

  • Le tiret - codifie les fichiers.
  • La lettre d codifie les répertoires (directories).
  • La lettre l (L minuscule) codifie les liens (links).

Les liens sont des sortes d'alias.

Je prends le premier qui apparaît :

lrwxrwxrwx 1 root root 7 Mar 23 14:16 bin -> usr/bin

Cela veut dire que

  • si je demande ici cd bin,
  • l'OS va faire comme si j'avais taper cd usr/bin.

Deux noms mais une même entité.

Comme vous pouvez le voir, il y a une multitude de répertoires différents, chacun ayant son rôle dans la classificiation. Encore faut-il les connaître, ce qui n'est pas au programme de NSI, sauf un ou deux répertoires vraiment importants.

Ceci est à apprendre par coeur :

Rôles de quelques répertoires importants (à connaître)
  • / pour la racine du système :
  • /home pour la racine des répertoires des utilisateurs
  • /home/NOM ou ~ : le répertoire personnel de l'utilisateur NOM
  • /root : le répertoire personnel du super-administrateur. Il s'agit de l'administrateur de la machine, celui qui a tous les droits sur celle-ci. On le place dans un répertoire séparé des autres et pas dans /home/root pour des raisons de sécurité.
  • . : le répertoire courant sur lequel pointe le terminal
  • .. : le répertoire parent du répertoire courant

Ceci est pour votre culture générale, rien à apprendre :

Rôles de quelques répertoires importants (culture générale sur Linux)
  • /bin : contient les exécutables binaires de base.
  • /sbin : contient un peu la même chose, si ce n'est que ce sont des binaires vraiment fondamentaux.
  • /lib, /lib32, /lib64 : contiennent les bibliothèques(des modules dans votre vocabulaire actuel) regroupant des fonctions utilisées par plusieurs des binaires présents dans /bin ou /sbin.
  • Dans le système d'exploitation Windows, ces répertoires correspondent en gros aux fichiers-bibliothèques .dll se trouvant dans C:\windows\system.32 ou C:\windows\SysWOW64.

  • /usr contient les exécutables des programmes que l'utilisateur installe lui-même.
  • Son équivalent Windows est un peu C:\program files.

  • /boot contient le noyau Linux, le coeur du système, ainsi que quelques autres fichiers lancés à l'amorçage du système.
  • /dev est le répertoire-racine de tous les périphériques comme les clés USB ou autres.
  • Explications :

    • Avec Windows, on a des noms de disques différents (comme C:, G: ...).
    • Avec Linux, tout est regroupé dans la même arborescence commençant par /. Lorsqu'on branche un périphérique, il faut donc le monter (mount en anglais) sur votre arborescence et le début de son adresse absolue sera donc une variante de ce type /dev/ID_PERIPHERIQUE.

    Si vous voulez vous renseigner sur les autres répertoires, vous devriez trouver votre bonheur sur le Web.

E - Localiser un programme

Avec une telle arborescence, tout est bien rangé. Mais parfois, on ne sait pas où !

Pour connaître la localisation d'une commande ou d'un programme qui pourrait être présent en plusieurs exemplaires, il existe la commande which.

testprofad@ssh1:/$ which python /usr/bin/python testprofad@ssh1:/$ which python3 /usr/bin/python3 testprofad@ssh1:/$ which pwd /usr/bin/pwd

Cette commande which vous localise le fichier exécuté lorsqu'on lance l'appel à un programme.

Comment savoir si un programme est en réalité une commande interne au Shell de Linux ou une commande externe ?

Pour cela, il existe la commande type qui vous permet de savoir qui est quoi.

  • Exemple avec cd qui s'avère être une commande interne au Shell.
  • rv@smonordi:~$ type cd cd est une primitive du Shell
  • Exemple avec which qui s'avère être une commande externe au Shell.
  • rv@smonordi:~$ type which which est /usr/bin/which

✎ 12° Fournir les commandes qui vous permettent de répondre à ces questions :

  1. Vers quel fichier pointe le système lorsqu'on lui demande d'exécuter ping (commande qui permet de tester la connectivité entre deux machines) ?
  2. La commande ping est-elle une commande interne au Shell ?
  3. La commande exit qui permet d'arrêter la liaison avec le terminal est-elle une commande interne au Shell ou externe au noyau ?

F - Changer de répertoire (adresse absolue)

Imaginons que votre terminal pointe sur la racine /. Comment faire pour atteindre rapidement un répertoire sans avoir à faire tous les cd à la suite ?

Commande cd pour s'enfoncer dans l'arborescence (version adresse absolue)

Rappel :

La commande cd (pour change directory) permet de ...changer de répertoire.

Il y a deux façons d'utiliser la commande cd :

  • on peut lui fournir une adresse relative au répertoire courant ("en partant du répertoire où te trouves actuellement, ...")
  • on peut lui fournir une adresse absolue sur l'ordinateur : c'est une adresse qui commence par /. Cela sous-entend que le chemin est donné en disant "en partant de la racine du système, ..."

Dans cette partie, nous allons utiliser l'adressage absolu.

Quelques exemples d'utilisation :

  • Retour à la racine quelque soit le répertoire courant
  • Le terminal pointe initialement sur le répertoire personnel. On remarquera que le système note ~ plutôt que /home/testprofad.

    testprofad@ssh1:~$ cd / testprofad@ssh1:/$ _

    On voit bien qu'on passe de ~ à /.

  • Déplacement en une étape dans le répertoire www :
  • testprofad@ssh1:/$ cd /home/testprofad/www testprofad@ssh1:~/www$ _
  • Déplacement direct dans le répertoire /sbin :
  • testprofad@ssh1:~/www$ cd /sbin testprofad@ssh1:/sbin$ _
  • Déplacement dans le répertoire /home/testprofad/admin en utilisant le tilde :
  • testprofad@ssh1:/sbin$ cd ~/admin testprofad@ssh1:~/admin$ _

13° Déplacer le terminal pour qu'il pointe dans le répertoire /usr/bin.

...CORRECTION...

On fournit l'adresse absolue, il suffit de taper cd /usr/bin.

G - Lister le contenu d'un répertoire sans y aller

Pour voir le contenu d'un répertoire, on peut se déplacer dans ce répertoire et utiliser une commande ls.

Mais on peut faire mieux : on peut utiliser une commande ls en fournissant comme argument l'adresse du répertoire à étudier.

Un exemple en étant au départ du dossier personnel (tilde) qui contient deux autres répertoires.

testprofad@ssh1:~$ ls admin www

La commande suivante est possible en adresse relative car admin est bien un sous-répertoire du répertoire courant. On observe le contenu du répertoire admin tout en restant dans le répertoire ~ :

testprofad@ssh1:~$ ls admin backup config logs mail tmp

Idem avec le répertoire www qui est bien un répertoire contenu dans le répertoire courant.

testprofad@ssh1:~$ ls www index.html <-- nous allons créer ce fichier ensemble, juste après

Par contre, si on demande à visualiser usr/bin, cela ne fonctionne pas car on fournit une adresse relative au répertoire courant : le système va chercher s'il existe un répertoire usr dans ~. Et la réponse est non.

testprofad@ssh1:~$ ls usr/bin ls: cannot access 'usr/bin': No such file or directory

Pour que ça fonctione, il suffit de fournir une adresse absolue précisant qu'on cherche à partir de la racine, à partir de /. Ne lancez pas cette dernière commande : il y a beaucoup beaucoup de fichiers à cet endroit !

testprofad@ssh1:~$ ls /usr/bin '[' gv2gxl ppmdim2to3 gvcolor ppmdist 2to32 gvgen ppmdither 2to32.4 gvmap ...

La commande cat admet également l'utilisation d'adresse absolue, pratique pour afficher le contenu d'un fichier sans être dans le bon répertoire.

14° Je vous fournis l'arborescence théorique suivante. Le répertoire courant est testprofad, surligné et cela apparaît bien devant l'invite de commande $.

📁 / (la racine de l'ordinateur)

📁 bin

📄 fichierA

📁 home

📁 testprofad

📁 admin

📄 fichierB

📁 www

📁 repC

Questions

  1. Comment afficher le contenu du fichier fichierA sans bouger et avec une adresse absolue ?
  2. Comment lister le contenu de repC sans bouger et avec une adresse absolue ?
  3. Comment afficher le contenu du fichier fichierA sans bouger et avec une adresse relative ? On rappelle que .. permet de trouver le dossier parent.
  4. Comment lister le contenu de repC sans bouger et avec une adresse relative ?

...CORRECTION...

  1. L'adresse absolue est une adresse qui part de la racine ( / ). C'est donc simple : il suffit d'écrire cat /bin/fichierA.
  2. L'adresse absolue est une adresse qui part de la racine ( / ). Il suffit d'écrire ls /home/testprofad/www/repC.
  3. L'adresse relative demande de partir du répertoire courant, dans notre cas /home/testprofad qu'on symbolise par ~. Pour atteindre le fichier fichierA, il faut donc remonter dans le dossier parent ( home ), remonter encore dans le dossier parent ( / , la racine). Une fois à la racine, il faut redescendre dans l'arborescence et aller dans bin pour y trouver, enfin, le fichier voulu.
  4. Du coup, ça donne cat ../../bin/fichierA.

  5. L'adresse relative demande de partir du répertoire courant, dans notre cas /home/testprofad qu'on symbolise par ~. Pour atteindre le répertoire repC depuis ~, c'est facile : ls www/repC.

✎ 15° Je vous fournis l'arborescence théorique suivante. Le répertoire courant est www, surligné et cela apparaît bien devant l'invite de commande $.

📁 / (la racine de l'ordinateur)

📁 bin

📁 fichierA

📁 home

📁 testprofad

📁 admin

📄 fichierB

📁 www

📁 repC

Questions

  1. Comment afficher le contenu du fichier fichierA sans bouger et avec une adresse absolue ?
  2. Comment afficher le contenu du fichier fichierA sans bouger et avec une adresse relative ? On rappelle que .. permet de trouver le dossier parent.
Récapitulatif des notions et commandes

Les notions abordées :

Notion Explication
Racine  /  La racine est le point de départ de l'arborescence.
Adresse absolue Il s'agit d'une adresse dont le point de départ est la racine.
L'adresse commence donc par  / .
Utilisateur root Le super-administrateur de la machine. Il a tous les droits sur la machine. Son répertoire personnel est situé à l'adresse absolue /root.
Répertoire personnel d'un utilisateur Il s'agit du répertoire qui appartient à un utilisateur. Il est situé à l'adresse absolue /home/NOM_UTILISATEUR. Il peut être adressé plus facilement en utilisant le raccourci Tilde  ~ .
Adresse relative Une adresse qui prend comme point de départ le répertoire courant, le répertoire sur lequel pointe actuellement le terminal.
Répertoire parent  ..  Il s'agit du répertoire "contenant" le répertoire courant. Par définition, seule la racine ne possède pas de parent.

Les commandes à connaître :

Commande Explication
ls Liste le contenu du répertoire dont l'adresse (relative ou absolue) est fournie juste après.
ls www : liste le contenu d'un répertoire www contenu dans le répertoire courant.
ls /home/utilisateur/www : idem mais avec une adresse absolue.
Si on ne fournit rien(ls), il s'agira du répertoire courant.
Quelques options :
ls -a pour afficher les objets cachés (ceux qui commencent par un point)
ls -l pour afficher des informations plus longues
cd Change directory : permet de changer de repertoire.
cd ~ permet d'atteindre son propre répertoire.
cd / permet d'atteindre la racine.
cd .. permet de remonter d'un cran dans l'arborescence.
cat Permet de concaténer une entrée vers une sortie.
La forme générale pour écraser l'ancien contenu est cat entree > sortie
La forme générale pour rajouter du contenu est cat entree >> sortie
Si on omet l'entrée, il s'agit par défaut du terminal.
Si on omet la sortie, il s'agit par défaut du terminal.

Les commandes qui ne sont pas à connaître mais que nous avons vu :

Commande Explication
which Permet d'obtenir l'adresse absolue du fichier qui est reconnu comme étant l'exécutable d'une commande. Exemple which python3
type Permet d'obtenir le type d'une commande (interne ou externe au Shell-Noyau)
whoami Permet de récupérer le nom de l'utilisateur du terminal
pwd Print working directory, permet de récupérer le répertoire sur lequel pointe actuellement le terminal.

6 - Mise en production d'un site

Nous avons maintenant tous les outils pour parvenir à publier votre première page HTML en production.

Si vous n'avez pas créé de compte chez alwaysdata, vous ne pourrez pas placer votre page en ligne bien entendu. Vous pourrez par contre tester l'utilisation des commandes.

16° Se connecter à votre compte alwaysdata via ssh, comme expliqué sur cette fiche

ACCESS SSH VIA LE WEB CHEZ ALWAYSDATA

Le terminal pointe initialement sur votre dossier personnel (~).

📁 / (la racine de l'ordinateur)

📁 home

📁 votrecompte

📁 admin

📁 www

Aller dans le répertoire www en utilisant la commande suivante :

votrecompte@ssh1:~$ cd www votrecompte@ssh1:~/www$ _

Votre terminal pointe maintenant sur le dossier www qui est par défaut le dossier devant contenir vos fichiers accessibles par Internet.

📁 / (la racine de l'ordinateur)

📁 home

📁 votrecompte

📁 admin

📁 www

17° Créer un petit fichier HTML en suivant l'exemple des commandes suivantes :

votrecompte@ssh1:~/www$ cat > index.html <!DOCTYPE html> <html> <p>Bonjour ! Voici la page d'accueil</p> </html> ^C

18° Créer un deuxième petit fichier HTML en suivant l'exemple des commandes suivantes :

votrecompte@ssh1:~/www$ cat > nouveau.html <!DOCTYPE html> <html> <p style="color: red;">Une nouvelle page</p> </html> ^C votrecompte@ssh1:~/www$ exit

Maintenant, vous devriez avoir ceci :

📁 / (la racine de l'ordinateur)

📁 home

📁 votrecompte

📁 admin

📁 www

📄 index.html

📄 nouveau.html

Il vous reste à activer l'accès à votre site en vous connectant à votre compte chez Alwaysdata.

19° Se connecter sur https://www.alwaysdata.com/fr/ pour atteindre le menu suivant :

Le menu de configuration des sites
Menu de configuration des sites

Appuyer sur l'icone Engrenage pour aller dans la configuration de votre site par défaut (vous pouvez en créer d'autres en utilisant AJOUTER UN SITE si vous voulez).

Le site créé pour la démonstration est accessible sous le nom testprofad.alwaysdata.net).

Sur l'image ci-dessous, je tente de rendre le site accessible également via le sous-domaine www par exemple. En tapant le nouveau nom : www.testprofad.alwaysdata.net.

Ca ne marchera pas car le nom de domaine alwaysdata.net ne m'appartient pas.

Le début du menu de configuration
Configuration de l'URL ou des URLS du site

Par contre, si vous achetez un nom de domaine un jour (comme informatique.fr), vous pourrez rajouter ce que vous voulez à gauche (comme www.informatique.fr).

Avec l'adresse fournie par l'hébergeur, vous pouvez juste rajouter un complément d'accès via l'URL en le plaçant à droite. Par exemple : testprofad.alwaysdata.net/rajout

Il reste à configurer le type de site, en allant un peu plus bas.

La fin du menu de configuration
Configuration du type de site

Comme vous pouvez le voir, on peut choisir le type de site créé. Pour ajourd'hui, choisir un site statique : de simples pages HTML, CSS et JS à distribuer au client.

Les autres possibilités permettent de créer un site dynamique (créant notamment les pages à la volée).

On remarquera également qu'on peut choisir le répertoire qui devra contenir les pages à distribuer. Par défaut, il s'agit de /www. La racine / n'est pas ici la racine du serveur distant mais la racine de votre compte (le tilde ~). Laisser le dossier par défaut, c'est clair au moins.

Appuyer sur Valider pour que vos modifications soient prises en compte.

20° Tapez les adresses voulues dans votre barre d'adresse. Tester le site de test ou vos propres pages. La première devra se nommer index.html : c'est le nom par défaut de la page d'accueil.

Quelques exemples :

  • Page d'accueil : http://testprofad.alwaysdata.net/index.html
  • Page d'accueil : http://testprofad.alwaysdata.net/
  • Une deuxième page : http://testprofad.alwaysdata.net/nouvelle.html

Comme vous le voyez, les pages sont stockés sur le serveur dans un répertoire bien précis (/home/testprofad/www mais ça n'apparaît absolument pas dans les URL que tapent l'utilisateur.

Les exemples visuels des requêtes HTTP :

Page de test Page de test Page de test Page de test Page de test

Maintenant que vous avez réussi à publier votre première page, un monde s'offre à vous.

Nous verrons dans une autre activité comment publier un site dynamique avec Flask, un framework Python. Mais, vous pourrez publier facilement du PHP sur votre compte et plein de tutos existent sur le Web.

Dernière chose : on n'écrit jamais les pages directement en liaison SSH. On crée les pages avec Notepad++ par exemple et on transfère les fichiers sur le site. Il faudra installer un logiciel de transfert de fichiers vers les serveurs distants. Ces logiciels sont basés sur le protocole FTP (File Transfert Protocol).

Un bon logiciel gratuit et libre est FileZilla. Une fiche de configuration FileZilla-Alwaysdata est disponible en suivant le lien suivant: UTILISER FTP FILEZILLA et ALWAYSDATA

✎ 21° Envoyez moi quelques adresses de votre petit bout de site Internet si vous avez bien voulu vous créer un compte chez un hébergeur.

7 - Commandes Windows

Pour que vous puissiez voir un peu comment marche votre console si vous êtes chez Microsoft avec Windows, voilà quelques commandes équivalentes. Sur MacOS, vous devriez pouvoir utiliser la majorité des commandes présentées pour Linux, puisque MacOS est basé également sur UNIX.

Voici un tableau d'équivalence approximative. Toutes les commandes Linux ne sont pas disponibles avec Windows.

Linux Windows
Racine  /  Racine  C:\ .
cd (change directory) cd aussi.
ls (list) dir
cat (concaténation) edit ou editln pour le créer, type pour lire le contenu d'un fichier texte.

8 - FAQ

C'est quoi le total avec ls -l ?

Remarque totalement optionnel.

La première ligne, total, fournit le nombre de blocs-mémoires utilisés par le contenu visible du répertoire.

Chaque bloc-mémoire représente un nombre précis d'octets en fonction du système : 512, 1024 ou plus...

Ca marche comment le transfert FTP ?

Dans la prochaine activité, nous verrons un petit historique des systèmes d'exploitation, histoire de pouvoir placer Linux, Windows, macOS et Android par exemple dans les bonnes cases.

Activité publiée le 01 06 2020
Dernière modification : 01 06 2020
Auteur : ows. h.