学生実験 1 : Shell script と gnuplot






更新情報
  • [2005-05-10] Level 4 の access_log について修正.





目的
  • (楽をするために)なるべく自動化を.
  • ミスを防ぎやすくなる.
  • 作業記録としても有用.
進め方
  1. shell script の基礎: Leve 1-2
  2. シェルスクリプト・サンプル
  3. ログ解析: Level 4
  4. 課題と提出方法

shell script の基礎

シェルスクリプトの基本は「コマンドを並べる事」ただこれだけである. C/Java等のコンパイラ言語で書くほどではないが
  • 日頃良く使う一連のコマンド群をより簡単に実行したい
  • 複数のファイル/ディレクトリに対しある処理を実行したい
  • 自動化したい
等,コンピュータにちょっとした仕事をやらせる方法の一つとして「スクリプト言語」を利用したプログラミングがある.具体的な例としては,Perl や PHP を使った WWW 上の掲示板のような目に見えやすいものから,OSの起動処理など,探してみると実に様々な箇所でスクリプト言語が利用されている. 今回はスクリプト言語の一つである sh シェルを利用したシェルスクリプトを作成する.

[ 資料 ] Shell と Shell Script by 白土先生資料(課題2まで)

Level 1
上記ページの課題1. レポートにはコメント付きでソースファイルを記載すること.
Level 2
上記ページの課題2. レポートにはコメント付きでソースファイルを記載すること.

シェルスクリプトサンプル

[ サンプル ] sample-script.tar.gz

引数の使い方: up2html.sh

  • サンプル内の up2html.sh は,引数を利用して異なる処理を実行するシェルスクリプトの例である.(動作確認用スクリプトなので,echo で実行内容を出力させている)
  • [ 参考 ] デーモン起動時にも case を用いたスクリプトを利用しており,Linux系OS(e.g., pw/nirai/kanai/naha) では /etc/rc.d/init.d/ にある.

サムネイル生成

  • thumbnail1.sh: SUFFIX で指定した拡張子を持つ画像ファイルをリストアップ.
  • thumbnail2.sh: SUFFIX で指定した拡張子を持つ画像ファイルを表示するHTMLファイルを生成.
  • thumbnail3.sh: SUFFIX で指定した拡張子を持つ画像ファイルの縮小画像を生成し,表示するHTMLファイルを生成.
Level 3
thumbnail3.sh をベースに,1ページ内に納める写真数(photo_num)を指定し,自動的にページ分割するように拡張せよ.(下表参考)

photo_numpagename (photos)
photo_num=1
  • page1.html (photo1)
  • page2.html (photo2)
  • page3.html (photo3)
  • page4.html (photo4)
  • page5.html (photo5)
photo_num=2
  • page1.html (photo1, 2)
  • page2.html (photo3, 4)
  • page3.html (photo5)
photo_num=3
  • page1.html (photo1, 2, 3)
  • page2.html (photo4, 5)


ログ解析

自分の学籍番号の pw にログインし,httpd へのアクセスログを各自ローカルマシン内に保存せよ.
ダウンロードした sample-script 内にある log/access_log を利用せよ.

httpd へのアクセスログは /var/log/httpd/ にあり,最新は access_log である.

access_log には「アクセス先IP,時刻,メソッド,リクエストのステータスコード」等が含まれている(参考:Apache 1.3 ドキュメント).

このアクセスログを下記の要領で解析するためのシェルスクリプトを作成せよ.

Level 4.1
access_log に記載されているアクセス総数をカウントせよ.

[Tips] man wc

Level 4.2
日毎のアクセス数,IP毎のアクセス数をカウントせよ.

[Tips] man grep, man uniq

Level 4.3
Level 4.2 で求めたカウント数を棒グラフ作成せよ(何れか一つを必須とし,残りはオプションとする).
  • 日毎アクセス数:横軸日付,縦軸アクセス数
  • IP毎アクセス数:横軸IP,縦軸アクセス数(アクセス数トップ10のみで良い)

[Tips] gnuplot による自動グラフ生成

# ファイル「daily.data」に日毎アクセス数を記載してある場合
echo "set terminal png" > daily.gnuplot
echo "set output \"daily.png\" >> daily.gnuplot
echo "plot \"daily.data\" with boxes >> daily.gnuplot
gnuplot < daily.gnuplot

Level 4.4(オプション)
日毎アクセス数の中で最もアクセ数の多かった日について,時間あたりのアクセス数推移図を作成せよ.
Level 4.5(オプション)
Level 4.1-4.4 について,結果をHTMLファイルとして出力せよ.
Check points, options
  • 任意のファイル名について実行出来るか?
  • 任意の日付について実行出来るか?
  • pw にてリアルタイムで解析するにはどうすれば良いか?
  • pw にてバッチ処理(一日毎に解析など)するにはどうすれば良いか?

課題と提出方法

課題
  • 全員必須:全ての Level にトライし,レポートとしてまとめよ.ただし,Level 4 は,4.3 のグラフ作成(1つ)までを必須とする.
提出方法
  • 1人1レポート提出.
  • レポートは LaTeX で作成し,印刷物を提出すること.
  • 表紙に曜日を含める事.
  • 提出期限:翌週実験開始ベルの鳴る前まで(レポートボックス最上段真ん中).それ以降は705室へ.

参考文献・サイト