Jakie są standardowe polecenia dostępne w każdej dystrybucji opartej na systemie Linux?

39

Chciałbym wiedzieć, jakie są standardowe polecenia dostępne w każdym systemie Linux.

Na przykład, jeśli otrzymasz debian / ubuntu / redhat / suse / arch / slackware itp., Zawsze znajdziesz tam takie polecenia, jak:

cd, mkdir, ls, echo, grep, sed, awk, ping itp.

Wiem, że niektóre z wymienionych poleceń są wbudowane w powłokę, ale innych nie ma, ale wciąż są dostępne (na podstawie mojej dotychczasowej wiedzy i doświadczenia).

Z drugiej strony polecenia takie jak gawk, parted, traceroute i inne dość znane polecenia nie są domyślnie instalowane w różnych dystrybucjach Linuksa.

Przeprowadziłem różne wyszukiwania w sieci, ale nie znalazłem prostej odpowiedzi na to pytanie.

Chodzi o to, że chciałbym utworzyć skrypt powłoki i powinien on dokonać pewnych sprawdzeń poprawności, czy polecenia użyte w skrypcie są dostępne w systemie. Jeśli nie, powinien poprosić użytkownika o zainstalowanie potrzebnych plików binarnych.

Vangelis Tasoulas
źródło
5
Tylko podpowiedź: „ powinien dokonać pewnych kontroli poprawności, czy polecenia użyte w skrypcie są dostępne w systemie ”, brzmi bardzo podobnie do Autoconf .
sr_
Zdecydowanie przypadek automatycznej konfiguracji ... a może bardziej naukowego kuzyna, obietnica .
Wildcard,
@Wildcard, uważam, że jakikolwiek system zarządzania konfiguracją stanowiłby nadmiar w takim przypadku, chyba że chcesz ciągłych kontroli poczytalności i samoleczenia systemu nawet po pierwszej instalacji.
Vangelis Tasoulas,
@VangelisTasoulas, nie sądzę. Dlaczego w konfiguracji dla jednego użytkownika, na przykład na komputerze domowym, trzeba go pisać? Zarządzanie konfiguracją byłoby przesadą, ale skrypty sprawdzałyby się też ręcznie. W scenariuszu, w którym masz wiele skrzynek, w których chcesz zapewnić spójność, skrypty nie byłyby przesadne - ale żadne nie wymagałoby zarządzania konfiguracją. A może jesteś programistą, który chce uruchomić testy poprawności podczas instalacji pakietu dla Twojego produktu? Zależy to od Twojego scenariusza, tak, ale jeśli chcesz zarządzać konfiguracją, narzędzie do zarządzania konfiguracją nie jest nadmierne. ;)
Wildcard
1
@Wildcard, kiedy pisałem to pytanie, zastanawiałem się nad tym drugim: po prostu chcę uruchomić testy poprawności podczas instalacji na jednym komputerze, aby mieć pewność, że oprogramowanie będzie działało poprawnie. Oczywiście, jeśli chcesz zarządzać wieloma serwerami i obsługiwać rozproszone wdrożenia itp., To zgadzam się, że zarządzanie konfiguracją to droga na dłuższą metę.
Vangelis Tasoulas,

Odpowiedzi:

41

Niestety nie ma gwarancji, że coś będzie dostępne.

Jednak większość systemów będzie miała jądra GNU . Samo to zapewnia około 105 poleceń. Prawdopodobnie możesz na nich polegać, chyba że jest to system osadzony, który zamiast tego może użyć BusyBox .

Prawdopodobnie możesz również polegać na bash , cron , GNU findutils , GNU grep , gzip , iproute2 , iputils , man-db , module-init-tools , net-tools , passwd ( passwd lub shadow ), procps , tar i util- linux .

Pamiętaj, że niektóre programy mogą mieć pewne różnice między dystrybucjami. Na przykład /usr/bin/awkmoże to być gawk lub mawk . /bin/shmoże być myślnikiem lub bashem w trybie POSIX . W niektórych starszych systemach /usr/bin/hostnie ma takiej samej składni jak wersja BIND , więc może być lepiej użyć dig .

Jeśli szukasz niektórych standardów, Linux Standard Base definiuje niektóre powszechnie wyszukiwane programy , ale nie wszystkie dystrybucje twierdzą, że są zgodne ze standardem, a niektóre robią to tylko, jeśli zainstalujesz opcjonalny pakiet kompatybilności LSB. Jako przykład tego, niektóre systemy , które widziałem, nie mają lsb_releasedomyślnej instalacji.

Oprócz tego pomocna może być lista poleceń standaryzowanych przez POSIX .

Innym podejściem do problemu jest spakowanie skryptu za pomocą narzędzi do pakowania każdej dystrybucji (np. RPM dla Red Hat, DEB dla Debiana itp.) I zadeklarowanie zależności od wszelkich innych programów lub pakietów, których potrzebujesz. To trochę pracy, ale oznacza to, że użytkownicy zobaczą bardziej przyjazny komunikat o błędzie, informujący nie tylko o tym, czego brakuje, ale o tym, jakie pakiety muszą zainstalować.

Więcej informacji:

Mikela
źródło
Pakiet i-dodatek zależności -idea jest super, bije nurkowanie w Autoconfa ręce w dół:)
sr_
2
świetna odpowiedź, zgadzam się ze wszystkim. dodałbym dodatkowy krok ostrożności: weź pod uwagę dodatkowe opcje konkretnej wersji polecenia, którego używasz ... mogą nie działać na wszystkich wersjach (stało się tak w projekcie, w którym pracowałem).
JoséNunoFerreira
Nie przypuszczam, że gdzieś jest plik zwykłego tekstu z listą tych poleceń? pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html można stosunkowo łatwo przekonwertować na to, ale wciąż brakuje wielu rzeczy.
Dylan Nicholson,
7

W niewbudowanych systemach Linux ogólnie można liczyć na większość narzędzi GNU:

plus pakiet util-linux i pakiet procps . Pamiętaj, że /bin/shnie zawsze jest to bash, może to być pocisk z mniejszą liczbą funkcji, takich jak jeden z wielu widelców popiołu .

Linux Standard Base definiuje zestaw wspólnych narzędzi z funkcjami, które są oczekiwane na wszystkich systemach zgodnych. Możesz także oczekiwać większości narzędzi określonych przez POSIX . Godnym uwagi wyjątkiem jest sytuacja pax, która nie jest częścią domyślnej instalacji wielu dystrybucji.

Jeśli chcesz uprościć sprawę, poproś o instalację lsb_releasepakietu. Wiele dystrybucji ma taki pakiet, który pobiera wszystkie zależności wymagane przez LSB.

W systemie wbudowanym wszystkie zakłady są wyłączone. Wbudowane systemy Linux zwykle obsługują BusyBox , ale wiele narzędzi i funkcji jest opcjonalnych, więc nie ma pewności, że je zdobędziesz.

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

Istnieje zestaw komend, jeśli nie wszystkie dystrybucje Linuksa, i jeśli o to chodzi, zapewnią także dystrybucje Unix. Są to obowiązkowe polecenia określone w standardzie POSIX .

Większość poleceń zacytowanie ( cd, mkdir, ls, echo, grep, sed, awk, itd.) Są z niego. Wyjątkiem jest to, pingco słusznie skomentował WhiteWinterWolf.

jlliagre
źródło
1
W rzeczywistości pingnie jest częścią POSIX ...
WhiteWinterWolf
Strona główna POSIX stwierdza, że ​​koncentruje się na zapewnieniu „przenośności aplikacji na poziomie kodu źródłowego” , tj. w moim rozumieniu są zainteresowani interfejsem API systemu, zachowaniem systemu (w tym powłoki) oraz poleceniami, które mogą być używane do konfigurowania, kompilowania i instalowania aplikacji oraz obsługi jej kodu źródłowego.
WhiteWinterWolf
Nie dbają o narzędzia sieciowe ( „Konfiguracja systemu i dostępność zasobów” są jawnie out-of-scope), komend tak wszechobecne, takie jak ping, ifconfig, telnet, itd. Nie są częścią tego standardu (ani żaden inny jeden AFAIK, po prostu dążyć do zgodności z „historycznymi implementacjami” na zasadzie najlepszych starań).
WhiteWinterWolf