Perché Windows e Ubuntu hanno comandi shell simili?


14

Ubuntu ha un bash (Bourne Again SHell) mentre Windows ha la sua shell proprietaria. Secondo la mia ricerca non esiste un nome per il linguaggio utilizzato per gli script di shell in Windows / Ubuntu. Si chiama semplicemente shell scripting.

Perché le shell di Windows e Ubuntu comprendono gli stessi comandi come: ls , mkdir, rmdir, mounte così via?

Esiste una sorta di lingua franca per gli script di shell? In tal caso, ti prego di darmi maggiori dettagli.


9
Vedi en.wikipedia.org/wiki/List_of_Unix_commands - cerca quando questi comandi sono comparsi per la prima volta e controlla quando sono comparsi Windows e GNU. Questi comandi non fanno parte di bash: sono utility esterne, quindi quale shell viene utilizzata è irrilevante.
Muru,

10
E sono abbastanza sicuro che lssia supportato da Powershell, no cmd.exe. E questo perché i creatori di Powershell si sono adoperati per aggiungere alias per i comuni comandi Unix in modo che gli utenti di Unix si sentissero più a proprio agio. technet.microsoft.com/en-us/library/dd347739.aspx
muru

7
L'articolo di Wikipedia su DOS, potrebbe far luce su questo. Citazione: "DOS invece girava su processori Intel 8086 a 16 bit. A partire da MS-DOS 1.28 e PC DOS 2.0 il sistema operativo incorporava varie funzionalità ispirate a Xenix, la variante Microsoft di Unix." Quindi Unix è, fino a un certo punto, un antenato di MS-DOS. en.wikipedia.org/wiki/DOS
theodorn

4
@muru: In effetti, entrambi i comandi Unix e DOS sono in realtà solo alias dei comandi reali di PowerShell, che sono denominati secondo una Action-Objectstruttura standardizzata , composta da un insieme di azioni e oggetti anche standardizzati. Ad esempio, entrambi lse dirsono alias per Get-ChildItem(che ha anche l'alias gci) mkdire mdsono in realtà New-Item(che possono effettivamente creare molto più di semplici directory, grazie all'approccio basato su oggetti di PowerShell) e così via.
Jörg W Mittag,

2
Guarda anche CPM, VMS, JCL.
Zan Lynx,

Risposte:


44

Windows cmd.exenon supporta ls, mountecc., A meno che non siano stati installati da soli e aggiunti al %PATH%(tramite Cygwin, MinGW, sottosistema per applicazioni basate su Unix (SUA) o qualcos'altro). Powershell lo fa. E questo perché Powershell ha questi come alias dei comandi Powershell standard, in modo che gli utenti Unix possano essere più a loro agio. Vedi l'elenco degli alias di compatibilità in Powershell . Windows ha rmdir, mkdirecc. , Ma questi, ovviamente, non supportano la stessa sintassi delle opzioni che potresti trovare su Ubuntu.

In Ubuntu, questi non hanno nulla a che fare con Bash. Sono tutti comandi esterni. Esistono standard per tali utilità. POSIX è il più notevole (vedi l'elenco delle utility obbligatorie POSIX ), e Linux Standard Base (LSB) è un altro aspetto importante per i sistemi Linux (che si basa principalmente su POSIX, ma ha alcune aggiunte ). Quelli su Ubuntu sono per lo più forniti da GNU e le utility GNU hanno spesso più funzionalità rispetto alla base richiesta da POSIX.

POSIX definisce anche il linguaggio di shell che hai citato (che è sostanzialmente diverso da quello in cmd.exe). Deriva dalla sintassi della shell Bourne . Bash (ora sai a cosa si riferisce di nuovo Bourne ), anche da GNU, aggiunge anche funzionalità in cima, ma può comportarsi in modo conforme a POSIX quando richiesto. Il linguaggio POSIX è quello che ti aspetteresti di ottenere sh. bash, ksh, ash, dash, zshTutto l'uso che il linguaggio, con miglioramenti. cshè in un mondo (da incubo) a sé stante e tcshmigliora csh.

Per capire un po 'di più, guarda nella storia di Unix e Unix-like . Unix precede Windows di oltre un decennio e queste utility sono apparse per la prima volta in Unix.

Windows era, una volta, conforme a POSIX, dal momento che il governo degli Stati Uniti lo richiedeva per i sistemi operativi utilizzati dalle agenzie governative (quando hanno aggiunto i Servizi per Unix (SFU) , da cui proveniva la SUA menzionata nel primo paragrafo). Ma tale requisito è stato eliminato e, successivamente, la SUA è stata abbandonata.

Relazionato:

(Nota la parte comune di questi post: sono tutti su Unix e Linux e la cronologia taggata - potresti trovare molto istruttiva la navigazione attraverso quel tag.)


3
AFAIK, rmdir(insieme a mkdire cd / chdir) sono command.combuiltin nativi da MS-DOS 2.0 (non esisteva prima una gerarchia nel file system DOS)
jlliagre

1
rdera anche una scorciatoia md.
jlliagre,

1
Questo è quello che ho ottenuto leggendo la tua risposta e sfogliando i collegamenti forniti da altri: questi comandi / utilità sono apparsi per la prima volta in passato su vari sistemi diversi. Nel corso del tempo, la maggior parte di essi è stata integrata in Ubuntu e alcuni in Windows. Windows tuttavia ha deciso di fare le cose a modo suo e creare la propria versione di queste utility. Nel corso del tempo Windows ha deciso di aggiungere alias ai propri comandi di shell in modo che gli utenti di Linux possano usare comandi che in superficie sembrano gli stessi dei loro sistemi ma sotto sono tradotti in comandi di Windows
Shady Programmer,

1
Il linguaggio POSIX è quello che ti aspetteresti di ottenere sh. bash, ksh, ash, dash, zshTutto l'uso che il linguaggio, con miglioramenti. cshè in un mondo (da incubo) a sé stante e tcshmigliora csh. Windows, una volta, obbediva a POSIX, poiché il governo degli Stati Uniti lo richiedeva per i sistemi operativi utilizzati dalle agenzie governative (ecco da dove proveniva la SUA). Ma tale requisito è stato eliminato e, successivamente, la SUA è stata abbandonata.
muru,

1
@ShadyProgrammer un altro post U&L che troverai interessante: unix.stackexchange.com/q/145522/70524
muru

0

Semplice:

Linux è un sistema basato sul modello UNIX, inventato da Dennis Ritchie e Ken Thompson.

Windows / DOS è un knockoff economico di un sistema chiamato CP / M che era popolare negli anni '70 su quei vecchi computer che hai collegato alla TV, questo sistema a sua volta era un knockoff economico dei primi sistemi UNIX dalla fine degli anni '60 / primi anni '70 .


Mentre c'è della verità nella tua risposta, è troppo semplificata per essere utile. (E abbiamo usato monitor o terminali con CP / M - non TV;)) Quando sto cercando di capire qualche oscuro comando bash o sed, a volte ripenso a quei giorni in cui il sistema operativo non faceva quasi nulla per te, ma era facile da fare - e non ho mai esaurito la memoria su una macchina a 64k.
Joe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.