Почему Windows и Ubuntu имеют похожие команды оболочки?

14

У Ubuntu есть bash (Bourne Again SHell), тогда как у Windows есть собственная оболочка. Согласно моим исследованиям, в Windows / Ubuntu нет названия для языка, используемого для сценариев оболочки. Это просто называется сценариями оболочки.

Почему для Windows и Ubuntu оболочки понимают одни и те же команды , такие как: ls, mkdir, rmdir, mountи так далее?

Есть ли какая-то лингва франка для сценариев оболочки? Если да, пожалуйста, дайте мне больше деталей.

Shady Programmer
источник
9
См. En.wikipedia.org/wiki/List_of_Unix_commands - найдите, когда эти команды появились впервые, и проверьте, когда Windows и GNU появились впервые. Эти команды не являются частью bash - они являются внешними утилитами, поэтому какая оболочка используется, не имеет значения.
Муру
10
И я уверен, что lsподдерживается Powershell, а не cmd.exe. И это потому, что создатели Powershell приложили некоторые усилия, чтобы добавить псевдонимы для общих команд Unix, чтобы пользователям Unix было удобнее. technet.microsoft.com/en-us/library/dd347739.aspx
Muru
7
Статья в Википедии о DOS может пролить свет на это. Цитата: «Вместо этого DOS работал на 16-разрядных процессорах Intel 8086. Начиная с MS-DOS 1.28 и PC DOS 2.0, операционная система включала в себя различные функции, вдохновленные Xenix, вариантом Unix от Microsoft». Таким образом, Unix является прародителем MS-DOS. en.wikipedia.org/wiki/DOS
theodorn
4
@muru: На самом деле, и команды Unix, и команды DOS фактически являются псевдонимами реальных команд PowerShell, которые названы в соответствии со стандартизированной Action-Objectструктурой, состоящей из набора также стандартизированных действий и объектов. Например, оба lsи dirявляются псевдонимами для Get-ChildItem(которые дополнительно имеют псевдоним gci), mkdirи mdфактически являются New-Item(которые на самом деле могут создавать гораздо больше, чем просто каталоги, благодаря объектно-ориентированному подходу PowerShell) и так далее.
Йорг Миттаг
2
Также посмотрите на CPM, VMS, JCL.
Zan Lynx

Ответы:

44

Для Windows cmd.exeне поддерживает ls, mountи т.д., если вы не установили их сами и добавили их к %PATH%(через Cygwin, MinGW, подсистема для Unix-приложений (SUA) или что - то еще). Powershell делает. И это потому, что Powershell использует их как псевдонимы стандартных команд Powershell, чтобы пользователи Unix могли чувствовать себя более комфортно. Смотрите список псевдонимов совместимости в Powershell . Окна действительно есть rmdir, mkdirи т.д. , но это, конечно, не поддерживают один и тот же вариант синтаксиса , который вы найдете на Ubuntu.

В Ubuntu это не имеет ничего общего с Bash. Это все внешние команды. Есть стандарты для таких утилит. POSIX является наиболее заметным (см. Список утилит, предусмотренных POSIX ), а Linux Standard Base (LSB) - еще одна, важная для систем Linux (которая в основном основана на POSIX, но имеет некоторые дополнения ). Те, что в Ubuntu, в основном предоставляются GNU , а утилиты GNU часто имеют больше возможностей, чем база, необходимая для POSIX.

POSIX также определяет язык оболочки, который вы упомянули (который существенно отличается от языка в cmd.exe). Он получен из синтаксиса оболочки Bourne . Bash (теперь вы знаете, на что опять ссылается Bourne ), также из GNU, также добавляет функции сверху, но может вести себя POSIX-совместимым образом, когда это необходимо. Язык POSIX - это то, что вы ожидаете получить sh. bash, ksh, ash, dash, zshЛюбое использование , что язык, с улучшениями. cshнаходится в (кошмарном) собственном мире и tcshусиливается csh.

Чтобы понять немного больше, загляните в историю Unix и Unix-подобных систем. Unix предшествует Windows более чем на десятилетие, и эти утилиты впервые появились в Unix.

Когда-то Windows была POSIX-совместимой, поскольку правительство США требовало ее для операционных систем, используемых правительственными учреждениями (именно тогда они добавили службы для Unix (SFU) , из которых вышло SUA, упомянутое в первом абзаце). Но это требование было отменено, и впоследствии SUA был отменен.

Связанный:

(Обратите внимание на общую часть этих постов - все они посвящены Unix & Linux и истории тегов - вы можете найти просмотр этого тега очень информативным.)

Мур
источник
3
AFAIK, rmdir(наряду с mkdirи cd / chdir) являются встроенными command.comвстроенными функциями начиная с MS-DOS 2.0 (ранее в файловой системе DOS не было иерархии)
jlliagre
1
rdбыл ярлык mdтоже.
Jlliagre
1
Вот что я получил, прочитав ваш ответ и просматривая ссылки, предоставленные другими: эти команды / утилиты впервые появились в прошлом в различных системах. Со временем большинство из них были интегрированы в Ubuntu, а некоторые - в Windows. Однако Windows решила действовать по-своему и создать собственную версию этих утилит. Со временем Windows решила добавить псевдонимы в свои собственные команды оболочки, чтобы пользователи Linux могли использовать команды, которые на поверхности выглядят так же, как в их системах, но под ними они переводятся в команды Windows
Shady Programmer
1
Язык POSIX - это то, что вы ожидаете получить sh. bash, ksh, ash, dash, zshЛюбое использование , что язык, с улучшениями. cshнаходится в (кошмарном) собственном мире и tcshусиливается csh. В свое время Windows подчинялась POSIX, так как правительство США требовало ее для операционных систем, используемых правительственными учреждениями (отсюда и появился SUA). Но это требование было отменено, и впоследствии SUA был отменен.
Муру
1
@ShadyProgrammer еще один пост U & L, который вы найдете интересным: unix.stackexchange.com/q/145522/70524
Muru
0

Просто:

Linux - это система, основанная на модели UNIX, изобретенная Деннисом Ритчи и Кеном Томпсоном.

Windows / DOS - это дешевая подделка системы CP / M, которая была популярна в 1970-х годах на тех старых компьютерах, которые вы подключили к телевизору. Эта система, в свою очередь, была дешевой подделкой ранних систем UNIX конца 60-х - начала 70-х годов. ,

DELT
источник
Хотя в вашем ответе есть доля правды, он слишком упрощен, чтобы быть полезным. (И мы использовали мониторы или терминалы с CP / M, а не с телевизорами;)) Когда я пытаюсь выяснить какую-то непонятную команду bash или sed, я иногда вспоминаю те времена, когда ОС почти ничего не делала для вас, но это это было легко сделать - и мне никогда не хватало памяти на машине с 64k.
Джо