はじめに
最近思う、安定してサービスを開発・提供するためにはプログラム言語以外に、OSや、その環境構築に関しても知っておかなければならないと。
というのも、もともと言われるがままに構築していたRuby on Railsのローカル環境を壊してしまった。
MAMPというWordPressをローカルで動かすためのツールをインストールした際に意図しないエイリアスができたようだった。
その対応を調べる中で.bash_profile
や.bashsrc
などのファイルについてさんざん調べた。
その中で思ったのは、which
コマンドだったり、当たり前のように備えて知っておくべきLinuxの知識が不足していた。
つまり、改めて自分が「弱いエンジニア」であることを痛感したわけだ。
現在でもMac OS Mojaveに変更すると起こるらしいgem install mysql2
の問題が解決できないでいる。
様々なプログラミング言語のソースや書籍等でもこの環境構築の問題というのは指摘されていて、ここで挫折してしまう人も多数いるというのである。
めっちゃわかる。
小僧は、これを乗り越えたいと強く思っているし、辛いけど、悩み抜いて、シェルスクリプトを覚えて、Dockerだって使えるようになりたいと思っている。
本当は様々なプログラム言語を利用して、自分の思い描くものを作る、楽しいプログラミングをしたい。でも例えばそれをサービスとして提供するとなったらそれは遊びじゃないから、基本だって当然知っていないとお話にならない。
だからやりたいとか、やりたくない、という気持ちは置いておいて、今一度、基礎に立ち返り、遠回りかもしれないがLIunxに関する知識を体系的にしておこうと思うのだ。
ということで、前置きが長くなったが、これからシェルスクリプトに関してインプットするので、その内容をメモしていきたいと思う。
Linuxの標準教科書
インプットのソースとしてはLPI-JAPANが提供しているLinuxの標準教科書を参考にしたいと思う。
また、今回は第9章の「シェルとシェルスクリプト」という内容について取り上げる。
シェルについて
まずは語彙の説明から。
「カーネル」とはOSの基本部分であり、ハードウェアを操作するほか様々な機能を司っているところである。
それに対してシェルとはOSの特にカーネル部分を包み込んでいる部分のこと。
そのため、貝殻という意味でシェル(Shell)という名前がついている。
まさにポケモンの「シェルダー」とかそういう名前がついていたよなっとポケモンレッド・グリーン世代感を出しておく。
シェルはコマンドの入力を受け付けてそのコマンドを実行し、入力したユーザに対してその結果を返す役割がある。
それではそんなシェルに対しる命令であるシェルスクリプトを見ていこう。
シェルスクリプト
Linux標準教科書ではこのような例が挙げられている。
この時に実際に実行するコマンドとしては下記の方法を列挙している
$ tar cvzf 120626-etc.tar.gz /etc $ tar cvzf 120626-home.tar.gz /home $ scp 120626-etc.tar.gz root@backup.local.example.com:~/backup $ scp 120626-home.tar.gz root@backup.local.example.com:~/backup
上記のコマンドの詳細はここでは割愛する。
例えば、この4つのコマンドを定期的に叩く必要があったとしたら、毎度この4つのコマンドを流すのはとても面倒くさいだろうし、ミスの原因になったりするだろう。
そこで登場するのがシェルスクリプトというわけだ。
シェルスクリプトではこの一連の処理をhoge.sh
という名前 で保存することができるのだ。
Linuxの標準教科書ではこのファイルをsystem-backup.sh
としている
#!/bin/bash tar cvzf 120626-etc.tar.gz /etc tar cvzf 120626-home.tar.gz /home scp 120626-etc.tar.gz root@backup.local.example.com:~/backup scp 120626-home.tar.gz root@backup.local.example.com:~/backup
という風にシェルスクリプトを作成しておけば一連の処理を一塊にして実行することも可能だ。
と言っても実際には、「こんな時にはこのコマンドは流さない」とか「この時にはこのコマンドも〜」と言ったような条件の分岐があったりする。
実際のシェルスクリプトはそのような条件分岐や繰り返しとというようなプログラミングの要素をふんだんに使ってファイルが作成される。
次のメモではこのシェルスクリプトのプログラミングの要素を取り上げていく。
ということで今回は内容はそこまで書いていないですがここまでにしておきます。
次回はこちらから