S1C3 LC et file system

SIO > S1_Commun > . > S1C3_Langage de commande > S1C3_DOS_1_bases.md

Intro : LC = ligne ou langage de commande

La ligne de commande est une interface d'accès direct au système de fichier et au système d'exploitation quand aucun assistant graphique n'est disponible ou souhaitable.

Le "DOS" est le nom usuel du langage de commande issu du noyau du système d'exploitation éponyme (Disc Operating System), popularisé par Microsoft.
Ce langage de commande contient, entre autres, des commandes anciennes, héritées de UNIX qui persistent dans d'autres langages de commandes : Powershell (Win), Shell (Unix, Linux, BSD - ksh, bash, csh, etc...).

Actuellement, le Dos n'est plus accessible dans Windows et un interprêteur de langage de commande, cmd.exe permet de lancer des commandes comme si on était directement connecté au noyau.

Le DOS est mort, vive le Powershell

Pourquoi utiliser (et apprendre) un LC ?

En ligne de commande

Avec la console : on peut gérer le disque, son contenu, afficher des paramètres, etc...
Ce sont donc des opérations de

  • maintenance,
  • supervision,
  • configuration

qui sont faites sans assistant graphique s'il n'existe pas ou si le temps ou la fiabilité sont des objectifs (en LC c'est plus rapide, plus direct).

Sous Linux, beaucoup de configurations se fait par simple écriture de paramètres dans des fichiers textes en clair, sans assistant graphique.
Il est donc très simple d'utiliser un éditeur de texte pour configurer et paramétrer les services et les outils.

En Scripts de commandes

Un Script est un fichier contenant des commandes exécutées séquentiellement (du début à la fin).
Les scripts les plus évolués sont de véritables petits programmes interprétés par le système.

Cela sert à lancer automatiquement des commandes par le gestionnaire de tâches ou directement pour, par exemple :

  • script de démarrage et d'ouverture de session :
    • installer des lecteurs réseau,
    • vérifier les mises à jour de programmes,
    • installer des imprimantes par défaut selon l'adresse IP,
    • modifier l'adresse IP selon l'utilisateur (compliqué), ...
  • script de fin de session :
    • lancer des synchronisations,
    • des remises à zéro de la configuration du poste, ...
  • gestionnaire de tâches : exécuter des opérations de nettoyage, de contrôle,
  • automatiquement :
    • lors de la connexion de périphériques (disques usb),
  • manuellement : lancer des sauvegardes, des synchronisations de données, jouer, gérer le disque et son contenu, contrôler ou modifier la configuration,
  • etc. …

Autant de tâches pour lesquelles un assistant (graphique) n'existe pas ou est trop lent, ne permet pas de modifier finement le paramétrage, opaque, peu adapté à la gestion des lots (travail en groupe).

Sous linux

C'est d'autant plus important que la configuration en ligne de commande est :

  • peu d'assistants graphiques sont développés
  • la configuration est plus claire, plus puissante et moins opaque qu'avec une interface d'assistance graphique qui ne propose pas toujours de modifier tous les paramètres de configuration.
  • les serveurs ne possèdent souvent pas d'interface graphique, pour des raisons d'économie de puissance de calcul.

La configuration sous Linux est souvent faite à base de modification de simples fichiers texte en clair.

ATTENTION : La suite de cet article ne concerne que les systèmes d'exploitation Microsoft Windows, sauf mention particulière.

Le système de fichier Microsoft

Microsoft utilise les systèmes de fichiers FAT (File Allocation Table) et NTFS (New Technology File System).

FS et droits

Le système FAT est plus ancien que NFTS et subsiste comme formatage par défaut des clés USB car il est adapté aux petits volumes de données.
Cependant, il ne dispose d'aucune sécurité ni vrai contrôle d'accès.

Le système NTFS est très sécurisé (trop ?) et donc complexe à configurer : chaque fichier, chaque dossier peut contenir un ensemble de droits d'accès, variables selon le profil qui y accède et permettre l'héritage ou la diffusion de ses droits à tous les objets contenus.
Cette sophistication en fait sa puissance mais aussi sa complexité de gestion.

Par exemple, si on récupère un disque sécurisé d'un PC, pour accéder totalement aux données il faudra en devenir le propriétaire et porpager la modification à tous les objets qui hérite des droits modifiés.
Cette opération est parfois longue.
Autre exemple : Si un utilsateur possède des droits important sur un dossier, il n'est pas certains que ces droits s'appliquent à tous les objets contenus ni de manière identique pour chaque objet du dossier.

Cependant, le stockage des références permettant de lire les données d'un fichier conservent le même principe que pour FAT.

Cet article concerne surtout FAT. Cependant, NTFS est issu de FAT et en a conservé les grandes lignes hors de la gestion des droits.
Ce qui suit est valable autant pour FAT que pour NTFS.

Noms des fichiers

Le système de fichier est composé de références (étiquettes, noms) qui permettent de pointer vers des objets de trois types : fichiers, répertoires et raccourcis.

Le nom d'un fichier est composé de plusieurs données (en gros) :

  • un nom de fichier sur 8 caractères : identifiant composé de 8 caractères [a-zA-Z0-9] et servant à identifier chaque fichier sur le disque, ce nom est souvent un résumé du nom symbolique,
  • une extension sur 3 caractères : composée de 3 caractères et permettant d'identifier le logiciel qui permet d'exploiter les données du fichier,
  • un nom symbolique pouvant atteindre jusqu'à 256 caractères,
  • des données système :
    • des options (Lecture seule, caché, système, archive, etc.) et des options de sécurité avancées dans NTFS,
    • le type (fichier ou répertoire),
    • les dates et heures de création et de modification,
    • l'adresse de début des données et la taille du fichier,
    Exemple :
  • nom symbolique : mon_fichier qui est maPage.html
  • nom identifiant et extension : MAP~0001.HTM
  • adresse hexadécimale : 123a4d5e

L'explorateur de fichier et l'interface de commande affichent normalement toujours le nom symbolique du fichier et son extension.
Lorsque le nom symbolique est perdu, on retrouve parfois l'identifiant (/ex fichier récupéré : CHK00001.FIL ).
Pour effacer un fichier, le système ne fait que remplacer la première lettre par un '@' (arobase).

Si le nom symbolique contient des espaces, il faut entourer le nom et son chemin par des guillemets doubles (") : "mon fichier.txt", et non mon fichier.txt = deux fichiers distincts.

Liens physique ou symbolique ?

Liens Le système de fichiers permet de créer des "copies" du nom du fichier (1) sous forme de "raccourcis" (3). (Faire click droit et propriétés sur un "raccourcis")
Une raccourcis est en fait un petit fichier .lnk qui contient le chemin absolu d'accès au fichier. Il fait donc référence au nom physique du fichier.

Sous Linux, il est aussi possible de faire des copies de liens physiques (2) et ainsi de multiplier le nombre de noms que porte un fichier.

Ceci a pour conséquences que :

  • Lien symbolique (Windows et Linux) : Si on supprime un fichier, les liens sybmoliques (raccourcis) n'ont plus de cible et les données sont perdues.
    • problème de cohérence du système de fichier
  • Multiples liens physiques (Linux selement) : Si on supprime un fichier, les données persistent tant qu'il reste un lien physique quelque part.
    • les données sont préservées si on les a "supprimées" par erreur.
    • les données persistent et encombrent le disque si on vouhaitat vraiment les supprimer.

Les deux types de liens sont intéressants, mais ils peuvent aussi présenter des inconvénients.
Dans tous les cas, cela permet de multiplier les accès sans multiplier des données identiques sur le disque.
Les liens physique multiples sont plus difficiles à gérer mais plus efficaces pour accéder aux données (et plus sûr en cas d'effacement involontaire).

Tous les chemins mènent aux répertoires et aux fichiers

Chemins absolu et relatifs

Sous DOS/Windows il existe deux façons d'écrire un chemin pour atteindre un répertoire ou un fichier :

  • le chemin absolu : unique, qui part de la racine de l'arborescence (/) qui commence au début du disque et parcours touts les dossiers pour arriver au fichier cherché (comme une URL).
  • le chemin relatif : décrit par rapport à la position où l'on est dans l'arborescence ; on utilise des raccourcis spéciaux pour naviguer :
    • ./ le répertoire courant
    • ../ le répertoire parent de celui où l'on est.

Chemin absolu : Exemples 1

Le fichier toto.txt qui est dans le répertoire toto qui est dans le répertoire user qui, lui-même est dans le répertoire FTP qui est situé sur le disque C: a pour chemin :

	C:/FTP/user/toto/toto.txt

Si on est situé dans le répertoire user, le chemin relatif de toto.txt est :

	toto/toto.txt

Si on est situé dans le répertoire toto, le chemin relatif de toto.txt est :

	toto.txt

En utilisant les noms des répertoires spéciaux :

  • ./ : le répertoire courant,
  • ../ : le répertoire parent de celui où on est.

Chemin relatif : Exemple :

Soit l'arborescence suivante :

C:/--FTP-+-common/
         +-pub-----+-PUBLIC
         |         +-private
         |
         +-user----+-toto-+-toto.txt
                   +-titi
                   +-tata

Si on est dans le répertoire C:/FTP/user/, on peut utiliser n'importe quel chemin suivant :

	C:/FTP/user/toto/toto.txt
	toto/toto.txt
	./toto/toto.txt
 

Si on est dans le répertoire FTP/user/titi , le chemin relatif de toto.txt est :

	../toto/toto.txt

Ici, on remonte d'un "cran" et on redescend vers toto
Si on est dans le répertoire FTP/pub/free , le chemin relatif de toto.txt est :

	../../user/toto/toto.txt

On remonte deux fois pour aller dans FTP puis on redescend vers toto.txt

Exercice

La commande copy demande le chemin et le nom du fichier source à copier et le chemin et le nom du fichier cible de la copie. Exemple :

[dos]
	> copy <source> <cible>
	> copy c:/FTP/user/toto/toto.exe c:/

Le symbole > (supérieur) et les éventuels caractères qui se truvent devant (c:/FTP/bla bla/>) représentent une information contenant le chemin du répertoire actuel. Cette indication se nomme le prompt.

Travail à faire :

  1. Indiquer la commande pour copier le fichier toto.txt sans changer son nom depuis le répertoire "origine" vers le répertoire "cible".
    Vous écrirez le chemin absolu puis le chemin relatif :

Position Copier vers (Cible) Commande ?
C:/ Répertoire common
toto Free
toto Titi
private private

  1. Nous sommes dans le répertoire titi, indiquer la commande pour copier le fichier toto.txt en doc.txt

Cas de plusieurs disques (C, D, E, ...)

Pour Windows (NTFS, FAT), la racine du système de fichier commence au début du disque.
Si nous avons plusieurs disques, chaque disque possède sa propre racine (C:/, D:/, etc.).

Dans ce cas, un chemin relatif n'est valable que pour le disque sur lequel nous sommes.
Pour faire une copie vers un autre disque, il faut utiliser le chemin absolu pour la cible (ou/et la source).

Pour changer d'unité de disque, il convient de taper la lettre du disque suivi de ":". Par exemple : c>d: permet d'accéder au disque D.

ATTENTION, le changement de disque ne change pas la position du pointeur sur le disque que l'on a quitté.

Exemple

Avec l'arborescence suivante, copier le fichier test.tst vers le répertoire de toto :

C:/--FTP-+-common/
         +-pub-----+-PUBLIC		# <=position sur C:
         |         +-private
         |
         +-user----+-toto-+-toto.txt
                   +-titi
                   +-tata
D:/--test.txt		# <= fichier à copier depuis la racine de D:

Si on est dans c:/FTP/pub/PUBLIC/, les commandes suivantes donnent un résultat inattendu :

[dos]
	C:/FTP/pub/PUBLIC/> d:		# passer sur le disque D:
	D:/> copy test.txt c:		# copier vers le disque C:

On passe sur D: et on copie le fichier de text.txt vers c: (sans slash).
Le résultat est que le fichier est copié dans le répertoire pointé sur C/, c'est à dire c:/FTP/pub/PUBLIC/ !!

Pour le copier vers la bonne destination, il faut indiquer le chemin complet, absolu, de la destination :

[dos]
	C:/FTP/pub/PUBLIC/> d:               # passer sur le disque D:
	D:/> copy test.txt c:/FTP/pub/PUBLIC/ # copier vers C: dans le bon dossier
Exercice

Soit le fichier D:/temp/source.txt qui doit être copier. Le nom du fichier sera changé en target.txt.

Nous sommes sur le disque C.
Avec la même arborescence qu'avant, copier le fichier source.txt dans les cas suivants :

Position Cible Commande?
C:/FTP/common/ common
C:/FTP/pub/ common


On passe sur D:/temp/ en venant de C:/FTP/user/toto/, quelles sont les commandes à faire pour copier le même fichier source vers les cibles suivantes ?

Position Cible Commande
D:/temp/ common
D:/temp/ free

Références technologiques

Poursuire le cours avec la seconde partie du cours sur les langages de commande.
Voir la multitude d'articles sur le net.