Qual é a diferença entre sintaxe padrão e sintaxe BSD?

19

Eu tenho visto muitos comandos que aceitam uma "sintaxe BSD", assim como sua sintaxe padrão. Pegue o comando ps para um exemplo:

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

Então, qual é a diferença entre essas duas rotas? Em geral, quando eles dizem na sintaxe do BSD quais elementos devo lembrar? Esta sintaxe é apenas para aqueles comandos que eles estão no BSD também?

    
por Mohammad Reza Rezwani 18.06.2014 / 13:18

4 respostas

17

Qual é a diferença entre o MS Office e o LibreOffice? Entre o Firefox e o Chrome?
Eles fazem aproximadamente a mesma coisa, mas são de pessoas diferentes com objetivos ligeiramente diferentes.

Talvez a melhor pergunta seja por que as distribuições BSD, Linux, OSX e Unix compartilham tantos muitos comandos? Isso se resume a POSIX conformidade. O POSIX é basicamente um conjunto de padrões para sistemas operacionais do tipo Unix; ele estipula a API principal, os comandos e como esses comandos devem funcionar.

No caso de ps (um comando estipulado de POSIX), certos argumentos são exigidos. Estes incluem esses BSD. Todos os comandos derivados do POSIX possuem suas próprias páginas man, mas precisam de uma instalação separada. Para ps :

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

Então, por que o BSD não está usando nosso ps (ou vice-versa)?

  • Nosso pacote ps ( procps see: dpkg -S $(which ps) ) é um fork de another procps package . Ambos são licenciados em GPL. Isso é incompatível com a licença do BSD, portanto não pode ser incluído lá. ( Nós poderíamos incluir o BSD, mas não precisamos)
  • ps é bastante específico para o kernel. Eu acho que eles são tecnicamente incompatíveis.

E quanto a outros aplicativos?

A maioria dos comandos para conformidade POSIX vem do pacote coreutils do Ubuntu. Este pacote representa o GNU no GNU / Linux e também é licenciado por GPL. O BSD envia suas próprias versões licenciadas compatíveis com o BSD que aderem ao POSIX, mas não necessariamente são completamente iguais às suas contrapartes GNU.

ps não é o único comando POSIX que não é GNU . Existem muitos deles.

Como eu lidero com, por que eles deveriam ser? Eles são de pessoas diferentes ao longo de muito, muito tempo. Essa é a resposta curta aqui.

    
por Oli 18.06.2014 / 13:35
17

Isso remonta à história um tanto tortuosa de Unix (a Wikipédia tem um diagrama simplificado , que é agora from complete). Em particular, por um tempo, havia duas correntes principais: System V desenvolvido pela AT & T, e BSD desenvolvido pela Universidade de Berkeley. Isso foi em torno do início dos anos 80, muito antes do Linux (1991), e muito menos do Ubuntu (2004). Frequentemente, essas duas correntes tomam decisões diferentes e, até hoje, você encontrará referências ocasionais a variantes ou recursos “System V” e “BSD”.

O comando ps data de um dos primeiros lançamentos do Unix (não estava na versão 1, a primeira página do manual que posso encontrar on-line é de versão 5 (p.94) em 1974). Na época, ps tinha apenas algumas opções, por exemplo, ps a exibia todos os processos em vez de apenas o usuário e ps x exibia processos sem nenhum terminal conectado. Você notará que as opções não começam com - : no momento, a convenção de usar - para opções não era tão sistemática quanto é hoje, era principalmente uma coisa para comandos que captavam arquivos nomes como argumentos normais.

Com o tempo, as várias vertentes do Unix estenderam ps com muito mais opções. A variante BSD optou por manter a sintaxe original, sem liderança - , e a e x ainda existem hoje. A variante do System V escolheu adotar a convenção sintática de - para opções e usou letras diferentes (por exemplo, ps -e para exibir todos os processos). Oracle (anteriormente Sun) Solaris é um exemplo de uma variante do System V (O Solaris também envia um executável ps separado, em um diretório que não está no padrão PATH , para aplicativos escritos com o BSD em mente).

No momento em que o Linux entrou em cena, as pessoas que o usavam normalmente tinham experiências anteriores de uma ou outra variante do Unix. O Linux às vezes fazia as coisas do jeito System V, às vezes do jeito BSD, às vezes do seu próprio jeito, seja baseado em considerações técnicas ou baseado na experiência e gostos de quem quer que implementasse o recurso. O comando ps do Linux começou com opções do tipo BSD, por exemplo ps ae para exibir todos os processos e incluir variáveis ​​de ambiente na listagem. Com o tempo (no final dos anos 90, não me lembro exatamente quando), os autores das opções ps do Linux adicionaram opções para pessoas que estavam acostumadas com o System V. Então, ps ax ou ps -e listará todos os processos sob Linux, e há até mesmo uma variável de ambiente ( PS_PERSONALITY ) para fazer o ps se comportar mais como várias variantes Unix antigas do Unix, por causa de scripts antigos e pessoas com hábitos definidos.

As pessoas que usaram várias variantes do Unix não gostaram que tivessem que modificar seus programas e seus hábitos quando mudavam de uma variante do Unix para outra. Então, houve um esforço para padronizar um subconjunto de funcionalidades. Isso levou ao padrão POSIX (liderado pelo IEEE ), que Ubuntu em geral segue. A primeira edição cujo escopo incluía o comando ps foi lançado em 1992; este não está disponível online, mas a edição de 1997 é. Para o comando ps , como em muitos outros casos, o POSIX adotou a maneira do System V de fazer as coisas.

A sintaxe padrão do comando ps é compatível com o System V e o POSIX. Além disso, essa sintaxe pode ser considerada padrão porque usa - para introduzir opções por padrão. Algumas opções existem apenas em uma das duas sintaxes; felizmente eles podem ser misturados na mesma chamada.

De um modo geral, "BSD" vs "System V" não tem nenhuma implicação técnica. Refere-se à história: “BSD” é qualquer escolha BSD feita nos anos 80 e por aí, “System V” é qualquer escolha que a ATT e seus parceiros (especialmente a Sun) fizeram. "POSIX" é qualquer escolha que o comitê de padronização do IEEE tenha feito.

    
por Gilles 18.06.2014 / 17:18
2

A sintaxe 'padrão' que você está se referindo é, na verdade, o sistema operacional GNU que foi desenvolvido nos anos 80. Os utilitários e a filosofia baseados no GNU foram combinados com o kernel do Linux para desenvolver a maioria das distribuições Linux atuais (incluindo o Ubuntu).

O sistema operacional BSD foi desenvolvido no final dos anos 70, independente do GNU, e depois ramificado em versões modernas como FreeBSD ou OpenBSD.

O GNU e o BSD são inspirados pelo Unix e têm filosofias, sintaxe, etc., ligeiramente diferentes.

    
por Alex B 18.06.2014 / 13:32
0

O coreutils do Ubuntu é uma coleção de aplicativos mantidos pelo GNU que inclui uma grande quantidade de coisas (veja apt-cache show coreutils). Os BSDs têm suas próprias versões (o GNU não é compatível com a licença BSD).

    
por Hadi 18.06.2014 / 17:18