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