現在は学校でもプログラミング教育がスタートしていますが、ネットワーク上にあるサーバを扱う場合だと、必然的にUNIXコマンドを扱うことになります。この辺りは、WEBアプリを作る場合にも必要になります。
UNIXはWINDOWSやMAC OSと同様に商用OSなので、ライセンスが必要になりますが、1995年にLinuxが登場したのでOSSのUNIX互換OSが使用できるようになりました。
その為、現在は、UNIXで使用するシェルについて学習する場合だと、
■ BSD
■ Linux
の選択肢が存在するので、その中のいずれかを選ぶことになります。
Linuxでも業務用で使用されているRHELは有償ライセンスなので、1ライセンスごとにコストがかかりますが、これも互換性のあるLinuxsディストリビューションが用意されているので、
■ Rocky Linux
■ Alma Linux
などを使用することで対応することが出来ます。この分野ではCENT OSが使用されていましたが、これが開発停止になってしまったので、現在はこのディストリビューションが存在しないのですが、その後にRocky Linuxが登場したので現在は上記の2つがCENT OSの後継とされています。
Linuxでヒストリビューションだと、
■ REDHAT系
■ Debian系
■ Slackware系
が存在していましたが、ここから派生したものが多く存在しています。その為、インストールや処理の内容を見るとそのディストリビューションが何がベースなのかを判断できるわけですが、現在は膨大な数のディストリビューションが存在しています。
一時期、産業総合研究所もDebianベースのKnoppixの日本語ローカライズ版をリリースしていましたが、その後、ハイパーバイザー型の仮想環境を実装したXenoppixもリリースしていました。
この仮想化環境はハイパーバイザー型なので、KVMやXENなどがそれに該当しますが、WINDOWS 10以降のPro以上のグレードで使用できるHyper-Vもハイパーバイザー型の仮想化環境になります。
商用OSは商品ですから、 【 1つのものを作る 】 必要があるので、コンセプトを決めたらその形のものを作ることになりますが、Linuxのように個人がディストリビューションを作れる場合、自由なカスタマイズができるので、仕様が異なるものも多く存在します。その一つがカーネルの処理になります。
Linuxの一般的なカーネルは、モノ知りっくカーネルが使用されていますが、UbuntuStudioなどのように低レイテンシのカーネルが採用されているものもあるので、処理が異なる物も存在します。
当然、昔なら我のXサーバーを使ったものとそうでないものも存在しますが、現在は、Xサーバーを使わないディストリビューションも存在しています。
ちなみに、GTKの今後のバージョンはXサーバー非対応になるようなので、OSのバージョンが古いと対応しなくなります。
LinuxのOS上での表現ですが、Knoppixの時代には3Dデスクトップが採用されているので、表現についてもかなり革新的なものが用意されていました。Knoppixについては、相当前にYouTubeに動画をアップしているのですが、
のような挙動になります。アイコンの移動やウインドウの変化はOSのトランジションなのでこの時代にこの挙動を刷る仕様になっているわけですが、ウインドウの切替時にCUBEになって画面が切り替わる仕組みも動画上の演出ではなく、 【 OSの実装機能 】 になります。
ちなみに、動画内の音楽が酷いですが、これは 【 テキトーにソフトを使って譜面作って自作したもの 】 になります。
このように重たくしようと思った場合、商用OSでは見たこともない挙動をする状態にすることが出来るようになっているわけですが、これが、日本語ローカライズ版になりますが、CDでのブートで動作する仕様になっており、ウインドウマネージャーには軽量なLXDEが使用されており、ネットブックあたりでも動く仕様になっていました。
この時のメモリーの消費量がXP SP3よりも少ないので、体感的に軽く感じるイメージがありましたが、低レイテンシなUbuntu Studioもウインドウマネージャーが重たいだけなので、これをXFaceやLXDEに変えてみるとメモリー消費が減り軽快に動作するようになります。
こうした変更はWINDOWSやMACのような商用OSでは不可能ですが、Linuxだとごく当たり前に行えます。
また、これを自作するのではなくディストリビューションの選択で出来るのもLinuxなどのOSSのOSの特徴になります。
Linux
Linuxに限らず、どのOSでも処理を行う根幹部分はカーネルであり、このカーネルの部分に直接振れると危ないので、シェルで守ってあります。その為、カーネルとのやり取りを刷る場合には、シェルコマンドを使うようになっているわけですが、UNIX系のOSの場合だと、これが、シェルコマンドとしてある程度決まった形で使用できるようになっています。
マイクロソフトの製品は、MS-DOSをリリースしていたので、DOSのコマンドが使用できるようになっているわけですが、32bitになると16bitのDOSとの互換性がなくなるので、この後方互換の担保のために 【 DOS窓 】 が用意されていました。マイクロソフトの製品はWINDOWS 7だと
■ Pro版でのVirtual PC(XPモード)
■ 実行時の選択
によって後方互換が担保されていましたが、それ以前のバージョンだと、
■ マルチブート
■ 仮想化
によって後方互換を担保することが出来るようになっていました。異なるOSを使用している場合だとここに
■ アプリケーションレイヤーソフト
を使うことになります。このソフトの別名はエミュレーターになりますが、Android StudioやiOSやiPad OS用のアプリケーションを作る場合、完成したアプリケーションの挙動の確認を行う必要がありますが、この際に実機にいきなり渡すと危ないので、事前にテスト環境で動作確認を刷ることになります。この時に使用するのがアプリケーションを異なるOS
とアーキテクチャ上で動かすことになりますが、その時に使用するのがアプリケーションレイヤーソフトになります。
その為、Android端末用のアプリケーションの作成を行うAndroid StudioにはAndroid エミュレーターが実装されています。
これがアプリケーションレイヤーソフトを使用したテスト環境になりますが、Android環境はスマートフォンやタブレット端末用なので、基本的にはArm Coretexシリーズで動作しているので、RISCプロセッサ用のイメージが強いと思いますが、Core i9やRyzen 9上でも動作するAndroid x86という物も存在します。このプロジェクトでは、新しいバージョンのAndroidのISOファイルも用意されているので、仮想化環境やマルチブートなどでも動作させることが出来ます。サーバケースのようにストレージの入れ替えが出来る環境だと、OSを入れ替えて使用することも出来ますが、この環境も存在するので、
■ マルチブート
■ 仮想化
■ アプリケーションレイヤーソフト
を使ったテストが行えるようになっています。アップルの製品は、MACなどを用意しないと開発が出来ないのですが、ライセンスの縛りがない環境だとそういった事が出来るようになっています。
現在のWEINDOWS環境だと、
■ DOSコマンド
■ PoerShell
が使用できるようになっていますが、これに加えて
■ Hpyer-V(Pro版以上)
■ WSL2
が利用できるので、仮想化を使うことでイメージをダウンロードして使用してLinuxをWINDOWS上で利用できるようになっています。
こうした機能が使えない時代(1コア/1スレッドの時代とか)だと、ソフトウェアで対応するしか無いので、Linuxコマンドが動作するソフトウェアを使うしかありませんでした。
この環境は、現在だと、C/C++環境をWINDOWS環境で構築する際に使用するMinGWなども含まれますが、Cygwinを使用することでLinuxコマンドを使用してC/C++のコンパイルを行うことができていました。現在もこの辺りは変わらないので、WINDOWS用の実行ファイルのa.exeのようにダブルクリックをすればコードが実行できるものを作る際にはこういった環境を構築することになりますが、ローカルサーバを使ったWEBアプリを作る条件でも同様にminGWやCygwinが使用されてることがあります。
このようにWINDOWS 環境だと色々な方法でLinuxが使用できるようになっているので、現在は20世紀と比較すると選択肢が広く、親和性も高くなっています。
Linuxのコマンド
Linuxではシェルコマンドを使用しますが、このシェルコマンドはUNIXに実装されており、そこから派生しているので現在はどのOSでも使用可能になっています。
スマートフォンやタブレットの場合、殆どのユーザーがエンドユーザーなので 【 開発を行うような人ではない 】 はずなので 【 シェル関連の機能が使えないようになっている 】 わけですが、コーディングを刷るアプリケーsyンをインストールするとシェルが使えるようになるので、安全性が低くなる場合があります。
その為、個人的には、ko-dhinguha PCで行ったほうが良い気がするのですが、ローカルでコーディングを行う場合だとセキュリティーレベルの低下に気をつける必要があります。
シェルには種類があり、Linuxで使用されているのがBASHなのでBシェルと言われていますが、これは、BSDとは異なる仕様になっています。
BSD系で使用されているのがCシェルの拡張を行ったTCシェルになりますが、MACで使用されているZシェルは更に拡張されたものになります。
Zシェルは追加するだけでLinuxやBSDでも使用できます。
シェルコマンドはターミナルでコマンドラインで操作することが出来るものになっていますが、このコマンドはコードのようにテキストエディタで処理の流れを作って制御できるので自動処理にも使用できるようになっています。
その為、様々な処理を実装して実行できるようになっています。
コマンドを使う
Linuxを使うとコマンドを使うこともありますが、基本的にサーバOSを使用した場合にはこのコマンドのみで動作させることになります。サーバOSは、CUIなので
【 全ての作業をコマンドで行うことになる 】
ので、ターミナルで行う作業で完結するような構造になっています。
この状態でもテキストやファイルの操作は出来るので、ウィジェットやマルチメディアファイルの表示を考えない場合だとコマンドだけで処理を行う事が出来ます。
ターミナル上では、
のようにプロンプトがでているのですが、ここにコマンドを打ち込んでいくことになります。
通常のデスクトップOSの場合だと、ホームフォルダーがルートなので、この状態だとホームフォルダーがカレントディレクトリになります。
ディレクトリを作る
ホームフォルダーには元から用意されているフォルダーが存在しますが、このフォルダーの事をディレクトリといいます。
コマンドで現在のディレクトリ(これがカレントディレクトリに該当します)にディレクトリを作ることもできます。
この時に使用するのが 【 mkdirコマンド 】 になりますが、
【 mkdir ディレクトリ名 】
でフォルダーを追加できます。実際に
のようにコマンド打ち込むとディレクトリが生成されるます。
ディレクトリの移動
先程の処理では、カレントディレクトリにフォルダーを生成したわけですが、このフォルダー内にファイルを作りたい場合やそのフォルダー内にあるファイルをビルドや実行する場合にはディレクトリの移動したほうが作業がしやすくなります。
このディレクトリの移動もコマンドで行えるようになっており、その時に使用するのが 【 cdコマンド 】 になります。このコマンドは
【 cd ディレクトリ名 】
で移動できるようになっています。
先程はカレントディレクトリ内に 【 test-Linux 】 というディレクトリを作ったのですが、ここに移動する場合には、
のコマンドを実行することになります。この段階だとプロンプトの前は~になっていますが、cdコマンドを実行すると
のようにプロンプトの前のカレントディレクトリの表示が変わります。ターミナルでは現在のカレントディレクトリも表示されるので、cdコマンドで移動すると移動先のディレクトリ名が表示されます。
この状態だと、test-Linuxがカレントディレクトリになります。
テキストファイルを作成する
シェルを使うと、空のテキストファイルを作ることも出来ます。この時に使用するのが 【 touchコマンド 】 になり、制作する時のコマンドは
【 touch ファイル名.text 】
になります。カレントディレクトリ内のテキストファイルを作る場合には
のような感じになりますが、このコマンドを使うことでカレントディレクトリ内に 【 sanple.text 】 と言うファイルを作ることが出来ます。
ファイル名を変更する
先程作ったファイルはファイル名が間違っているので、修正しなければなりませんが、GUIではないので、ファイルを選択してリネームすることは出来ません。
この場合、コマンドで変更することになりますが、この解いに使用するコマンドが、 【 mvコマンド 】 になります。
と言っても、このコマンドは 【 Move 】 を省略したものなので、 【 移動 】 を行うものになっていますが、ファイルやフォルダーのりネームも行えるようになっています。この時のコマンドは、
【 mv 変更前の名前 変更後の名前 】
となっていますが、ファイルの場合だと拡張子も含めて記述します。実際に先程のファイルのリネームを刷る場合には、
のようなコマンドを実行することになります。これで、ファイル名がsanple.txtからsample.txtに変更されました。
ディレクトリ内の状態を確認する
mvコマンドを使用してtouchコマンドで生成したテキストファイルのリネームを行ったわけですが、本当に変更されているのか確認する必要があります。
この場合、ディレクトリ内の情報を表示する必要がありますが、その時に使用するのが 【 lsコマンド 】 になります。このコマンドは、単体で動作するので、
【 ls 】
だけで実行できます。実際に
のようにlsコマンドを使用してみると
のようにしっかりとリネームされています。
テキストファイルの編集を行う
touchコマンドで生成されたテキストファイルには何も記述されていないので、そのままだと空のファイルのままになります。
これを編集することで内容を追加刷ることが出来ます。
GUI環境だと任意のテキストエディタを使用することで作業を行うことが出来ますが、サーバOSのようなCUI環境ではそれも叶いません。
CUI環境の場合、キーボードだけでテキスト編集が行えるテキストエディタを使うことになりますが、この時に使用するのがviになります。
と言っても、現在はもう少し使いやすくなったVIMがあるので、これを使用して編集を行うことになります。
VIMの起動は 【 vim 】 だけでも大丈夫ですが、カレントディレクトリ内のファイルを編集する際には、
【 vim ファイル名.拡張子 】
と言う記述になります。この記述は、
■ python 3 ファイル名.拡張子
■ gcc ファイル名.拡張子
■ g++ ファイル名.拡張子
と同じ形になりますが、基本的にターミナル上でアプリケーションを使用して任意のファイルを指定する場合にはこの記述になります。この際に、
■ ファイルを相対パスで指定する
■ ファイルのあるディレクトリがカレント
ディレクトリになっている
のいずれかの条件が満たされている必要があります。
つまり、 【 対象のファイルのある場所でコマンドを実行すると簡素な記述で処理が出来る 】 ようになっています。
現在はカレントディレクトリ内にsample.txtがあるので、この状態でVIMを使用して開く場合には、
と言う記述を用いることになります。そして、このコマンドを使用すると、
のようにsample.textを開くことが出来ます。
ちなみに、vimだけだとからのファイルが生成されるので、保存した時にファイルが生成されます。
VIMを使う
VIMも簡単な作業だとviと操作は同じなので、
の中で行っている方法で作業を進めることが出来ます。
の状態では入力もコマンドも事項出来ませんから基本的な操作は 【 半角文字入力の状態 】 にして
■ 【 i 】 : 文字入力
■ 【 : 】 : コマンド入力
■ 【 esc 】 : モードのキャンセル
で処理の内容を変更します。実際にはどの場所から記述を始めるのかで入力するキーの種類が変わりますが、iはカーソルの場所から記述を始めることが出来ます。
実際に 【 i 】キー を押すと
のようになり、画面左下に
のような表示に変わります。この状態が入力モードなので、文字入力を行うとカーソルの場所から文字入力が行えるようになります。
実際に入力を行うと
のようになりますが、
のように文字入力を行うことが出来ます。
このテキストを保存する場合には、入力モードから出る必要があるので 【 ESC 】 キー を押してモードを切り替えます。キーを押すと
のようになり画面左下の表示がなくなります。
ファイルを保存する
ファイルを保存する場合には、コマンドモードを使うことになるので、 【 : 】 ボタンを押すことになりますが、この後に処理を行うためのコマンドを入力します。
ファイルを保存する際には 【 :w 】 コマンドを使うので、既存のファイルを開いた場合だと、
のコマンドを実行するとファイルの上書き保存が行われます。コマンドを実行すると
のような表示に変わります。
先程の作業でテキストを追加していますからsample.txtの内容が何もない状態からテキストがある状態に変更されているわけですが、この状態だと、【 vimコマンド 】 だけで開いた状態だと何も入っていないので、ファイル名と拡張子を指定する必要があります。
この場合、
【 :w ファイル名.拡張子 】
のような記述になりますから、
のような形で保存を行うことになります。
ファイルを開く
VIMの起動時にファイル名を指定するとファイルを開くことが出来ますが、作業中に別のファイルを開く場合には、コマンドを使用することになります。
現在のターミナルはタブに対応しているので、複数のタブでテキストを開いて作業が行えるようになっていますが、タブを追加してVIMを開いてファイルを扱う場合などでも使用できます。
この場合、 【 :e 】 コマンドを使うことになりますが、ファイルを開くので
【 :e ファイル名.拡張子 】
で開くことになります。先述の処理で、 【 :w 】 コマンドを使用して名前をつけてファイルの保存を行っているので、現在のファイルは 【 sample1.txt 】 になっていますが、ここで、
を開くと、すでにsample1.txtは保存されているので、編集しているファイルをsample.txtに入れ替えることが出来ます。
コマンドを実行すると
のような表記に変わり、現在のファイルがsample.txtに入れ替わります。
VIMを綴じる
ファイルの編集がおわったらVIMを綴ることになりますが、この時に 【 :q 】 コマンドを使用します。
は、既にファイルが保存されている場合に限定されますが、ファイルの上書き保存をして保存する場合には、保存と終了を合わせた状態の 【 :wq 】 を使用することになります。
VIMを綴じて
のようにディレクトリ内のファイルを確認すると元のファイルと新規に保存した2つのファイルがあることが確認できます。
ファイルの内容を表示する
VIMをしy硫黄してテキストファイルを作成しましたが、ターミナル内はマルチウインドウではないので、新規にテキストエディタやビュワーを使うことは出来ません。
その為、テキストファイルやコンバイル前のソースコードがあったとしてもGUI環境のような内容の閲覧ができないのですが、 【 catコマンド 】 を使用することでファイルの内容の表示を行うことが出来ます。
この場合、
【 cat ファイル名.拡張子 】
とするとファイル内のテキストを読む事が出来ます。
先ほど作成したsample.txtの内容を表示する場合には、
のようになりますが、実行すると
のように先程打ち込んだ内容が表示されます。
コーディングを行う場合
プログラミング言語を使用する際には色々なライブラリを使用できるようになっていますが、この中でWEBアプリを作るようなものを使用する際には必然的にターミナルでの操作が生じるので、UNIXコマンドを使う場合があります。
その為、シェルコマンドを覚えておくとそうした作業を刷る際にも対応しやすくなります。
また、
【 サーバOSをサーバ単体でセットアップする 】
場合は、GUI環境は存在しないのでコマンドで設定することになります。
ちなみに、BSD環境のようにGUIがないものでもGUIを後から実装できるので、GUIで動くOpenBSDやFreeBSD環境を構築できる(と言っても、PS5やSwitchのようなUIになるわけではありません。)ようになっていますが、メモリー消費量を抑えて負荷を下げる場合にはCUI環境で作業を刷ることになるので、リモートホストでのメンテナンスを行うか、コマンドを打ち込んで設定を行うことになります。