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

21

Widziałem wiele poleceń, które akceptują „składnię BSD”, a także ich standardową składnię. Weź pspolecenie 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 dwiema trasami? Ogólnie, kiedy mówią w składni BSD, jakie elementy powinienem pamiętać? Czy ta składnia dotyczy tylko tych poleceń, które są w BSD?

Mohammad Reza Rezwani
źródło
psBadanie historycznych różnic między tym, w jaki sposób systemy zaimplementowane w czasie optargs, stoi na krawędzi otchłani, której człowiek nie chciał wiedzieć.

Odpowiedzi:

18

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

Być może lepszym pytaniem jest, dlaczego BSD, Linux, OSX i Unix dzielą tak wiele poleceń? Sprowadza się to do zgodności z POSIX . POSIX jest w zasadzie zestawem standardów dla systemów operacyjnych typu Unix; określa podstawowy interfejs API, polecenia i sposób działania tych poleceń.

W przypadku ps(polecenia określonego w POSIX) wymagane są pewne argumenty. Należą do nich te BSD. Wszystkie polecenia pochodzące z POSIX mają własne strony podręcznika, ale wymagają osobnej instalacji. Dla ps:

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

Dlaczego więc BSD nie korzysta z naszego ps(lub odwrotnie)?

  • Nasz pspakiet ( procpspatrz: dpkg -S $(which ps)) jest widelec z innego procpsopakowania . Oba są na licencji GPL. Jest to niezgodne z licencją BSD, więc nie można jej tam uwzględnić. ( Możemy dołączyć BSD, ale nie musimy).
  • psjest dość specyficzny dla jądra. Uważam, że są technicznie niezgodne.

Co z innymi aplikacjami?

Większość poleceń dotyczących zgodności z POSIX pochodzi z coreutilspakietu Ubuntu . Ten pakiet reprezentuje GNU w GNU / Linux i również jest licencjonowany na licencji GPL. BSD dostarcza własne wersje zgodne z BSD, które są zgodne z POSIX, ale niekoniecznie są całkowicie takie same jak ich odpowiedniki GNU.

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

Kiedy prowadzę, dlaczego mieliby być? Są przez różnych ludzi przez bardzo, bardzo długi czas. Oto krótka odpowiedź tutaj.

Oli
źródło
20

To sięga nieco zawiłej historii Uniksa (Wikipedia ma uproszczony schemat , który jest daleki od ukończenia). W szczególności przez pewien czas istniały dwa główne prądy: System V opracowany przez AT&T oraz BSD opracowany na University of California, Berkeley. Było to na początku lat 80., na długo przed Linuksem (1991), nie mówiąc już o Ubuntu (2004). Często te dwa prądy podejmowały różne decyzje, i nawet dziś można znaleźć odniesienie do wariantów lub funkcji „System V” i „BSD”.

Te psterminy tekstowa z jednego z pierwszych wydań Unix (nie było w wersji 1, najwcześniej strona człowiek mogę znaleźć w Internecie jest od wersji 5 (str.94) w 1974 roku). W tym czasie psmiał tylko kilka opcji, na przykład ps awyświetlał wszystkie procesy zamiast tylko użytkownika i ps xwyświetlał procesy bez podłączonego terminala. Zauważysz, że opcje nie zaczynają się od -: w tamtym czasie konwencja używania -opcji nie była prawie systematyczna, jak ma to miejsce obecnie, była głównie rzeczą dla poleceń, które przyjmowały nazwy plików jako normalne argumenty.

Z biegiem czasu różne aspekty Uniksa rozszerzyły się pso wiele więcej opcji. Wariant BSD postanowił zachować oryginalną składnię, bez żadnych wiodących -, ai xnadal istnieje. W wariancie System V wybrano konwencję składni -opcji i zastosowano różne litery (na przykład ps -edo wyświetlenia wszystkich procesów). Oracle (wcześniej Sun) Solaris jest przykładem wariantu System V (Solaris dostarcza również osobny psplik wykonywalny, w katalogu, który nie jest ustawiony domyślnie PATH, dla aplikacji napisanych z myślą o BSD).

W momencie pojawienia się Linuksa ludzie, którzy go używali, często mieli wcześniejsze doświadczenia z jednym wariantem Uniksa. Linux czasami robił rzeczy w sposób System V, czasem w BSD, czasem po swojemu, albo na podstawie względów technicznych, albo na podstawie doświadczenia i gustów każdego, kto zaimplementował tę funkcję. psPolecenie Linuksa zaczęło się od opcji podobnych do BSD, np. ps aeAby wyświetlić wszystkie procesy i uwzględnić zmienne środowiskowe na liście. Z biegiem czasu (w latach 1990, nie pamiętam dokładnie kiedy), autorzy Linuksa psdodanych opcji dla osób, które zostały wykorzystane do Systemu V. Więc dzisiaj albo ps axczy ps -ebędzie lista wszystkich procesów pod Linuksem, a tam jest jeszcze zmienna środowiskowa ( PS_PERSONALITY) zrobićps zachowują się bardziej jak różne stare uniksowe warianty Uniksa, ze względu na stare skrypty i osoby o ustalonych nawykach.

Ludziom, którzy używali kilku wariantów Uniksa, nie podobało się, że musieliby modyfikować swoje programy i swoje nawyki podczas przełączania się z jednego wariantu na Uniksa. Podjęto więc wysiłek w celu standaryzacji podzbioru funkcjonalności. Doprowadziło to do powstania standardu POSIX (prowadzonego przez IEEE ), który Ubuntu w zasadzie podąża. Pierwsze wydanie, którego zakres obejmował pspolecenie, ukazało się w 1992 r .; ten nie jest dostępny online, ale wydanie z 1997 roku jest. Dla tego pspolecenia, podobnie jak w wielu innych przypadkach, POSIX przyjął sposób działania Systemu V.

W psstandardzie składnia polecenia jest taki, który jest kompatybilny zarówno z System V i POSIX. Ponadto można powiedzieć, że ta składnia jest standardowa, ponieważ -domyślnie wprowadza opcje. Niektóre opcje istnieją tylko w jednej z dwóch składni; na szczęście można je łączyć w ramach tego samego połączenia.

Ogólnie rzecz biorąc, „BSD” vs. „System V” nie ma żadnych implikacji technicznych. Odwołuje się do historii: „BSD” jest jakimkolwiek wyborem BSD dokonanym w latach 80. i później, „System V” jest jakimkolwiek wyborem dokonanym przez AT&T i ich partnerów (szczególnie Sun). „POSIX” jest jakimkolwiek wyborem dokonanym przez komitet normalizacyjny IEEE.

Gilles „SO- przestań być zły”
źródło
2

„Standardowa” składnia, o której mówisz, to tak naprawdę system operacyjny GNU, który został opracowany w latach 80. Narzędzia i filozofia oparte na GNU zostały połączone z jądrem Linuksa w celu opracowania większości współczesnych dystrybucji Linuksa (w tym Ubuntu).

System operacyjny BSD został opracowany pod koniec lat siedemdziesiątych, niezależny od GNU, a później rozwinięty do współczesnych wersji, takich jak FreeBSD lub OpenBSD.

Zarówno GNU, jak i BSD są inspirowane Uniksem i mają nieco inną filozofię, składnię itp.

Alex B.
źródło
0

Coreutils Ubuntu to zbiór aplikacji obsługiwanych przez GNU, który zawiera całą masę rzeczy (spójrz na aptut cache show coreutils). BSD mają swoje własne wersje (GNU nie jest kompatybilne z licencją BSD).

Hadi
źródło