Por que o Windows e o Ubuntu têm comandos de shell semelhantes?

14

O Ubuntu possui um bash (Bourne Again SHell), enquanto o Windows possui seu shell proprietário. De acordo com minha pesquisa, não há nome para a linguagem usada para scripts de shell no Windows / Ubuntu. É apenas chamado de script de shell.

Por que conchas do Windows e Ubuntu compreender os mesmos comandos, tais como: ls, mkdir, rmdir, mounte assim por diante?

Existe algum tipo de lingua franca para scripts de shell? Se assim for, por favor me dê mais detalhes.

Shady Programmer
fonte
9
Veja en.wikipedia.org/wiki/List_of_Unix_commands - procure quando esses comandos apareceram pela primeira vez e verifique quando o Windows e o GNU apareceram pela primeira vez. Esses comandos não fazem parte do bash - são utilitários externos, portanto, qual shell é usado é irrelevante.
muru
10
E tenho certeza que lsé suportado pelo Powershell, não cmd.exe. E isso porque os criadores do Powershell se esforçaram para adicionar aliases aos comandos comuns do Unix, para que os usuários do Unix ficassem mais confortáveis. technet.microsoft.com/en-us/library/dd347739.aspx
muru
7
O artigo da Wikipedia sobre o DOS pode lançar alguma luz sobre isso. Citação: "O DOS foi executado nos processadores Intel 8086 de 16 bits. A partir do MS-DOS 1.28 e do PC DOS 2.0, o sistema operacional incorporou vários recursos inspirados no Xenix, a variante do Unix da Microsoft". Portanto, o Unix é, até certo ponto, um antepassado do MS-DOS. pt.wikipedia.org/wiki/DOS
theodorn 24/02
4
@muru: Na verdade, tanto o Unix e os comandos do DOS são realmente apenas aliases para os verdadeiros comandos PowerShell, que são nomeados de acordo com um padronizado Action-Objectestrutura, composta de um conjunto de ações e objetos também padronizados. Por exemplo, ambos lse dirsão aliases para Get-ChildItem(que também possuem o alias gci) mkdire mdsão realmente New-Item(que podem realmente criar muito mais do que apenas diretórios, devido à abordagem baseada em objetos do PowerShell) e assim por diante.
Jörg W Mittag 25/02
2
Veja também CPM, VMS, JCL.
Zan Lynx

Respostas:

44

O Windows cmd.exenão suporta ls, mountetc., a menos que você os tenha instalado e os tenha adicionado ao %PATH%(via Cygwin, MinGW, Subsistema para aplicativos baseados em Unix (SUA) ou algo mais). Powershell faz. E isso ocorre porque o Powershell os tem como alias dos comandos padrão do Powershell, para que os usuários do Unix possam se sentir mais confortáveis. Veja a lista de aliases de compatibilidade no Powershell . O Windows tem rmdir, mkdiretc. , mas esses, é claro, não suportam a mesma sintaxe de opção que você encontraria no Ubuntu.

No Ubuntu, isso não tem nada a ver com o Bash. Todos são comandos externos. Existem padrões para esses utilitários. O POSIX é o mais notável (veja a lista de utilitários obrigatórios pelo POSIX ) e o Linux Standard Base (LSB) é outro importante para os sistemas Linux (que é principalmente baseado no POSIX, mas tem algumas adições ). Os do Ubuntu são fornecidos principalmente pelo GNU , e os utilitários do GNU geralmente têm mais recursos do que a base exigida pelo POSIX.

O POSIX também define a linguagem do shell que você mencionou (que é substancialmente diferente da linguagemcmd.exe ). É derivado da sintaxe do shell Bourne . O Bash (agora você sabe a que o Bourne se refere novamente ), também do GNU, também adiciona recursos no topo, mas pode se comportar de maneira compatível com POSIX, quando necessário. A linguagem POSIX é o que você esperaria obter sh. bash, ksh, ash, dash, zshTodo o uso que a linguagem, com melhorias. cshestá em um mundo próprio (pesadelo) e tcshmelhora csh.

Para entender um pouco mais, veja a história dos sistemas Unix e similares . O Unix pré-data o Windows em mais de uma década, e esses utilitários apareceram pela primeira vez no Unix.

O Windows era, ao mesmo tempo, compatível com POSIX, já que o governo dos EUA exigia isso para sistemas operacionais usados ​​por agências governamentais (foi quando eles adicionaram os Serviços para Unix (SFU) , dos quais veio o SUA mencionado no primeiro parágrafo). Mas esse requisito foi descartado e, posteriormente, o SUA foi descartado.

Palavras-chave:

(Observe a parte comum desses posts - todos eles estão no Unix e Linux e histórico de tags - você pode achar que navegar nessa tag é muito informativo.)

muru
fonte
3
AFAIK, rmdir(juntamente com mkdire cd / chdir) são nativas command.combuiltins uma vez que o MS-DOS 2.0 (não houve hierarquia no sistema de ficheiros DOS antes)
jlliagre
1
rdtambém foi um atalho md.
Jlliagre
1
Isto é o que eu tenho ao ler sua resposta e percorrer os links fornecidos por outros: Esses comandos / utilitários apareceram pela primeira vez no passado em vários sistemas diferentes. Com o tempo, a maioria deles foi integrada ao Ubuntu e alguns ao Windows. O Windows, no entanto, decidiu fazer as coisas do seu jeito e criar sua própria versão desses utilitários. Ao longo do tempo o Windows decidiu adicionar aliases para seus próprios comandos shell para que os usuários do Linux podem usar comandos que na superfície parece o mesmo que em seus sistemas, mas por baixo eles estão traduzidos para comandos do Windows
Shady programador
1
A linguagem POSIX é o que você esperaria obter sh. bash, ksh, ash, dash, zshTodo o uso que a linguagem, com melhorias. cshestá em um mundo próprio (pesadelo) e tcshmelhora csh. O Windows obedeceu ao mesmo tempo ao POSIX, já que o governo dos EUA exigia isso para sistemas operacionais usados ​​por agências governamentais (é daí que o SUA veio). Mas esse requisito foi descartado e, posteriormente, o SUA foi descartado.
muru
1
@ShadyProgrammer outro L & L post você vai achar interessante: unix.stackexchange.com/q/145522/70524
Muru
0

Simples:

O Linux é um sistema baseado no modelo UNIX, como inventado por Dennis Ritchie e Ken Thompson.

O Windows / DOS é uma imitação barata de um sistema chamado CP / M, que era popular nos anos 70 nos computadores antigos que você conectava à TV. Esse sistema, por sua vez, era uma imitação barata dos primeiros sistemas UNIX do final dos anos 60 / início dos anos 70 .

delt
fonte
Embora exista alguma verdade em sua resposta, é muito simplista demais para ser útil. (E usamos monitores ou terminais com CP / M - não TVs;)) Quando estou tentando descobrir algum comando bash ou sed obscuro, às vezes penso nos dias em que o SO quase não fazia nada por você, mas foi fácil de fazer - e nunca fiquei sem memória em uma máquina de 64k.
315 Joe Joe