Pourquoi Windows et Ubuntu ont-ils des commandes shell similaires?

14

Ubuntu a un bash (Bourne Again SHell) tandis que Windows a son shell propriétaire. D'après mes recherches, il n'y a pas de nom pour le langage utilisé pour les scripts shell dans Windows / Ubuntu. C'est ce qu'on appelle des scripts shell.

Pourquoi les coquilles de Windows et Ubuntu comprennent les mêmes commandes telles que: ls, mkdir, rmdir, mountet ainsi de suite?

Existe-t-il une sorte de lingua franca pour l'écriture de scripts shell? Si oui, donnez-moi plus de détails.

Programmeur Shady
la source
9
Voir en.wikipedia.org/wiki/List_of_Unix_commands - recherchez quand ces commandes sont apparues pour la première fois, et vérifiez quand Windows et GNU sont apparus pour la première fois. Ces commandes ne font pas partie de bash - ce sont des utilitaires externes, donc le shell utilisé n'est pas pertinent.
muru
10
Et je suis presque sûr que lsPowershell est pris en charge, non cmd.exe. Et c'est parce que les créateurs de Powershell ont fait des efforts pour ajouter des alias pour les commandes Unix courantes afin que les utilisateurs Unix soient plus à l'aise. technet.microsoft.com/en-us/library/dd347739.aspx
muru
7
L'article Wikipédia sur DOS pourrait éclairer ce point. Citation: "DOS fonctionnait à la place sur les processeurs Intel 8086 16 bits. À partir de MS-DOS 1.28 et PC DOS 2.0, le système d'exploitation incorporait diverses fonctionnalités inspirées de Xenix, la variante d'Unix de Microsoft." Unix est donc, jusqu'à un certain point, un ancêtre de MS-DOS. en.wikipedia.org/wiki/DOS
theodorn
4
@muru: En fait, à la fois Unix et les commandes DOS sont en fait que des alias pour les vraies commandes PowerShell, qui sont nommés selon une normalisée la Action-Objectstructure, composée d'un ensemble d'actions et aussi des objets standardisés. Par exemple, les deux lset dirsont des alias pour Get-ChildItem(qui a en plus l'alias gci), mkdiret mdsont en fait New-Item(qui peuvent réellement créer bien plus que des répertoires, en raison de l'approche basée sur les objets de PowerShell), et ainsi de suite.
Jörg W Mittag
2
Regardez également CPM, VMS, JCL.
Zan Lynx

Réponses:

44

Windows cmd.exene prend pas en charge ls, mountetc., sauf si vous les avez installés vous-même et les avez ajoutés à %PATH%(via Cygwin, MinGW, Subsystem for Unix-based Applications (SUA) ou autre). Powershell le fait. Et c'est parce que Powershell les a comme alias des commandes Powershell standard, afin que les utilisateurs Unix puissent être plus à l'aise. Consultez la liste des alias de compatibilité dans Powershell . Windows a rmdir, mkdiretc. , mais ceux-ci, bien sûr, ne prennent pas en charge la même syntaxe d'options que celle que vous trouveriez sur Ubuntu.

Dans Ubuntu, cela n'a rien à voir avec Bash. Ce sont toutes des commandes externes. Il existe des normes pour ces utilitaires. POSIX est le plus notable (voir la liste des utilitaires mandatés par POSIX ), et Linux Standard Base (LSB) est un autre qui est important pour les systèmes Linux (qui est principalement basé sur POSIX, mais a quelques ajouts ). Celles sur Ubuntu sont principalement fournies par GNU , et les utilitaires GNU ont souvent plus de fonctionnalités que la base requise par POSIX.

POSIX définit également le langage shell que vous avez mentionné (qui est sensiblement différent de celui de cmd.exe). Il est dérivé de la syntaxe du shell Bourne . Bash (maintenant vous savez à quoi se réfère à nouveau le Bourne ), également de GNU, ajoute également des fonctionnalités sur le dessus, mais peut se comporter de manière conforme POSIX si nécessaire. Le langage POSIX est ce que vous attendez avec sh. bash, ksh, ash, dash, zshToute utilisation que la langue, avec des améliorations. cshest dans un monde (cauchemar) qui lui est propre et se tcshrenforce csh.

Pour en savoir un peu plus, regardez dans l'histoire des systèmes Unix et Unix . Unix précède Windows de plus d'une décennie, et ces utilitaires sont apparus pour la première fois dans Unix.

Windows était, à une époque, conforme à POSIX, car le gouvernement américain l'exigeait pour les systèmes d'exploitation utilisés par les agences gouvernementales (c'est à ce moment-là qu'ils ont ajouté les Services pour Unix (SFU) , d'où provenait le SUA mentionné dans le premier paragraphe). Mais cette exigence a été supprimée, et par la suite, SUA a été abandonné.

En relation:

(Notez la partie commune de ces messages - ils sont tous sur Unix et Linux , et l' historique balisé - vous pourriez trouver la navigation à travers cette balise très informative.)

muru
la source
3
AFAIK, rmdir(avec mkdiret cd / chdir) sont des command.combuilds natifs depuis MS-DOS 2.0 (il n'y avait pas de hiérarchie dans le système de fichiers DOS auparavant)
jlliagre
1
rdétait aussi un raccourci md.
jlliagre
1
Voici ce que j'ai obtenu en lisant votre réponse et en parcourant les liens fournis par d'autres: Ces commandes / utilitaires sont apparus pour la première fois dans le passé sur différents systèmes. Au fil du temps, la plupart d'entre eux ont été intégrés dans Ubuntu et certains dans Windows. Windows a cependant décidé de faire les choses à sa manière et de créer sa propre version de ces utilitaires. Au fil du temps, Windows a décidé d'ajouter des alias à ses propres commandes shell afin que les utilisateurs de linux puissent utiliser des commandes qui, en surface, apparaissent de la même manière que sur leurs systèmes, mais en dessous, elles sont traduites en commandes Windows
Shady Programmer
1
Le langage POSIX est ce que vous attendez avec sh. bash, ksh, ash, dash, zshToute utilisation que la langue, avec des améliorations. cshest dans un monde (cauchemar) qui lui est propre et se tcshrenforce csh. Windows a, à un moment donné, obéi à POSIX, car le gouvernement américain l'exigeait pour les systèmes d'exploitation utilisés par les agences gouvernementales (c'est de là que venait le SUA). Mais cette exigence a été supprimée, et par la suite, SUA a été abandonné.
muru le
1
@ShadyProgrammer un autre article U&L que vous trouverez intéressant: unix.stackexchange.com/q/145522/70524
muru
0

Facile:

Linux est un système basé sur le modèle UNIX, tel qu'inventé par Dennis Ritchie et Ken Thompson.

Windows / DOS est une imitation bon marché d'un système appelé CP / M qui était populaire dans les années 1970 sur les anciens ordinateurs que vous avez branchés sur un téléviseur, ce système était à son tour une imitation bon marché des premiers systèmes UNIX de la fin des années 60 / début des années 70 .

delt
la source
Bien qu'il y ait du vrai dans votre réponse, c'est beaucoup trop simplifié pour être utile. (Et nous avons utilisé des moniteurs ou des terminaux avec CP / M - pas des téléviseurs;)) Lorsque j'essaie de comprendre une commande bash ou sed obscure, je repense parfois à l'époque où le système d'exploitation ne faisait presque rien pour vous, mais cela était facile à faire - et je n'ai jamais manqué de mémoire sur une machine 64k.
Joe