現在はWINDOWS PCが壊れているのでLinuxを使用しているので、Linuxについて書こうかなと思います。

 

 Linuxには、EduLinuxという児童教育用のソフトが揃ったディストリビューションがあり、数式が降りてくるのに合わせて答えを打ち込んでで消していくようなゲームがあったり、タイピングソフトなどもありますが、通常の任意のディストリビューションを選択すると、作業ができるツールがそろっています。これを最小構成でインストールすると使えるものは減りますが、基本的な構造は変わらないので、AntiX LinuxのようにXServerとクライアントのやりとりで動作する使用を排除したものだと少しちがいますが、通常は、Xサーバーを使った仕組みになっています。

 

 また、C言語やC++がインストールされているのも標準機能ですし、任意のバージョンのPytonも使用できます。そして、Linuxの管理をするためのシェルであるBASHが実装されていることも共通している部分になりますから、パッケージングされているときの構成がディストリビューションによって異なっています。

 

 また、Ubuntu Studioのように低レイテンシカーネルの実装によってリアルタイムでの処理で遅延が出ると問題のある処理に対応したものもあるので、目的に応じてモニシリカルカーネルと低レンシーなカーネルん選択をすることになります。

 

Linuxだと20正規の製品のようにコマンドが主体な時代のものもありmすし、サーバーソリューションのように使用しないGUIを実装していないような物も存在しますから、コマンドは知らないよりは知っておいたほうがいい(これはWINDOWSも同じですが...。)のですが、現在流通しているデスクトップ版はUSBの機能もごく当たり前に使用できる物になっているので近代のデスクトップISと大差がない使い方ができるようになってます。

 

 この辺りは、産業総合研究所がLXDEを使ったDebianベースのディストリビューションのKnoppixをリリースしていた時代からそんな感じでしたから、ごく当たり前に使える状態にはなっています。

 

 

こんな感じでデスクトップ版は動作している訳ですが、現在のでスクトップ版だと、パッケージマネージャーがあるので、ソフトウェアのインストールも各ディストリビューションに対応したパッケージを選択してインストールできるようになっていますし、USBストレージクラスなどにも対応しているので、ごく当たり前のようにUSB機器を使えるようになっています。

 

 Linum Mint 14辺りではそんな感じで動いていましたし、フルパッケージでなくても、18以降のUbuntuの派生ディストリビューションではそういった動きになっていました。

 

 そのため、現在のごく当たり前に存在するデスクトップOSの標準機能についてはごく当たり前にしようできるようになっています。

 

 

  ターミナルエミュレーター

 

 LinuxなどのUNIX互換OSを使用する場合、ターミナルエミュレーターを使うことになりますが、この辺りは、DOS辺りからPCを使っている人がWINDOWS環境でDOS窓やコマンドプロンプトに慣れているのと同じ感覚だと思いますが、UNIXの場合だとデスクトップでも何でもないような環境ですし、むしろ、コンシューマで触るような物ではないような時代から存在するので、CUIが当たり前の時代にコマンドで制御するような構造になっていたわけですが、これが、互換OSのデスクトップ版の登場によってコンシューマでも使用されるようになり、無償で使用できることもあり、利用者が増えていきました。

 

 UNIXは商用UNIXだけですから互換OSでUNIXの機能を試せるものが無償で使えるとなると、ネットワーク関連で試そうと思うのも至極当然な内容といえますが、Linuxの登場後はいろいろな派生ディストリビューションが増えて選択肢の多い状態になっていましたが、初期のデスクトップは20世紀末に出たものですから、デバイスも古くSCSIバスやアーキテクチャによってはISAバスなども存在するような時代なので現在のように汎用バスが高性能だったり、IGPで4Kとか8Kをサポートするような時代ではないので表示ですら結構ひどい時代になていました。その時代に3DCGとかが当たり前にあったこと自体が凄い事なんですが、基本的にこの時代のデスクトップOSでも通常のLinuxのようにマウントとアンマウントはセキュアにする時に使用する [ コマンド方式 ] なので、[ MANページを参照して機能の学習をしましょう ] という作りで、 [ CD-ROMはmountコマンドを使ってマウントしましょう。 ] と言う仕様になっていました。

 

 なので、商用のパッケージには、マニュアルが付属していてその方法も書かれているわけですが、

 

mount  /dev/cd-rom mnt/cdrom -t iso9660

 

というコマンドの記述が解ると普通に見かけそうなものを打ち込んでCDを認識させるような仕様になっていたわけですが、デバイスの使い方の殆どがコマンドなので、コマンドありきの使用になっていました。

 

 1998年辺りだとコマンドを使う頻度が高かったのですが、現在はディストリビューションに異なるウインドウマネージャーが使用されているので、デザイン性も優れた物も増えているので、画面構成やUIの挙動についても洗練されたものが増えています。

 

 21世紀が始まって四半世紀に到達しそうなほどの時間が経過しているので、1990年代に産声を挙げたLinuxも時代とともにどんどん洗練されているのも自然な流れだと思うのですが、現在のデスクトップ版は、セキユリティー周りの設定を自分で行う必要があるなどの煩雑さを覗くと結構いい形で使用できるOSになっていmす。

 

 

  Linuxとコマンド

 

 Linuxの場合、いろいろな面でコマンドを使うことがありますが、WINDWSやMACでも用途によってはコマンドを使うことがあります。エンドユーザーだと使わない事もあるかも知れませんが、コマンドを使ったほうが作業がしやすい場合もありますし、ターミナルで全てが完結する場合だと、GUIの操作にかかる時間よりも短時間で作業が終わる場合もあります。

 

 そのため、用途によってはGUI環境での操作ではなくCLIで作業をしたほうがいい場合もあるので、コマンドでの処理をすることもあります。

 

 Linuxのコマンドは、ディレクトリの操作などでも使用できるのですが、FTPを使ったアカウントに対してのファイルのアップロードや操作などを行う際にコマンドを使う必要がありますが、こうした作業の場合だとディレクトリの移動やパーミッションの変更などをしてファイルのアクセス権限をしていすることになります。これと同じような作業をGUIで行うとフォルダーの開閉やディレクトリの移動をすべてマウス操作で行う必要があるので、ファイル数が多くファイルの場所が異なる場合には少し煩雑な作業になります。ブログの場合、素材のアップロードはGUIで行いますが、これができるサーバだとホームページなどを置くうウェブスペースでも名じようなGUIでの作業ができますが、量が増えると間違いなくコマンドのほうが時間がかからないですし、作業負荷を軽減する選択肢もありますから、コードの前にコマンドについて考えることになります。

 

 

  コマンドの利点

 

 Linuxコマンドはターミナルエミュレーターを開いた後に直接利用できるのですが、

  •   ディレクトリの移動  
  •   ファイルの操作         
  •   フォルダの操作         

などが行えます。例えば、移動をする場合でも

  •   カレントディレクトリの移動  
  •   ファイルの移動                       
  •   フォルダの移動                      

がありますが、GUI環境だとファイルマネージャー上で一旦フォルダの位置を変更してその場所を選択することになりますが、これが [ 現在のディレクトリの場所 ] になります。この時の現在のディレクトリのことをカレントディレクトリと言います。

 

 ファイルやフォルダーを移動する際には、まずは移動させるファイルやフォルダーがある場所を開く必要がありますから、現在の場所からその場所まで階層を変更する必要があります。

 

 この状態でファイルやフォルダのある場所にたどり着くことができるので、ここから移動する場合だと、もう一つファイルマネージャーを開いて、移動先のディレクトリに移動することになります。これで、

  • 📁  ファイルやフォルダのあるディレクトリ         
  • 📁  ファイルやフォルダの移動先のディレクトリ  
の2つの場所が用意できるので、移動元から移動先にファイルやフォルダーをドロップすると移動が完了します。

 

これをコマンドで行うと、

  1. cdコマンドでディレクトリの移動
  2. とりあえず、lsでディレクトリ内の内容をを確認
  3. mvコマンドを使用して指定先に移動させる

という工程だけで済みます。また、mコマンドの場合、*を使用することでワイルドカードを使えますから、*.jpgのようにすると、ファイル名に関係なく    .jpgと言う拡張子のファイル    を対象として指定先ののディレクトリに移動させる事もできます。

 

 こうした作業をGUIで行うと工程数が増えてしまうのですが、作業の量が増えてくると人が行うには煩雑すぎますし、数をこなすのが少し大変な作業だったりします。

 

 こうしたものを処理する場合には、コマンドを使ったほうが高定数を減らして人の作業量を少なくすることができます。

 

 コマンドは、人の作業負荷を減らすことができるものなので、作業の内容がどういった工程でどういった処理なのかが解れば、それに準じた工程を組み立てる事もできますし、目的が明確であれば、それに準じたコマンドも探しやすくなります。

 

 ファイルマネージャーでの作業だと、先ほどの処理だと拡張子の判定で条件抽出をして、その後に表示されているファイルを選択して移動という流れになりますが、コマンドにも号動作防止のオプションがあるので、そういったものを使うことで、ファイル名の変更や上書きの回避ができるようになっています。

 

 

  シェルコマンド

 

 コマンドについては、Linux環境では、BASHが使用可能でMACだとZシェルが使用できますが、これは、UNIXコマンドん学習をするともれなく使えるようになるのですが、サーバーにファイルをアップロードする場合にも同様のコマンドの知識が必要になるので、サーバ管理者ではなく、レンタルサーバでスペースを借りてホームページの管理をするだけでもそう言ったコマンドの知識が必要になりますが、LANでPCが繫がっている状態でもコマンドが使えたほうが作業がしやすい場合もありますし、前述のように単一のクライアント内の処理でもコマンドのほうが簡単な操作で終わる場合もあります。

 

 LinuxはBシェルを使うことでそうした作業ができるのですが、ディストリビューションの中にはArch Linux のようにCLIでインストールするものもありますし、Free BSD も同様にCLIでの作業がメインになるので、コマンドが必須になりますから必須な環境もあります。

 

 WINDOWS環境は、バッチファイルやVBAのようなスクリプト言語があったり、PowerShellが使えるなど、自動化の方法が複数存在しているのですが、シェルのように使うものだと、DOSのコマンドとPowerShellになりmす。

 

このようなシェルコマンドは、単体でも実行できますが、プログラムのように処理の流れを作ってテキストエディタに保存しておいて実行することもできるので、工程のあるような少し複雑な処理も1つのファイルだけで生成する事が出来るようになっています。

 

 このあたりの構造は、マインクラフトのチートコマンドに似ているのですが、マインクラフトでは、サバイバルモードのようにコマンドを使わずにレッドストーンだけで文明的な世界内の物を作るモードもありますが、マインクラフト自体が、   マインクラフトというプラットフォームを使ったゲームを作れる仕様 になっている       ので、クリエイティブモードでは、景観や余計な演算お影響を受けない状態での大規模な回路を作るだけでなく、ゲームシステムを構築して、自分だけのオリジナルのルールで遊べる門を作ることができるようになっています。

 

 この条件を満たそうと思うと、ゲームシステムで使用している機能をユーザーが調整できるようなものを用意する必要があるので、マインクラフトでは、そう言った制作用のモードとしてクリエイティブモードが用意されています。

 

 そこでは、ゲームシステムの機能を使用できるコマンドが存在しているのですが、そこで使用できる [ 元から用意されたコマンド ] が [ チートコマンド ] になります。これは、アップデートともに増えているのですが、統合版の場合、NPCのようにセリフをストックして、選択肢でコマンドを実行できるような特殊なMOBが用意されていたり、動作やゲームの見え方や景観の状態変化などを与えるコマンドもあるので、演出として使用できるものまで用意されています。

 

 このコマンドは、クリエイティブモードだとチャット欄で使用できるのですが、この状態だと対話型の実行になってしまうので、ゲーム内でも自動で実行できるような機能が用意されています。それがコマンドブロックになります。

 

 コマンドブロックは接続することで逐次処理のように処理を行っていくことになりますが、レッドストーン信号で動くので回路を組むようにレッドストーンで分岐をさせたり遅延を入れることで順番を変えることもできるようになっています。

 

 1つのブロックで1つのコマンドを実行できるのでシェルなどと同じですが、この構造物も処理の流れを作ることで複雑なことができるようになっています。レッドストーンは、二値論理での回路設計になりますが、コマンドブロックはコーディングをブロックの接続で行うようなイメージになります。

 

このコマンドもFunctionを使うとテキストに記述したコマンドの流れを1つのコマンドブロックで行えるようになりますが、シェルも同様に、シェルを記述したファイルを実行することで、記述された処理を実行できる仕組みになっています。

 

 

  ターミナルエミュレーター

 

 Linuxの場合、ターミナルエミュレーターを使うことでプログラムの実行や操作ができる使用になっていますが、シェルコマンドの中には、 viというものがあり、ターミナルエミュレーター内でテキストエディタを開いて操作できるようになっています。

 

 

  Viの操作

 

 Viには、2つのモードがあり、

  • コマンドモード
  • エディットモード
を切り替えることができます。実際にはいろいろな操作ができますが、今回は基本機能だけ書こうと思います。基本的に、立ち上げた後には、このモードの切り替えを行ってテキストの記述や処理を粉うことになります。
 

  Viを使う:下準備1

 viを使うときには、最初に作業フォルダに移動しておいたほうがいいので、
 

cd 作業ディレクトリの絶対パス

という風にコマンドを打ち込んで作業ディレクトリに移動します。この時に、作業フォルダーがない場合、ホームディレクトリ内で
 

mkdir 作業フォルダ名

 
としてフォルダをつくると、
 

ls

 
でディレクトリ内に先ほどの名称のフォルダが出来上がっているはずなので
 

cd 作業フォルダー名

 

として移動すると、そのディレクトリに移動できます。ここにコードを置く場合は、常にこのディレクトリに移動してファイルの追加や編集を行うことになります。

 

 

  Viを使う:ファイルを作る

 

 viの場合、

 

vi ファイル名.拡張子

 

でファイルを開く事ができますが、そのファイルが存在しない場合だと、新規作成をすることができます。そのため、開いた後にはデータのないテキストエディタの状態になっているので、ここからテキストを打ち込んで編集していくことになります。

 

  Viを使う:入力の下準備

 

 テキストをこのまま入力してもいいのですが、コードを打ち込む場合だと行番号や自動インデント機能があったほうが作業がしやすいと思います。こうした機能はWINDOWSのメモ帳にはありませんが、viだとファイルを開いた後にコマンドで指定することができるようになっています。コマンドは、[:]を押した後に打ち込むことになりますが、コマンドモードで

  •   : set nu       : 行番号の表示
  •   : set nonu   : 行番号の非表示

で行番号を状態を決めて

  •   : set autoindent       : 自動インデントの使用
  •   : set noautoindent   : 自動インデントの停止

で自動インデントの状態を指定できます。

 

  Viを使う:テキスト編集

 

 テキスト編集は、[ i ]キーを押すと始まるのですが、このきーは、テキストの始まりの位置からスタートできるものになっています。空のテキストの場合だと、そこからスタートするので、最初はiキーで編集に入ると覚えても問題はないと思います。

 

 基本的にカーソルの移動は

  •   ↑   : 上
  •   ↓   : 下
  •   ←   : 左
  •   →   : 右

で移動が可能で、

  •   enter   : 改行

となっています。とりあえず、2つのモードで困ったときには

  •   esc   : モードから出る

が使えるので、おかしくなったらこれをつかうことになります。

 

 

  Viを使う:コピー・貼り付け・削除など

 

 コピー・貼り付け・削除については、カーソルの位置から判断することになりますが、コマンドモードで

  •   yy    : 1行をコピー
  •    p     : カーソルの上に1行を貼り付ける
  •    P     : カーソルの1つ前に1行を貼り付ける
  •   dd    : 1行をクリップボードに保存して削除する

となっています、削除については通常と同じで、

  •    Delete            : カーソルの上の文字を消す
  •    BackSpace     : カーソルの1つ前の文字を消す

ことができす。なので、CTRL+Cのような操作がないので、注意が必要です。取り消しについては、

  •         u         : 取り消し
  •         U         : 全体的に操作を取り消す
  •    CTRL-U    : 取り消しの取り消し

のようになっています。

 

 

  Viを使う:セーブとロード

 

 作業をする際には、ファイルのセーブとロードをすることになりますが、この処理では、コマンドモードで

  •    e   : ファイルを開く
  •    w   : ファイルを保存する

ができるようになっています。ファイルの保存は、

  •   : w                         : 作業内容を保存
  •   : w ファイル名       : 名前を付けて保存
  •   : w!                      : 強制書き込み
が行えるようになっており、ファイルを開く場合は、
  •   : e ファイル名       : ファイルの読み込み
が行えるようになっています。
 

 

  Viを使う:終了処理

 終了処理は、[ q ] で行いますが、
  •     :q      : 保存せずに終了
  •    :wp     : 保存後に終了
が選択できます。処理に間違いがない状態だと、記録していない恐れもあるので、[ :wq ]を選んだほうがいいかもしれません。
 

 

  Viを使う場合

 

 viは、設定ファイルなどを変更するときにも使用しますが、GUIの操作だと、ディレクトリの移動を行い、ファイルを開いて編集となりますが、viの場合だとこの作業が全てターミナルエミュレーターで完結します。そのため、少ない工程数で作業ができるようになっていますが、この操作ではホームポジションから手が離れるようなキーの紹介をしていますが、viでは、そうならないコマンド用のキー配列が用意されています。テキストエディタと比較すると少し特殊な操作感覚ですが、入力の速度を落とさないような作りになっています。

 

 このようにターミナルエミュレーターでは、シェルコマンドやプログラムの実行だけでなく、コードの記述まで行えるようになっています。