頑張らないために頑張る

ゆるく頑張ります

WindowsでLinuxのコマンドが使える「BusyBox」

Posted at — Apr 16, 2019

結論

普段LinuxやMacのシェルで使用している各種コマンドを、Windows環境でも使いたい!となった時には、BusyBoxを使えばいいよ!

はじめに

仕事ではWindows、プライベートではMacまたはLinuxなんて人もいるかもしれません。そこな貴方、こんなシチュエーションがありませんでしょうか?

ふと仕事中に「grep使いたいなー」とか「awk使いたいなー」とかなっても、Windowsのコマンドプロンプトじゃ足りないし、PowerShellはあの文法がいまいち性に合わない。ガッツリ使うわけじゃないから、わざわざ端末や仮想環境を用意するというわけにもいかない。

とか、

Windows使ってるのに普段のMacのノリでlsって入力しちゃって、Windowsに「そんなコマンドないよ」と言われた経験がある。

そんな貴方(私)のため、BusyBoxが十徳ナイフのごとく活躍してくれます。

この記事の対象者

以下に当てはまる方は、BusyBoxで幸せになれるかもしれません。

(余談1)Win10だとLinux使えなかったっけ?

Windows 10だとWSL(Windows Subsystem for Linux)で、UbuntuなどのLinuxディストリビューションを利用できます・・・が、リリースモデルの1つ、Enterprise LTSC(Long Term Servicing Channel)だとWSLが利用できません。企業によっては、「安定性などを確保するために、OSに対する頻繁な変更は行いたくない」場合、このモデルが採用されている可能性があります。

この場合も、やっぱりBusyBoxの出番です。

※以前は「Long Term Servicing Branch(LTSB)」という名前でリリースされていましたが、現在は「Long Term Servicing Channel(LTSC)」に名称変更されました。

(余談2)Cygwinとかじゃダメなの?

ダメじゃないです、全然大丈夫です。ただ、「ちょっとsed使いたいなー」っていう場合には、機能てんこ盛りなCygwinだとオーバースペックだったりします。

VMwareなどの仮想環境が利用できるなら、そっちの方がいろいろ便利です。ただ、マシンスペックがイマイチだったり記憶容量があまりない場合は却ってストレスになるでしょうし、やっぱりちょっとだけ使うという用途に対してオーバースペックと言わざるを得ません。

インストール

  1. サイトからバイナリをダウンロードして、任意のフォルダーにて展開する。
  2. 展開したフォルダーを環境変数に登録する(利用するだけなら必須ではないけど、登録しておくと後が楽)。

終わりです。ダウンロードして展開すればいい実行ファイルなので、インストール権限は必要ないです。しかもめちゃくちゃ軽量なので、記憶容量をガツガツ食っちゃうこともありません。

なお、ソースもダウンロードが可能ですが、あまりニーズはないだろうと判断し、この記事の中では触れません。

使い方

とりあえず実行してみる

BusyBox64.exeと入力して実行してみます。

C:\hoge>BusyBox64.exe
BusyBox v1.31.0-FRP-2910-ge92596d0b (2019-01-10 14:16:45 GMT) multi-call binary
(mingw64-gcc 8.2.0-3.fc29; mingw64-crt 5.0.4-2.fc29)

BusyBox is copyrighted by many authors between 1998-2018.
Licensed under GPLv2. See source distribution for detailed
copyright notices.

Usage: BusyBox [function [arguments]...]
  or: BusyBox --list[-full]
  or: BusyBox --install [DIR]
  or: BusyBox --uninstall [-n] file
  or: function [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  The shell in this build
        is configured to run built-in utilities without $PATH search.
        You don't need to install a link to BusyBox for each utility.
        To run external program, use full path (/sbin/ip instead of ip).

Currently defined functions:
        [, [[, ar, arch, ash, awk, base64, basename, bash, bunzip2, BusyBox, bzcat, bzip2, cal, cat, chmod, cksum,
        clear, cmp, comm, cp, cpio, cut, date, dc, dd, df, diff, dirname, dos2unix, dpkg-deb, du, echo, ed, egrep, env,
        expand, expr, factor, false, fgrep, find, fold, fsync, ftpget, ftpput, getopt, grep, groups, gunzip, gzip, hd,
        head, hexdump, iconv, id, ipcalc, kill, killall, less, link, ln, logname, ls, lzcat, lzma, lzop, lzopcat, man,
        md5sum, mkdir, mktemp, mv, nc, nl, od, paste, patch, pgrep, pidof, pipe_progress, pkill, printenv, printf, ps,
        pwd, realpath, rev, rm, rmdir, rpm, rpm2cpio, sed, seq, sh, sha1sum, sha256sum, sha3sum, sha512sum, shred,
        shuf, sleep, sort, split, ssl_client, stat, strings, sum, tac, tail, tar, tee, test, timeout, touch, tr, true,
        truncate, ttysize, uname, uncompress, unexpand, uniq, unix2dos, unlink, unlzma, unlzop, unxz, unzip, usleep,
        uudecode, uuencode, vi, watch, wc, wget, which, whoami, whois, xargs, xxd, xz, xzcat, yes, zcat

利用方法や利用可能なコマンドが表示されます。awkfindgrepなど一般的なコマンドを利用できることがわかります。

コマンドの実行方法

コマンドプロンプトを立ち上げ、下記のように入力し実行します。

BusyBox64.exe 実行したいコマンド

プロセスを参照したければpsを実行するわけですが、その場合は下記のように入力して実行します。

BusyBox64.exe ps

この場合、「BusyBox使ってpsを実行するぜ」と言っていることになります。

なお、オプションを利用してコマンド発行するのも普段と同様です。

BusyBox64.exe ls -la

このように入力して実行すればlaのオプションが有効になります。

毎回BusyBoxって入力しなきゃいけないの?

もちろん、そんなことはないです。ログインシェルとして利用することも可能です。その場合のコマンドは下記の通りです。

BusyBox64.exe sh -l

実行時の注意

前述の通り、BusyBoxはログインシェルとしても利用できます。ただし、コマンドによっては管理者権限が要求されているようで、「Permission Denied」と言われ実行できないケースがありました。自分が実行した際は、grepでこの症状が出ました。

そうなれば管理者権限を付与した状態でシェルを起動すればいい、ということになりますが、毎回「スタートボタンで右クリックしてコマンドプロンプトを管理者権限で実行してからBusyBox sh -lを実行してシェル起動」するのは鬱陶しいので、最初から権限を付与して起動することにしました。

powershell start-process BusyBox64.exe -verb runas 'sh -l'

上記コマンドを、batファイルなどにするかエイリアス設定してやればいいわけです。自分は、個人用に作成したランチャーで上記のコマンドを実行しています。

comments powered by Disqus