¿Por qué Windows y Ubuntu tienen comandos de shell similares?

14

Ubuntu tiene un bash (Bourne Again SHell) mientras que Windows tiene su shell propietario. Según mi investigación, no hay un nombre para el lenguaje utilizado para las secuencias de comandos de shell en Windows / Ubuntu. Simplemente se llama scripting de shell.

¿Por qué las conchas de Windows y Ubuntu entienden los mismos comandos, tales como: ls, mkdir, rmdir, mounty así sucesivamente?

¿Hay algún tipo de lingua franca para el script de shell? Si es así, por favor dame más detalles.

Programador sombrío
fuente
99
Consulte en.wikipedia.org/wiki/List_of_Unix_commands : busque cuándo aparecieron estos comandos por primera vez y compruebe cuándo aparecieron Windows y GNU por primera vez. Estos comandos no son parte de bash, son utilidades externas, por lo que el shell que se usa es irrelevante.
Muru
10
Y estoy bastante seguro lsde que Powershell no lo admite cmd.exe. Y eso se debe a que los creadores de Powershell se esforzaron por agregar alias para los comandos comunes de Unix para que los usuarios de Unix se sintieran más cómodos. technet.microsoft.com/en-us/library/dd347739.aspx
muru
77
El artículo de Wikipedia sobre DOS podría arrojar algo de luz sobre esto. Cita: "DOS se ejecutó en procesadores Intel 8086 de 16 bits. Comenzando con MS-DOS 1.28 y PC DOS 2.0, el sistema operativo incorporó varias características inspiradas en Xenix, la variante de Unix de Microsoft". Entonces, Unix es, hasta cierto punto, un antepasado de MS-DOS. en.wikipedia.org/wiki/DOS
theodorn
44
@muru: De hecho, tanto el Unix y los comandos de DOS son en realidad sólo alias a los verdaderos comandos de PowerShell, que se nombran de acuerdo con un estandarizada Action-Objectestructura, compuesta de un conjunto de acciones y objetos también estandarizados. Por ejemplo, ambos lsy dirson alias para Get-ChildItem(que además tiene el alias gci), mkdiry mdson en realidad New-Item(que en realidad pueden crear mucho más que directorios, debido al enfoque basado en objetos de PowerShell), y así sucesivamente.
Jörg W Mittag
2
También mire CPM, VMS, JCL.
Zan Lynx

Respuestas:

44

Windows cmd.exeno es compatible ls, mountetc., a menos que los haya instalado usted mismo y los haya agregado al %PATH%(a través de Cygwin, MinGW, Subsistema para aplicaciones basadas en Unix (SUA) u otra cosa). Powershell lo hace. Y eso se debe a que Powershell los tiene como alias de los comandos estándar de Powershell, para que los usuarios de Unix puedan sentirse más cómodos. Consulte la lista de alias de compatibilidad en Powershell . Windows tiene rmdir, mkdiretc. , pero estos, por supuesto, no admiten la misma sintaxis de opciones que encontraría en Ubuntu.

En Ubuntu, estos no tienen nada que ver con Bash. Todos son comandos externos. Hay estándares para tales utilidades. POSIX es el más notable (consulte la lista de utilidades obligatorias de POSIX ), y Linux Standard Base (LSB) es otra que es importante para los sistemas Linux (que se basa principalmente en POSIX, pero tiene algunas adiciones ). Los que están en Ubuntu son principalmente proporcionados por GNU , y las utilidades de GNU a menudo tienen más características que la base requerida por POSIX.

POSIX también define el lenguaje de shell que mencionó (que es sustancialmente diferente del que está en cmd.exe). Se deriva de la sintaxis del shell Bourne . Bash (ahora ya sabe a qué se refiere Bourne nuevamente ), también de GNU, también agrega características en la parte superior, pero puede comportarse de manera compatible con POSIX cuando sea necesario. El lenguaje POSIX es el que esperarías obtener sh. bash, ksh, ash, dash, zshTodo el uso que el lenguaje, con mejoras. cshestá en un mundo (de pesadilla) propio, y tcshmejora csh.

Para entender un poco más, mire la historia de Unix y sistemas similares a Unix. Unix es anterior a Windows en más de una década, y estas utilidades aparecieron por primera vez en Unix.

Windows fue, en un momento, compatible con POSIX, ya que el gobierno de los EE. UU. Lo requería para los sistemas operativos utilizados por las agencias gubernamentales (fue entonces cuando agregaron los Servicios para Unix (SFU) , de donde provino el SUA mencionado en el primer párrafo). Pero ese requisito se eliminó y, posteriormente, se eliminó el SUA.

Relacionado:

(Tenga en cuenta la parte común de estas publicaciones, todas están en Unix y Linux , y en el historial de etiquetas , puede encontrar que navegar por esa etiqueta es muy informativo).

muru
fuente
3
AFAIK, rmdir(junto con mkdiry cd / chdir) son command.comcomponentes nativos desde MS-DOS 2.0 (antes no había jerarquía en el sistema de archivos DOS)
jlliagre
1
rdmdTambién fue un atajo .
jlliagre
1
Esto es lo que obtuve al leer su respuesta y hojear los enlaces provistos por otros: Estos comandos / utilidades aparecieron por primera vez en el pasado en varios sistemas diferentes. Con el tiempo, la mayoría de ellos se han integrado en Ubuntu y algunos en Windows. Sin embargo, Windows decidió hacer las cosas a su manera y crear su propia versión de estas utilidades. Con el tiempo, Windows decidió agregar alias a sus propios comandos de shell para que los usuarios de Linux puedan usar comandos que en la superficie parecen iguales que en sus sistemas pero debajo están traducidos a comandos de Windows
Shady Programmer
1
El lenguaje POSIX es el que esperarías obtener sh. bash, ksh, ash, dash, zshTodo el uso que el lenguaje, con mejoras. cshestá en un mundo (de pesadilla) propio, y tcshmejora csh. Windows obedeció, en algún momento, a POSIX, ya que el gobierno de los EE. UU. Lo requería para los sistemas operativos utilizados por las agencias gubernamentales (de ahí proviene el SUA). Pero ese requisito se eliminó y, posteriormente, se eliminó el SUA.
muru
1
@ShadyProgrammer otra publicación de U&L que encontrará interesante: unix.stackexchange.com/q/145522/70524
muru
0

Sencillo:

Linux es un sistema basado en el modelo UNIX, inventado por Dennis Ritchie y Ken Thompson.

Windows / DOS es una imitación barata de un sistema llamado CP / M que era popular en la década de 1970 en las computadoras viejas que conectabas a un televisor, este sistema a su vez fue una imitación barata de los primeros sistemas UNIX de finales de los 60 / principios de los 70 .

delt
fuente
Si bien hay algo de verdad en su respuesta, es demasiado simplificado para ser útil. (Y utilizamos monitores o terminales con CP / M, no televisores;)) Cuando intento descifrar algún comando oscuro de bash o sed, a veces pienso en aquellos días en que el sistema operativo apenas hacía nada por ti, pero fue fácil de hacer, y nunca me quedé sin memoria en una máquina de 64k.
Joe