コマンドの結果をブラウザで表示するには(テキスト編)
- カテゴリ:
- Linux
サーバの状態を知りたい時、通常はログインして(直接なり、リモートなり)コマンドを打ちますが、コマンドを1つ打つだけのためにログインするのも面倒くさいです。こんな時に便利なのが指定のコマンドを実行して、ブラウザで表示できるCGI。さてどうすればいいのでしょうか。
最近のLinuxであれば /var/www/cgi-bin/ に今から作る cgiスクリプトファイルをおきます。
まず単純にdfコマンドの結果を表示するプログラムを作ってみましょう。
# vi sample_df.cgi
# chmod +x sample_df.cgi
# cat sample_df.cgi
#!/bin/sh
df -h
シェル上で実行すると、問題ありません。
# ./sample_df.cgi
Filesystem Size Used Avail Use% Mounted on
/dev/hda8 291M 138M 139M 50% /
/dev/hda1 97M 14M 78M 16% /boot
none 506M 0 506M 0% /dev/shm
/dev/hda2 4.9G 188M 4.4G 5% /home
/dev/hda6 485M 11M 449M 3% /tmp
/dev/hda3 3.9G 1.3G 2.4G 35% /usr
/dev/hda5 2.9G 1.7G 1.2G 60% /var
ではブラウザから実行してみます(例 http://server/cgi-bin/sample_df.cgi)。するとエラーになります。
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
ブラウザでデータを表示させるにはブラウザに対し、データの内容はこの形式ですよと教えてあげる必要があります。これを指定しないと上記のようにうまく表示できません。今回はただのテキストですので Content-type: text/plain を指定します。CGIを下記のように修正します。
# cat sample_df.cgi
#!/bin/sh
echo "Content-type: text/plain" ←追加
echo ←追加(改行を加えるために必要)
df -h
そしてブラウザで実行すると、正しく表示されました。ということでとりあえず Content-type が必要だということが分かればブラウザで表示することは簡単です。ただこの方法は単純なテキストですので、色の指定など細かい表示設定は出来ません。
重要な点としてこのようなCGIを作り、インターネットに接続されたサーバに置くには注意が必要です。単純なファイル名(df.cgiなど)では推測されやすいため、情報の盗み読みなどに使われる可能性がありますので、自分にしか分からない複雑なファイル名にした方がいいでしょう。当然ながらパスワードが要求されるディレクトリなどに置くほうがより安全です。
コメント