今週は、昔の共通一次、センター試験、今は、大学入学共通テストというらしい。
高校時代、「トクさん」という友人がいて、成績は優秀だったのだが、優秀になる過程がユニークだった。数学の模試で、答案用紙のおかわりをねだったことがあった。(もちろんくれない。)理由は、式が長すぎて、書ききれなくなったと言っていた。よくよく聞いてみると、何かの公式か定理(知っていれば1発で解けるやつ)を覚えていなく、その場でその公式を導き出して、証明してから解いていたとのこと。えーっ、知ってれば3行で済むはずが、その定理を導き証明するために、答案用紙両面を使ったとのことだった。恐れ入った。結局彼は、数学科へ進んだ。まぁ、自分は、物理の公式を覚えるのが面倒なので、全部微積で解いてしまっていたが。
閑話休題
Linuxホストが一意であることを証明するには、以下のコマンドを実行してみる。
hostnamectl
ここに記載されている、Machine IDがこのホストのIDとなる。
cat /etc/machine-id
何も考えずに仮想マシンのクローンをしてしまうと、たとえホスト名は違っていても、同じMachine IDのホストができてしまう。多分、世の中、machine-idが被っているマシンがゴロゴロあるんじゃないかなぁと思う。
解決策は、テンプレートマシンをシャットダウンする直前に
echo -n > /etc/machine-id
としておくと、次回起動時に自動的にmachine-idを新規生成してくれる。(/etc/machine-idファイルは消してはだめで、空で存在している必要がある。)
ちなみに、この手のコマンドは他にもある。以下サンプル。
結構、色々なものが見れる。
例えば、cat /etc/resolv.confをしてもnameserver 127.0.0.53とかしか帰ってこないけど、resolvectlで調べれば1発でわかる。
これらのコマンドはsystemdパッケージ関連に含まれているはず。
最近、crontabの代わりにsystemctlでスケジュール実行をさせてみたが、実行時間に幅を持たせることができたり、結構便利。
また、だいぶ変わってきたなぁという感じ。
最後に余談
HOSTNAMEを環境変数に入れるとき
HOSTNAME=$(hostname)
は、ダメで正しくは、
HOSTNAME=$(cat /etc/hostname)
の方がいい。hostnameコマンドは、hostnameをしれっと変えられてしまうので危ない。ホスト名を変えたい時は、
hostnamectl set-hostname <ホスト名>
の方がいいと思う。また、ホスト名は、大文字は許されていないので注意。