こんにちは、おはじきです。
9月も中頃になり少しは涼しくなってきましたかね。
1~2週間くらい前までは外に出なければいけない用事があるとセミファイナルに怯えながら外を歩いたものですがその脅威はもう過ぎ去りましたね。
これから秋がやってきて段々過ごしやすくなってくると思うので楽しみです。
さて、本日の内容は「シェル」についてです。
Linuxを学んでいるとメジャーなディストリビューションでは基本的にデフォルトのシェルはbashである、
なので私はbashを利用している。
という事はわかっていてもシェルがなんなのかイマイチよく分かっていない、
という方が多いのではないでしょうか?
少なくとも私はついこの間までそんな感じでした。
Lpic102でシェルスクリプトの単元がありますので、
これを機にシェルについてしっかり理解しようと思い、色々調べてみましたので、
その備忘録として今回解説させていただきます。
シェルにはいくつか種類がありますが、今回はデフォルトにして一般的に利用されているbashの利用を前提といたします。
シェルとは、ユーザーと、Linuxの核となるカーネルと呼ばれるシステムとのやり取りを仲介してくれるインターフェースの役割を果たします。
以下の図で、ユーザーとシェルとカーネルの関係性を簡単に図解してみました。
ユーザーが自分のやりたいことをコマンドやシェルスクリプトなどを利用してカーネルに伝えます。
例えば今自分がいるディレクトリがどこなのか知りたくなったらpwdコマンドを利用しますが、カーネルに直接pwdと言ってもカーネルは理解してくれません。
そこでシェルが通訳のような役割を担ってpwdというコマンドを使って何をしたいのかをカーネルが判断できる言葉で伝えます。
そうすることによってカーネルが「ああそういう事ね」とユーザーがどのディレクトリにいるかを教えてくれます。
シェルという名前の由来は、図の様にカーネルを包む殻(shell)の様な構図になっていることからつけられているようです。
Linuxでは何をやるにしてもカーネルを通さなければならないので
ユーザーの要望をカーネルに伝えてくれるシェルの役割はとても重要です。
ここからは、シェルが効率よくカーネルとユーザー間のやり取りを行うための重要な要素の一つである変数についてご紹介いたします。
まず変数とは何か。
変数とは名前のついた入れ物とよく言われていて、好きな値を入れておくことで、その名前を使っていつでもその値を呼び出せるという機能です。
Linuxには環境変数とシェル変数という二種類の変数があります。
まず環境変数ですが、シェル自身とそのシェルから起動される全てのプログラムで利用できる変数が環境変数です。
代表的なものをあげると、
・コマンドを検索するディレクトリリストを格納している「PATH」
・ユーザーのホームディレクトリのフルパスを格納している「HOME」
などがあります
環境変数はenvコマンドやprintenvコマンドで確認できます。
画像はenvコマンドで表示した環境変数の一部分です。
一番上のPWDという変数は自分が今いるディレクトリが格納されている変数です。
変数の名前=変数の内容という書式で保存されています。
一方シェル変数ですがこちらはそのシェル内でのみ利用できる変数となります。
exportコマンドを使って環境変数に変換するか「~/.bash.profile」などのシステムが起動したときに自動で読み込まれるファイルに記述しておかないとログアウトする度に消えてしまいます。
シェル変数は自分のシェルの中だけで利用できるので自分だけが利用するスクリプト用の変数として利用します。
それでは実際に変数を定義してみましょう。
環境変数に関しては直接定義することはできず、
シェル変数を定義して、それをexportすることによって定義する事ができます。
シェル変数を定義するには以下の構文を利用します。
変数名=値
以下の画像のように定義します。
変数の中身が見たければ
echo $変数名
と入力することで変数に格納されている値が表示されます
変数が使えるようになると設定ファイルなどを書くときなどに、
長いフルパスを記述する時も事前にフルパスを変数に入れておくことで、
短い変数名だけでフルパスを表現できたりしてとても便利です。
次回は今回の内容の発展形としてシェルスクリプトについてお話していこうと思います。
それでは。