【Linux】シェルってなに?!その内容から具体的な役割・機能まで徹底解説!
Linuxにおけるシェルとは、Linuxの核となるカーネルへ要求を伝達するプログラムです。そして、ユーザーとLinuxOSを繋ぐインターフェイスの役割を果たしています。今回は、Linuxを知る上で必ず理解しておかなければならない「シェル(shell)」について、その具体的な役割や機能を徹底解説します。
目次
シェルってなに?
Linuxを扱う技術者にとって、シェル(shell)は基本知識です。
逆に、シェル(shell)を理解することである程度自由にLinuxを使いこなすことができるようになります。
Linuxのカーネルとユーザーを繋ぐインターフェイス
シェルは、LinuxOSの核となるカーネルとユーザーを繋ぐインターフェイスといった関係性です。
Linuxのカーネルという心臓部は、LinuxOSを支える多数のプログラムによって構成されています。ユーザーはこれらプログラムの集合体に、必要な動きを要求することで、Linuxを”コンピューター“として利用しているのです。
ユーザーによる要求はまずシェルが受け取ります。シェルは受け取った要求を翻訳してカーネルに渡します。そしてカーネルは、シェルから受け取った翻訳済みの要求を実行するわけです。
シェルは、カーネルを包む「殻」のようなポジションであることから、英単語の「shell」、つまりシェルと呼ばれているのです。
シェルスクリプトは要求コマンドのかたまり
一般的に「シェルを使える」という技術は、「シェルスクリプトを書くことができる」という意味で使われます。
シェルに対するコマンドを理解し、一連の要求をコマンドで組み立てることができるということです。
そして、組み立てられたコマンドのひとかたまりを「シェルスクリプト」と言います。シェルスクリプトは一種のプログラミングです。
コマンドの羅列はもちろん、以下のような条件分岐やループ文など利用できます。
・if文
・for文
・while文
・case文
これらを駆使して、Linux運用におけるバッチ処理などを操るシェルスクリプトをプログラミングすることが可能なのです。
シェルスクリプトの種類
ユーザーがシェルへ送るコマンドのかたまりをシェルスクリプトと言いますが、シェルスクリプトにも以下を代表する様々な種類が存在します。
- sh:Bourne shell
- bash:Bourne-Again shell
- csh:C shell
- ksh:Koran shell
Linuxでは基本的に「sh」や「bash」を利用する人が多いのではないでしょうか。
sh(Bourne shell/Bシェル)
sh (Bourne shell/Bシェル)は、AT&Tベル研究所のスティーブン・ボーン氏が1977年に開発したシェルで、コマンド名を「sh」としています。
Bシェルとも呼ばれており、現在では標準的なシェルプログラムとして広く使用されているシェルです。
コンパイルを不要とし、シェルスクリプトには変数などが利用できるようになったものBシェル(Bourne shell)が初めてです。
それまでのシェルに比べるとプログラミング要素を多く取り入れており、シェルスクリプトを組みやすくなったシェルでもあります。
bash(Bourne-Again shell)
bash(Bourne-Again shell)は、sh(Bourne shell/Bシェル)をベースに様々な機能が拡張されたシェルです。Linuxでもbashが多く使われています。
bashはもちろんsh(Bourne shell/Bシェル)と互換性がありますが、更に複雑なシェルスクリプトを組むことが可能です。
\ IT転職のプロが無料でサポート! /
シェルの具体的な役割と機能
シェルの役割と機能のイメージは掴めたと思いますので、ここでは、より具体的な例を見ていきましょう。
シェルの役割と機能の具体的な動き
シェルの役割は、ユーザーの要求をカーネルに伝えることでした。ユーザーは基本的に、ターミナルからLinuxに接続し、コマンドを入力することでLinuxを操作します。
ターミナルとは、CUIコマンドを受け付けるための画面で、イメージとしては“ハッカーが使う黒い画面”ですね。
例えば、今現在ユーザーが見ているディレクトリである「カレントディレクトリ」を確認する要求を、具体的な動作と順番で整理すると次のようになります。
- ユーザーがPC上でターミナルを開く
- ターミナル上で「pwd」コマンドを入力
- エンターキーで決定
- 「pwd」コマンドがシェルに渡される
- シェルが「pwd」コマンドの意味を「カレントディレクトリの表示要求」と解釈する
- シェルは「カレントディレクトリの表示要求」をカーネルに伝える
- カーネルは「カレントディレクトリ」をシェルに伝える
- カーネルから教えてもらった「カレントディレクトリ」をシェルがターミナルに表示する
- ユーザーはターミナルに表示されたカレントディレクトリを確認する
一つの要求コマンドでは、簡単にイメージするだけでもこれだけの動作が行われており、その中でもシェルは、ユーザーとカーネルの間で重要な役割を果たしているのが分かりますね。
シェルスクリプトを使うと便利なシーン
実際にシェルスクリプトを使うと様々なシーンで作業の効率化を図ることができます。
その中でも、代表的なシェルスクリプトの使い方を見ていきましょう。
logの吐き出し
Linuxで稼動させるものとしてはサーバーがあります。
例えばWebサーバーであれば、ページが表示されなかったり、特定のプログラムが読み込めずにページの一部が欠落したりというトラブルがありますよね。
そんな時、サーバーのlogを吐き出すシェルスクリプトを仕込んでおくと便利です。
サーバーエンジニアは、トラブルがあれば最初にlogを確認します。そこにはサーバー上で起こるイベントのほとんどが記載されているのですが、その中から特定のエラーコードや文字列を定期的に“別ファイル”へ吐き出すことで、迅速なトラブル解決が可能になります。
これらの作業を単発のコマンドで毎回確認するのは非効率です。
そこで、シェルスクリプトをあらかじめ作っておくことで、そのシェルスクリプトを実行するだけで原因の特定を効率的に進めることができるのです。
疎通確認
Linux上で稼動するサーバーには、常に疎通しておくべき機器が多数存在します。特にバックアップ用のサーバー(セカンダリサーバーなど)は、実際に稼働しているサーバーと常に同期を取りながら運用するものです。
それら機器との疎通が取れているかを常に監視する機能も、シェルスクリプトで作成可能です。
一定の間隔でping(疎通確認コマンド)を飛ばしながら、応答が無い機器があった場合に通知するなど、シェルスクリプトを実行しておくことで、突然ダウンした機器をすぐに察知し対処することができるのです。
シェルスクリプトの具体例
ここで、シェルスクリプトの具体例を見ていきましょう。基本的にはコマンドの羅列で、書いた順番に上から下へ実行されるインタプリタ型です。
ですので、実行したい機能の流れとコマンドをしっかりと理解していれば、複雑なロジックはほとんど必要ありません。(もちろん、シェルスクリプトに持たせる機能によります。)
シェルスクリプトの記述方法
それではシェルスクリプトの記述方法を見ていきましょう。ここでは例としてbashを利用します。
以下、bashを利用して「Hello World」を表示させる方法です。
#!/bin/bash
echo “Hello World”
exit 0
1行目:「bash」を利用するため、bashへのパスを宣言しています。
2行目:「Hello Warld」を表示することを要求しています。
3行目:シェルスクリプトの正常終了を意味しています。
シェルの実行方法
シェルスクリプトを書いたら、ファイルを保存しますが、拡張子は「.sh」です。
例えば、ファイル名を「hello.sh」とした場合は、実行時に以下のようなコマンドを入力します。
# bash hello.sh
これだけです。
※実行前にシェルスクリプト自体の実行権限を変更し、実行ファイルとしての許可を与える必要があります。
スクリプト言語を利用する際には
Kornシェルは、スクリプト言語で用いる高度な機能を備えています。例えば、JavaScriptが有効なウェブサイトの構築、膨大なデータの数値化を行う場面で有用です。因みに、多様なオペレーティングシステムに対応しているため、トラブルが発生した時のリスクを軽減しやすいでしょう。
環境変数PATHの設定
シェルスクリプトを実行する時、プログラムの名前と場所を入力・指定する必要があります。しかし実行する度、入力・指定する作業は面倒ですよね。そこで役立つのがPATHの環境変数です。
先ず「echo」コマンドを活用し、環境変数PATHを表示させます。次に「export」コマンドで環境変数を設定しましょう。この時「:」で区切れば、複数のプログラムの名前を登録可能です。但し、探索の優先順位を一律にすることはできません。先頭に記されたものほど、優先的に探索されます。
コマンドの出力先をファイルに変える
通常コマンドを実行した結果は、ディスプレイに標準出力されます。もしも出力先をファイルに切り替える時には、リダイレクション記号が役立つでしょう。以下にリダイレクション記号の使い方と種類を紹介します。
>
入力するリダイレクション記号が1個の場合、コマンドの実行結果を指定したファイルに上書きします。その代わり、既に書き込まれている内容が全て消去されるため、ファイルの指定には要注意です。
>>
入力するリダイレクション記号が2個の場合、コマンドの実行結果が指定したファイルの最下行に追加する形で出力されます。
上記、両方ともコマンドの後に続けて入力し、出力先のファイルの名前を指定します。尚、書き込みの対象となるファイルが存在していなかったとしても、自動的にファイルが新規作成され、実行結果を残すことが可能です。
コマンドの入力
シェルがbashの場合、ショートカットキーを活用して作業を進められます。ポピュラーなショートカットキーは、以下の通りです。
CtrlプラスA
カーソルを入力した文字列の先頭に移動させます。
CtrlプラスE
カーソルを入力した文字列の最後尾に移動させます。
CtrlプラスH
カーソル左側に入力されている文字を削除します。
CtrlプラスD
カーソルの上方に入力されている文字を削除します。
Tab
入力の途中で押すことによって、自動的に文字列が補完されます。
上記の他にも色々なショートカットキーがあります。UNIXを導入する折、一通り覚えておくと便利でしょう。
まとめ
- シェルはLinuxのカーネルとユーザーを繋ぐ
- シェルはユーザーの要求を受け取ってカーネルに渡し、カーネルが要求を実行する
- シェルへの要求をまとめたシェルスクリプトを作っておくと作業の効率化を図ることができる
シェルは、Linuxのカーネルとユーザーを繋ぐインターフェイスであり、カーネルの「殻」のポジションを担います。
ユーザーがターミナルを使ってコマンドを実行した際には、シェルがカーネルに要求を伝え、カーネルから返ってきた結果をユーザーに伝えてくれるのです。
そして、ユーザーはシェルの存在を利用して「シェルスクリプト」を作成することで、複雑なバッチ処理などをコマンド一つで実行することも可能になります。
Linuxをメインに利用するサーバーエンジニアにとって、シェルを理解することは必要不可欠な知識だということですね。
あわせて読みたい関連記事
この記事を読んでいる人におすすめの記事