Windows 10 Anniversary UpdateからサポートしたWSL(Windows Subsystem for Linux)。その結果としてWindows 10上でもBUW(Bash on Ubuntu on Windows)が動作し、各種Linuxコマンドが利用可能になった。本連載ではWSLに関する情報や、Bashから実行するシェルスクリプトを紹介する。

PCの稼働時刻をWindows 10から取得する

Linuxディストリビューションの多くは、システムの稼働時間を示す「uptime」というコマンドを用意しているが、必然的にBUW起動後のカウントとなるため、PC(Windows 10)の正しい稼働時間を確認することはできない。

「uptime」コマンドを実行した状態。本セッションを開いてから2時間程度が経過したことを確認できる

Windows 10の稼働時間をコマンドラインから確認するには、「systeminfo」コマンドを使用する。こちらはコンピューター名やOS名などと共にシステム稼働時間を確認することが可能だ。安定して動作するようなったWindows 10の場合、更新プログラムの適用時や、特別な動作を必要とするアプリケーションのインストール時以外は、PCを再起動する機会は少ない。

「systeminfo」を実行した状態。「システム起動時間」でPCの大まかな稼働時間を確認できる

だが、オフィスでPCを使用している場合、出社時にPCの電源を入れて退社時にシャットダウンすることを定める企業もある。その場合、自身が出社してからどれだけPCを動かしている=働いているかの目安になるだろう。今回はこのようなスタンスでシェルスクリプトを作成した。

任意のテキストエディターに以下の内容を入力し、必要に応じて出力先のパスなどを変更してから、chmodコマンドなどで実行権限を与えて動作を確認してほしい。

 #!/bin/bash

 ARRAY=(`systeminfo.exe /fo list`)
 SDate=(`echo ${ARRAY[46]} | perl -pe 's/,//g; s/\r\n//m'`)
 STime=${ARRAY[47]}
 SUTC=(`date -d "$SDate $STime" '+%s'`)
 NDate=(`date "+%Y/%m/%d"`)
 NTime=(`date "+%H:%M:%S"`)
 NUTC=(`date "+%s"`)
 DiffTime=(`expr \( $NUTC - $SUTC \) / 60 / 60`)

 echo "起動は" $SDate $STime
 echo "現在は" $NDate $NTime
 echo "経過時間は" $DiffTime "時間"

本シェルスクリプトを実行すると、systeminfoコマンドから情報を抜き出し、現在時刻の差分を計算してから、PCの稼働時間を示す。

シェルスクリプトを実行した状態。既に半月ほど稼働させていることが確認できる

まず3~6行目はsysteminfoコマンドから得られる情報をリスト形式で出力し、配列ARRAYに代入している。その結果を変数SDateと変数STimeに代入し、結果をUNIX時間(協定世界時となる1970年1月1日午前0時0分0秒からの経過秒数)に変換して、変数SUTCに代入した。

7~8行目は後の表示用に現在の日時を取得し、9行目は先ほどと同じように現在時刻をUNIX時間で取得。その結果を10行目のexprで計算し、解に対して60(秒)と60(分)を割って単位を時間に変換した結果を変数DiffTimeに代入した。12~14行目は、その結果を出力しているに過ぎない。

このように簡単なシェルスクリプトでPCの稼働時刻を確認することが可能だ。

阿久津良和(Cactus)