Apache CGI/bashでコマンド出力結果を改行する方法

Linuxコマンドの結果をWebに表示したい

Linuxサーバ運用を行っているとターミナルからコマンドを打つ事は日常的に行っていますが、Webからステータスを確認出来たら楽だなぁと思う様になりました。

単にコマンドを打ってスタータスを確認するに留まらず、繰り返し行う設定変更などをスクリプト化しておいてWebからポチって実行出来たら運用が楽になります。

CGIを使って動的なWebページを表示する

普通にHTMLを使ってWebページを書いただけでは、コマンドの結果などの動的な内容を表示する事が出来ません。
今回はbashを使ったCGIでLinuxコマンドの結果を表示します。

/var/www/cgi-bin/にファイルを配置する

/var/www/cgi-bin/は最初からCGIが許可されています。
別フォルダでCGIを動かす場合は設定が必要です。

!/bin/bash
echo “Content-type: text/html”
echo “”
echo “Hello World!”

/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コマンドでサーバ時間を表示しています。

Macターミナル風のプラグインが<tag>に対応していない為、白抜きBoxで表示しています。

複数行の出力が有るコマンドを使う

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/

TwitterFacebookLinkedInHatenaPocketCopy Link