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


21

Eu já vi muitos comandos que aceitam uma "sintaxe BSD", bem como sua sintaxe padrão. Tome o pscomando 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 dizem na sintaxe do BSD, quais elementos devo lembrar? Essa sintaxe é apenas para os comandos que eles estão no BSD também?


psInvestigar as diferenças históricas entre como os sistemas, ao longo do tempo, implementaram as opções é ficar à beira de um abismo que o homem não deveria saber.

Respostas:


18

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 é por que as distribuições BSD, Linux, OSX e Unix compartilhar tão muitos comandos? Isso se resume à conformidade com POSIX . O POSIX é basicamente um conjunto de padrões para sistemas operacionais semelhantes ao Unix; estipula a API principal, os comandos e como esses comandos devem funcionar.

No caso de ps(um comando estipulado pelo POSIX), certos argumentos são exigidos. Estes incluem os BSD. Todos os comandos derivados do POSIX têm suas próprias páginas de manual, 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 o nosso ps(ou vice-versa)?

  • Nosso pspacote ( procpsveja dpkg -S $(which ps):) é um garfo de outro procpspacote . Ambos são licenciados pela GPL. Isso é incompatível com a licença do BSD, portanto não pode ser incluído lá. ( Podemos incluir BSDs, mas não precisamos).
  • psé bastante específico do kernel. Eu acho que eles são tecnicamente incompatíveis.

E quanto a outros aplicativos?

A maioria dos comandos para conformidade com POSIX vem do coreutilspacote do Ubuntu . Este pacote representa o GNU no GNU / Linux e também possui licença GPL. O BSD envia suas próprias versões licenciadas compatíveis com o BSD que aderem ao POSIX, mas não são necessariamente as mesmas que as do GNU.

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

Enquanto lidero, por que deveriam ser? Eles são de pessoas diferentes há muito, muito tempo. Essa é a resposta curta aqui.


20

Isso remonta à história um tanto tortuosa do Unix (a Wikipedia tem um diagrama simplificado , que está longe de estar completo). Em particular, por um tempo, houve duas grandes correntes: Sistema V, desenvolvido pela AT&T, e o BSD, desenvolvido na Universidade da Califórnia, em Berkeley. Isso foi por volta do início dos anos 80, muito antes do Linux (1991), e muito menos do Ubuntu (2004). Freqüentemente, essas duas correntes tomavam decisões diferentes e, ainda hoje, você encontrará referências ocasionais às variantes ou recursos do “System V” e “BSD”.

O pscomando 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 online é da versão 5 (p.94) em 1974). Na época, pshavia apenas algumas opções, por exemplo ps a, exibia todos os processos, em vez de apenas o usuário, eps x exibia processos sem terminal conectado. Você notará que as opções não começam com -: na época, a convenção de usar -para opções não era quase sistemática como é hoje, era principalmente uma coisa para comandos que usavam nomes de arquivos como argumentos normais.

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

Na época em que o Linux entrava em cena, as pessoas que o usavam costumavam ter experiência anterior com uma variante do Unix ou outra. Às vezes, o Linux fazia as coisas do modo System V, às vezes do BSD, às vezes do seu próprio jeito, com base em considerações técnicas ou com base na experiência e gostos de quem implementou o recurso. O pscomando do Linux começou com opções do tipo BSD, por exemplo, ps aepara 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 do Linux psadicionaram opções para pessoas que estavam acostumadas com o System V. Portanto, hoje eles se comportam mais como várias variantes antigas do Unix, por causa de scripts antigos e pessoas com hábitos definidos.ps ax ou ps -elistam todos os processos no Linux, e há até uma variável de ambiente ( PS_PERSONALITY) para fazerps

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

A pssintaxe padrão do comando é compatível com o System V e POSIX. Além disso, pode-se dizer que essa sintaxe é 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 "Sistema V" não tem nenhuma implicação técnica. Refere-se à história: "BSD" é a escolha que o BSD fez nos anos 80 e nos anos seguintes, "System V" é a escolha que a AT&T e seus parceiros (principalmente a Sun) fizeram. "POSIX" é a escolha que o comitê de padronização do IEEE fez.


2

A sintaxe 'padrão' a ​​que você está se referindo é, na verdade, o sistema operacional GNU desenvolvido na década de 1980. Os utilitários e a filosofia baseados no GNU foram combinados com o kernel do Linux para desenvolver as distribuições mais modernas do Linux (incluindo o Ubuntu).

O sistema operacional BSD foi desenvolvido no final da década de 1970, independente do GNU, e posteriormente ramificado para versões modernas, como FreeBSD ou OpenBSD.

Tanto o GNU quanto o BSD são inspirados no Unix e possuem filosofias, sintaxe um pouco diferentes.


0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.