Widziałem wiele poleceń, które akceptują „składnię BSD”, a także ich standardową składnię. Weź ps
polecenie 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?
command-line
syntax
Mohammad Reza Rezwani
źródło
źródło
ps
Badanie 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:
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. Dlaps
:Dlaczego więc BSD nie korzysta z naszego
ps
(lub odwrotnie)?ps
pakiet (procps
patrz:dpkg -S $(which ps)
) jest widelec z innegoprocps
opakowania . 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).ps
jest 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
coreutils
pakietu 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.ps
nie 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.
źródło
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
ps
terminy 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 czasieps
miał tylko kilka opcji, na przykładps a
wyświetlał wszystkie procesy zamiast tylko użytkownika ips x
wyś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ę
ps
o wiele więcej opcji. Wariant BSD postanowił zachować oryginalną składnię, bez żadnych wiodących-
,a
ix
nadal istnieje. W wariancie System V wybrano konwencję składni-
opcji i zastosowano różne litery (na przykładps -e
do wyświetlenia wszystkich procesów). Oracle (wcześniej Sun) Solaris jest przykładem wariantu System V (Solaris dostarcza również osobnyps
plik wykonywalny, w katalogu, który nie jest ustawiony domyślniePATH
, 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ę.
ps
Polecenie Linuksa zaczęło się od opcji podobnych do BSD, np.ps ae
Aby 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 Linuksaps
dodanych opcji dla osób, które zostały wykorzystane do Systemu V. Więc dzisiaj albops ax
czyps -e
bę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ł
ps
polecenie, ukazało się w 1992 r .; ten nie jest dostępny online, ale wydanie z 1997 roku jest. Dla tegops
polecenia, podobnie jak w wielu innych przypadkach, POSIX przyjął sposób działania Systemu V.W
ps
standardzie 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.
źródło
„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.
źródło
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).
źródło