Qual è la differenza tra sintassi standard e sintassi BSD?

20

Ho visto molti comandi che accettano una "sintassi BSD" oltre alla loro sintassi standard. Prendi il comando ps per un esempio:

To see every process on the system using standard syntax:
      ps -e
      ps -ef
      ps -eF
      ps -ely

To see every process on the system using BSD syntax:
      ps ax
      ps axu

Quindi qual è la differenza tra queste due rotte? In generale quando dicono nella sintassi BSD quali elementi dovrei ricordare? È questa sintassi solo per quei comandi che sono anche nel BSD?

    
posta Mohammad Reza Rezwani 18.06.2014 - 13:18

4 risposte

18

Qual è la differenza tra MS Office e LibreOffice? Tra Firefox e Chrome?
Fanno più o meno la stessa cosa, ma sono di persone diverse con obiettivi leggermente diversi.

Forse la domanda migliore è perché le distribuzioni BSD, Linux, OSX e Unix condividono così molti comandi? Questo si riduce a POSIX conformità. POSIX è fondamentalmente un insieme di standard per sistemi operativi di tipo Unix; stabilisce l'API di base, i comandi e come dovrebbero funzionare quei comandi.

Nel caso di ps (un comando stipulato da POSIX) sono richiesti alcuni argomenti. Questi includono questi BSD. Tutti i comandi derivati da POSIX hanno le loro pagine man ma hanno bisogno di un'installazione separata. Per ps :

sudo apt-get install manpages-posix
man 1posix ps

Quindi perché BSD non usa il nostro ps (o viceversa)?

  • Il nostro pacchetto ps ( procps vedi: dpkg -S $(which ps) ) è un fork di altro pacchetto procps . Entrambi questi sono licenza GPL. Questo è incompatibile con la licenza di BSD quindi non può essere incluso lì. ( Noi potremmo includere i BSD ma non è necessario).
  • ps è abbastanza specifico del kernel. Suppongo che sono tecnicamente incompatibili.

E le altre applicazioni?

La maggior parte dei comandi per la conformità POSIX provengono dal pacchetto coreutils di Ubuntu. Questo pacchetto rappresenta GNU in GNU / Linux ed è anch'esso in licenza GPL. BSD spedisce le proprie versioni con licenza compatibile BSD che aderiscono a POSIX ma non sono necessariamente completamente uguali alle loro controparti GNU.

ps non è l'unico comando POSIX che non è GNU . Ce ne sono molti.

Come piombo, perché dovrebbero essere? Sono di persone diverse per un tempo molto, molto lungo. Questa è la risposta breve qui.

    
risposta data Oli 18.06.2014 - 13:35
19

Questo risale alla storia un po 'tortuosa di Unix (Wikipedia ha un diagramma semplificato , che è lontano da completato). In particolare, per un po ', c'erano due correnti principali: Sistema V sviluppato da AT & amp; T, e BSD sviluppato dall'Università di Berkeley. Questo era intorno ai primi anni '80, molto prima di Linux (1991), per non parlare di Ubuntu (2004). Spesso queste due correnti hanno preso decisioni diverse, e anche oggi troverai il riferimento occasionale alle varianti o alle caratteristiche di "System V" e "BSD".

Il comando ps risale a una delle prime versioni di Unix (non era nella versione 1, la prima pagina man che posso trovare online è versione 5 (p.94) nel 1974). Al momento, ps aveva solo alcune opzioni, ad esempio ps a visualizzerebbe tutti i processi anziché solo quelli dell'utente e ps x visualizzerebbe i processi senza terminale collegato. Noterai che le opzioni non iniziano con - : al momento, la convenzione di usare - per le opzioni non era quasi sistematica come lo è oggi, era principalmente una cosa per i comandi che prendevano il file nomi come argomenti normali.

Nel tempo, i vari filoni di Unix hanno esteso ps con molte più opzioni. La variante BSD ha scelto di mantenere la sintassi originale, senza - iniziale, e a e x esistono ancora oggi. La variante System V ha scelto di adottare la convenzione sintattica di - per le opzioni e ha utilizzato lettere diverse (ad esempio ps -e per visualizzare tutti i processi). Oracle (precedentemente Sun) Solaris è un esempio di una variante System V (Solaris invia anche un eseguibile ps separato, in una directory che non è predefinita PATH , per le applicazioni scritte con BSD in mente).

All'epoca in cui Linux entrò in scena, le persone che lo usavano avevano spesso esperienza di una variante Unix o di un'altra. Linux a volte ha fatto cose come il sistema V, a volte il modo BSD, a volte a modo suo, o sulla base di considerazioni tecniche o basate sull'esperienza e sui gusti di chi ha implementato la funzione. Il comando ps di Linux è iniziato con opzioni simili a BSD, ad es. ps ae per visualizzare tutti i processi e includere le variabili di ambiente nell'elenco. Nel corso del tempo (alla fine degli anni '90, non ricordo esattamente quando), gli autori di% co_de di Linux hanno aggiunto opzioni per le persone che erano abituate a System V. Quindi oggi ps o ps ax elencherà tutti i processi sotto Linux, e c'è anche una variabile d'ambiente ( ps -e ) per rendere PS_PERSONALITY più simile alle varie varianti Unix del vecchio Unix, per il gusto di vecchi script e persone con abitudini stabilite.

Le persone che usavano diverse varianti di Unix non amavano che avrebbero dovuto modificare i loro programmi e le loro abitudini quando passavano da una variante Unix a un'altra. Quindi c'è stato uno sforzo per standardizzare un sottoinsieme di funzionalità. Ciò ha portato allo standard POSIX (guidato da IEEE ), di cui segue Ubuntu nel suo insieme. La prima edizione il cui ambito includeva il comando ps uscì nel 1992; questo non è disponibile online, ma la edizione 1997 è. Per il comando ps , come in molti altri casi, POSIX ha adottato il modo System V di fare le cose.

La sintassi standard del comando ps è compatibile con System V e POSIX. Inoltre, la sintassi può essere considerata standard perché utilizza ps per introdurre le opzioni per impostazione predefinita. Alcune opzioni esistono solo in una delle due sintassi; fortunatamente possono essere mescolati nella stessa chiamata.

In generale, "BSD" vs "System V" non ha implicazioni tecniche. Si riferisce alla storia: "BSD" è qualsiasi altra scelta fatta da BSD negli anni '80 e nei dintorni, "System V" è qualsiasi scelta fatta da AT & amp; T e dai loro partner (specialmente da Sun). "POSIX" è qualsiasi scelta fatta dal comitato di standardizzazione IEEE.

    
risposta data Gilles 18.06.2014 - 17:18
2

La sintassi "standard" a cui ci si riferisce è in realtà il sistema operativo GNU sviluppato negli anni '80. Le utilità e la filosofia basate su GNU sono state combinate con il kernel di Linux per sviluppare le più moderne distribuzioni Linux (inclusa Ubuntu).

Il sistema operativo BSD è stato sviluppato alla fine degli anni '70, indipendentemente da GNU, e successivamente si è ramificato nelle versioni di oggi come FreeBSD o OpenBSD.

Sia GNU che BSD sono ispirati da Unix e hanno filosofie, sintassi, ecc. leggermente diverse

    
risposta data Alex B 18.06.2014 - 13:32
0

I coreutils di Ubuntu sono una raccolta di applicazioni gestite da GNU che includono un intero carico di roba (vedi apt-cache show coreutils). I BSD hanno le loro versioni (GNU non è compatibile con la licenza BSD).

    
risposta data Hadi 18.06.2014 - 17:18

Leggi altre domande sui tag