busyboxとは

busyboxについてのおさらい。
busyboxは1つのコマンドで、lsやcat、shなどの250種類以上のコマンドの機能を実現している。使い方は以下の通り。
先ず、インストールする。FedoraなどのRedhat系では次のように実行する。

[root@fedora-8 ~]# yum install busybox

次のように動作確認してみる。まずはlsコマンドの機能を実行してみる。

[root@fedora-8 ~]# busybox ls /
bin         home        media       root        sys
boot        lib         mnt         sbin        tmp
dev         lib64       opt         selinux     usr
etc         lost+found  proc        srv         var
[root@fedora-8 ~]# 

次に(何でも構わないのだが)dateコマンドの機能を実行してみる。

[root@fedora-8 ~]# busybox date -R
Mon, 04 Aug 2008 10:43:47 +0900
[root@fedora-8 ~]# 

これでbusyboxの機能は確認できたが、通常のLinux環境では、勿論lsやdateは標準でインストールされているのでbusyboxの出番はない。busyboxはinitrd環境や組み込み環境などで、通常のコマンド無い環境、もしくはメモリの制限で250種類ものコマンドをインストールできない環境でつかう(initrdに関しては「initrdでLinuxを使う方法」を参照)。例えば次のようにbusyboxに対して"ls"とか"cat"とか"sh"というシンボリックファイルを作成して利用する。(シンボリックリンクされているので"ls"と入力しても実際に起動されるプログラムはbusyboxである。)

sh-3.2# cd /
sh-3.2# ls						: ← lsコマンドが無い!
sh: ls: command not found
sh-3.2# echo *						: ← lsコマンドの代わりにechoでファイルを調べる。
bin dev etc init lib lib64 proc sbin sys sysroot usr
sh-3.2# cd bin						: ← /binヘ移動して
sh-3.2# echo *						: ← ファイルを調べるとlsコマンドがない。
busybox insmod modprobe nash rmmod sh
sh-3.2# ln -s busybox ls					: ← busyboxへ"ls"というシンボリックリンクを作りたいが
sh: ln: command not found					: ← lnコマンド自身がないので、
sh-3.2# busybox ln -s busybox ls				: ← busyboxの"ln"機能を使ってシンボリックリンクを作成
sh-3.2# ls						: ← 無事にlsコマンドが使えるようになった。
busybox   insmod    ls        modprobe  nash      rmmod     sh
sh-3.2# ls -l
-rwxr-xr-x    1 root     root      1851232 Aug  4 10:55 busybox
-rwxr-xr-x    1 root     root         9760 Aug  4 10:54 insmod
lrwxrwxrwx    1 root     root            7 Aug  4 11:07 ls -> busybox
lrwxrwxrwx    1 root     root           10 Aug  4 10:54 modprobe -> /sbin/nash
-rwxr-xr-x    1 root     root       100904 Aug  4 10:54 nash
-rwxr-xr-x    1 root     root        14256 Aug  4 10:54 rmmod
lrwxrwxrwx    1 root     root            7 Aug  4 11:06 sh -> busybox
sh-3.2# 

あとは必要なだけbusyboxへの“コマンド名のシンボリックリンクファイル”を作成すれば、通常の環境に近い形で利用できる。
なお、busyboxで提供されるコマンドの機能は"--help"オプションで確認できる。

[root@fedora-8 ~]# busybox --help
BusyBox v1.6.1 (2007-12-21 05:04:17 EST) multi-call binary
Copyright (C) 1998-2006  Erik Andersen, Rob Landley, and others.
Licensed under GPLv2.  See source distribution for full notice.

Usage: busybox [function] [arguments]...
   or: [function] [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use and BusyBox
        will act like whatever it was invoked as!

Currently defined functions:
        [, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash, awk, basename, bunzip2, bzcat, cal,
        cat, catv, chattr, chgrp, chmod, chown, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp,
        cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, df, dhcprelay, diff, dirname,
        dmesg, dnsd, dos2unix, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid,
        ether-wake, expr, fakeidentd, false, fbset, fdformat, fdisk, fgrep, find, fold, free, freeramdisk,
        fsck, fsck.minix, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt, hdparm, head,
        hexdump, hostid, hostname, httpd, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod, install,
        ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kill, killall, killall5, klogd,
        last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname,
        logread, losetup, ls, lsattr, lsmod, lzmacat, makedevs, md5sum, mdev, mesg, mkdir, mkfifo, mkfs.minix,
        mknod, mkswap, mktemp, modprobe, more, mount, mountpoint, msh, mt, mv, nameif, nc, netstat, nice,
        nmeter, nohup, nslookup, od, openvt, passwd, patch, pidof, ping, ping6, pipe_progress, pivot_root,
        poweroff, printenv, printf, ps, pwd, raidautorun, rdate, readahead, readlink, readprofile, realpath,
        reboot, renice, reset, resize, rm, rmdir, rmmod, route, rpm, rpm2cpio, run-parts, runlevel, runsv,
        runsvdir, rx, sed, seq, setarch, setconsole, setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum,
        sleep, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd,
        swapoff, swapon, switch_root, sync, sysctl, syslogd, tail, tar, taskset, tee, telnet, telnetd,
        test, tftp, time, top, touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname, uncompress,
        uniq, unix2dos, unlzma, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, watch,
        watchdog, wc, wget, which, who, whoami, xargs, yes, zcat, zcip

[root@fedora-8 ~]# 

また、利用しているコマンドが、オリジナルのコマンドかbusyboxで実現されているコマンドかを調べるのは、それぞれのコマンドに"--help"オプションをつけて実行してみるのが手っとり早い。busyboxで実現されている場合は、最初にbusyboxのバージョンが出力される。

sh-3.2# ls --help
BusyBox v1.6.1 (2007-12-21 05:04:17 EST) multi-call binary

Usage: ls [-1AacCdeFilnpLRrSsTtuvwxXhk] [filenames...]
	:
	:

なお、busyboxはライブラリをダイナミックリンクしていない、つまりスタティックリンクして作られたコマンドなので、コマンド本体だけをコピーすれば使える(つまり、必要なライブラリを調べて、ライブラリ群もコピーする必要はない。)