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

[カーネルとシェルと環境変数とシェル変数について]

PCの起動時の流れや、環境変数についての理解が曖昧だったため、こちらでまとめさせていただきます

PCにログインするとログインした人のシェルができます(ログインした人のシェルプログラムが動くイメージ)
シェルというのは、[bashzshtcshksh]などの種類があり、自分のOSがどのシェルを使っているかは、下記コマンドのようにして確認できる

higmonta@higuchimiyukiyuunoMacBook-Pro 2563_higmonta_runteq_curriculum_advanced % echo "$SHELL" /bin/zsh

シェルには、シェル変数や環境変数を格納できる
シェル変数: 同じシェルで動いている時に有効な変数
環境変数: 同じPC上で動いていれば使える変数

つまり、環境変数の方が使える範囲が広いということ

また、起動しているシェルから違うシェルを起動することができる
この時にシェル変数と環境変数で違いが出る

シェル変数で定義しているものは、今起動しているシェルから違うシェルを起動した時には、定義したシェル変数は使えない。
環境変数で定義しているものは、今起動しているシェルから違うシェルを起動しても定義した環境変数が使える。

シェル変数と環境変数でよく使うコマンドは、以下のようなもの

[シェル変数]

シェル変数の設定
$ 変数名 = 値

設定されているシェル変数の確認
$ set

シェル変数の確認
$ set | grep シェル変数名

[環境変数]

環境変数の設定
$ export 変数名 = 値

設定されている環境変数の確認
$ env

環境変数の確認
$ env | grep 環境変数名

[シェルとは]

まずLinuxのOSは、WindowsなどのOSと構造が違っています
LinuxのOSは、ユーザーがどのディレクトリも操作しやすいようになっているが、そのディレクトリの中には重要なファイルも含まれている為、Windowsとかと違って重要なファイルをユーザーが操作して壊してしまう可能性があります
重要なファイルを壊してしまわないようにする為に、シェルがあります
Linuxの場合は、カーネルというOSの核がありカーネルがデバイスへ命令(キーボードの入力など)している
このカーネルは、OSの核になり重要になってくるのでユーザーが操作して壊さないようにする為に、カーネルをシェルで包んでユーザーがカーネルに入れないようにしている。
ユーザーがデバイスへ操作(キーボードの入力など)した場合の流れは、以下のようになる
・ユーザーの操作

・ユーザーの操作がシェルを通って、カーネルに伝わる
※シェルを通ってカーネルに伝わる時は、ただシェルを通るだけではなくユーザー側の言語からカーネル機械語のような言語に変換もしている

[よく使う操作でのイメージ]
・ターミナルで以下コマンドを実施
ターミナルは、シェルスクリプトを実行できるアプリケーション
シェルスクリプトとは、シェルを操作するために使うプログラミング言語

$ mkdir test


・上記コマンドでシェルにディレクトリを生成する命令をしている


シェルは、それを機械語に変換しカーネルに命令を伝える

カーネルが指示してディレクトリを生成する

[ポイント]
シェルである[zsh]ファイルの設定は、下記のようにホームディレクトリ以下にある隠しファイル[.zshrc]というファイルで設定する

higuchimiyukiyuunoMacBook-Pro:~ higmonta$ pwd
/Users/higmonta
higuchimiyukiyuunoMacBook-Pro:~ higmonta$ ls -a
.                       .chromedriver-helper    .nodenv                 .webdrivers             Documents               Postman
..                      .config                 .npm                    .wget-hsts              Downloads               Public
.CFUserTextEncoding     .gem                    .rbenv                  .yarnrc                 Gyazo 3.8.1             rubybook
.DS_Store               .gemrc                  .ruby-version           .zsh_history            HTML,CSS                top.jpg
.Trash                  .gitconfig              .sqlite_history         .zsh_sessions           Library                 workspace
.bash_profile.swp       .lesshst                .ssh                    .zshrc                  Movies
.bundle                 .local                  .viminfo                Applications            Music
.cache                  .node-version           .vscode                 Desktop                 Pictures

[zsh]ファイルは、以下のディレクトリにある

higuchimiyukiyuunoMacBook-Pro:bin higmonta$ pwd
/bin
higuchimiyukiyuunoMacBook-Pro:bin higmonta$ ls
[               cp              dd              expr            launchctl       mkdir           pwd             sleep           test
bash            csh             df              hostname        link            mv              rm              stty            unlink
cat             dash            echo            kill            ln              pax             rmdir           sync            wait4path
chmod           date            ed              ksh             ls              ps              sh              tcsh            zsh

参考記事:

www.youtube.com

使っているシェルを調べる方法 | TECH+

シェル変数と環境変数の違いをコマンドラインで確認する - Qiita

https://wa3.i-3-i.info/diff333hensu.html

【Linux】「シェル変数」と「環境変数」の基本と、その違い | プログラミングマガジン

www.youtube.com

www.youtube.com

初めて Mac で zsh を使う人のためのチュートリアル - mollifier delta blog