BusyBox dirancang dengan cara yang cukup baru yang bisa sangat membingungkan ketika Anda mulai mencari-cari di direktori / bin Anda.
Seperti yang ditunjukkan MSalters , BusyBox hanyalah satu yang dapat dieksekusi. Tapi itu tergantung pada tautan simbolis yang dibuat untuk dieksekusi untuk setiap "perintah" di dalamnya. Dengan mengetahui nama symlink dimulai, ia tahu untuk menjalankan fungsi C untuk perintah itu.
Dengan demikian, awal direktori PuppyLinux 5.2.8 Lucid / bin saya terlihat seperti ...
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
Perhatikan bahwa sebagian besar perintah adalah symlinks busybox
. Ini termasuk ash
shell sangat minimalis yang digunakan sebagian besar selama operasi boot. Juga perhatikan bahwa penulis distribusi memilih untuk memasukkan perintah mandiri bunzip2
dan bzcat
alih-alih menggunakan versi busybox. Symlink bunzip-BB-NOTUSED
dan bzcat-BB-NOTUSED
tidak benar-benar diperlukan tetapi membantu mendokumentasikan apa yang terjadi hanya untuk biaya symlink.
Perhatikan juga bahwa daftar direktori yang melaporkan ukuran untuk target symlink ( ls -lL
atau ls -l --dereference
) alih-alih symlink itu sendiri, akan melaporkan ukuran setiap perintah sama dengan yang ada pada busybox
. Jadi daftar yang sama dengan -L
opsi menunjukkan ...
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
Tujuan BusyBox adalah penggunaan kembali kode secara maksimal dalam dirinya sendiri untuk meminimalkan memori dan ruang disk yang diperlukan (yaitu "jejak") untuk serangkaian perintah umum ... tanpa memerlukan shell itu sendiri.
Bash dan kerang lainnya mencapai hal yang sama. Tetapi untuk melakukannya, mereka menerapkan lingkungan commandline mereka sendiri. Tujuan ini juga merupakan salah satu alasan untuk beberapa sintaksis yang sangat kuno untuk banyak fungsi shell.
Saat ini saya menggunakan "teknik BusyBox" ini untuk perpustakaan fungsi Bash dan lebih mudah menggunakan pembungkus untuk berbagai bashism . Ini membuat saya dengan mudah "memperpanjang" perintah dengan --help
opsi dan mematikan versi GUI saat tersedia.