¿Cuál es la diferencia entre la sintaxis estándar y la sintaxis BSD?

21

He visto muchos comandos que aceptan una "sintaxis BSD", así como su sintaxis estándar. Tome el pscomando para un ejemplo:

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

Entonces, ¿cuál es la diferencia entre estas dos rutas? En general, cuando dicen en sintaxis BSD, ¿qué elementos debo recordar? ¿Es esta sintaxis solo para los comandos que están en el BSD también?

Mohammad Reza Rezwani
fuente
Indagar sobre las diferencias históricas entre cómo los sistemas a través del tiempo implementaron psoptargs es estar al borde de un abismo que el hombre no debía saber.

Respuestas:

18

¿Cuál es la diferencia entre MS Office y LibreOffice? Entre Firefox y Chrome?
Hacen aproximadamente lo mismo, pero son de diferentes personas con objetivos ligeramente diferentes.

Tal vez la mejor pregunta es ¿por qué BSD, Linux, Unix y OSX distribuciones comparten por lo que muchos de los comandos? Esto se reduce al cumplimiento de POSIX . POSIX es básicamente un conjunto de estándares para sistemas operativos tipo Unix; estipula la API principal, los comandos y cómo deberían funcionar esos comandos.

En el caso de ps(un comando estipulado por POSIX) se exigen ciertos argumentos. Estos incluyen estos BSD. Todos los comandos derivados de POSIX tienen sus propias páginas man, pero necesitan una instalación por separado. Para ps:

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

Entonces, ¿por qué BSD no usa nuestro ps(o viceversa)?

  • Nuestro pspaquete ( procpsver: dpkg -S $(which ps)) es un tenedor de otro procpspaquete . Ambos tienen licencia GPL. Esto es incompatible con la licencia de BSD, por lo que no se puede incluir allí. ( Podríamos incluir BSD pero no es necesario).
  • pses bastante específico del kernel. Creo que son técnicamente incompatibles.

¿Qué pasa con otras aplicaciones?

La mayoría de los comandos para el cumplimiento de POSIX provienen del coreutilspaquete de Ubuntu . Este paquete representa el GNU en GNU / Linux y también tiene licencia GPL. BSD envía sus propias versiones con licencia compatibles con BSD que se adhieren a POSIX pero no son necesariamente las mismas que sus homólogos de GNU.

psno es el único comando POSIX que no es GNU . Hay muchos de ellos.

Mientras lidero, ¿por qué deberían serlo? Son de diferentes personas durante mucho, mucho tiempo. Esa es la respuesta corta aquí.

Oli
fuente
20

Esto se remonta a la historia algo tortuosa de Unix (Wikipedia tiene un diagrama simplificado , que está lejos de ser completo). En particular, durante un tiempo, hubo dos corrientes principales: el Sistema V desarrollado por AT&T y el BSD desarrollado en la Universidad de California, Berkeley. Esto fue a principios de la década de 1980, mucho antes de Linux (1991), y mucho menos de Ubuntu (2004). A menudo, estas dos corrientes tomaron decisiones diferentes, e incluso hoy encontrarás referencias ocasionales a las variantes o características de "Sistema V" y "BSD".

El pscomando data de uno de los primeros lanzamientos de Unix (no estaba en la versión 1, la primera página de manual que puedo encontrar en línea es de la versión 5 (p.94) en 1974). En ese momento, pssolo tenía algunas opciones, por ejemplo ps a, mostraría todos los procesos en lugar de solo el usuario, y ps xmostraría procesos sin terminal conectado. Notarás que las opciones no comienzan con -: en ese momento, la convención de usar -para las opciones no era casi sistemática como lo es hoy, era principalmente una cosa para los comandos que tomaban los nombres de los archivos como argumentos normales.

Con el tiempo, los diversos hilos de Unix se extendieron pscon muchas más opciones. La variante BSD eligió conservar la sintaxis original, sin encabezado -, ay xaún existe hoy. La variante del Sistema V eligió adoptar la convención sintáctica de -for options, y usó letras diferentes (por ejemplo, ps -epara mostrar todos los procesos). Oracle (anteriormente Sun) Solaris es un ejemplo de una variante del Sistema V (Solaris también envía un psejecutable separado , en un directorio que no está en el predeterminado PATH, para aplicaciones escritas con BSD en mente).

En el momento en que Linux entró en escena, las personas que lo usaban a menudo tenían experiencia previa de una variante de Unix u otra. Linux a veces hizo las cosas a la manera del Sistema V, a veces a la manera BSD, a veces a su manera, ya sea por consideraciones técnicas o por la experiencia y los gustos de quien implementó la función. El pscomando de Linux comenzó con opciones similares a BSD, por ejemplo, ps aepara mostrar todos los procesos e incluir variables de entorno en la lista. Con el tiempo (a fines de la década de 1990, no recuerdo exactamente cuándo), los autores de las psopciones agregadas de Linux para las personas que estaban acostumbradas al Sistema V. Por lo tanto, hoy en día ps axo ps -eenumerarán todos los procesos en Linux, e incluso hay una variable de entorno ( PS_PERSONALITY) hacerps comportarse más como varias variantes de Unix antiguas de Unix, en aras de scripts antiguos y personas con hábitos establecidos.

A las personas que usaban varias variantes de Unix no les gustaba que tuvieran que modificar sus programas y sus hábitos al cambiar de una variante de Unix a otra. Así que hubo un esfuerzo por estandarizar un subconjunto de funcionalidades. Esto llevó al estándar POSIX (liderado por el IEEE ), que Ubuntu sigue en general. La primera edición cuyo alcance incluía el pscomando salió en 1992; este no está disponible en línea, pero la edición de 1997 sí . Para el pscomando, como en muchos otros casos, POSIX adoptó la forma del Sistema V de hacer las cosas.

La pssintaxis estándar del comando es compatible con System V y POSIX. Además, se puede decir que esa sintaxis es estándar porque se usa -para introducir opciones por defecto. Algunas opciones existen solo en una de las dos sintaxis; Afortunadamente se pueden mezclar en la misma llamada.

En términos generales, "BSD" vs "Sistema V" no tiene ninguna implicación técnica. Se refiere a la historia: "BSD" es la elección que BSD hizo en la década de 1980 y, por lo tanto, "System V" es la elección que AT&T y sus socios (especialmente Sun) tomaron. "POSIX" es la elección que tomó el comité de estandarización de IEEE.

Gilles 'SO- deja de ser malvado'
fuente
2

La sintaxis 'estándar' a la que te refieres es en realidad el sistema operativo GNU que se desarrolló en la década de 1980. Las utilidades y la filosofía basadas en GNU se combinaron con el kernel de Linux para desarrollar las distribuciones de Linux más modernas (incluido Ubuntu).

El sistema operativo BSD se desarrolló a fines de la década de 1970, independiente de GNU, y luego se ramificó en versiones modernas como FreeBSD u OpenBSD.

Tanto GNU como BSD están inspirados en Unix y tienen filosofías, sintaxis, etc. ligeramente diferentes.

Alex B
fuente
0

Coreutils de Ubuntu es una colección de aplicaciones mantenidas por GNU que incluye una gran cantidad de cosas (mira apt-cache show coreutils). Los BSD tienen sus propias versiones (GNU no es compatible con la licencia BSD).

Hadi
fuente