BusyBox розроблений досить новим способом, який може бути дуже заплутаним, коли ви починаєте роптатися у своїх каталогах / bin.
Як вказували MSalters , BusyBox - це лише один виконуваний файл. Але це залежить від створення символічного посилання на цей виконуваний файл для кожної "команди" в ньому. Знаючи ім'я символьної посилання, з якого було розпочато, воно знає, що запустить функцію C для цієї команди.
Таким чином, початок роботи мого каталогу PuppyLinux 5.2.8 Lucid / bin виглядає як ...
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
Зауважте, що більшість команд є посиланнями на busybox
. Сюди входить ash
дуже мінімалістична оболонка, яка використовується переважно під час завантажувальних операцій. Також зауважте, що автор дистрибутива вирішив включити окремі команди bunzip2
та bzcat
замість використання версій зайнятих. Символьні посилання bunzip-BB-NOTUSED
і bzcat-BB-NOTUSED
насправді не потрібні, але допоможуть документувати, що відбувається лише за вартість символьної посилання.
Зауважте також, що каталог, що повідомляє розміри для цілі символьних посилань ( ls -lL
або ls -l --dereference
) замість самого посилання, повідомлятиме про розмір кожної команди таким самим, як у busybox
. Таким чином, той же список із -L
опцією показує ...
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
Завдання BusyBox - максимальне повторне використання коду всередині себе, щоб мінімізувати необхідну пам’ять та дисковий простір (тобто "слід") для загального набору команд ... без необхідності самої оболонки.
Баш та інші снаряди досягають того ж самого. Але для цього вони реалізують власне середовище командного рядка. Ця мета також є однією з причин деяких дуже архаїчних синтаксисів багатьох функцій оболонок.
Зараз я використовую цю техніку "BusyBox" для бібліотеки функцій Bash і простіше використовувати обгортки для різних башизмів . Це дозволило мені легко "розширювати" команди за допомогою --help
параметрів та звільняти версії GUI, коли вони доступні.