Jaka jest różnica między składnią standardową a składnią BSD?

19

Widziałem wiele poleceń, które akceptują "składnię BSD", a także ich standardową składnię. Wykonaj polecenie ps dla jednego przykładu:

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

Jaka jest różnica między tymi dwoma trasami? Ogólnie mówiąc, kiedy w składni BSD mówią, jakie elementy powinienem zapamiętać? Czy ta składnia jest odpowiednia tylko dla tych poleceń, które są w BSD?

    
zadawane Mohammad Reza Rezwani 18.06.2014, 13:18
źródło

4 odpowiedzi

17

Jaka jest różnica między MS Office i LibreOffice? Pomiędzy przeglądarką Firefox i Chrome?
Robią mniej więcej to samo, ale są przez różnych ludzi o nieco innych celach.

Być może lepszym pytaniem jest dlaczego dystrybucje BSD, Linux, OSX i Unix udostępniają tak wiele poleceń? To sprowadza się do POSIX zgodność. POSIX to w zasadzie zestaw standardów dla systemów operacyjnych podobnych do Uniksów; określa podstawowy interfejs API, polecenia i sposób działania tych poleceń.

W przypadku ps (polecenie z POSIX-u) wymagane są pewne argumenty. Należą do nich te BSD. Wszystkie polecenia pochodne POSIX mają własne strony podręcznika, ale potrzebują osobnej instalacji. Dla ps :

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

Dlaczego więc BSD nie używa naszego ps (lub na odwrót)?

  • Nasz pakiet ps ( procps patrz: dpkg -S $(which ps) ) to widelec inny pakiet procps . Oba są licencjonowane na GPL. Jest to niezgodne z licencją BSD, więc nie można go tam uwzględnić. ( My może obejmować BSD, ale nie musi).
  • ps jest dość specyficzny dla jądra. Sądzę, że są technicznie niekompatybilne.

A co z innymi aplikacjami?

Większość poleceń zgodności z POSIX pochodzi z pakietu coreutils Ubuntu. Ten pakiet reprezentuje GNU w GNU / Linux, a także licencję GPL. BSD dostarcza swoje własne licencjonowane wersje BSD, które są zgodne z POSIX, ale niekoniecznie są całkowicie takie same jak ich odpowiedniki GNU.

ps nie jest jedynym poleceniem POSIX, które nie jest GNU . Jest ich mnóstwo.

Jak prowadzę, dlaczego oni mieliby być? Są przez różnych ludzi w bardzo, bardzo długim czasie. Oto krótka odpowiedź.

    
odpowiedział Oli 18.06.2014, 13:35
źródło
18

To pochodzi z nieco zawiłej historii Unix (Wikipedia ma uproszczony diagram , który jest daleko z wypełnij). W szczególności przez pewien czas istniały dwa główne nurty: System V opracowany przez AT & amp; T i BSD opracowany przez University of Berkeley. Było to na początku lat 80., na długo przed Linuksem (1991), a co dopiero Ubuntu (2004). Często te dwa nurty podejmowały różne decyzje, a nawet dzisiaj można od czasu do czasu znaleźć odniesienia do wariantów lub funkcji "Systemu V" i "BSD".

Polecenie ps pochodzi z jednej z pierwszych wersji Uniksa (nie było to w wersji 1, najwcześniejsza strona podręcznika, którą mogę znaleźć w Internecie, pochodzi z wersja 5 (s.94) w 1974). W tym czasie ps miał tylko kilka opcji, na przykład ps a wyświetlałby wszystkie procesy zamiast tylko użytkownika, a ps x wyświetlałby procesy bez dołączonego terminala. Zauważysz, że opcje nie zaczynają się od - : w tym czasie konwencja użycia - dla opcji nie była prawie systematyczna, tak jak jest dzisiaj, była to głównie rzecz dla poleceń, które wzięły plik nazwy jako normalne argumenty.

W miarę upływu czasu różne aspekty systemu Unix rozszerzyły ps o wiele więcej opcji. Wariant BSD postanowił zachować oryginalną składnię, bez wiodącego - , a a i x nadal istnieją. Wariant System V zdecydował się na przyjęcie składniowej konwencji - dla opcji i używał różnych liter (na przykład ps -e do wyświetlania wszystkich procesów). Oracle (dawniej Sun) Solaris to przykład wariantu systemu V (Solaris dostarcza również osobny plik wykonywalny ps , w katalogu, który nie jest domyślnym PATH , w przypadku aplikacji napisanych z myślą o BSD).

Gdy Linux pojawił się na scenie, ludzie, którzy go używali, często mieli wcześniejszy kontakt z jednym lub wieloma wariantami Uniksa. Linux czasami robił rzeczy w Systemie V, czasami w stylu BSD, czasem na swój własny sposób, albo w oparciu o względy techniczne, albo na podstawie doświadczeń i gustów osoby, która zaimplementowała tę funkcję. Polecenie ps systemu Linux rozpoczęło się od opcji podobnych do BSD, np. ps ae , aby wyświetlić wszystkie procesy i uwzględnić zmienne środowiskowe we wpisie. Z biegiem czasu (pod koniec lat 90., nie pamiętam dokładnie kiedy), autorzy Linuksa ps dodali opcje dla ludzi, którzy byli przyzwyczajeni do Systemu V. Więc dzisiaj albo ps ax , albo ps -e wyświetli wszystkie procesy pod Linux, a nawet zmienna środowiskowa ( PS_PERSONALITY ) sprawia, że ps zachowuje się bardziej jak różne stare uniksowe wersje Uniksa, ze względu na stare skrypty i ludzi o określonych nawykach.

Ludzie, którzy używali kilku wersji Uniksa, nie lubili, że musieliby modyfikować swoje programy i swoje nawyki podczas zmiany z jednego wariantu Uniksa na inny. Podjęto więc próbę ustandaryzowania podzbioru funkcjonalności. Doprowadziło to do standardu POSIX (prowadzonego przez IEEE ), który w zasadzie podąża za Ubuntu. Pierwsze wydanie, którego zakres zawierał polecenie ps , ukazało się w 1992 roku; ten nie jest dostępny online, ale edycja z 1997 r. jest. Dla polecenia ps , podobnie jak w wielu innych przypadkach, POSIX przyjął sposób Systemu na robienie rzeczy.

Standardowa składnia polecenia ps jest zgodna zarówno z Systemem V, jak i POSIX. Ponadto można powiedzieć, że składnia ta jest standardowa, ponieważ używa ona - do domyślnego wprowadzenia opcji. Niektóre opcje istnieją tylko w jednej z dwóch składni; na szczęście można je mieszać w tym samym wywołaniu.

Ogólnie rzecz biorąc, "BSD" kontra "System V" nie ma żadnego implikacji technicznej. Odnosi się do historii: "BSD" jest tym, co BSD wybrał w latach 80. i później, "System V" jest tym, co wybrano ATT i ich partnerzy (zwłaszcza Sun). "POSIX" jest wyborem dokonanym przez komitet normalizacyjny IEEE.

    
odpowiedział Gilles 18.06.2014, 17:18
źródło
2

"Standardowa" składnia, o której mówisz, jest w rzeczywistości systemem operacyjnym GNU, który został opracowany w 1980 roku. Narzędzia i filozofia oparte na GNU zostały połączone z jądrem Linuksa w celu opracowania najnowocześniejszych dystrybucji Linuksa (w tym Ubuntu).

System operacyjny BSD został opracowany pod koniec lat siedemdziesiątych, niezależny od GNU, a później rozgałęziony na współczesne wersje, takie jak FreeBSD lub OpenBSD.

Zarówno GNU, jak i BSD są inspirowane przez Uniksa i mają nieco inne filozofie, składnię itd.

    
odpowiedział Alex B 18.06.2014, 13:32
źródło
0

Coreutils firmy Ubuntu to zbiór aplikacji utrzymywanych przez GNU, które zawierają cały ładunek (zobacz coreutils apt-cache). BSD mają swoje własne wersje (GNU nie jest kompatybilne z licencją BSD).

    
odpowiedział Hadi 18.06.2014, 17:18
źródło

Przeczytaj inne pytania na temat tagów