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

19

He visto muchos comandos que aceptan una "sintaxis BSD", así como su sintaxis estándar. Tome el comando ps 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 aquellos comandos que están en el BSD también?

    
pregunta Mohammad Reza Rezwani 18.06.2014 - 11:18

4 respuestas

17

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

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

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

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

¿Por qué BSD no usa nuestro ps (o viceversa)?

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

¿Qué ocurre con otras aplicaciones?

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

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

A medida que los llevo, ¿por qué deberían estarlo? Son de diferentes personas durante mucho, mucho tiempo. Esa es la breve respuesta aquí.

    
respondido por el Oli 18.06.2014 - 11:35
18

Esto se remonta a la historia algo tortuosa de Unix (Wikipedia tiene un diagrama simplificado , que es far desde completo). En particular, durante un tiempo, hubo dos corrientes principales: System V desarrollado por AT & amp; T, y BSD desarrollado por la Universidad de 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 en día encontrará referencias ocasionales a las variantes o características del "Sistema V" y "BSD".

El comando ps data de una de las primeras versiones de Unix (no estaba en la versión 1, la página man más antigua que puedo encontrar en línea es de versión 5 (p.94) en 1974). En ese momento, ps solo tenía algunas opciones, por ejemplo ps a mostraría todos los procesos en lugar de solo los del usuario, y ps x mostrarí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 en día, era más bien algo para los comandos que tomaban el archivo nombres como argumentos normales.

Con el tiempo, los diversos filamentos de Unix extendieron ps con muchas más opciones. La variante BSD eligió conservar la sintaxis original, sin - inicial, y a y x todavía existen hoy. La variante del sistema V eligió adoptar la convención sintáctica de - para las opciones y utilizó letras diferentes (por ejemplo, ps -e para mostrar todos los procesos). Oracle (anteriormente Sun) Solaris es un ejemplo de una variante del Sistema V (Solaris también envía un ejecutable ps por separado, en un directorio que no está en el PATH predeterminado, para las 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 con una variante de Unix u otra. Linux a veces hacía las cosas a la manera del Sistema V, a veces de manera BSD, a veces de su propia manera, ya sea en función de consideraciones técnicas o en función de la experiencia y los gustos de quien implementó la característica. El comando ps de Linux comenzó con opciones similares a BSD, p. ps ae para 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 opciones agregadas ps de Linux para las personas que estaban acostumbradas al Sistema V. Entonces, o bien ps ax o ps -e enumerarán todos los procesos bajo Linux, e incluso hay una variable de entorno ( PS_PERSONALITY ) para hacer que ps se comporte más como varias variantes Unix antiguas de Unix, por el bien de los viejos scripts y las personas con hábitos establecidos.

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

La sintaxis estándar del comando ps es una que es compatible tanto con System V como con POSIX. Además, se puede decir que la sintaxis es estándar porque 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" frente a "Sistema V" no tiene ninguna implicación técnica. Se refiere a la historia: "BSD" es cualquier elección que hizo BSD en la década de 1980, "System V" es la elección que ATT y sus socios (especialmente Sun) hicieron. "POSIX" es cualquier opción que el comité de estandarización IEEE haya hecho.

    
respondido por el Gilles 18.06.2014 - 15:18
2

La sintaxis "estándar" a la que se refiere 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 la mayoría de las distribuciones Linux actuales (incluido Ubuntu).

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

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

    
respondido por el Alex B 18.06.2014 - 11:32
0

Ubuntu coreutils 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).

    
respondido por el Hadi 18.06.2014 - 15:18

Lea otras preguntas en las etiquetas