このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:システムログ情報を簡単に確認するシェルスクリプト

システムログ情報を簡単に確認するシェルスクリプト

 シェルスクリプトは、既存のコマンドを組み合わせて新しい機能を持つコマンドを作成する強力なツールです。特に、パイプラインやリダイレクトなどのシェル機能を活用することで、複雑な問題を効率的に解決できます。Linuxにはフィルタとして動作する便利なコマンドが多数存在し、これらを組み合わせて課題を解決していくことがシェルスクリプトの基本的な考え方です。

 実際、Linuxのコマンドの中にはシェルスクリプトで書かれているものが多くあります。以下のコマンドを使用して、シェルスクリプトで書かれたコマンドを探してみましょう。

シェルスクリプトで書かれたコマンドを探す

user01@ubuntu:~$ file /usr/bin/* | grep 'shell script'
/usr/bin/Xorg:                               POSIX shell script, ASCII text executable
/usr/bin/acpidbg:                            Bourne-Again shell script, ASCII text executable
/usr/bin/apg:                                POSIX shell script, ASCII text executable
/usr/bin/apport-bug:                         POSIX shell script, ASCII text executable
/usr/bin/apt-key:                            POSIX shell script, Unicode text, UTF-8 text executable
/usr/bin/bashbug:                            POSIX shell script, ASCII text executable
...(省略)...

 このように、/usr/bin ディレクトリ内にも多くのシェルスクリプトが含まれていることがわかります。

システムログ確認用シェルスクリプトの作成と解説

 ここでは、システムのログ情報を簡単に確認できるシェルスクリプト logview.sh を作成し、その作成から実行までの手順と解説を行います。

スクリプトの目的

  • システムログディレクトリ /var/log 内の主要なログファイルを一覧表示する。
  • ユーザーが選択したログファイルをリアルタイムで表示する。

スクリプトの作成手順

1.スクリプトファイルの作成

ターミナルで以下のコマンドを実行し、新しいスクリプトファイル logview.sh を作成します。

user01@ubuntu:~$ nano logview.sh

2.スクリプトの内容を記述

logview.sh の内容

#!/bin/bash

# ログファイルのディレクトリ
logdir="/var/log"

# 利用可能なログファイルの一覧を取得
logs=$(ls $logdir | grep -E 'syslog|auth.log|dmesg')

echo "表示可能なログファイル一覧:"
echo "$logs"

# ユーザーに表示したいログファイルを選択させる
echo -n "表示したいログファイルを入力してください: "
read logfile

# ファイルの存在確認
if [ ! -e "${logdir}/${logfile}" ]; then
    echo "エラー: ログファイル '${logfile}' が存在しません。"
    exit 1
fi

# ログファイルをリアルタイムで表示
echo "ログファイル '${logfile}' を表示します。終了するには Ctrl+C を押してください。"
tail -f "${logdir}/${logfile}"
解説

logview.sh を部分ごとに解説します。

ログディレクトリの設定

システムのログファイルが保存されているディレクトリを指定します。

logdir="/var/log"

ログファイルの一覧取得

  • ls コマンドでログディレクトリ内のファイル一覧を取得し、grep で特定のログファイル(syslogauth.logdmesg)にマッチするものを抽出します。
  • $(...) はコマンド置換で、コマンドの実行結果を変数に代入します。
logs=$(ls $logdir | grep -E 'syslog|auth.log|dmesg')

ログファイル一覧の表示

利用可能なログファイルをユーザーに表示します。

echo "表示可能なログファイル一覧:"
echo "$logs"

ユーザーからの入力受付

  • ユーザーに表示したいログファイル名を入力してもらい、logfile 変数に保存します。
  • echo -n は改行せずにメッセージを表示します。
echo -n "表示したいログファイルを入力してください: "
read logfile

ファイルの存在確認

  • 入力されたログファイルが存在するか確認します。
  • -e はファイルが存在するかをチェックします。
if [ ! -e "${logdir}/${logfile}" ]; then
    echo "エラー: ログファイル '${logfile}' が存在しません。"
    exit 1
fi

ログファイルのリアルタイム表示

  • tail -f コマンドでログファイルの末尾を継続的に表示します。
  • リアルタイムでログの更新を確認できます。
echo "ログファイル '${logfile}' を表示します。終了するには Ctrl+C を押してください。"
tail -f "${logdir}/${logfile}"

3.スクリプトに実行権限を付与

スクリプトを実行可能にするために、実行権限を付与します。

user01@ubuntu:~$ chmod +x logview.sh

4.スクリプトの実行

スクリプトを実行してみましょう。

user01@ubuntu:~$ ./logview.sh

実行例

user01@ubuntu:~$ ./logview.sh
表示可能なログファイル一覧:
auth.log
auth.log.1
auth.log.2.gz
auth.log.3.gz
(省略)
表示したいログファイルを入力してください: auth.log
ログファイル 'auth.log' を表示します。終了するには Ctrl+C を押してください。
2024-11-24T02:17:01.625722+09:00 ubuntu CRON[5239]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
...(ログの内容が表示されます)...

解説

  • スクリプトを実行すると、指定されたログファイルの一覧が表示されます。
  • 表示したいログファイル名を入力すると、そのログファイルの内容がリアルタイムで表示されます。
  • Ctrl+C を押すことで表示を終了できます。

5.作成したシェルスクリプトの削除

演習で作成した logview.sh を削除します。

user01@ubuntu:~$ rm logview.sh

まとめ

 シェルスクリプトを活用することで、既存のコマンドを組み合わせて新しい機能を持つツールを簡単に作成できます。今回のスクリプトでは、システムログを手軽にリアルタイムで確認できるようになりました。シェルスクリプトは日々の業務の効率化や作業の自動化に非常に有用です。これからもシェルスクリプトを活用して、さまざまな課題を解決していきましょう。