〇自戒のための自己への宣誓
- お前に足りないのはインプットだ!!!インプットしろ!!!インプットの奴隷になれ!!!
- 記事の書き方とか今はどうでもいいから書け!!!インプットをアウトプットしろ!!!やる前からこだわりとか持つな!!!
- 見られることとか評価されることとか気にするな!!!MECEとか構造化されてるかどうかとか気にするな!!!構造化はアウトプットの整地であって、インプットが足りないお前が手を出す領域ではない!!!ていうかお前頭良いんだからインプットに注力しろ!!歴史を刻め!!!歴史をまとめようとするな!!!未来を描け!!過去を清算するな若者め!!!!
- 疑問を持つことを恥じるな!!!お前は頭はいいがインプットが足りない未熟者だ!!!インプットの奴隷になれ(再掲)!!!
〇学習記録
シェルとカーネル。
シェルは人間がカーネル(OS)と対話するためのインターフェース・窓口。
カーネルは存在。シェルはその存在にアクセスするための窓口。なんでこうなってるのかは知らない。多分色々と便利なんだろうな。NWでノード間を全部つながないように、人間が全ての人間と繋がっていないように、全てが直接つながっていないほうが色々と便利らしい。便利というかコストがかからないというか、その辺の絶妙な感じは神秘。
シェルは色々種類がある。
sh: bourne shell (simple and light shell. ancient)
bash: bourne again shell (versatile sh)
zsh: z shell(more versatile sh than bash)
ksh: korn shell (sh + bash)
csh: c shell (c-language-like shell)
tcsh: tenex c shell (versatile csh)
fish: friendly interactive shell (colorful and versatile shell)
ログインシェルってのが解決した。各ユーザーはログインシェルという情報を持ってる。これは、ログインしたらまずどのシェルを開くかというのを表してる。
rootなら基本的に/bin/bashぽい。
シェルを開くと出てくるのがプロンプト。入力ができるようになっているので、「入力を受けつけるプロンプト」とか言ったりするらしい。
[username]@[host name]:[current directory]$が基本らしい。
環境変数PS1にプロンプトの表記方法が書いてある。エスケープ文字とかいろいろあってわからない。LPIC101で復習できそうなので放置。
[node1] (local) root@10.5.6.2 ~
$ env | grep PS1
PS1=\[\e[1m\e[31m\]\h\[\e[32m\]($(docker-prompt))\[\e[34m\]\u$(hostname -i)\[\e[35m\] \w\[\e[0m\]$
シェル操作ショートカット:
色々あったけど、Ctrl + ←→くらいを覚えとけば一旦よさそう。
環境変数とシェル変数
環境変数を確認したいときはenvかprintenv。シェル変数を確認したいときはset。ただsetだと環境変数とシェル変数が全て出てくるので、| grep XXXなどで見たいものを抽出するのがよさそう。
環境変数とシェル変数っていうのは変数名で区別するのが基本だけど、実際はexportコマンドを使ってexportしたものが環境変数になるというのが正しい理解かも。
実験→
①変数を設定(シェル変数):test1=hello
②環境変数に新たに値を代入(環境変数の値を変更=まだシェル変数. 元々はnode1):HOSTNAME=testingNow
③envとset | grep test1とset | grep testingNowで①②の値を表示
④logoutして再度③を確認。
結果→
loguout後、①のtest1変数はなくなり、②のHOSTNAMEはtestingNowではなくnode1になった。やはり、環境変数は、デフォルトで設定されている変数だけでなく、ログインからログアウトまでの間で設定した変数・値をexportしたものも環境変数に含まれる。
と思ってexportも試してみてたら、logoutしたらexportしたやつも消えてしまった。exportで環境変数にするってなんやねん。もしかしたら今試してるのがあるIT学習サービスのもので、AWSのLinuxインスタンスを使っているものであるのが関係してたりする?わかんねー。
GPT先生曰く→
環境変数は1つのセッション中のすべての子プロセスで適用できる変数。シェル変数は新しいシェル、サブシェル、子プロセスでは有効にならないらしい。
うーんサブシェルとか子プロセスとかよくわからん。
とりあえずシェルってのは複数個作る(GUIならいけるらしい)こともできて、ログインログアウトは認証の話なのでシェルセッションとか微妙にずれるっぽい。例えばbashって打つと新しいシェルを開くことができるみたいで、そうすると環境変数に設定したものは新しいシェルの方で使えるけどシェル変数だと使えないっぽい。
なんかよくわからんが、bashを打つとそのシェルの中でシェルを開くことができて、pstree -pを打つとプロセスがツリー上に表示される。そのツリーを見ると、bash(XXX)----bash(YYY)みたいに表示されていた。で、logoutしようとするとexitしかできねぇよみたいなことを言われた。
そういえばCiscoのスイッチとかルーターでログインするのにenableとかなんとか打って中に入るみたいなプロセスがあった。入れ子構造にするのはよくあるのかねぇ。よくわかんねぇ。