Qual è la differenza tra la sintassi standard e la sintassi BSD?


21

Ho visto molti comandi che accettano una "sintassi BSD" e la loro sintassi standard. Prendi il pscomando 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 questi due percorsi? In generale quando dicono nella sintassi BSD quali elementi dovrei ricordare? Questa sintassi è solo per quei comandi che sono anche nel BSD?


psIndagare sulle differenze storiche tra come i sistemi implementati nel tempo optargs significa stare ai margini di un abisso che l'uomo non era destinato a conoscere.

Risposte:


18

Qual è la differenza tra MS Office e LibreOffice? Tra Firefox e Chrome?
Fanno all'incirca 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ì tanti comandi? Questo si riduce alla conformità POSIX . POSIX è fondamentalmente un insieme di standard per sistemi operativi simili a Unix; stabilisce l'API principale, i comandi e il modo in cui tali comandi dovrebbero funzionare.

Nel caso di ps(un comando stabilito 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 sta usando il nostro ps(o viceversa)?

  • Il nostro pspacchetto ( procpsvedi: dpkg -S $(which ps)) è una forcella di un altro procpspacchetto . Entrambi questi sono autorizzati GPL. Questo è incompatibile con la licenza di BSD, quindi non può essere incluso lì. ( Potremmo includere BSD ma non è necessario).
  • psè abbastanza specifico per il kernel. Credo che siano tecnicamente incompatibili.

E le altre applicazioni?

La maggior parte dei comandi per la conformità POSIX proviene dal coreutilspacchetto Ubuntu . Questo pacchetto rappresenta la GNU in GNU / Linux ed è anch'esso con licenza GPL. BSD fornisce le proprie versioni con licenza compatibile BSD che aderiscono a POSIX ma non sono necessariamente le stesse delle loro controparti GNU.

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

Mentre conduco, perché dovrebbero essere? Sono di persone diverse per molto, molto tempo. Questa è la risposta breve qui.


20

Questo risale alla storia un po 'tortuosa di Unix (Wikipedia ha un diagramma semplificato , che è lontano da completo). In particolare, per un po ', c'erano due correnti principali: System V sviluppato da AT&T e BSD sviluppato presso l'Università della California, Berkeley. Ciò avvenne nei primi anni '80, molto prima di Linux (1991), e tanto meno Ubuntu (2004). Spesso queste due correnti hanno preso decisioni diverse e ancora oggi troverete il riferimento occasionale alle varianti o caratteristiche di “Sistema V” e “BSD”.

Il pscomando risale a una delle prime versioni di Unix (non era nella versione 1, la prima pagina man che posso trovare online è della versione 5 (p.94) nel 1974). All'epoca, psc'erano solo alcune opzioni, ad esempio ps avisualizzavano tutti i processi anziché solo l'utente e ps xvisualizzava i processi senza alcun 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 i nomi dei file come normali argomenti.

Nel tempo, i vari filoni di Unix si sono estesi pscon molte più opzioni. La variante BSD ha scelto di mantenere la sintassi originale, senza leader -, e aed xesistono ancora oggi. La variante di System V ha scelto di adottare la convenzione sintattica di -for options e ha utilizzato lettere diverse (ad esempio ps -eper visualizzare tutti i processi). Oracle (precedentemente Sun) Solaris è un esempio di una variante di System V (Solaris fornisce anche un pseseguibile separato , in una directory che non è quella predefinita PATH, per le applicazioni scritte pensando a BSD).

All'epoca in cui Linux è apparso sulla scena, le persone che lo usavano spesso avevano precedenti esperienze su una variante Unix o su un'altra. Linux a volte faceva le cose alla maniera di System V, a volte alla maniera di BSD, a volte a modo suo, sulla base di considerazioni tecniche o sulla base dell'esperienza e dei gusti di chiunque avesse implementato la funzionalità. Il pscomando di Linux è iniziato con opzioni simili a BSD, ad esempio ps aeper visualizzare tutti i processi e includere le variabili di ambiente nell'elenco. Nel tempo (alla fine degli anni '90, non ricordo esattamente quando), gli autori delle psopzioni aggiunte di Linux per le persone che erano abituate al Sistema V. Quindi oggi ps axo ps -eelencherò tutti i processi sotto Linux, e c'è anche una variabile d'ambiente ( PS_PERSONALITY) da fareps si comportano più come le varie vecchie varianti Unix di Unix, per il gusto di vecchi script e persone con abitudini prestabilite.

Alle persone che hanno utilizzato diverse varianti di Unix non piaceva che dovessero 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 dall'IEEE ), seguito da Ubuntu nel complesso. La prima edizione il cui ambito includeva il pscomando uscì nel 1992; questo non è disponibile online, ma l' edizione del 1997 lo è. Per il pscomando, come in molti altri casi, POSIX ha adottato il modo System V di fare le cose.

La pssintassi standard del comando è compatibile con System V e POSIX. Inoltre, tale sintassi può essere definita standard perché utilizza -per impostazione predefinita le opzioni. 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" è la scelta fatta da BSD negli anni '80 e oltre, "System V" è la scelta fatta da AT&T e dai loro partner (specialmente Sun). "POSIX" è la scelta fatta dal comitato di standardizzazione IEEE.


2

La sintassi "standard" a cui ti riferisci è in realtà il sistema operativo GNU sviluppato negli anni '80. Le utility e la filosofia basate su GNU sono state combinate con il kernel Linux per sviluppare la maggior parte delle distribuzioni Linux moderne (incluso Ubuntu).

Il sistema operativo BSD fu sviluppato alla fine degli anni '70, indipendentemente da GNU, e in seguito si ramificò in versioni moderne come FreeBSD o OpenBSD.

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


0

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

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.