先にMacがファイルをどのような形で管理し、ユーザに提示しているか説明し、システムの内部構造を意識することを説明しました。
ここではコマンドを用いた操作を通してコンピュータの内部構造の理解を進めます。
先に扱う事項を簡単にまとめておきます。
この流れを頭に入れて進むと良いです。
ターミナル(ターミナル・アプリケーション)を起動してください。
ターミナルはアプリケーションフォルダの中の「ユーティリティフォルダ」の中にあります。
起動すると、下のようなウィンドウが現れるでしょう。
下図の拡大部分に注目してください。% 記号が出ていますが、これをコマンドプロンプト、と言います。
(この % がついている行全体をコマンドプロンプトと呼ぶかもしれません。)
コマンドプロンプトに続いて、「 date 」とタイプ入力して Enter キーを押してください。以下のような表示になるでしょう。
これは日時を出力する「 date 」コマンドを実行し、その結果がターミナルの画面に表示されたことを示しています。
コマンド(command)とは「命令する」ことですが、つまり今あなたはコンピュータに「 date プログラムを実行せよ」という命令を(文字列で)出したのです。この状況を「date コマンドを実行した」などと表現します。
dateコマンド(date プログラム)は一行、画面に日時を出力して、すぐその実行を終了します。コマンドの実行が終了したので、上の画像では、画面に再びコマンドプロンプトが表示されています。「次のコマンドをどうぞ」ということですね。
プロンプト |
---|
prompt とは「促すもの」あたりの意味を持ちます。講演者の前に次のセリフを表示するものをプロンプターなどと言いますね。command もそうですが、英語でその語を当てて用語を決めた人の意図を意識すると良いです。 |
次に top コマンドを試してみましょう。以下のような表示になるでしょう。
top コマンドは現在実行されているプログラム(プロセス・後述)の一覧を出力するものです。赤矢印のところを見るとわかるように、top コマンドは(デフォルトでは)「CPU利用率の高い」順にプロセスを表示し、一秒おきに最新状態に書き換えます。何かアプリケーションを操作して仕事をさせれば、それがリストの上の方に現れることが確認できるでしょう。他にもプロセスごとの実行時間の長さ、メモリ使用量、またシステム全体でのメモリの使用量やネットワークに出しているパケットの量などが表示されています。
top コマンドは date コマンドと違って「すぐ実行終了する」ようには作られていません。終了するには、ターミナルの画面が一番上に表示されている(アクティブな)状態で、「 q (英字のQ) 」を押します。
もし「何度 q キーを押しても終了しないぞ?」と思ったら、日本語入力モード(カナ漢字変換)になっていないか確認してください。画面をよく見てください。日本語入力モードの時に Q を押し続けると QQQQ を「っっっっ」みたいに変換している表示が見えたりします。その場合は英字入力モード(カナ漢字変換を停止)にして、もう一度「 q 」キーを押してください。
「 q 」キー入力によって top コマンドが終了すると、以下のようにまたコマンドプロンプトが表示されています。date の時とは違って、一行も出力を残さず、top コマンドを投入したすぐ次の行にプロンプトが出ています。
コマンドの実行はターミナルではなく「シェル」と呼ばれるプログラムが実現しています。シェルの仕事を以下にまとめます。
つまりコマンドとは、この「シェルに与える名前(文字列)」のことです。「コマンドを実行する」と短く表現することが多いですが、内部的には「シェルにコマンド名を与えることで、それに対応するプログラムが起動・実行されている」ことだと認識してください。
受講生らの Mac ではシェルプログラムとして zsh という名前のものを使っています。
この単元で行ってきたターミナルの起動から date, top コマンドの実行までの過程を整理してみます。下の図を見ながら箇条書きの説明を対照して読むと良いでしょう。
ターミナルは自分が起動されると自動的にシェルを起動するようになっています。シェルはよく使われるものですら何種類かあり、ユーザの好みによって切り替える事が出来る場合が多いです。Macは標準的にzshを使うようになっていますが、少し前まではbashを使っていましたし、それ以外にもcsh, tcshなどがあります。
Macのターミナルでも自動的に起動するシェルを変更できます。ターミナルの「ファイル」メニューにある「設定…」項目を実行して以下のウィンドウを表示してください。
ここの「開くシェル」がその設定箇所です。デフォルトでは上の状態、つまり「デフォルトのログインシェルを起動する」ことになっており、それが /bin/zsh であることが(うっすらと)示されています。
「開くシェル」のラジオボタンによる選択を「コマンド」に変更し、そこに /bin/bash など他のシェル・プログラム名を記入すると、次回のターミナル起動、あるいは「ファイル」メニューの「新規ウィンドウ」操作からは、指定したシェルが自動的に起動されます。
一般ユーザが使うものではありませんが、コマンドで現在のシェルがどれなのか調べる方法が幾つかあります。例として環境変数 SHELL を見る方法を示しておきます。
yasuda@Hex ~ % echo $SHELL
/bin/zsh
yasuda@Hex ~ %
「コマンド」とはアプリケーション・プログラムを起動する一つの方法です。ここでは「コマンドによるプログラム実行」を、コンピュータのシステム構造の中での振る舞いとして説明します。
アプリケーション・ソフトウェアやシステム・ソフトウェア、ノイマン型コンピュータなどの概念については「コンピュータ概論」の後半に扱うはずですので、ここでは簡単に通り過ぎるだけにします。
エンドユーザとしてではなく |
---|
これまでも Safari やテキストエディットなどのアプリケーションを、アイコンをダブルクリックなどして起動してきました。エンドユーザ向けの機能を使うだけならそれで良いのですが、情報系学部の学生としてはシステムの構造を理解して、開発ツールを使う必要が生じます。コマンドはその最初の一歩です。 |
ここでは、一般的な(ノイマン型の)コンピュータをメモリに注目して以下のように表現します。
記憶装置が二種類の技術で実現されていることを意識してください。以下に性質の違いを書いておきます。
製品・実現技術 | アクセス速度 | 揮発性 | |
---|---|---|---|
メモリー | DRAM (電気) | 高速 | 電源を切ると内容が消える |
ストレージ | ハードディスクやSSD (磁気) | 低速 | 電源を切っても内容は消えない |
この実現技術由来の制限(揮発性)のため、一般的なコンピュータは電源を入れる前はメモリーは空の状態(上図)になります。
以下に(MS Wordを例に)アプリケーションソフトウェアを実行する際の振る舞いについて図示します。
CPUはメモリーにあるプログラムしか実行しません(ストレージは低速すぎて、プログラム実行にはとても使えません)。上のようにいったんメモリにコピーして実行します。
プロセス |
---|
この、メモリにあって実行中のプログラムのことを「プロセス」と呼びます。上の top コマンドで表示されていたのはプロセスの一覧だったわけです。 |
先ほど date や top を例に、コマンドによるプログラム実行を試しましたが、これらもアプリケーション・ソフトウェアであり、結局プログラムをCPUに実行させている点では同じです。以下に date コマンドを例にアプリケーションソフトウェアを実行する際の振る舞いについて図示します。
このように、ストレージ中にあるプログラム・ファイルについて、その「名前」を指定して実行する方法を「コマンド」と呼んでいます。名前とは実際には「ファイル名」のことです。つまりどこかに「 date 」という名前のファイルがあるのです。(興味のある人は補足2. を参照)
つまり MS Word と date は、その起動のための操作が異なるだけで、どちらも実行可能なプログラムである(アプリケーション・ソフトウェアである)という意味では同じものです。コンピュータのストレージの中に置かれたプログラムを、メモリ中に読み込んで CPU に実行させているのです。
Word の起動は GUI (Graphical User Interface) による方法、date の起動は CUI (Character User Interface) による方法を用いています。
ここでは、これまでにやってきたアプリケーション(やコマンド)の実行について整理します。
まず Mac の電源を入れると、macOS (システムソフトウェア)がストレージからメモリに読み込まれ、それが実行されると(自動的に) Finder アプリケーションが読み込まれ、実行されます。赤矢印はメモリ中への読み込みを意味します。
そこで Finder を操作して MS Word を起動していたわけです。同様にターミナルについても Finder を操作して起動しましたね。青矢印はアプリケーション間の起動(呼び出し)関係を概念的に示しています。(ただ少し複雑なのですが、Terminal は自動的にシェル(zsh プログラム)を起動するようにできています。zshに関する赤矢印=メモリへの読み込み作業は省略しています。)
さてターミナルのコマンドプロンプトに「 date 」と入力してコマンドとして date プログラムを実行していました。コマンドプロンプトは zsh が出していますから、つまりこの場面では zsh が date を起動(呼び出し)していたわけです。(dateに関する赤矢印は省略しています。)
再掲します。
つまり MS Word と date は、その起動のための操作が異なるだけで、どちらも実行可能なプログラムである(アプリケーション・ソフトウェアである)という意味では同じものです。コンピュータのストレージの中に置かれたプログラムを、メモリ中に読み込んで CPU に実行させているだけなのです。
上の太文字部分を「その起動操作が Finder による GUI か、ターミナル(シェル)による CUI かで異なるだけで」と読み替えることが出来るでしょうか。
Word アプリケーションはストレージの中では「アプリケーション」フォルダにあります。
date コマンドのストレージ中の場所は which コマンドで知る事ができます。
yasuda@Lily ~ % which date
/bin/date <<< /bin ディレクトリ(フォルダ)以下の date という名前のファイルだ
yasuda@Lily ~ %
また、そうやって調べたディレクトリ /bin を open コマンドに指定すると、そのディレクトリを Finder で開くことができます。するとそこに bin という名前のファイルを確認できるでしょう。
これが date プログラムファイルです。
なお、これをダブルクリックして実行することもできます。
警告:適当にあれこれダブルクリックして実行しない |
---|
そもそもコマンドは無闇やたらに実行すると予期せぬトラブルを引き起こす可能性があります。/bin ディレクトリ以下にあるコマンドファイルが「見えているから」といって適当にダブルクリックして何が起きるか試す、といったことをしないように。 |
注意深く見るとこの「本来コマンドとして実行されるプログラムファイルを Finder のダブルクリック操作で実行する」のは、かなり特殊な事をしている事が分かります。
ターミナルの画面に出ているメッセージをよく見れば上の挙動が把握できると思いますが、慣れない人にはちょっと難しいかもしれません。
1970年代から1980年代あたりまで、業務処理の主流は大型汎用機あるいはメインフレームと呼ばれる種類のコンピュータを使っていました。まだGUIは無く、操作は主にコマンドによって行っていました。そのとき、大型汎用機の本体に接続してコマンドの入力、結果の表示に用いられていたのが「ターミナル(Terminal, 端末装置)」と呼ばれるものです。
例えば以下の写真は1979年のNEC製コンピュータですが、三台のターミナルが接続されているのが分かります。一台のコンピュータを最大3人が並列に操作することが可能だったわけです。
例えば1980年代後半〜90年代前半の京都産業大学には、30台以上のターミナル(下の画像のVT-100他)を設置した実習室が幾つもあり、一台の大型機にそれらを接続してプログラミング演習などを行っていました。これが当時としてはごく普通のコンピュータ利用環境でした。
つまりMacの「ターミナル」アプリケーションは、このターミナルのディスプレイを模したウィンドウを開いて、ユーザから「昔ながらのやり方」でコマンドの入力、結果の表示ができるように作られたものです。
あなた方がもしターミナルのウィンドウを三つ開いていた場合、つまりあなたは自分の Mac に三台のターミナルを接続して、それぞれから一台のMacをコマンドによって操作していることになります。そのイメージを持っておくと良いでしょう。
ターミナル・エミュレータ |
---|
「ターミナルを模している(模倣している)ソフトウェア」という意味で、このようなソフトウェアは「ターミナル・エミュレータ」と呼ばれます。多くのターミナル・エミュレータは上のVT-100のエミュレーションを行っています。Macのターミナルのウィンドウサイズはデフォルトでは80文字 x 24行 構成ですが、VT-100 も80x24です。ターミナルの「設定」画面の「詳細」の terminfo 項目は「 xterm-256color 」がデフォルトですが、xterm は VT-100 を模したものですし、そのメニューにも VT-100 があります。古い話をしているように思うかもしれませんが(Linux が余りにも成功した事もあり)今後何十年かはこの形が残ると思います。 |