【Linux入門シリーズ】シェルってなに?

スポンサーリンク

はじめに

クマくん
クマくん

サメさん〜、ちょっとLinixの勉強してて聞きたいことがあるんだ〜。

さめさん
さめさん

おお、なんでも聞いてよ!

クマくん
クマくん

シェルってなんなのかわからなくなっちゃって。。。

ターミナルのことかと思っていたんだけど、どうやら違うみたいでさ〜

さめさん
さめさん

そういった細かなことを理解しようとするのとても重要だと思う!

分かった。今回はシェルについて解説していこう!

シェルってなに?

さめさん
さめさん

シェルって言うのは端的に言うと、

カーネルのインターフェースになっているソフトウェア

のことだよ。

クマくん
クマくん

○ンタッキーフライドチキンのおじさんの作ってくれるソフトクリーム??

さめさん
さめさん

こらこら。

ケン○ッキーは美味しいけど違う!

さめさん
さめさん

要はクライアント(ユーザーと)Linuxカーネルの仲介役ってことなんだ。

さめさん
さめさん

クリーニング屋さんをイメージしてみるといいかも。。

クリーニング屋さんのお姉さんに綺麗にしといてください!って頼んだ時を想像して。

お姉さんがシェルだよ。

クマくん
クマくん

ふむふむ。

さめさん
さめさん

お姉さんは洗濯物受け取ったら、次は業者さんに汚い洗濯物渡して、綺麗になって返ってきたもの受け取る。

クマくん
クマくん

業者さんが出てきた。

もしかしてこれがカーネル?

さめさん
さめさん

その通り!

最後に綺麗になった洗濯物をお姉さんはクマくんに返してくれる。

重要なポイントとしては綺麗にする処理そのものはお姉さんじゃなく、業者さんがやっていると言うことなんだ

シェルの役割

さめさん
さめさん

実際にターミナルにdateコマンドを打った時の一連のLinux内部の中の処理を抑えていこう。

①キーボードから入力された”date”と言う文字列を受け取る。

②dateと言うコマンドを探す。

③見つかったコマンドを実行する。

④実行した結果、得られた値を画面に表示する。

さめさん
さめさん

この③の部分をLinuxカーネルが担当している。

つまりシェルは残りの①,②,④を行っていて、

シェルの役割とは、情報を受け取り、誰に渡すか探索し、結果を受け取って画面に表示することなんだよ。

クマくん
クマくん

なるほど!

確かに仲介役っぽい!

さめさん
さめさん

Linuxカーネルを包み込むような動きをするからシェル(殻)って呼ばれているみたいだよ。

ユーザーがLinuxを操作するためには必ずシェルを通さなきゃいけない。

Linuxをマスターするためにはシェルについて理解を深めていなければいけないんだ!

対話型(インタラクティブ)操作とシェルスクリプト

さめさん
さめさん

シェルの使い方には

対話型とシェルスクリプトがあって、それを説明するね。

クマくん
クマくん

知りた〜い!

対話型(インタラクティブ)操作

さめさん
さめさん

まず対話型なんだけど、通常ターミナルにコマンドを叩いて結果を呼び出すことだよ。

以下のような感じかな。

$ date
=>現在の日時が返ってくる

$ echo $SHELL
/bin/bash
さめさん
さめさん

ユーザーがキーボードと画面を利用して直接シェルを操作する方法を対話型(インタラクティブ)操作と呼ぶんだ。

クマくん
クマくん

なるほど。

そしたら僕はよく対話型でシェルを操作していたんだなぁ。

シェルスクリプト

さめさん
さめさん

実行したいコマンドを事前にファイルに記述しておいて、そのファイルをシェルに指定することで、記述した全部のコマンドをまとめて実行することもできるんだ。

一連の操作の流れを記述したファイルのことをシェルスクリプトって呼ぶんだよ。

クマくん
クマくん

おおお!

そんな便利なことが!

予約しておけるってことだね。

さめさん
さめさん

そうなんだ!

シェルスクリプトは単なるテキストファイルだからvimとか編集して中身を書き換えたり、見ることもできるよ。

#!/bin/bash#!/bin/bash#!/bin/bash
open https://github.com/
open https://www.amazon.co.jp/
さめさん
さめさん

githubとamazonを開くためのスクリプトだけど、こんな感じで用意しておいてシェルスクリプトを実行すれば、同時にタブを2つ出すことができる。

クマくん
クマくん

おお!!

めちゃくちゃ便利そうな匂い・・・

さめさん
さめさん

いずれシェルスクリプトをバンバン書いて作業効率上げていこうね。

シェル一覧

さめさん
さめさん

どんなシェルがあるのか整理してみるね。

シェル内容
sh最も古いシェル
長い歴史を持っているためシェルスクリプトを書くときに一般的に使われる。
対話型としての機能が少なくログインシェルとしては不向き。
cshCシェルと呼ばれ、shと同じく古くからあるシェル。
shと比べて対話型の機能が拡張されたため、人気が出たけど、シェルスクリプトを書くうえで致命的な欠陥があり、後継のtcshがあるので今は使われていない。
bashshを基本として機能を拡張したシェル。
対話型としての機能も拡張され、一般的なパソコンにログインシェルとして入っている。
対話型としてもシェルスクリプトを書く上でも文句なしスタンダードシェル
tcshcshの後継として開発されたCシェル。
対話型で便利な機能を持っているが、cshと同じくシェルスクリプトを書くのは苦手。
zsh比較的新しいシェルでbashやtcshの機能をいっぱい取り込んだ新規精鋭のシェル。
機能面では他のシェルを圧倒している
機能が多すぎて慣れるまでは時間がかかり、初心者には不向きかも。
fishこちらも比較的新しいシェル。
デフォルトでbashより使いやすい感じなのでzshより初心者向き。
他のシェルでも使えるTabでの補完やシンタックスハイライトを強化しているだけなので、特別に新しいことを覚える必要がない
クマくん
クマくん

どのシェルがいいんだろう。

さめさん
さめさん

①スタンダードなbash。

②新しい機能が盛りだくさんなzsh。

③初期の状態でbashより見た目や機能が整っているfish

の3択あると思うけど、初心者はbashでいいと思う

クマくん
クマくん

えーなんで!

機能もりもりの方が良くない?

さめさん
さめさん

bashのおすすめポイントを整理するね!

bashのおすすめポイント
  • Linuxでデフォルトのログインシェルとして採用されており、利用する機会が多い。
  • 対話的にもシェルスクリプトを利用するにも十分な機能を持っている。
  • shとの後方互換性を持つため、既存のsh用のシェルスクリプトをそのまま利用できる。
  • 利用者が多く、書籍やWebから情報を集めやすい。
シェルを一時的に切り替えもできるからあくまでおすすめってだけだよ!
クマくん
クマくん

なるほど。情報が集めやすいってだけでもメリットに感じるね。

さめさん
さめさん

いつでもシェルは切り替えることはできるから最初はbashで後から好みに合わせて変えればいいと思う!

【番外編】カーネルとシェルが分離している理由

クマくん
クマくん

なんでカーネルとシェルって分かれているんだろう?

別にカーネルがシェルみたいな役割も持ってていいと思うんだけど。

さめさん
さめさん

良い指摘だね。

ただ、Linuxには「1つのプログラムには、1 つのことをうまくやらせろ」って考え方があるんだ。

1つのプログラムにあれもこれも機能を詰め込まないで、機能ごとにプログラムを分離しておくことがソフトウェア開発には重要なことなんだよ。

クマくん
クマくん

そうなんだ。。。

具体的には今回の場合だとどんなメリットがあるんだろう。

さめさん
さめさん

そうだなぁ、以下の3つくらい考えれるかな。

①Linuxカーネルを変更することなく、シェルだけを自分好みに変更することができる。

②Linux以外のOSを利用するときもシェルが移植されていれば操作を同じように行うことができる。

③シェルがエラーを起こしたり、高負荷状態になってクラッシュしたとしてもOS本体である Linuxカーネルへの影響を最小限に抑えることができる。

さめさん
さめさん

Webアプリケーションもよく分離して開発すると思うんだけど、効率やリスクを考えたら分離した方がいいねってなるんだ。

ターミナルの役割

クマくん
クマくん

サメさん、ありがとう!

とてもよくわかったよ!

さめさん
さめさん

よかった!

そう言ってもらえると嬉しいよ。

クマくん
クマくん

ターミナルほんと優秀だなぁ。

さめさん
さめさん

あ、ターミナルが優秀っていうわけじゃなくてシェルが優秀なんだけどね。

ターミナルとシェルは全くの違うソフトウェアだよ。

クマくん
クマくん

あ、ちょっとそこの部分怪しいかもしれない。。。

さめさん
さめさん

混同されやすいからね・・・

ターミナルっていうのは入出力の画面を提供するだけのソフトウェアであって、ターミナルの画面の中でシェルが動いているということだよ。

クマくん
クマくん

微妙な認識違いだったよ・・・

さめさん
さめさん

それぞれどういう役割があるのかを正しく認識するのは大事だからね。

他の人と話すときに齟齬が生まれちゃうから。

クマくん
クマくん

今回でバッチリ抑えたよ!

ありがとう!!

終わりに

クマくん
クマくん

知らなかった知識がたくさんあるなぁ。

さめさん
さめさん

今回でシェルっていうものがどんなものかもわかったと思う。

対話型操作でパソコンの操作ができるようになって、いずれはシェルスクリプトを書いてサーバーをいじれるようになりたいね!

クマくん
クマくん

その道は遠そうだけど・・・。

さめさん
さめさん

スーパーエンジニアを目指すために頑張ろう!

クマくん
クマくん

よっしゃ〜!!

さめさん
さめさん

いいね!

それじゃあ今日のまとめをしておこう!

シェルのまとめ
  • シェルとはLinuxカーネルとユーザーの仲介役。
  • シェルの操作は対話型とシェルスクリプトでの操作がある。
  • ターミナルは入出力画面であり、ユーザーがシェルに連絡するための道具である。
重要ポイント!
さめさん
さめさん

シェルについての勉強のおすすめ本だよ。

おすすめ記事

【コーチングスキルを徹底解説③】フィードバックについて詳しく知ろう!
プログラミングメンターが勧める未経験からエンジニアになるための準備
未経験者から最強のRailsエンジニアになるためのロードマップ
タイトルとURLをコピーしました