wet-to-dry’s blog

京大大学院生の備忘録ブログ

linuxで作業ログを取る

初めに

解析用のPCはlinux(ubuntu)なのですが、以前OSをアップデートする際に誤ってクリーンインストールしてしまったので、頑張って作った設定がすべて消えてしまいました。。。

再設定をしていく過程で、記事になりそうなことがあれば、このブログに追記していこうと思います。

目的

解析を開始するときにターミナルから入力していくのですが、この作業をtextファイルで記録することができれば、いつでも見直すことができるため再現性の担保につながります。

今回は、ターミナルの入力および出力をtextファイルで記録する方法について書いていきます*1

内容

設定するところは二カ所です。

まずターミナルを起動し、

$ nano .bashrc

と打ち込みます*2

nanoはeditorと呼ばれ、ターミナル上でファイル内容を編集することのできるコマンドです。

すると、ターミナルの表示が変わり、.bashrcファイルの中身が表示されると思います。

f:id:wet-to-dry:20200929182311p:plain

最終行に

# start alias
alias start="bash /home/*****/local/setting/alias/start.sh"

と記述し、Ctrl+Oで書き込み、Ctrl+Xで終了します。

間違えて.bashrcファイルをいじってしまった場合は、書き込みせずにCtrl+Xで終了してください。

設定ファイルをいじってしまうとめんどくさいので。

aliasコマンドは、新しく好きなコマンドを設定できるコマンドです(今回は"start"というコマンドを作っています)。

*****は自分のusernameを入れてください。ちなみに、.shファイルへのPATHは自分の好きなものにしていただいて構いません。

次に、

mkdir -p ~/local/setting/alias #aliasの.shファイル保存用ディレクトリ作成
mkdir ~/local/log #log保存用ディレクトリ作成
nano ~/local/setting/alias/start.sh

と打ち込み、start.shファイルを指定の場所に作成します。

何も書いていないファイルが開かれますので、

#!/bin/sh
# for make log file
today=$(date "+%Y%m%d-%H%M")
folder=$(basename `pwd`)
echo "Hello! Welcome to ***** PC (・v・)/"
echo "what is your name?"
read name
logfilename=${today}-${name}-${folder}
script /home/*****/local/log/${logfilename}.txt

と記入し、同様に保存します。

このように、.shファイルの中に自分の行いたいコードを記載し、.shファイルを実行することで一度にすべてのコードを実行することをシェルスクリプトといいます。

ターミナルを再起動して、ターミナル上に

start

と入力すると、

Hello! Welcome to ***** PC (・v・)/
what is your name?
wet-to-dry #ここは自分で入力する
スクリプトを開始しました。ファイルは /home/*****/local/log/20200929-1828-wet-to-dry-*****.txt です

という感じでログの記録が開始します。

ログは "/home//local/log/20200929-1828-wet-to-dry-.txt"にテキストファイルで保存されています。

f:id:wet-to-dry:20200929182315j:plain

ログの記録をやめたいときは

exit

と一回入力すれば良いです*3

ログの見方

ログを見るときは

cat /home/*****/local/log/20200929-1828-wet-to-dry-*****.txt

とcatを使ってください。

script関数はcolorcodeが出力に入ってしまっているため、viやnano、text editorなどで見ようとするととても読みづらいです。

cat↓

Script started on 2020-09-29 18:45:06+0900
*****@*****:~$ exit
exit

Script done on 2020-09-29 18:46:03+0900

nano↓

Script started on 2020-09-29 18:45:06+0900
^[]0;*****@*****: ~^G^[[01;32m*****@*****^[[00m:^[[01;34m~$
exit

Script done on 2020-09-29 18:46:03+0900

まとめ

まあ、基本的に解析したら入出力すべて実験ノートにすべきで、実験ノートに書いておけばログ機能はいらないとは思います。

過去の実験ノートをOnenoteで電子化した記事も貼っときます

wet-to-dry.hatenablog.com

*1:大分昔に考えた方法なので、出典などは忘れてしまいました。すみません。

*2:viは難しいのでまだ習得してないです。。。

*3:exitコマンドは終了コマンドなので、もう一度入力するとターミナルが終了します。