Linux環境を構築する理由

結論
→目的に合った使い勝手や、特性の強さなどをみて、Linuxしか勝たん　ってなってる
目的例→→◎サーバーを建てる（稼働の安定性や費用が他と比べて抑えられる）、開発で何人も使う、

Linuxとは
→windowsやMacなどと同じの括りで、OSの一種
>OSとは
ハードウェアとソフトウェアをつなぐ役割
・具体的に何をしているか
→「メモ帳とかでドキュメントの作成をする」
データの保存には、『ハードディスク』などの『ハードウェア』に記録する必要がある。
これを、OSが、ハードディスクに保存してくれる。
しかも、入力の時も、操作内容をメモ帳に伝えてくれている。

>OSとはコンピュータが制御していると表現するが、ここでいう
コンピュータは情報処理を高速かつ大量に行える機械（体）を指すとしたら
OSは脳みそみたいなもの

>OSを理解するポイント
OSとアプリの役割分担を理解する→
アプリケーションを開発していると、事細かにプログラムを書いていないのに、他のアプリケーションと同じように動作することが出てくる
これは、「OS」が実現している、提供している機能である
そこで、OSについて理解しておくことで、スムーズに悩まずに開発できるだろう
開発に必要なキーワードを理解する→
フォルダやファイルをクリックした時、OSからプログラムにメッセージが送信されている
OS自体はプログラミング言語で作られている
複数のOSの使い方を理解する→
iOSアプリを作るならMac OSが必要　などそれぞれのOSに依存した条件が存在する
そこで、複数のOSを扱うには仮想環境を構築すると良い。
種類→Windows、MacOS、Linux、ChromeOS、Android、iOS

>OSの機能
・入出力の制御
→（例）キーボード操作マウス操作について、
どのキーを押したか、マウスがどれくらい動いたか　など
開発者はOSからどのような入出力があったか、受け取ったり、アプリケーションからOSに問い合わせたりするために、必要な処理を作成していく。

>・タスク管理
→最近のOSでは、アプリケーションを同時に複数起動できるのが一般的になった。その起動や終了、切り替えはOSが管理している。
開発者は、この管理していることを、アプリケーションに通知されたチキの処理を作成することになる

>・ファイル管理
→ファイルに無めをつけたり、内容を読んだり、書き込んだりする機能もOSが管理している。
OSの機能として、「入出力の制御」、「タスク管理とは異なり、プログラミングにおいてファイル管理は基本的な機能→→プログラミング言語がこの機能を行うための機能を提供しているケースがほとんど
そのためOSの機能であることを意識しなくても割と大丈夫

>・ネットワーク通信
→他のコンピュータとやり取りするための機能でもOSが使われている
ここではルールが定められており、よく聞く『TCP/IP』というプロトコルだ
ネットワーク上のコンピュータは無数にあるので、『IPアドレス』という住所という宛先の、郵便ポストに相当する『ソケット』というところに手紙（データ）を届けたりする管理をするのもOSの役割である
＊Webサイトの閲覧でもこのネットワーク通信が行われていて、『HTTPS』という通信プロトコルの元行われている

・Linuxという呼び名について、それに纏わる知識
そもそも「Linux」という呼び名は、『Linuxカーネル』のことを指す狭義の言葉
Linuxカーネルとは→OSの中核となる部分のことで、ハードウェア制御を行うソフトウェアのみを指す

じゃあみんなが言う「Linux」ってなんやねん
コマンド打ってアプリケーションとして使ったりするユーザーがそのまま使えるようにパッケージされた『Linuxディストリビューション』のこと

・Linuxディストリビューションについて
現在の主流は２系統に分けて
→→Red Hat系（CentOS、etc）
→→Debian系（Ubuntu,etc）

・Linuxのメリット
→無料である
→処理が軽く早いので古めの機械でも動かしやすい
→Webアプリケーションの実験環境として利用できる
→→アプリを実行するには有料サーバーを借りる必要があるが、それらのサーバーはLinuxにほとんどの場合インストールされているので、実費をかけずに実行することができるということ
→→→サーバーを借りるときには、Linuxディストリビューションを選択する必要がある。

・Linuxのデメリット
→サポートがない
→→リソースを辿って解決

・セキュリティ
→ウィルスやスパイウェアというおは、OSが違えば動かないという点から、ユーザー数が多いほど狙われる傾向にあるため（Windows＞MacOS>
LinuxOS）、狙われにくいと考えられている
→Linux（クライアント用）（サーバー用）はウイルスソフトは必要ないと考えられている。が
→→Linux（サーバー用）に関してはインターネット上で常に動作させることが多くなるのでおろそかには出来ない
→→→（個人的には性格的に考えなくていいというのは無理なお話。お勉強しましょう。）

・サーバー用とクライアント用の違いは何？（侍エンジニアの記事から疑問）
　　　　〜用語の復習、理解から〜
クライアント→提供されるコンテンツを要求したり、使用するためのコンピュータ
サーバー→要求（リクエスト）内容を受け取って格納されたコンテンツを渡したり（返答/レスポンス）するやつ
？？？？？？？？？？？？？？？？？？？
CentOS（サーバー用）
Ubuntu(クライアント用)　　
？？？？？？？？？？？？？？？？？？？

＊調べたけどモヤモヤのまま。きっと用途や文脈によって変わるから、触ってからまた知識を整理しつつ勉強し直した方が早い。＊

ここから各種サーバーOSの差別化の整理をしようとした所、分かりそうhttps://www.tramsystem.jp/voice/voice-2396/

クライアントOS（windows10とか）は
・多数の人間が使うのは同時接続数が限られている
・セキュリティ機能や耐久性が脆弱
→そこでサーバーOS
サーバーOSの特徴
①ユーザー単位ではなく、パソコンを利用する人間全員で共有する
②多数のPCを同時に接続可能で、大規模オフィスに対応できる
③クライントOSよりも処理が高速で、安定性に優れる
④業務に支障が出ないよう、障害時のサポートが充実している
⑤データベースサーバー、WEBサーバーのようなミドルウェアが動作する

・種類→windows系、unix系、LINUX系→→それぞれのスキルの需要を比較しようとしても似たようで全く違うことを念頭に置く。サポートの有無や操作性、コスト面

①Windows系
→よく聞くやつ。マイクロソフト社が開発したやつ。GUI操作が可能でクライアントOSがwindowsの時は相性が良く、「Active Directory」って管理システムがユーザー管理と設定変更を一括でできるのがいい
→ソースコード非公開でライセンス料金が必要
→接続分の利用料が必要→→高コスト

②UNIX系
→元祖でマルチユーザー/タスクが可能。TCP/IPの開発に関わった
セキュリティや安定性が高く、低スペマシンでの起動がしやすい。必要機能も完備されてて、サーバーOSの鉄板。
→サポート費用は有料

③Linux系
→元祖UNIX様の派生
→特徴などは記述済み

サーバーOSのおすすめ
①→Windows Server のみ
②→Mac OS、BSD、AIX など
③→Ubuntu、CentOS など