はじめに
システムコール、インスペクト・エンタイア・コマンドリスト、nikkieです。
アーカイブで視聴してすっごくよかった勉強会の共有です。
目次
- はじめに
- 目次
- 2023/08/10 「シェル」ってなに?から改めて学ぶLinuxの基本
- そもそもシェルとは
- シェルがやっていること!
- 感想:断片的な自分の知識が繋がる機会ですっごくよかった!
- 終わりに
2023/08/10 「シェル」ってなに?から改めて学ぶLinuxの基本
たびたび参加しているStudyCoさんの勉強会の最新回です。
connpass通知ですごく興味を惹かれたのですが申し込みを忘れており、当日実況ツイートを見かけて「今日だったか!」と思い出す始末。
外で電波弱い状態だったので、質疑応答の手前くらいからしか聞けなかったんだけど、Linuxの仕組み自体も一回しっかりと理解したいなーと思いました(とても良かった) #StudyCo
— yumechi (@__yumechi) 2023年8月10日
この感想から「これは見たい!」と思い、スキマ時間を使って視聴を進めました(コミケの移動時間とか)
アーカイブ(大感謝)
一昨日の勉強会、"「シェル」ってなに?から改めて学ぶLinuxの基本"のアーカイブ動画をYouTubeで公開しました!https://t.co/lB5tD3s0vJ
— しま (@oshima_123) 2023年8月12日
資料類
今日の勉強会も、とても多くの方にご参加いただきました!
— しま (@oshima_123) 2023年8月10日
ありがとうございました!
発表資料はSpeakerDeckに公開しています!https://t.co/ZgqCfMEhLq #StudyCo
勉強会でカバーされた事項
- 「シェル」ってなに?(タイトル回収)
- カーネルとはなにかも知れた
- コマンドを実行するとは
- 標準入力・標準出力
今日の勉強会向けにPythonで実装した超ミニマムなシェル(コマンドの実行ができるだけ)https://t.co/JV1JR3s4bU
— しま (@oshima_123) 2023年8月10日
今日の勉強会にむけてまとめた、Linux について学ぶおすすめの流れ(主に書籍)https://t.co/hitAV8CjQL
— しま (@oshima_123) 2023年8月10日
そもそもシェルとは
人間がコンピュータをインタラクティブに操作するためのインタフェースが「シェル」です
なるほど〜〜〜〜!
シェルがあるから、これまでずっとインタラクティブに操作できていたのか!
動画ではCLIだけでなく、GUIもインタラクティブに操作するのでシェルと言えると言及がありました。
シェルについてだけ学ぶ機会と思いきや、Linuxの基本としてカーネルとは何かも知れました。
シェルがカーネルに委譲することもある(※詳しくはコマンド実行を参照)ので、2つとも押さえる必要があるのですね
シェルがやっていること!
アーカイブは38:35くらいから。
ここまで聞いているのを前提に、一番まとまっていると感じたポイントです。
pyminishの実装を見ながらシェルがやっていることを説明する部分です。
- main関数は無限ループ
- 入力を受け取る
- 空白文字で分割し、先頭をコマンド、残りを引数とする
- https://github.com/os1ma/pyminish/blob/bffac03499d4d7602ca6b6bbcbc547847e954ed2/pyminish#L42-L43
- コマンドが内部コマンドのとき
- pyminishで実装している内部コマンド(組み込みコマンド)を呼び出す
- https://github.com/os1ma/pyminish/blob/bffac03499d4d7602ca6b6bbcbc547847e954ed2/pyminish#L45-L47
- コマンドが外部コマンドのとき
- 環境変数
PATH
からコマンドを探す - 見つかったらシステムコール
os.fork
- https://github.com/os1ma/pyminish/blob/bffac03499d4d7602ca6b6bbcbc547847e954ed2/pyminish#L55
- ref: https://docs.python.org/ja/3/library/os.html#os.fork
- 子プロセスならシステムコール
os.execve
- =外部コマンドが実行される!
- ref: https://docs.python.org/ja/3/library/os.html#os.execve
- 親プロセスなら子プロセスの終了を待つ
- 環境変数
- (無限ループにより、これを繰り返している。これがシェル!)
感想:断片的な自分の知識が繋がる機会ですっごくよかった!
今回の勉強会の内容は私にはドンピシャでした。
シェルはいつか理解を深められたらと思っていて、環境変数PATH
のことや、インストールした実体のファイルがマシン内に置かれるといったことは知っていました。
勉強会ではシェルがどんなことをやっているかの解説を通じて、自分の断片的な知識がつながり、これがとてもよかったです。
勉強会で知ったのは「外部コマンド」「内部コマンド」で、環境変数PATH
のまわりを一回り深く理解できたと思います。
サンプルコードpyminishもシェルの仕組みに実直な実装でした。
70行に満たないコードでシェルが実装できるというのは驚きですね。
これは写経してみたいところです。
システムコール、これは理解がまだふんわりですが、何度も聞くうちにSAOアリシゼーション編を思い出しましたね。
(脱線)いや〜、プロセス(=プログラム)が(今日の勉強会参加者のように)システムコールという仕組みを認識して、自由に使い出す(アドミニストレータ様)って、SFとして怖すぎ〜
終わりに
StudyCoさんの勉強会、「シェル」ってなに?から改めて学ぶLinuxの基本がとってもよかったです!
シェル、お前、いつもそんなことをやってくれていたのか...
- 内部コマンド
- 外部コマンド
- システムコールを使って、子のプロセスで外部コマンドを実行!
プログラミングを始める際に触らざるをえないのがシェル(黒い画面)。
入門直後は覚えることがとにかく多いので、シェルは魔法(ブラックボックス)でも構わないと思います。
私の経験から、エンジニアリングに使っている道具は操作を一通り押さえたら、裏の仕組みを少しでも知ることで理解が深まったり新たな気づきを得たりします。
なのでシェルというブラックボックスを開けて中を覗いてみたくなった人は、是非この勉強会を見てみてください。
シェルという道具の仕組みを知る上で、これ以上ないアーカイブではないかと私は思います(難易度が私にぴったりで、本当によかったです!)