まとめも

大事だと思ったこと、困ったところのメモ

linux機にログインした際に表示されるメッセージをカスタマイズする

linuxマシンにログインすると、

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-64-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.


Last login: Thu Feb 23 17:32:40 2017 from 198.51.100.100

のようにメッセージが表示されます。

このメッセージをカスタマイズする方法を紹介します。

/etc/update-motd.d というディレクトリにはログイン時に表示されるメッセージを表示するスクリプトが入っています。このディレクトリに入っているスクリプトの数字が若い者から順に実行されます。

自分のほかにログインしているユーザー情報を表示するには /etc/update-motd.dスクリプトを追加します。

表示されて欲しい位置にメッセージが来るようにスクリプト名の先頭数字は調整してください。

以下に他のログインユーザー情報を表示するサンプルを載せておきます。

#! /bin/bash

num=`who | wc -l`
if [ $num -lt 1 ];then
  echo "There is no users logged other than you"
  exit
fi

num=`expr $num + 1`
msg="";
for ((i=1; i<$num; i++)); do
  user=`who -u | sed -n $i'p'`
  msg=$msg`echo $user | awk '{print $1 " "}'`
done

echo $num" peoplelogged in ""[ you "$msg"]"

ただし、システム全体に適用される点には気をつけてください。

任意のディレクトリにtmpfs設定する

tmpfsとは

tmpfs設定すると、データが通常HDDに書き込まれるところをメモリー上に書き込まれるようになります。

なぜ必要か

一般的に記憶装置の書き込み回数には上限があります。特にフラッシュメモリーの上限は数千回と言われています。

機器の寿命を減らすとともに、メモリー上に書き込むため、高速に動作するtmpfsを特定のディレクトリに適用する方法を説明します。 /dev/shm というディレクトリは、最初からtmpfsに設定されているため、どこでも良いという人はここを使うこともできます。

tmpfs設定

まず、 /etc/fstab を編集します。

/home/admin/tmp というディレクトリを、32Mbyteのサイズで設定する場合の例

tmpfs   /home/admin/tmp    tmpfs   defaults,size=32m,noatime,mode=1777  0  0

上記の設定を /etc/fstab に追記します。

次に、再起動します。

最後に、df -h で確認します。

tmpfs            32M     0   32M   0% /home/admin/tmp

先ほどの設定例の場合、上記のような行が見えると成功です。

最後に

tmpfs設定したファイルは、リブートやシャットダウンで中身が消えてなくなることに注意してください。

/etc/rc.local に書かれた内容は起動時に実行されるため、 tmpfs/etc/rc.local をうまく使うと、機器に負担の少ないシステム構築が可能です。 rc.local に書かれたスクリプトは起動時に管理者権限で実行されます。また、編集には管理者権限が必要です。

自分は大丈夫!ではありませんでした...

はじめに

 今回は、この1年を振り返って気付いた事について書きます。自分は大丈夫!そう思っている人結構多いと思います。実際、私も大丈夫そう思ってました。しかし、全然大丈夫ではありませんでした。同じように考えている人がいたら、しっかりと休んで欲しいという思いで書きました。

不思議な感覚

 とあるタスクが終了した次の日、目を覚ますと昨日まで、何に追われていたのか、何をそんなに焦っていたのか全く思い出せない自分がいました。 ふと我に返ると、そんなに仕事が残っていないことに気付きます。時間にも余裕があるではありませんか。昨日まで何に対して焦っていたのか自分でもとても不思議であのような感覚は生まれて初めてでした。

実家に帰る

 時間的に余裕があると気付いたので、久しぶりに実家に帰りゆっくりすることにしました。車窓から見える景色はなぜかとてもきれいで、その景色を見ながらいろいろなことを考えていると、自分を完全に見失っていたことに気付きました。これまでずっと「自分は大丈夫」と言っていましたが、全然大丈夫ではなかったのです。このことに気付くまでの私は「自分は大丈夫」と本気で考えていました。今考えると本当に恐ろしいです。周りの方にも相当迷惑をかけていたのに、全く気付けていませんでした。

 実家に到着し、家事やタスクから解放されると、とても眠くなり3日くらい食べるか寝るかみたいな生活をしていました。こんなにゆっくり休んでのはいつ以来か思い出せないほど前だと、ここでも新たな気付きがありました。母からも、こんなに寝るのは初めてだと言われました。

何が悪かったのか

 結論から言うと、見栄を張ろうとして、自分の許容量以上の仕事をしたことが原因だと思います。 自分の許容量以上の仕事をするということは、自分のために使う時間を削って仕事をするということになります。これによって、心の休息時間も削られ心の余裕が無くなっていったのでした。それなのに、「自分は大丈夫」そう信じて同じように仕事を続けたのがよくありませんでした。

 無理して仕事を終わらせていたとしても、仕事を指示する側からすれば、仕事を終わらせている訳なので、仕事を与えても大丈夫という理解になっていくのだと思います。

どうすればよかったのか

 見栄を張ることなく、素の自分で出来ることを重ねていく。これで、良かったのだと思います。

無理してしんどくなって、周りの人もしんどい気持ちにさせたほうが、よっぽどかっこ悪い。

心の余裕が無くなって来ると、

  • 狭い範囲しか見えなくなる
  • 不満が増える
  • 自分のことを振り返らなくなる

本当に碌なことがありませんでした。もっと早く気付くべきでした。

警告してくださる人の言葉にもっと真摯に耳を傾けるべきでした。

学んだこと

見栄を張ることで、仕事量が増加、休息時間が少なくなり、心の余裕が無くなる
心の余裕が無いから、狭い範囲で物事を考えてしまう。
狭い範囲で考えてしまうから、もっと心の余裕が無くなる

という完全に悪のスパイラルに陥っていました。

 しんどい状態でも、作業が楽しいと思っていましたが、全く楽しんでいなかったです。最近同じような作業をする機会があったのですが、こんなに楽しかったのかと驚いたほどです。

 今では、休むことが仕事の質も向上させることは、ほぼ間違いないと考えています。実際休むべき時にしっかりと休み、仕事をするときに集中して仕事をするほうが良い成果が出るような気がします。

 休む時は、仕事でしていることと違うことをするのが良いのかもしれません。私は、趣味と仕事を混同してしまっていました。それも良くなかったです。普段と違うことをすると新たな発見がありますし、気分のリフレッシュという意味でも、いろいろな事に興味を持つことや、やったことのないことをやっていきたいと思っています。

最後に

 社畜という言葉がありますが、まさに私は社畜でした。全く自分ではそうは思っていませんでしたが、冷静に見るとどう見てもそれでした。自分の事で精いっぱいになり、余裕が無くなって、周りの気分も悪くするそんな人間になってしまっていました。本当にごめんなさい。そして、我慢して耐えてくれた周りの方に感謝です。

 これからは、二度と同じ失敗を繰り返さないように、定期的に休みそこで自分を振り返る時間を作ることを義務付けたいと思います。好きな事をする時間を増やし、これまでやってこなかったことにも手を出してみようと思っています。自分に正直にありのまま生きて行きます。

 自分は大丈夫と思っている人も休んだほうが良いです!小さな無理を重ねると自分が思っている以上に疲れがたまるみたいです。

 最後まで読んで頂きありがとうございました。

scpで複数のファイルをまとめて送信する

scpで複数ファイルをまとめてコピーする方法が意外と知られていないようなのでメモします。

scpとは

SCP (Secure Copy Protocol)は、SSHの仕組みを用いてファイルをコピーできるプロトコルです。 使いかたは通常の cp コマンドと同じように使用できます。

scp [ファイルのコピー元] [コピー先]

ローカルホスト内(同じマシン内)でも利用できますが、基本的にはローカルホストとリモートホスト(別のマシン)のファイルやり取りでよく使われます。 ファイル送信や受信する際ファイルのパーミッション関連でエラーメッセージがでることがあります。 その際は一度/tmpに置くとうまくいくと思います。

基本的な使いかた

ファイルを送り込む

scp [ユーザー名]@[ホスト名]:[リモートファイルパス] [ローカルファイルパス]

例)

リモートマシンのユーザー名が remoteusername
リモートマシンのドメイン名が hostname.remote
送信元ファイルが ~locausername/src_file
送信先ファイルが /tmp/dest_file

の場合

scp ~localusername/src_file remoteusername@hostname.remote:/tmp/dest_file

ファイルを取り込む

scp [ローカルファイルパス] [ユーザー名]@[ホスト名]:[リモートファイルパス]

例)

リモートマシンのユーザー名が remoteusername
リモートマシンのドメイン名が hostname.remote
受信元ファイルが /tmp/src_file
受信ファイルが  ~localhostname/dest_file

の場合

scp remoteusername@hostname.remote:/tmp/src_file ~localusername/dest_file

複数のファイルをまとめて送信する

ファイルを送り込む

scp { [ローカルファイルパス] [ローカルファイルパス] ... [ローカルファイルパス] } [ユーザー名]@[ホスト名]:[リモートディレクトリ]

例)

リモートマシンのユーザー名が remoteusername
リモートマシンのドメイン名が hostname.remote
送信元ファイルが /tmp/src_file1と/tmp/src_file2
送信先ディレクトリが ~remotename/dest_dir

の場合

scp /tmp/src_file1 /tmp/src_file2 remoteusername@hostname.remote:/tmp/dest_dir/

IoTに関わって感じたこと

IoTとは

Internet of Things とは、あらゆるものをインターネットにつなげることで面白いことが出来るのはないかという考えで、現在業界のトレンドと言われています。 あらゆるもののデータを集めることでこれまで見えてこなかった情報が得られるのではと期待されています。

実際にIoTに関わって

コンピュータは気温の変化や水に弱い

コンピュータは本来空調の効いた快適な部屋に設置され使われるものです。現代では、スマートフォンのほとんどが防水・防塵に対応している時代となり、この当たり前のことを忘れがちですがコンピュータは精密機器であり、水に近づけることは危険なことなのです。

コンピュータが動くためには電気が必要

コンピュータを動かすためには電気が必要です。最近のスマートフォンは大容量バッテリーを積んでおり3000mAhを超えることも普通のこととなってきています。そのため、1日心配せずに使えるようになりましたが、IoTは厳しい環境に設置されることもあり、その場合は電池で動かすのですが、充電電池のエネループの最も性能が高いモデルで2500mAhです。これらが意味する事は、スマホ1台の電池より少ない電気で半年から1年程度動かすということです。

何事も物理が大切

物理とは、ケーブルやコンピュータそのもののことを指します。トラブルが起こるほとんどが物理障害であるといわれています。 特にIoTでは、機器が屋外に置かれることもあり、機会にとって過酷な環境です。そのため、物理的なトラブルも起こりやすくなります。 通常のコンンピュータは屋内かつ空調の効いた部屋に置かれることが多いので、気温の変化はそれほど大きくありません。一方で、屋外に設置された場合1日の気温差が10℃以上あることも珍しくありません。夏の昼間と冬の夜明け前は、特に過酷な環境と言えると思います。

このような環境で、安定してシステムを動かすことはとても厳しいことであるように感じました。 一方で、このような困難を乗り越えて安定して動くシステムを構築するこの過程こそIoTの醍醐味なのかもしれないとも感じました。

言葉の一人歩き

ビッグデータクラウド、IoTこれらは、キーワードが注目されとりあえずやっておこうみたいな企業が多いように感じています。 目的を持ってやる事が大切だと思うのですが、方法が目的になっていて意味のわからないことになっているように感じています。

私は、この3つの言葉はとても密接な関係がある言葉であると思います。  IoTは、あらゆるものから情報を集めて面白いことをしようという考え方  ビッグデータは、多くの情報から傾向を見つけ出し、その傾向を利用してマーケティングを行ったり、将来の予測を行ったりしようという考え方  クラウドはネットワーク上のコンピュータに情報を置いておいてそこに情報を集めどこからでもアクセスすることができるようにしようという考え方 これらから言えることは、多くの情報を効率良く集め、利用しようということです。 これからは、多くの情報をどのように使うかということが課題となってくるのではないかと考えています。いずれAIがこれらの情報を処理するようになると思っていますが、そのAIプログラムが完成するまでは、人間がすることになるでしょう。

JavaScript [object Object]の中身を確認する

JavaScritptでコードを書いて、動かしてみると自分の意図しない結果だった場合、デバックが必要となります。この際に便利なのが、 console.log です。 console.log("文字列"); で文字列を、 console.log(変数); で変数の中身をブラウザの開発者モードのコンソールに表示することができ、動作がどこまで意図した動作をしていて、どこから意図しない動作になっているのかの切り分けに使うことができます。jsonを扱った際に [object Object] で少し詰まったのでメモします。

[object Object]

jsonというデータ形式JavaScriptで扱った際に、変数(jsondata)にjsonのデータがきちんと入っているのか確認しようと、console.log(jsondata); を書き足し、ブラウザから確認すると、 [object Object] と表示されてしまいます。 これでは、正しくデータが入っているのか入っていないのか確認することができません。

中身を見たい

変数(jsondata)のデータをコンソールに表示する場合

console.log(JSON.stringify(jsondata));

JSON.stringify() を使うことで、jsonデータの中身をコンソールに表示できるようになります。

Let'sEncrypt証明書の自動更新を行う

Let's Encryptは、難しい手続きなく証明書を取得できる素晴らしいサービスですが、証明書の有効期限が90日と短いことが特長です。 今回は、この証明書の更新をcronで自動的に行いたいと思います。

cronとは

指定した時刻に処理を自動的に行ってくれる仕組みのことです。

更新方法

WEBサーバーの停止

apachectl stop WEBサーバーが動いていると、更新することが出来ないので停止させます。

証明書の更新

admin@ubuntu:/home/admin/certbot$ ./letsencrypt-auto renew --force-renew

このコマンドを叩けば強制的に証明書が更新されます。ただし、特定の期間で更新できる上限が設けられているのでテストを行う際は--dry-runオプションをつけると良いと思います。

WEBサーバーの再開

apachectl start 更新が終わったら、サービスを再開させます。

これらを自動化する

シェルスクリプトを用意する

#!/bin/bash
#apacheの停止
apachectl stop

cd /home/admin/certbot

# --dry-runオプションをつければ、証明書は更新されずに動作のみ確認することができる
./letsencrypt-auto renew --force-renew

#apache再開
apachectl start

このスクリプト/root/update.sh として保存します。

cronで定期的に実行する

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/

43 4 1 * * root /root/update.sh

/etc/cron.d/update-everymonth として保存します。(パスがあっていれば名前はなんでも良いです。) update-everymonth は毎月1日の04:43に/root/update.shをroot権限で実行するという内容が書かれています。

Let's encrypt で証明書取得

li-one.hatenablog.jp