---
# System prepended metadata

title: Equivalences entre Linux et Windows
tags: [' reboot', ' learn', post]

---

---
title: Equivalences entre Linux et Windows
tags: post, reboot, learn
robots: noindex, nofollow
author: Julien Noyer
---

# Equivalences entre Linux et Windows

*Essai d'approches fondamentales liées à la représentation de l'information en ligne*

![](https://i.imgur.com/hjiWxvS.png)

> Blog post From [ouidou.fr](https://blog.ouidou.fr)

---

# Avant de commencer

Ca y est, vous avez été placé sur le projet de vos rêves, qui va enfin vous permettre de laisser parler le génie qui est en vous! Mais… comment? pour des raisons de gestions d’équipe ou d’exigences du client, vous devez vous passer de votre système d’exploitation préféré pour travailler sur un système inconnu, et forcément moins pratique que celui auquel vous êtes habitués? Il est toujours possible d’effectuer des tâches similaires, mais il faut ré-apprendre à dire à la machine comment faire... Heureusement, cet ensemble d’équivalences d’instructions est là pour vous y aider!  
De façon générale, les instructions par ligne de commande sont effectuées en **bash** (ou similaire) pour les distributions Linux, et en **Dos** (ou plus récemment **Powershell**) pour les distributions Windows. Ces systèmes d’exploitation et ces langages étant différents, il n’existe pas nécessairement d’équivalence directe entre deux commandes, et certains moyens détournés sont parfois nécessaires pour effectuer une opération particulière. C’est pourquoi cet petit manuel illustre plus différents moyens de parvenir à une même fin sur différents systèmes qu’une réelle “traduction” entre diverses commandes.  
Il est avant tout utile d’avoir quelques généralités à l’esprit :

*   les commandes bash, et le dialogue avec un système Linux de façon général sont sensibles à la casse. Ce n’est pas le cas des commandes Dos/Powershell.
*   les wildcards sont généralement compris par les 2 systèmes d’exploitation. Par exemple, pour supprimer tous les fichier textes d’un dossier, il est possible d’utiliser la commande de suppression sur `*.txt`.
*   lorsqu’une commande a pour résultat l’affichage d’informations dans la sortie standard (affichage du contenu d’un fichier, listage du contenu d’un dossier, etc…), il est possible sous Windows comme sous Linux d’enregistrer ces informations dans un fichier par l’utilisation de chevrons :  
    `<commande> > fichier`: le résultat est enregistré dans le fichier, qui est écrasé/créé pour l’occasion.  
    `<commande> >> fichier`: le résultat est concaténé au fichier, qui est créé si besoin, sans être écrasé.
*   il est possible de consulter directement la documentation sur une commande dans la console d’instructions, avec `man <commande>` ou `<commande> -h` sous **Linux**, `<commande> /?` sous **Windows**, ou encore `<commande> -whatif` en Powershell.
*   les commandes Dos sont souvent déclarées comme alias des commandes Powershell. Il est donc généralement possible d’utiliser les commandes Dos dans la console Powershell.
*   certaines commandes peuvent être agrémentées d’une longue liste d’options, qui ne sont pas toutes présentées ici, certaines listes étant loin d’être exhaustives. Ainsi, pour une utilisation sur-mesure parfaitement adaptée à un script particulier, il est toujours recommandé de consulter la documentation des commandes que l’on souhaite utiliser.
*   il est possible de cumuler différentes options sur une même commande :  
    **bash** : `<commande> -option1option2`, par exemple `ls -lArth` (`ls -l -A -r -t -h`fonctionne également)  
    **Dos** : `<commande> /option1 /option2`  
    **Powershell** : `<commande> -option1 -option2`
*   afin d’éviter d’avoir à écrire l’intégralité d’une commande, l’autocomplétion est implémentée sous **Linux** comme sous **Windows** : après avoir tapé les premières lettres, la touche de tabulation complètera automatiquement avec le reste de la commande. Si les premières lettres rentrées peuvent potentiellement constituer le début de plusieurs instructions, l’autocomplétion se comporte différemment en bash et en Dos/Powershell :  
    **bash** : la ligne est complétée jusqu’au point où les diverses instructions potentielles divergent, et l’utilisateur doit entrer une lettre supplémentaire avant de ré-utiliser l’autocomplétion. Appuyer 2 fois successives sur la touche de tabulation permet d’obtenir la liste des instructions possibles.  
    **Dos / Powershell** : la ligne est complétée avec la totalité de la première instruction valide. Appuyer à nouveau sur la touche de tabulation changera la ligne pour qu’elle corresponde à la deuxième instruction valide, etc… La liste des diverses instructions potentielles est parcourue dans l’ordre alphabétique.

Ca y est, nous pouvons rentrer dans le vif du sujet! L’implémentation des tables étant compliquée sur Medium, les tables ci-dessous sont des images, donc…pas de copier-coller des commandes possible.

# Utilitaires généraux

## Imprimer une phrase

![](https://miro.medium.com/max/1136/1*gv2Z9KolOnTko0mWBKc1ig.png)

## Exécuter une commande en tant qu’admin

Sous **Linux**, un utilisateur non administrateur peut lancer les commandes en tant qu’administrateur s’il connaît le mot de passe admin, et qu’il fait partie du groupe des ‘sudoers’. Sous **Windows**, outre l’alternative ‘runas’ peu utilisée, il est possible de lancer toute une console en tant qu’administrateur, c’est pourquoi la commande Powershell n’est pas indiquée.

![](https://miro.medium.com/max/746/1*_cH9ZXFBwm4c284VDZmwUA.png)

## Recherche de texte

En bash comme en Dos ou Powershell, la liste des options pour affiner la recherche de texte est considérable. Les options présentées ici sont communes, mais cette liste est loin d’être exhaustive.

![](https://miro.medium.com/max/1400/1*ewFQlbc1JtOaHxn11onhmA.png)

Concernant l’affichage des numéros de ligne en Powershell, deux options sont possibles :

*   `(Get-Content <fichier> | Select-String <texte>).LineNumber` : cette option affiche uniquement le numéro des lignes, non les résultats eux-mêmes.
*   ``$i=1; (Get-Content <fichier> | Select-String <texte>) | % {"$($i) `t $_"; $i++}``: cette option plus verbeuse permet d’afficher le numéro de ligne et la ligne en question, séparés par une tabulation.

## Afficher l’historique des commandes utilisées

L’affichage de l’historique des commandes est souvent suivi d’une recherche de texte pour filtrer les résultats.

![](https://miro.medium.com/max/798/1*MzqkwBEoJp3HVeT8A3hbow.png)

## Effacer le contenu de la console

![](https://miro.medium.com/max/362/1*PKnD3JZpl1uYZ-9Lb9AObw.png)

## Fermer la console

![](https://miro.medium.com/max/364/1*90XVvfaqadj5ueCrmexmBA.png)

# Navigation

## Afficher le répertoire courant

![](https://miro.medium.com/max/378/1*kPFdXfl2H-YzgHrAv0P1hQ.png)

## Changer de répertoire

En bash, la commande `cd -` permet de se déplacer vers le répertoire précédent.  
Sous **Linux** comme sous **Windows**, le répertoire courant est noté `./`, et le répertoire parent est noté `../`

![](https://miro.medium.com/max/812/1*tG8XENhVvlBzgiUqtfXq1Q.png)

# Manipulation de fichiers et de répertoires

## Imprimer le contenu d’un fichier dans la console

![](https://miro.medium.com/max/1160/1*PJ_geZ6hYkY4X63h-wqdrg.png)

En Powershell, l’affichage des numéros de lignes nécessite (tout comme lors de la recherche de texte) d’enchaîner plusieurs instructions, afin de générer ces numéros et de les afficher avant chaque ligne : ``$i=1; Get-Content <fichier> | % {"$($i) `t $_"; $i++}``

## Copier un ou plusieurs fichiers/répertoires

En Dos, la copie est récursive par défaut, mais seuls les fichiers contenus dans les différents répertoires sont copiés, et non les répertoires eux-mêmes.

![](https://miro.medium.com/max/1400/1*YfU78X4es-lPCDbxYtWDmg.png)

## Déplacer/renommer un ou plusieurs fichiers/répertoires


![](https://miro.medium.com/max/1366/1*ZJydCH3QCcw2TzQ85ZKOOw.png)

## Créer un ou plusieurs nouveaux répertoires

Sous **Linux** comme sous **Windows**, il est possible de générer plusieurs niveaux de répertoires : `<commande de création> <dossier>/<sous-dossier>`

![](https://miro.medium.com/max/1400/1*a2qOmGgxOdBl7sSdw2m3YA.png)

## Créer un ou plusieurs nouveau fichiers

![](https://miro.medium.com/max/1100/1*xo0OF2KLFwLriKCFFt57JQ.png)

En bash, la fonction de la commande `touch` est en réalité de mettre à jour la date d’accès et de modification du fichier passé en paramètre. Se ledit fichier n’existe pas, il est créé. Cette commande est donc souvent utilisée pour créer un nouveau fichier, mais il est possible d’utiliser l’option `touch -c` pour éviter de le créer s’il n’existe pas.  
En Dos, on utilise simplement un chevron pour rediriger une impression nulle dans le nouveau fichier.

## Supprimer un ou plusieurs fichiers/répertoires

![](https://miro.medium.com/max/1400/1*cFkEfcR8wH3d6SELr_7JVw.png)

En Dos, la commande est récursive par défaut, mais seuls les fichiers sont supprimés et non les dossiers : cela est dû au fait que le dossier doit être vide pour être supprimé. Il faut donc en premier lieu utiliser `del` pour supprimer les fichiers, puis `rd` pour supprimer le dossier vide. L’équivalent bash de cette commande de suppression de dossier vide, plus précautionneuse, est `rmdir <dossier>`, utilisable également telle quelle en Dos et Powershell.

## Rechercher un fichier/répertoire

En bash comme en Dos et Powershell, beaucoup d’options cumulables existent pour affiner la recherche, la liste ci-dessous est non exhaustive.

Attention, pour l’affinage selon une regex en bash, la regex doit correspondre au path complet, et donc inclure les caractères ‘^’ et ‘$’.

![](https://miro.medium.com/max/1400/1*Stpc0baRIbdP8GY-PkQhHw.png)

On remarque qu’en Powershell, l’affinage par nom ou regex est en fait constitué de 2 commandes jointes par un pipe.  
En bash, il est possible d’utiliser des options pour effectuer directement des commandes sur chacun des résultats de la liste :

*   `find <répertoire de départ> <options> -exec <commande>` : exécution de la commande `<commande>` sur chaque résultat, désigné par la chaine “{}”. Exemple avec suppression de dossiers : `find ./ -type d -exec rmdir {}`
*   `find <répertoire de départ> <options> -execdir <commande>` : idem que la commande précédente, mais l’instruction `<commande>` est ici lancée depuis le répertoire contenant le résultat et non le répertoire courant.
*   `find <répertoire de départ> <options> -ok <commande>` : idem que précédemment, mais une confirmation est demandée systématiquement avant l’exécution de l’instruction `<commande>`. La différence entre `-ok` et `-okdir` est la même qu’entre `-exec` et `-execdir`.

## Lister des fichiers/répertoires

Le listage concerne les éléments du répertoire courant par défaut, mais il est possible de préciser un répertoire après la commande `ls`, `dir` ou `Get-ChildItem -Path` pour préciser depuis quel répertoire doit être lancé l’instruction.

![](https://miro.medium.com/max/1032/1*v-Q9BE7TmutbYkhEUcJOHg.png)

En bash, les résultats ne sont pas affichés sous forme de liste par défaut, il faut pour cela utiliser l’option `-l`. Pour plus de commodité, la commande `ls -l`est souvent enregistrée sous l’alias `ll`.  
En bash, `ls -a` et `ls -A` fournissent le même résultat, si ce n’est que l’utilisation de `-a` affiche également les dossiers ./ et ../, à l’inverse de `-A`.

## Afficher une partie d’un fichier (pratique pour les logs)

En bash, les options des commandes `head` et `tail` sont semblables, mais seule l’une des deux commandes est affichée dans la liste ci-dessous pour plus de commodité.

![](https://miro.medium.com/max/1400/1*1nkihQSGHk8KcyfrDSNXUg.png)

## Comparer deux fichiers ligne à ligne

Pour plus de commodité, dans les commandes ci-dessous, `<fichier1>` et `<fichier2>` ont été respectivement remplacés par `<f1>` et `<f2>`.  
En Powershell, cette opération, bien que possible, est très verbeuse. C’est pourquoi elle ne figure pas dans la table, et est affichée ci-après : `Compare-Object -ReferenceObject (Get-Content -Path <f1>) -DifferenceObject (Get-Content -Path <f2>`. Il est possible d’utiliser l’option `-CaseSensitive` pour tenir compte des différences de casse, qui sont ignorées par défaut.

![](https://miro.medium.com/max/1160/1*ffM9xJFMqESodsHIFsRQUw.png)

En bash, si la cible ou la source est un répertoire, la comparaison est faite avec le fichier contenu dans ce répertoire portant le même nom que le fichier à comparer. Si la source et la cible sont tous deux des répertoires, la comparaison est faite entre tous les fichiers portant le même nom dans les deux répertoires, dans l’ordre alphabétique. Cette comparaison n’est pas récursive par défaut, il faut utiliser l’option `-r` pour cela.

# Gestion de système

## Informations sur l’utilisation du disque système par les différents systèmes de fichiers

![](https://miro.medium.com/max/1032/1*KoFFeSUzwSImMAQ5ak8KIA.png)

En Powershell, à partir de **Windows 10**, il est possible d’utiliser la commande `Get-Volume`, qui permet d’obtenir les informations (nom du lecteur, type de partition, taille disponible, taille totale) concernant tous les volumes de toutes les partition.

## Informations sur le volume occupé par un fichier/répertoire

Cette fonctionnalité n’existe pas par défaut en Dos ou Powershell, mais il est possible de créer un script en Powershell qui donne un résultat similaire. Ce script repose sur les commandes `-Get-ChildItem` et `Measure-Object` :

function du-equivalent($dir=".") {   
  get-childitem $dir |   
    % { $f = $\_ ;   
        get-childitem -r $\_.FullName |   
           measure-object -property length -sum |   
             select @{Name="Name";Expression={$f}},Sum}  
}

Il doit être noté que la durée d’exécution de ce script peut être significative selon la taille du répertoire à analyser.  
En bash, la commande `du` peut s’appliquer à un fichier ou un dossier qu’il est possible de préciser (par exemple `du <dossier>`). Par défaut, elle s’applique au répertoire courant.

![](https://miro.medium.com/max/1034/1*fj8KG0Kmd0YG4OWn5vgMsg.png)

<br>

## Informations sur le système d’exploitation

L’obtention des informations sur le système d’exploitation peut être facilement soumise à un affinage en bash, mais la commande `systeminfo` utilisée en Dos et Powershell donne directement toutes les informations disponibles. C’est pourquoi seul le langage bash figure dans la table ce-dessous.
![](https://miro.medium.com/max/704/1*WhPGA-jGgG_kxMxWB2qWaA.png)

<br>

## Changer les permissions sur un fichier/répertoire

![](https://miro.medium.com/max/1400/1*8UOU96_TOCp3p39VhR0nxQ.png)

En bash, ‘xxx’ correspond aux autorisations attribuées au propriétaire du fichier, au groupe propriétaire, et aux autres utilisateurs, selon les sommes de numéros : 1 (exécution)-2 (écriture)-4 (lecture).  
Exemple : si les droits sur le fichier `fichier` sont :

*   pour le propriétaire du fichier : exécution+lecture+écriture=1+2+4=7
*   pour le groupe propriétaire : exécution+lecture=1+4=5
*   pour n’importe quel autre utilisateur : exécution=1

Alors, ‘xxx’ vaut 751.  
Il est possible de changer le propriétaire ou le groupe propriétaire d’un fichier avec les commandes `chown` et `chgrp`.  
En Dos et Powershell, il est à chaque fois nécessaire préciser l’utilisateur pour qui les droits sont modifiés.

## Afficher la liste des tâches/processus en cours

De (très) nombreuses options existent pour ces commandes, dont l’intérêt varient selon le contexte. Se reporter à la documentation de ces commandes pour une liste exhaustive.

![](https://miro.medium.com/max/794/1*LF2J6pSiipe_1TyKKQYvQA.png)

## Arrêter une tâche/un processus

Pour connaître l’identifiant du processus à arrêter qu’il faut passer en paramètre des commandes ci-dessous, il est possible d’utiliser la commande d’affichage des processus en cours (voir ci-dessus), et d’affiner la liste des résultats par une recherche de texte.  
Exemple bash : `ps | grep firefox`  
Exemple Powershell : `tasklist | Select-String "firefox"`

![](https://miro.medium.com/max/1400/1*3Xt9wdc-TLuw7yCaiSgD7Q.png)

En Powershell, l’option `-Force` se contente de ne pas demander de confirmation.

## Informations sur les interfaces réseau de la machine

![](https://miro.medium.com/max/1192/1*BP5RBIlG0PGjB8n2L0noqQ.png)

En bash, la commande `ifconfig` permet également de configurer les différentes interfaces réseau selon les options utilisées.


# Connectivité


## Vérifier la connexion à un serveur

Pour des raisons de sécurité, le protocole utilisé par la commande `ping` est souvent bloqué, mais d’autres commandes utilisant des protocoles différents sont disponibles.

En Dos, la commande `telnet` doit être activée avant de pouvoir être utilisée.

En bash et en Dos, la commande `telnet` utilise par défaut le port 23 quand aucun port n’est précisé. En Powershell, il est systématiquement nécessaire de préciser le port.

La commande `netcat` est une boîte à outil comportant de nombreuses options pour interagir en utilisant les protocoles TCP et UDP. Cet outil n’est pas disponible par défaut sous **Windows**, bien qu’il soit possible d’installer `ncat`, qui offre des fonctionnalités similaires.

![](https://miro.medium.com/max/1400/1*yqcDK-tjavlmUpKzGy9Yng.png)

<br>

## Télécharger une URL

En bash, le téléchargement, et de façon générale l’interaction avec les pages web se font par l’intermédiaire de deux commandes principales : `wget` et `curl`.  
Ces deux commandes sont en réalité deux vastes boites à outils, possédant de considérables listes d’options. C’est pourquoi la lecture de la documentation de ces commandes très polyvalentes est vivement conseillée, afin de pouvoir les adapter au mieux au contexte d’utilisation.  
Il est possible sous Windows d’installer la commande `wget`. En Powershell, il est possible d’utiliser une alternative indirecte de cette commande :

$client = New-Object System.Net.WebClient  
$client.DownloadFile("<url>")

![](https://miro.medium.com/max/940/1*KNYcEU8JaCPOwmC9QwQiIw.png)

<br>

## Informations détaillées sur une machine (ip, nom d’hôte…)

Sous **Linux**, utiliser simplement la commande `nslookup` sans argument permet de lancer la console nslookup. Il suffit alors de rentrer une IP ou un nom d’hôte pour obtenir les informations disponibles. Cette console permet d’avoir accès à d’autres options dont l’implémentation dépend de la distribution **Linux** utilisée.

Les deux premières options de la table ci-dessous ne sont pas affichées en Powershell, car la commande `Resolve-DnsName <ip> (ou <host>)` permet d’effectuer ces actions.

![](https://miro.medium.com/max/700/1*fKFWyCMDa17_fmiOh8OaJg.png)