組み込みLinuxのアーミーナイフBusyBox

tool-113557_640

2012年のアニメーション映画『009 RE:CYBORG』。サイボーグ達の中で子供の頃に好きだったのは、目が照準で、手から手裏剣、ナイフ、マシンガン。太腿からはミサイル、人間アーミーナイフのサイボーグ004でした。体内にいろんな武器が入っているヒーローに無性に憧れてたんです。スペース・コブラのサイコガンが欲しかったし、ヴァルヴァリンの爪もいつかニョキニョキと生えてこないかと思ってました。「009 RE:CYBORG」は最近レンタルビデオで見たのですが、今時の3Dアニメ映像の違和感のなさに肝を抜かれました。

今回はサイボーグ004のようにいろんな武器(コマンド)を詰め込んでいる、busyboxを使ってみます(Debianなら、apt-get install busyboxでインストール)。

~$ man busybox
NAME
       BusyBox - The Swiss Army Knife of Embedded Linux

このコマンドにはどのぐらいのコマンドが内包されているでしょうか。
busybox –listで一覧表示できます。

~$ busybox --list | pr -t4 | expand
[                 free              modinfo           switch_root
[[                freeramdisk       modprobe          sync
acpid             fstrim            more              sysctl
adjtimex          ftpget            mount             syslogd
ar                ftpput            mt                tac
arp               getopt            mv                tail
arping            getty             nameif            tar
ash               grep              nc                taskset
awk               groups            netstat           tee
basename          gunzip            nslookup          telnet

(省略)

dumpleases        lzop              sha512sum         wget
echo              lzopcat           sleep             which
egrep             md5sum            sort              who
env               mdev              start-stop-daemon whoami
expand            microcom          stat              xargs
expr              mkdir             strings           xz
false             mkfifo            stty              xzcat
fgrep             mknod             swapoff           yes
find              mkswap            swapon            zcat
fold              mktemp

多すぎてぱっと数えることができません。wcでカウントしましょう。

busybox --list | wc -l
206

manマニュアルの説明にあるように、基本的には以下のようにシンボリックリンクを貼って使用します。

ln -s /bin/busybox ln
./ls
dir1   dir2   file1  file2  file3

こうすることで単品コマンドと同じように、コマンド名そのままで使うことができます。

使い分けするので、ここではbusyboxコマンドのまま使用していきます。まずはbusyboxのlsと、普通のls。

~$ busybox ls
dir1   dir2   file1  file2  file3
~$ ls
dir1  dir2  file1  file2  file3
~$ 

微妙に表示仕様が異なっているようです。-lオプションを見てみましょう。

~$ busybox ls -l
total 8
drwxr-xr-x    3 takk     takk          4096 May 30 20:50 dir1
drwxr-xr-x    3 takk     takk          4096 May 30 20:50 dir2
-rw-r--r--    1 takk     takk             0 May 30 20:50 file1
-rw-r--r--    1 takk     takk             0 May 30 20:50 file2
-rw-r--r--    1 takk     takk             0 May 30 20:50 file3
~$ ls -l
合計 8
drwxr-xr-x 3 takk takk 4096  5月 30 20:50 dir1
drwxr-xr-x 3 takk takk 4096  5月 30 20:50 dir2
-rw-r--r-- 1 takk takk    0  5月 30 20:50 file1
-rw-r--r-- 1 takk takk    0  5月 30 20:50 file2
-rw-r--r-- 1 takk takk    0  5月 30 20:50 file3
~$ 

オプションを調べる場合は、–helpで確認することができます。

~$ busybox wc --help
BusyBox v1.22.1 (Debian 1:1.22.0-9+deb8u1) multi-call binary.

Usage: wc [-cmlwL] [FILE]...

Count lines, words, and bytes for each FILE (or stdin)

	-c	Count bytes
	-m	Count characters
	-l	Count newlines
	-w	Count words
	-L	Print longest line length

~$ 

以下は、busyboxコマンドの使い方一覧表示です。標準エラー出力で表示されるので、パイプできるようにしておかないとgrepできませんので注意が必要です。

~$ for i in `busybox --list`;do busybox $i --help 2>&1 | grep Usage;done

ソースコードを取得すれば、直接使い方(usage)をgrepできます。まとめてテキストに置いておけば全コマンドを通しで眺められます。

~$ apt-get source busybox
~$ cd busybox-1.22.0 
~/busybox-1.22.0$ grep -r '//usage' * | sed 's/\.c:\/\/usage//' > manual

4 responses to “組み込みLinuxのアーミーナイフBusyBox

  1. I see you don’t monetize your website, i know how to earn some additional cash and get more visitors using one simple method, just
    search in google for: ideas by Loocijano

  2. I see interesting articles here. Your site can go viral easily, you need some initial traffic only.
    How to get it? Search for: ricusso’s methods
    massive traffic

  3. Hi admin ! I read your content everyday and i must say you have very interesting content here.
    Your website deserves to go viral. You need initial traffic only.
    How to go viral fast? Search for: forbesden’s tools

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA