Linuxコマンドの結果をWebに表示したい
Linuxサーバ運用を行っているとターミナルからコマンドを打つ事は日常的に行っていますが、Webからステータスを確認出来たら楽だなぁと思う様になりました。
単にコマンドを打ってスタータスを確認するに留まらず、繰り返し行う設定変更などをスクリプト化しておいてWebからポチって実行出来たら運用が楽になります。
CGIを使って動的なWebページを表示する
普通にHTMLを使ってWebページを書いただけでは、コマンドの結果などの動的な内容を表示する事が出来ません。
今回はbashを使ったCGIでLinuxコマンドの結果を表示します。
/var/www/cgi-bin/にファイルを配置する
/var/www/cgi-bin/は最初からCGIが許可されています。
別フォルダでCGIを動かす場合は設定が必要です。
/var/www/cgi-bin/test.cgiとして配置します。
Hello World!が表示されます。
コマンドを使う

#!/bin/bash
echo “Content-type: text/html”
echo “”
echo “Hello World!”
echo “<br>”
date
echo “<br>” で改行します。
dateコマンドでサーバ時間を表示しています。
複数行の出力が有るコマンドを使う
whoとかwでログイン済みユーザ一覧を表示したかったのですが、普通にコマンドを使うと、複数ユーザが居た場合でも結果が1行で表示されるので困っていました。
ifconfig eth0などでネットワーク・インターフェースの状態を表示する場合も同じです。

ifconfig eth0の結果が1行で出力されています。

↑ 改行されています。
対応方法は以下。
#!/bin/bash
echo “Content-type: text/html”
echo “”
echo “Hello World!”
echo “<br>”
date
echo “<br>”
echo “<br>”
sudo /usr/sbin/ifconfig eth0 > /var/www/html/ifcofigeth0
while read line
do
echo $line
echo “<br>”
done < /var/www/html/ifcofigeth0
ifconfig eth0の結果をリダイレクトで一旦ファイルに出力します。
while read lineを使って1行づつ読み込み、内容をecho $lineで表示します。
echo “<br>”を使って改行します。
ループで繰り返します。
他にもっとスマートな方法が有りましたら教えて下さい。
まとめ
シェルスクリプトの知識をWebに活かせるのは便利です。
条件式を使って表示内容を変えたり、ラジオボタンを使ったりいろいろ可能だと思います。
WebminというGUIから各種Linux設定を参照/設定出来るツールも有りますが、CGIでページを独自に作るのも勉強になると思います。
今回はApacheを動かしているサーバ内に対してコマンドを実行していますが、SSHリモートコマンドを使って他ホストの情報を表示する事も出来ます。
Webmin
https://www.webmin.com/