シェル・カーネル・環境変数・シェル変数


シェルとは

入力装置からユーザからの操作を受け付け、指示された動作をオペレーションシステム(OS)に伝達します。次に説明するカーネルと対話するための翻訳者のような役割です。

1 2 3
CUI / CLI Character User Interface / Command Line Interface キーボードから文字の入力・表示を行う
GUI Graphical User Interface マウス操作や画面タッチで操作する

(狭義の)カーネルとは

OSの中枢として、各種アプリケーションが動作するための基本環境を提供しています。
そのままだと人間と対話することはできませんが、シェルを仲介して人間の指示を実行してくれます。

  • ハードウェア関連の資源管理(メモリ管理やファイル管理)
  • プログラムのプロセス管理
  • 周辺機器のデバイス管理

(ちなみに)

1 2
ハードウェア CPU、メモリ、ハードディスク
ソフトウェア OS、各種ソフト、ファイル

プロセスとは

起動している処理(プログラム・タスク)。
通常は、各プロセスの処理時間を利用したマルチタスキングを利用し、複数のプロセスを実行している。
(例)後述するbash上でコマンドAを実行する
→bashの子プロセスであるAのプロセスが生成され、該当の処理が行われると同時に、Aのプロセスは終了・破棄される

シェルスクリプトとは

スクリプトという名の通り、シェルが実行すべき(+実行できる)複数のコマンドを並べた「台本」です。

hello.sh
#!/bin/sh
echo 'Hello World!'

上記を実行するには、hello.shが保存されているディレクトリで、以下のコマンドを打ちます。


$ bash hello.sh

また、#! から始まる一行目をshebang(シェバン)と呼び、スクリプトを読み込むインタプリタを指定しています。
例えば、world.pyはPythonで書かれたファイルですが、hello.shと同じように、シェル上でファイル名を指定することで、自動的にPythonインタプリタが起動されプログラムが実行されます。

world.py
#!/usr/bin/env python 
print('Hello World!')

zsh、bashとは

zsh、bashはともに、上記で紹介したシェルの一種類です。
一般的には、bashがLinux系OSにおけるデファクトスタンダードとして認識されていますが、bashよりも更に使いやすいシェルとして人気を高めています。

zshの設定ファイルは.zshrc、bashの設定ファイルは.bashrcあるいは.bash_profileです。

.bash_profileを覗いてみる

.bash_profile
export PATH=$HOME/pear/bin:$PATH

環境変数・シェル変数

$HOME$PATHは、環境変数やシェル変数と呼びます。

環境変数:前述したプロセスそれぞれが持つ変数です。
一つのプロセスが子プロセスを作ると、親プロセスが持つ環境変数は基本的にすべて子プロセスに引き継がれます。

シェル変数:上記の環境変数とは異なり、子プロセスには引き継がれない変数です。

ただし、Linuxが予め設定している組み込みの環境変数もあり、それらは特定のシェルに依存せず使用できます。例としては、以下のようなものがあります。

1 2
$HOME ホームディレクトリ
$PATH コマンドサーチパス、コマンドの実行ファイルが存在するパス

export

exportは、環境変数やシェル変数を設定・変更するコマンドです。
exportすることで、シェル変数は環境変数に引き継がれ、環境変数はその子プロセスへと引き継がれます。

シェル変数を設定するためには、

$ VAR=temp 

上記で設定したシェル変数を、さらに環境変数として設定するためには、

$ export VAR

シェル変数設定+環境変数設定をまとめて行うには、

$ export VAR=temp

パスを通す?

いわゆる「パスを通す」さいは、新たなコマンドサーチパスを.zshrc.bash_profileに追加します。

つい、以下のように記載したくなります($HOMEはホームディレクトリの環境変数)が、

.bash_profile
export PATH=$HOME/xx/bin

ただしくは、

.bash_profile
export PATH=$PATH:$HOME/xx/bin

あるいは

.bash_profile
export PATH=$HOME/xx/bin:$PATH

になります。また、:$PATHをパスの後ろに追加することで、該当のコマンドサーチパスの優先度が高くなります。

環境設定ファイルを変更したさいは

上記の作業などで.zshrc.bash_profileを変更したさいは、ターミナルを再起動するか、以下を実行し変更内容が読み込まれるようにしましょう。

source ~/.bash_profile

参考文献

以下の記事を参考にさせていただきました!ありがとうございました!

@fuwamaki様
@munazo様
シェルスクリプト入門
環境変数について
プロセスについて