S1C4-2 Commandes DOS de base

SIO > S1_Commun > S1C3_Langage de commande > S1C3_DOS_2_commandes.md

La ligne de commandes

Commandes essentielles et communes à plusieurs langages de commandes

La ligne de commande est l'utilisation d'un logiciel qui permet d'écrire des commandes l'une après l'autre et d'observer immédiatement le résultat de chacune.
Les commandes sont écrites à la main puis validées avec la touche entrée. Ici, pas de souris, que le clavier.
Elles sont majoritairement contenues dans le fichier exécutable command.com du répertoire c:\windows\system32\.

Le langage de commandes permet surtout d'effectuer des fonctions de consultation des données de configuration, affichage de fichiers, gérer ces fichiers, modifier l'arborescence des disques (la suppression d'un fichier peut échouer sous windows et réussir sous DOS), contrôler l'état du système, des disques, ajouter des utilisateurs, etc. ... selon la puissance du langage de commande.

Les commandes sont des mots clés composés d'un verbe (copy, remove, ...) éventuellement suivi d'un objet (mkdir = make directory) ou un simple mot (dir = directory).
Parfois, il existe des raccourcis (mkdir => md) ou carrément la forme longue a disparu (cd <= chdir = change directory).

Les commandes acceptent souvent des arguments, des paramètres ou commutateurs. Ceux-ci sont précédés de /, exemple :

[dos]
 rmdir /S/Q  toto // supprimer le répertoire /S= et tous ses sous répertoires, /Q = "quiet" : ne pas demander de confirmation de suppression
 ipconfig /all     // afficher l'intégralité de la configuration réseau

En fin de ce document, Il y a des exemples et exercices expliqués. A voir.

Les commandes suivantes sont à apprendre selon la priorité : +++ = impérative, ++ = très utile, + = à connaître, - = peuvent se retrouver mais les connaître facilite la vie.

Noms des fichiers utilisés dans les commandes (+++)

Les noms sont écrits soit avec un chemin relatif, soit un chemin absolu partant du début du disque.
Pour représenter plusieurs fichiers en une seuls fois, on peut utiliser des jokers : ? ou *.

Exemples
[dos]
 dir            # lister tous les objets du dossier
 dir test.txt   # lister le seul objet demandé
 dir test.*     # lister tous les objets nommés test, peu importe leur extension : test.txt, test.doc, etc...
 dir te?t.txt   # lister tous les objets .txt, dont le nom commence par te suivi d'un caractère et finissant par t : test.txt, text.txt, teat.txt, ...
 dir test*.txt  # lister tous les objets .txt, dont le nom commence par text : test.txt, test1.txt, test2.txt, test abcdexxx123.txt, ...
 dir test?.txt  # lister tous les objets .txt, dont le nom commence par text suivi d'un caractère : test1.txt, test2.txt mais pas test.txt ni testxyz.txt, ...
 dir c:\FTP\pub # lister tous les objets .txt, dont le nom commence par text suivi d'un caractère : test1.txt, test2.txt mais pas test.txt ni testxyz.txt, ...

Répertoires (+++)

Commande Description Exemples
Help aide sur une commande help dir
dir Afficher le contenu d'un répertoire. /p affichage paginé, /w affichage des noms, en 4 colonnes. Voir aussi MORE dir FTP\Users\
chdir ou cd Changer de répertoire courant cd c:/temp ; cd FTP\Users
md ou mkdir Créer un répertoire (make directory) md tutu
rd ou rmdir Supprimer un répertoire (remove directory) rm tutu
tree Afficher une arborescence sous forme pseudo graphique tree c:\temp

Fichiers (+++)

Commande Description Exemples
del (+++) Supprimer un fichier (…) (plusieurs en utilisant les jokers ou ?) del FTP_SAV\*.*
copy (+++) Copier un fichier ou dossier (plusieurs en utilisant les jokers * ou ?) ; le "+" fusionne ficA et ficB dans ficC copy FTP\\*.\* FTP_SAV\</dos>  ; <dos>copy ficA.txt\+ficB.txt ficC.txt
xcopy (+++) Copier un ou plusieurs fichiers ou dossiers, de nombreuses options rendent cette commande incontournable xcopy /S/D/H FTP*. FTP_SAV</dos>
ren ou rename (+++) Renommer un seul fichier ren titi.txt toto.txt
mv ou move (++) Déplacer/renommer un fichier ou répertoire mv FTP/Users/toto/toto.txt FTP/pub/private/publication_toto.txt
type (++) Afficher le contenu d'un fichier texte type liste.txt
more (++) Afficher le contenu d'un fichier texte page par page dir | more
find (-) Recherche les lignes correspondant à l'exemple dans un fichier find "toto" liste.txt
attrib (-) Afficher ou modifier les attributs (de sécurité) des fichiers attrib +H liste.txt
mklink Créer un raccourci mklink liste.txt liste_alias.lnk

copy sont des commandes assez complexes. Voir l'aide de ces commandes.
Exemple copier (/S) seulement les sous répertoire non vides et les fichiers (/D) plus récents que déjà copiés, même (/H) cachés :

[dos]
	xcopy /S/D/H FTP\*.* FTP_SAV\

Les commandes système (+)

Commande Description
date (+) Afficher/changer la date système (du BIOS)
time (+) Afficher/changer l'heure système (du BIOS)
mem Affiche la quantité de mémoire disponible
ver Affiche la version du système
format (+++) Executable qui permet de formater un disque. Attention, cela supprime toutes les données
exit Sortir de l'invite de commande (et fermer la fenêtre)
cls Effacer l'écran de commande
title Définir le titre de la fenêtre de commande
title Définir le titre de la fenêtre de commande

Les commandes réseau (+++)

Commande Description
ipconfig Afficher la configuration du réseau ; renouveler ou libérer l'adresse IP
ping Envoyer une requête ICMP à l'hôte indiqué pour tester la communication réseau
tracert Envoyer une série de requêtes ICMP à l'hôte indiqué pour tracer la route des équipements traversés
netstat (++) Afficher l'état des communications réseau, des connexions
arp (++) Afficher la table ARP locale ; gérer la table ARP
route (++) Afficher la table des routes locales ; gérer cette table
net use (-) Connecter un périphérique réseau
nslookup Demande d'identification du domaine par le 1er DNS pouvant répondre

Il existe d'autres commandes moins utiles ou spécifiques. Utiliser la commande help dans l'invite de commande pour les afficher.

Les commandes programmées

Certaines commandes ne sont pas directement dans l'interpréteur de commande mais sont de petits programmes stockés sur le disque. On y trouve beaucoup d'utilitaires.
Voici une palette de quelques commandes utiles et utilitaires en ligne de commande :

Commande Description
chcp.com Utilitaire de raccourci de mode con cp codeLong_pageDeCode. Exemple : CHCP character_code_page
chkntfs, chkdsk Programmes de contrôle du système de fichier, permet de récupérer certains fichiers perdus et corriger les erreurs du FS
xcopy.exe Ptilitaire de copie d'arborescence de fichiers
fdisk Utilitaire de gestion/définition des partitions, de RAZ du MBR
edit.com Éditeur de texte en mode console
win.com Utilitaire de lancement de windows. Toujours présent pour des raisons de compatibilité, le serveur graphique Windows est lancé automatiquement par le fichier IO.SYS

D'autres commandes sont installées à part ou à télécharger manuellement :

Commande Description
telnet.exe Client de connexion à distance avec le protocole telnet
ftp Client ftp en ligne de commande pour le tranfsert de fichier par FTP (les clients graphiques utilisent souvent ce client …)
md5.exe Petit programme qui prend une chaine ou deux comme arguments/paramètres et retourne la chaîne chiffrée avec l'algorithme MD5

La majorité des applications disposent d'une interface en ligne de commande afin de permettre l'automatisation de tâches via un programme ou un srcipt de commandes (fichier .bat)

Entrées/sorties et redirections (+++)

Les entrées sorties (E/S ou I/O) sont au nombre de trois :

  • entrée standard = le clavier
  • sortie standard : l'écran
  • sortie standard d'erreur : l'écran

Cependant, il est possible de détourner ces I/O avec des redirections d'entrées/sorties.
Détourner les E/S est utilsee pour sauvegarder des contenus de fichiers, le résultat de commandes ou utiliser le contenu d'un fichier pour exécuter des lots de commandes.

Les autres E/S

Il existe d'autres E/S qui sont plus ou moins obsolètes :

  • PRN ou LPT1, LPT2, ... sorties parallèles vers des imprimantes (Obsolète),
  • AUX ou COM1, COM2, COM3 et COM4 : noms d'unités série comme l'USB (Obsolète ?),
  • CON (console, à vérifier) : clavier console : Copy CON fichier.txt permet d'écrire directement dans le fichier. Terminer par ctl+z et entrée ou ctl+c)

Redirection des E/S

Une redirection consiste par exemple à envoyer un affichage vers une autre commande ou un vers un fichier.
Ceci permet de sauvegarder le résultat d'une commande, d'éviter l'affichage de message d'erreur ou d'utiliser le contenu d'un fichier pour effectuer une commande répétitif.
Les redirections sont :

Commande Description Exemple
@ Supprimer l'affichage du résultat d'une commande. @echo Hello World ; affiche juste le message et pas la commande
> Rediriger le résultat d'une commande vers un fichier. L'éventuel contenu existant est écrasé, remplacé intégralement. dir > fichier.txt
>> Rediriger le résultat d'une commande vers un fichier en l'ajoutant à la fin du contenu existant. dir toto/ >> fichier.txt
| Rediriger le résultat d'une commande vers un seconde commande. dir | more ; affiche le résultat de dir page/page
< Rare : Rediriger un ficher vers l'entrée d'une commande. Se fait par redirection inverse. sort < liste.txt ; affiche le résultat du tri des lignes du fichier

Exemples

Redirection simple ">" : enregistrer le résultat d'une commande :
[dos]
 dir /FTP/users > liste_utilisateurs.txt  # rediriger la sortie de la commande dir vers le fichier liste...txt
 type liste_utilisateurs.txt

Le fichier contient une copie de l'affichage normal à l'écran :

 Le volume dans le lecteur D s'appelle Data
 Le numéro de série du volume est 9E07-D632
 
 Répertoire de D:\_temp\FTP\Users
 
08/09/2023  17:15    <DIR>          .
08/09/2023  17:15    <DIR>          ..
08/09/2023  17:15    <DIR>          aab
08/09/2023  17:15    <DIR>          cde
               0 fichier(s)                0 octets
               4 Rép(s)  437 870 424 064 octets libres

L'affichage a été redirigée vers un fichier.

Redirection simple des erreurs d'une commande (tentative de création d'un répertoire déjà existant) :
[dos]
 md FTP							# la commande normale
	Un sous-répertoire ou un fichier FTP existe déjà.
 md FTP 2> err.txt					# la commande avec l'erreur redirigée
 type err.txt

Le fichier err.txt contient le message d'erreur normalement affiché à l'écran :

 Un sous-répertoire ou un fichier FTP existe déjà.

L'affichage de l'erreur a été redirigée vers un fichier.

Redirection avec ajout
[dos]
 date > listeRep.txt   # écrire la date dans un fichier
 echo ========== >> listeRep.txt   # ajouter une ligne de séparation
 dir >> listeRep.txt   # et ajouter la liste des objets du répertoire courant.

Le fichier listeRep.txt contiendra :

La date du jour est : 14/09/2024
==========
 Le volume dans le lecteur D s'appelle Data
 Le numéro de série du volume est 9E07-D632
 
 Répertoire de D:\_temp\FTP\Users
 
08/09/2023  17:15    <DIR>          .
08/09/2023  17:15    <DIR>          ..
08/09/2023  17:15                44 liste.txt
               0 fichier(s)                0 octets
               4 Rép(s)  437 870 424 064 octets libres

Noter que 44 sont les 44 premiers caractères contenus dans le fichier avant l'exécution de dir.

"Tuber" (rediriger) la sortie d'une commande vers l'entrée d'une autre :

  1. Afficher l'arborescence du disque c, page par page (sinon on ne voit rien),
  2. Enregistrer le nom des fichiers dont le nom contient la chaîne "log" dans le fichier liste.txt

[dos]
 tree c:\ | more                 # 1. le résultat de tree est envoyé à more
 dir /b | find "log" > liste.txt  # 2. dir /b n'affiche que les noms, sans aucun détail
Redirection inverse, une commande reçoit le contenu d'un fichier.

Soit un fichier liste.txt contenant :

bb
aa
dd

Trier le contenu du fichier (redirection inverse) et envoyer le résultat dans un nouveau fichier (redirection simple) :

[dos]
 sort < liste.txt > liste_triee.txt # SORT reçoit le contenu de liste.txt et la sortie est redirigée vers liste_triee.txt

Le fichier liste_triee.txt contient :

aa
bb
dd
Comprendre les sorties standard.

En réalité, les sorties standard se comporte comme un fichier qui serait affiché ligne par ligne.
Il est donc dès lors facile de comprendre que la commande du tube ressemble à un fichier intermédiaire. La commande :

[dos]
	dir /b | find "log"  # find affiche les lignes correspondantes parmi le résultat de dir /b

Effectue la même chose que les commandes successives :

[dos]
 dir /b > temp.txt      # dir /b est enregistrée dans un fichier temp
 find "log"  <temp.txt # find cherche les lignes correspondantes dans le fichier temp et les affiche

Commandes spécialisées du cas FTP

ftp.exe est une application utilitaire intégrée à DOS depuis longtemps.
Ce programme est en fait un client FTP (File Transfert Protocol) qui permet rapidement d'envoyer ou de récupérer des fichiers sur un serveur distant.
Après avoir lancé le programme, on peut envoyer ou recevoir des fichiers vers le répertoire de lancement de ftp.

Certains préfèrent installer un client FTP comme Filezilla, mais si ce n'est pas possible, il est intéressant de connaître les commandes suivantes :

Commande Description
open Ouvrir la connexion au serveur si ce n'est pas fait à l'appel de ftp.exe
mode Changer de mode de transfert pour les fichiers : binary ou ascii
dir Afficher le contenu du répertoire distant
cd Changer de répertoire distant (impossible de changer de répertoire local)
get Télécharger (download) un fichier du serveur vers notre poste
put Envoyer (upload) un fichier vers le serveur
close Fermer la connexion au serveur
quit Sortir du programme FTP

Exemple de connexion sur un serveur web (les réponses du serveur sont en retrait) :

[dos]
C:\wamp\www>ftp 192.168.100.1      	# appel du programme avec l'adresse (ou le nom) du serveur depuis le répertoire local de développement
 	Connecté à 192.168.100.1.
 	220 Serveur web de test
 Utilisateur (192.168.100.1:(none)) : toto  # saisie du nom de l'utilisateur
 	331 Password required for toto.
 Mot de passe : *******              	# saisie du mot de passe
 	230 User fildevent logged in.
 
 ftp> cd www				# changement de répertoire
 	250 CWD command successful.
 
 ftp> dir
 	200 PORT command successful.
 	150 Opening ASCII mode data connection for file list
 	drwxr-xr-x  13 web site     4096 Sep  6 16:54 .
 	drwxr-xr-x  13 web site     4096 Sep  6 16:54 ..
 	drwx------  12 web site     4096 Sep  6 16:49 images
 	-rw-r--r--   1 web site     2405 Sep  6 16:37 index.php
 	-rw-r--r--   1 web site    23784 Sep  6 16:49 slide.php
 	...
 	226 Transfer complete.
 	ftp : 1719 octets reçus en 0.21 secondes à 8.07 Ko/s.
 
 ftp> get slide.php			# télécharger un fichier
 	200 PORT command successful.
 	150 Opening ASCII mode data connection for slide.php (23784 bytes)
 	226 Transfer complete.
 	ftp : 24233 octets reçus en 0.01 secondes à 2423.30 Ko/s.
 
 ftp> close
 	221 Goodbye.
 
 ftp> quit
C:\Users\toto>_

Exercices

Créer le fichier liste.txt à la racine d'un autre disque que C : disque E, clé usb, etc. mais pas le disque C (question de risques).
Remplir le fichier avec le contenu suivant puis le sauvegarder :

# utilisateur # mot de passe # description
toto	toto	utilisateur toto
titi	titi	un drole d'oiseau
tata	tata	qui fait des gateaux

A l'aide des commandes précédentes (et pas de l'eplorateur ...) :

  • ouvrir l'invite de commande
  • aller dans le disque E:
  • créer le répertoire FTP et ses sous répertoires, comme décrit plus haut.
  • de déplacer vers le répertoire FTP/pub/public
  • avec la commande dir, lister le répertoire e:/
  • refaire la même commande mais rediriger la sortie vers le fichier test.txt
  • afficher le fichier test.txt
  • remplacer le contenu du fichier test.txt par celui de liste.txt (copier liste.txt vers le nom de test.txt)
  • ré afficher le fichier test.txt pour vérifier
  • écrire echo coucou >> test.txt puis vérifier si qqch a changé.

A SUIVRE ...

Partie 3 du cours DOS : les scripts en dos, les fichiers BATCH.

Références

La documentation sur le DOS est nombreuse et plus ou moins adaptée à ce qu'on recherche. Il existe cependant, au hasard du net, des contenus +/- intéressants.