Co to jest polecenie systemu Linux, które zawiera prawie wszystkie pozostałe polecenia?


23

Pamiętam, że w przypadku Linuksa działającego w systemach osadzonych, z powodu ograniczeń rozmiaru, nie można spakować tylu poleceń, jak na zwykłych stacjach roboczych. Istnieje więc zrób to wszystkie polecenia, które mogą naśladować prawie wszystkie komendy (w tym ls, cd, time, itd.), Ale nie pamiętam jego nazwy.

Właśnie niejasno przypomniałem sobie coś takiego jak „minibox” lub coś takiego, wygląda na to, że ma w nazwie „pudełko”, czy ktoś wie, jak się nazywa?


12
To się nazywa busybox.
MariusMatutiae

6
Nie będzie to jednak naśladować cd, to niemożliwe.
Stop Harming Monica

4
@OrangeDog: ... ale będzie naśladować sh, co ma cdwbudowane.
Ilmari Karonen

Ten, który rządzi nimi wszystkimi !!!
Shokhet

5
D'oh, zamierzałem powiedzieć emacs...
R ..

Odpowiedzi:


48

Najpopularniejszym może być BusyBox , ale są też narzędzia (używane przez Androida), toybox i może inne.


Warto wyjaśnić, że Busybox to instalator, a nie pojedynczy magiczny plik binarny. Przynajmniej nie dla Androida. Busybox to instalator narzędzi, które nie są natywnie na urządzeniu. Sprawdza pliki binarne znajdujące się już na urządzeniu i dodaje je. Dla mnie umieściłem nowe pliki binarne w / system / xbin /.
Corey Ogburn

1
@Corey jesteś pewien? jej o strona mówi „BusyBox łączy małe wersje wielu popularnych narzędzi UNIX w jednym małym pliku wykonywalnego.” .
RedGrittyBrick

Absolutnie. Nie jestem pewien co do iOS, ale w Androidzie musisz zainstalować BusyBox. Sama aplikacja pozwala wybrać, którą wersję busybox i gdzie je zainstalować. Mój mówi obecnie, że „BusyBox v1.22.1-Stericson jest zainstalowany. BusyBox jest zainstalowany w / system / xbin”. Możesz spojrzeć na listę zainstalowanych plików binarnych i znaleźć je w / system / xbin /. To nie jest powłoka, nie jest to wszystko w jednym pliku binarnym, to pakiet plików binarnych i łatwy instalator.
Corey Ogburn

2
@CoreyOgburn: Oryginalna BusyBox to sama aplikacja. Aplikacja na Androida, choć nosi nazwę BusyBox, jest tylko aplikacją, która instaluje „prawdziwy” BusyBox. Sam BusyBox jest w zasadzie taki sam, czy to na Androida, iOS, BSD czy jakikolwiek inny system. Różni się tylko instalator.
Michael Ehrenreich

3
„Wiele plików wykonywalnych” też nie jest prawdą; busybox tworzy mnóstwo dowiązań symbolicznych do siebie. Np. grepPrawdopodobnie jest to link do busybox. Jedynym wyjątkiem będzie to, cdże musi to być wbudowana powłoka.
MSalters


3

BusyBox został zaprojektowany w dość nowatorski sposób, co może być dość mylące, gdy zaczniesz szperać w katalogach / bin.

Jak wskazali MSalters , BusyBox to tylko jeden plik wykonywalny. Ale zależy to od utworzenia dowiązania symbolicznego do tego pliku wykonywalnego dla każdego „polecenia” w nim zawartego. Znając nazwę dowiązania symbolicznego, z którym został uruchomiony, umie uruchomić funkcję C dla tego polecenia.

Tak więc początek mojego katalogu PuppyLinux 5.2.8 Lucid / bin wygląda jak ...

sh-4.1# ls -l
total 4889
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 [ -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 [[ -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 addgroup -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 adduser -> busybox
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 ash -> busybox
-rwxr-xr-x 1 root root   2844 2011-08-17 11:04 autologinroot
lrwxrwxrwx 1 root root      4 2011-08-17 10:49 awk -> gawk
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 basename -> busybox
-rwxr-xr-x 1 root root 805960 2011-08-17 11:04 bash
-r-xr-xr-x 1 root root   6835 2011-01-21 01:29 bashbug
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bbconfig -> busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bunzip2
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bunzip2-BB-NOTUSED -> busybox
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bzcat
lrwxrwxrwx 1 root root      7 2011-08-17 10:49 bzcat-BB-NOTUSED -> busybox

Zauważ, że większość poleceń to dowiązania symboliczne busybox. Obejmuje to ashbardzo minimalistyczną powłokę używaną głównie podczas operacji rozruchu. Zauważ też, że autor dystrybucji zdecydował się na dołączenie samodzielnych poleceń bunzip2i bzcatzamiast używać wersji busyboksa. Dowiązania symboliczne bunzip-BB-NOTUSEDi bzcat-BB-NOTUSEDnie są tak naprawdę konieczne, ale pomagają dokumentować, co się dzieje za cenę samego łącza symbolicznego.

Zauważ też, że lista katalogów, która zgłasza rozmiary dla celu dowiązań symbolicznych ( ls -lLlub ls -l --dereference) zamiast samego dowiązania symbolicznego, zgłosi rozmiar każdego polecenia tak samo, jak rozmiar busybox. Zatem ta sama lista z -Lopcją pokazuje ...

sh-4.1# ls -lL
total 60402
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 [
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 [[
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 addgroup
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 adduser
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 ash
-rwxr-xr-x 1 root root   2844 2011-08-17 11:04 autologinroot
-rwxr-xr-x 1 root root 317880 2011-08-17 11:04 awk
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 basename
-rwxr-xr-x 1 root root 805960 2011-08-17 11:04 bash
-r-xr-xr-x 1 root root   6835 2011-01-21 01:29 bashbug
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bbconfig
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bunzip2
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bunzip2-BB-NOTUSED
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 busybox
-rwxr-xr-x 1 root root  30200 2011-08-17 11:04 bzcat
-rwxr-xr-x 1 root root 637960 2011-08-17 11:04 bzcat-BB-NOTUSED

Celem BusyBox jest maksymalne ponowne wykorzystanie kodu w sobie, aby zminimalizować wymaganą pamięć i miejsce na dysku (tj. „Ślad”) dla wspólnego zestawu poleceń ... bez konieczności używania samej powłoki.

Bash i inne pociski osiągają to samo. Ale w tym celu implementują własne środowisko wiersza poleceń. Ten cel jest również jednym z powodów bardzo archaicznej składni wielu funkcji powłoki.

Obecnie używam tej „techniki BusyBox” do biblioteki funkcji Bash i łatwiejszych w użyciu opakowań dla różnych bashism . Pozwoliło mi to łatwo „rozszerzyć” komendy o --helpopcje i odpalić wersje GUI, jeśli są dostępne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.