Quelle est la différence entre la syntaxe standard et la syntaxe BSD?

21

J'ai vu de nombreuses commandes qui acceptent une "syntaxe BSD" ainsi que leur syntaxe standard. Prenez la pscommande pour un exemple:

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

Quelle est donc la différence entre ces deux itinéraires? En général, quand ils disent dans la syntaxe BSD quels éléments dois-je retenir? Cette syntaxe concerne-t-elle uniquement les commandes qui se trouvent également dans le BSD?

Mohammad Reza Rezwani
la source
Enquêter sur les différences historiques entre la façon dont les systèmes à travers le temps ont mis en œuvre des psoptargs, c'est se tenir au bord d'un abîme que l'homme n'était pas censé savoir.

Réponses:

18

Quelle est la différence entre MS Office et LibreOffice? Entre Firefox et Chrome?
Ils font à peu près la même chose, mais par des personnes différentes avec des objectifs légèrement différents.

Peut-être que la meilleure question est de savoir pourquoi les distributions BSD, Linux, OSX et Unix partagent autant de commandes? Cela se résume à la conformité POSIX . POSIX est essentiellement un ensemble de normes pour les systèmes d'exploitation de type Unix; il précise l'API de base, les commandes et comment ces commandes doivent fonctionner.

Dans le cas ps(d'une commande stipulée par POSIX), certains arguments sont requis. Il s'agit notamment de ceux BSD. Toutes les commandes dérivées de POSIX ont leurs propres pages de manuel mais elles nécessitent une installation distincte. Pour ps:

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

Alors pourquoi BSD n'utilise-t-il pas notre ps(ou vice versa)?

  • Notre psforfait ( procpsvoir: dpkg -S $(which ps)) est une fourchette d' un autre procpspaquet . Ces deux sont sous licence GPL. Ceci est incompatible avec la licence BSD et ne peut donc pas y être inclus. ( Nous pourrions inclure des BSD mais pas besoin).
  • psest assez spécifique au noyau. Je pense qu'ils sont techniquement incompatibles.

Et les autres applications?

La plupart des commandes pour la conformité POSIX proviennent du coreutilspackage d'Ubuntu . Ce paquet représente le GNU dans GNU / Linux et il est également sous licence GPL. BSD propose ses propres versions sous licence compatibles BSD qui adhèrent à POSIX mais ne sont pas nécessairement complètement identiques à leurs homologues GNU.

psn'est pas la seule commande POSIX qui n'est pas GNU . Il y en a des tas.

Alors que je dirige, pourquoi devraient-ils l'être? Ils sont créés par différentes personnes sur une très, très longue période. Voilà la réponse courte ici.

Oli
la source
20

Cela remonte à l'histoire quelque peu tortueuse d' Unix (Wikipedia a un schéma simplifié , qui est loin d'être complet). En particulier, pendant un certain temps, il y avait deux courants majeurs: le système V développé par AT&T, et BSD développé à l'Université de Californie, Berkeley. C'était vers le début des années 1980, bien avant Linux (1991), sans parler d'Ubuntu (2004). Souvent, ces deux courants ont pris des décisions différentes, et même aujourd'hui, vous trouverez la référence occasionnelle aux variantes ou fonctionnalités du «Système V» et du «BSD».

La pscommande remonte à l'une des premières versions d'Unix (elle n'était pas dans la version 1, la première page de manuel que je peux trouver en ligne est de la version 5 (p.94) en 1974). À l'époque, il psn'y avait que quelques options, par exemple ps a, afficherait tous les processus au lieu de seulement celui de l'utilisateur et ps xafficherait les processus sans terminal connecté. Vous remarquerez que les options ne commencent pas par -: à l'époque, la convention d'utilisation -des options n'était pas presque systématique comme c'est le cas aujourd'hui, c'était surtout une chose pour les commandes qui prenaient les noms de fichiers comme arguments normaux.

Au fil du temps, les différents volets d'Unix se sont étendus psavec de nombreuses autres options. La variante de BSD a choisi de conserver la syntaxe originale, sans leader -, et aet xexistent encore aujourd'hui. La variante System V a choisi d'adopter la convention syntaxique des -options for et a utilisé différentes lettres (par exemple ps -epour afficher tous les processus). Oracle (anciennement Sun) Solaris est un exemple de variante System V (Solaris fournit également un psexécutable distinct , dans un répertoire qui n'est pas par défaut PATH, pour les applications écrites avec BSD en tête).

Au moment où Linux est entré en scène, les personnes qui l'utilisaient avaient souvent une expérience préalable d'une variante d'Unix ou d'une autre. Linux a parfois fait les choses à la manière du System V, parfois à la manière de BSD, parfois à sa manière, soit en fonction de considérations techniques, soit en fonction de l'expérience et des goûts de quiconque avait implémenté la fonctionnalité. La pscommande de Linux a commencé avec des options de type BSD, par exemple ps aepour afficher tous les processus et inclure des variables d'environnement dans la liste. Au fil du temps (à la fin des années 1990, je ne me souviens pas exactement quand), les auteurs des psoptions supplémentaires de Linux pour les personnes habituées au système V. Donc, aujourd'hui ps axou ps -elistera tous les processus sous Linux, et il y a même une variable d'environnement ( PS_PERSONALITY) pour faireps se comporter davantage comme diverses anciennes variantes Unix d'Unix, pour le bien des anciens scripts et des personnes ayant des habitudes définies.

Les gens qui utilisaient plusieurs variantes Unix n'aimaient pas devoir modifier leurs programmes et leurs habitudes lors du passage d'une variante Unix à une autre. Il y a donc eu un effort pour normaliser un sous-ensemble de fonctionnalités. Cela a conduit au standard POSIX (dirigé par l' IEEE ), que Ubuntu suit dans l'ensemble. La première édition dont la portée incluait la pscommande est sortie en 1992; celui-ci n'est pas disponible en ligne, mais l' édition 1997 l' est. Pour la pscommande, comme dans de nombreux autres cas, POSIX a adopté la façon de procéder System V.

La pssyntaxe standard de la commande est compatible avec System V et POSIX. De plus, cette syntaxe peut être considérée comme standard car elle utilise -pour introduire des options par défaut. Certaines options n'existent que dans l'une des deux syntaxes; heureusement, ils peuvent être mélangés dans le même appel.

D'une manière générale, «BSD» vs «System V» n'a aucune implication technique. Il fait référence à l'histoire: «BSD» est le choix que BSD a fait dans les années 80 et à peu près, «System V» est le choix qu'AT & T et ses partenaires (en particulier Sun) ont fait. «POSIX» est tout choix fait par le comité de normalisation IEEE.

Gilles 'SO- arrête d'être méchant'
la source
2

La syntaxe `` standard '' à laquelle vous faites référence est en fait le système d'exploitation GNU qui a été développé dans les années 1980. Les utilitaires et la philosophie basés sur GNU ont été combinés avec le noyau Linux afin de développer la plupart des distributions Linux modernes (y compris Ubuntu).

Le système d'exploitation BSD a été développé à la fin des années 1970, indépendant de GNU, et plus tard, il s'est ramifié en versions modernes comme FreeBSD ou OpenBSD.

GNU et BSD sont tous deux inspirés d'Unix et ont des philosophies, une syntaxe, etc. légèrement différentes.

Alex B
la source
0

Les coreutils d'Ubuntu sont une collection d'applications gérées par GNU qui inclut une charge entière de choses (regardez apt-cache show coreutils). Les BSD ont leurs propres versions (GNU n'est pas compatible avec la licence BSD).

Hadi
la source