カテゴリから探す
Geekly
コラム
技術・
テクノロジー
職種・
ポジション
Web・
ゲーム
転職準備
転職活動
  1. HOME
  2. Geekly Media
  3. 技術・テクノロジー
  4. 【Linux】シェルってなに?!その内容から具体的な役割・機能まで徹底解説!
  • 技術・テクノロジー

【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を利用する人が多いのではないでしょうか。

 

shBourne shellBシェル)

 

sh (Bourne shell/Bシェル)は、AT&Tベル研究所のスティーブン・ボーン氏が1977年に開発したシェルで、コマンド名を「sh」としています。

Bシェルとも呼ばれており、現在では標準的なシェルプログラムとして広く使用されているシェルです。

コンパイルを不要とし、シェルスクリプトには変数などが利用できるようになったものBシェル(Bourne shell)が初めてです。

それまでのシェルに比べるとプログラミング要素を多く取り入れており、シェルスクリプトを組みやすくなったシェルでもあります。

 

bashBourne-Again shell

 

bash(Bourne-Again shell)は、sh(Bourne shell/Bシェル)をベースに様々な機能が拡張されたシェルです。Linuxでもbashが多く使われています。

bashはもちろんsh(Bourne shell/Bシェル)と互換性がありますが、更に複雑なシェルスクリプトを組むことが可能です。

 

シェルの具体的な役割と機能

 

シェルの役割と機能のイメージは掴めたと思いますので、ここでは、より具体的な例を見ていきましょう。

 

シェルの役割と機能の具体的な動き

 

 

シェルの役割は、ユーザーの要求をカーネルに伝えることでした。ユーザーは基本的に、ターミナルからLinuxに接続し、コマンドを入力することでLinuxを操作します。

ターミナルとは、CUIコマンドを受け付けるための画面で、イメージとしては“ハッカーが使う黒い画面”ですね。

例えば、今現在ユーザーが見ているディレクトリである「カレントディレクトリ」を確認する要求を、具体的な動作と順番で整理すると次のようになります。

 

1.ユーザーがPC上でターミナルを開く

2.ターミナル上で「pwd」コマンドを入力

3.エンターキーで決定

4.「pwd」コマンドがシェルに渡される

5.シェルが「pwd」コマンドの意味を「カレントディレクトリの表示要求」と解釈する

6.シェルは「カレントディレクトリの表示要求」をカーネルに伝える

7.カーネルは「カレントディレクトリ」をシェルに伝える

8.カーネルから教えてもらった「カレントディレクトリ」をシェルがターミナルに表示する

9.ユーザーはターミナルに表示されたカレントディレクトリを確認する

 

一つの要求コマンドでは、簡単にイメージするだけでもこれだけの動作が行われており、その中でもシェルは、ユーザーとカーネルの間で重要な役割を果たしているのが分かりますね。

 

シェルスクリプトを使うと便利なシーン

 

実際にシェルスクリプトを使うと様々なシーンで作業の効率化を図ることができます。

その中でも、代表的なシェルスクリプトの使い方を見ていきましょう。

 

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

 

これだけです。

※実行前にシェルスクリプト自体の実行権限を変更し、実行ファイルとしての許可を与える必要があります。

 

まとめ

 

 

シェルは、Linuxのカーネルとユーザーを繋ぐインターフェイスであり、カーネルの「殻」のポジションを担います。

ユーザーがターミナルを使ってコマンドを実行した際には、シェルがカーネルに要求を伝え、カーネルから返ってきた結果をユーザーに伝えてくれるのです。

そして、ユーザーはシェルの存在を利用して「シェルスクリプト」を作成することで、複雑なバッチ処理などをコマンド一つで実行することも可能になります。

Linuxをメインに利用するサーバーエンジニアにとって、シェルを理解することは必要不可欠な知識だということですね。

佐久森

Geekly Media
ライター

この記事が気に入ったら
シェアしよう!

  • twitter
  • facebook
12+

関連記事

求人数×IT業界での紹介実績数で、納得の転職をサポート。IT業界専門だからこそできる提案力を実感してみてください。