BusyBox , / bin dizinlerinde dolaşmaya başladığınızda oldukça kafa karıştırıcı olabilecek oldukça yeni bir şekilde tasarlanmıştır.
Olarak MSalters belirtilen BusyBox sadece bir komuttur. Ancak bu, içindeki her "komut" için bu yürütülebilir dosya için oluşturulmuş sembolik bir bağlantıya bağlıdır. Başladığı sembolik bağlantı adını bilerek, bu komut için C işlevini çalıştırmayı bilir.
Böylece, PuppyLinux 5.2.8 Lucid / bin dizininin başlangıcına benziyor ...
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
Çoğu komutun sembolik bağlantı olduğuna dikkat edin busybox. Bu, ashçoğunlukla önyükleme işlemleri sırasında kullanılan çok minimalist kabuğu içerir . Ayrıca dağıtım yazar bağımsız komutları içerir seçti unutmayın bunzip2ve bzcatbunun yerine busybox sürümlerini kullanmak. İşaretler bunzip-BB-NOTUSEDve bzcat-BB-NOTUSEDgerçekten gerekli değiller, ancak bir sembolik bağlantının maliyeti için neler olup bittiğini belgelemeye yardımcı olurlar.
Ayrıca , bağlantının kendisi yerine sembolik bağların hedefi ( ls -lLveya ls -l --dereference) için boyutlar bildiren bir dizin listesinin , her komutun boyutuyla aynı olduğunu bildireceğini unutmayın busybox. Böylece -Lseçeneği ile aynı liste gösterir ...
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'un amacı, ortak bir komut dizisi için gereken bellek ve disk alanını (yani "ayak izi") en aza indirgemek için kendi içinde bir kodun yeniden kullanılmasıdır ... bir kabuk kendisi gerektirmeden.
Bash ve diğer kabukları aynı şeyi başarır. Ancak bunu yapmak için kendi komut satırı ortamlarını uygularlar. Bu amaç aynı zamanda birçok kabuk işlevsellik için çok eski sözdiziminin nedenlerinden biridir.
Şu anda Bash işlevlerinin bir kütüphanesi için bu "BusyBox tekniğini" kullanıyorum ve çeşitli temel bilgiler için sarmalayıcıları kullanmak daha kolay . --helpSeçenekler ile kolayca komutları "genişletme" ve kullanılabilir olduğunda GUI sürümlerini ateşlememe izin verdi.