目次 | 索引 |
---|---|
その昔、コンピュータを利用するとき、ユーザはテレタイプとよばれる装置を操作しました。 テレタイプとは、タイプライタに電話がついたようなもので、ユーザが文字をタイプしますと、その文字列が電話回線を通じて遠くのコンピュータに伝わり、今度はコンピュータからの文字列が電話回線を通じてテレタイプに伝わり、紙に印刷されるという仕組みでした。
1回目の授業で用いた端末エミュレータは、このテレタイプのような端末装置のまねをするソフトです。 タイプライタの代りにキーボードとディスプレーを使いますが、文字列のやり取りでコンピュータを操作する点は同じです。
どこにでもパソコンがあり、グラフィカルなウィンドウを見ながらマウスでパソコンが操作できる現在、なぜテレタイプ時代のまねをするのか不思議に思えるでしょう。 端末エミュレータ(端末ソフト)は、以下のような状況では役に立つのです。
端末エミュレータの中では、 シェル ( shell , 具体的には tcsh)とよばれる機能(プログラム)が働いています。 シェルは、ユーザから入力された文字列を解釈し、それに応じたプログラムを実行させます。 シェルを用いますと、コンピュータに登録されているほとんどすべてのプログラムが実行できます。
ここで、端末エミュレータを開きます。 ウィンドウの左下に次のような文字列が表示されているのに注目してください。
b00a001@Ampere:~%
この文字列を プロンプト ( prompt )といいます。 b00a001 の部分と Ampere の部分は、ユーザとコンピュータによって異なります。 プロンプトの表示は、シェルがユーザからの入力を待っていることを意味します。
次に、入力したい文字列の文字を順にタイプしてください。 間違ってタイプしたときは、Delete キーをタイプすると取り消せます。 Enter キーをタイプすると入力終了となります。
例えば、
b00a001@Ampere:~% xyz xyz: Command not found. b00a001@Ampere:~%
シェルに文字列 xyz を入力したわけですが、そのコマンドは見つからないというメッセージが表示されました。 続いて、文字列 date を入力してみます。
b00a001@Ampere:~% date Thu Jun 5 13:31:49 JST 2003 b00a001@Ampere:~%
今度は、今日の日付と今の時刻が表示されました。
コンピュータに登録されているプログラムには名前がついています。 例えば、今日の日付と今の時刻を出力するプログラムの名前は date です。 シェルは、入力が与えられますと、その文字列をプログラムの名前と見なします。 そして、その名前をある順番にしたがってシステムの中から検索します。 もし見つかれば、その名前のプログラムを実行します。 なければ、コマンドが見つからないというメッセージを表示します。 この例では、 xyz という名前が見つからなかったので、コマンドが見つからないと表示され、 date という名前が見つかったので、今日の日付と今の時刻が表示されたのです。
実は、シェルへの入力で、プログラムの名前と見なされるのは、空白で区切られた最初の成分だけです。 残りの成分は、そのプログラムへの引数と見なされます。 引数 ( argument )とは、プログラムを実行するときに渡されるデータです。 例えば、カレンダーを出力するプログラム(名前は cal )では、
b00a001@Ampere:~% cal 2003年 6月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 b00a001@Ampere:~% cal 7 2003 2003年 7月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 b00a001@Ampere:~%
引数を書かなければ、今月のカレンダーが出力されます(CALendar)。 引数を書きますと、西暦2003年7月というデータがプログラムに渡され、その月のカレンダーが出力されます。
プログラムによっては、必ず引数を書かなくてはいけません。 また、引数の形式もプログラムによってまちまちです。 引数の順序を変えますと、普通はプログラムに異なるデータが渡されます。 例えば、 cal 2003 7 では、西暦7年2003月となります。
プログラムの名前とその引数の並びを、ここでは コマンド ( command )とよぶことにします。 端末エミュレータでは、コマンドを入力することによってコンピュータを操作することになります。 文字列をタイプするのは面倒かもしれませんが、コマンドさえ覚えれば、コンピュータに備わっているほとんどすべての機能を働かせることができるのです。
プログラムの名前は知っているけれど、何をするものなのか分からないときや、引数の書き方を確認したいときは、マニュアルがすぐに見られれば便利です。 UNIXでは、コマンドでマニュアルが表示できます。 これを、 オンラインマニュアル ( on-line manual )といいます。
オンラインマニュアルを表示するコマンドは man name です(MANual)。 ここで、 name はプログラムの名前です。 例えば、
b00a001@Ampere:~% man cal
と入力しますと、 cal コマンドのマニュアルが表示されます。 マニュアルを表示しているときのキーボードの割り当ては、以下の表の通りです。
キーボード | 機能 |
---|---|
q | 表示終了 |
h | ヘルプの表示 |
Space | 一画面分次の表示 |
Enter | 一行分次の表示 |
b | 一画面分前の表示 |
k | 一行分前の表示 |
情報処理Iでは、ファイルマネージャを用いてファイルの管理をしました。 この授業では、端末エミュレータを用いてファイルの管理をします。 ファイルの管理に関する基本的なコマンドを説明します。
pwdコマンド (Print Working Directory)は、カレントディレクトリの絶対パス名を出力します。
b00a001@Ampere:~% pwd /home/b00a/b00a001 b00a001@Ampere:~%
lsコマンド (LiSt)は、引数がなければ、カレントディレクトリの内容を並べて出力します。 引数がディレクトリのパス名ならば、そのディレクトリの内容を並べて出力します。 引数がファイルのパス名ならば、そのパス名を出力します。
b00a001@Ampere:~% ls Mail/ Maildir/ WABI/ WWW-local/ b00a001@Ampere:~% ls WWW-local index.html index.html~ ip2a/ photo.jpg b00a001@Ampere:~% ls WWW-local/ip2a ex8.html ex8.html~ b00a001@Ampere:~% ls WWW-local/ip2a/ex8.html WWW-local/ip2a/ex8.html b00a001@Ampere:~%
ls コマンドで、 ls -l 〜としますと、アクセス権モード、所有者、所有グループ、サイズ、最終変更日時などの管理情報が出力されます。
b00a001@Ampere:~% ls -l WWW-local/ip2a/ex8.html -rw-r--r-- 1 b00a001 school 9 5月 29日 13:40 WWW-local/ip2a/ex8.html b00a001@Ampere:~%
lessコマンド は、ファイルのパス名を引数に取り、そのファイルの内容を表示します。 バイナリファイルは指定しないでください。 表示しているときのキーボードの割り当ては、 man コマンドと同じです。
キーボード | 機能 |
---|---|
q | 表示終了 |
h | ヘルプの表示 |
Space | 一画面分次の表示 |
Enter | 一行分次の表示 |
b | 一画面分前の表示 |
k | 一行分前の表示 |
cdコマンド (Change Directory)は、引数がなければカレントディレクトリをホームディレクトリに変更します。 引数がディレクトリのパス名ならば、カレントディレクトリをそのディレクトリに変更します。
b00a001@Ampere:~% ls Mail/ Maildir/ WABI/ WWW-local/ b00a001@Ampere:~% cd WWW-local b00a001@Ampere:~/WWW-local% pwd /home/b00a/b00a001/WWW-local b00a001@Ampere:~/WWW-local% cd b00a001@Ampere:~% pwd /home/b00a/b00a001 b00a001@Ampere:~%
cpコマンド (CoPy)には、2つの形式があります。
cp file1 file2
では、パス名 file1 で表されるファイルの内容を、パス名 file2 で表されるファイルにコピーします。
cp file... directory
では、パス名の並び file... で表される一つ以上のファイルの内容を、パス名 directory で表されるディレクトリの中に、それぞれ同じファイル名でコピーします。
もしコピー先のファイルがすでにあれば、そのファイルに上書きされます。
b00a001@Ampere:~% ls Mail/ Maildir/ WABI/ WWW-local/ b00a001@Ampere:~% ls WWW-local index.html index.html~ ip2a/ photo.jpg b00a001@Ampere:~% cd WWW-local/ip2a b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ b00a001@Ampere:~/WWW-local/ip2a% cp ex8.html test.html b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ test.html b00a001@Ampere:~/WWW-local/ip2a%
rmコマンド (ReMove)は、ファイルのパス名を引数に取り、そのファイルを削除します。
なお、一度削除したファイルは(通常の操作では)復元できません。 ファイルの削除は慎重に行ってください。
b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ test.html b00a001@Ampere:~/WWW-local/ip2a% rm test.html rm: test.html を消去しますか (yes/no)? yes b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ b00a001@Ampere:~/WWW-local/ip2a%
mvコマンド (MoVe)には、2つの形式があります。
mv file1 file2
では、パス名 file1 で表されるファイルを、パス名 file2 で表されるファイルに移動します。 同じディレクトリの中で移動させますと、ファイル名を変更したことになります。
mv file... directory
では、パス名の並び file... で表される一つ以上のファイルを、パス名 directory で表されるディレクトリの中に移動します。
もし移動先のファイルがすでにあれば、そのファイルに上書きされます。
b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ b00a001@Ampere:~/WWW-local/ip2a% cp ex8.html test2.html b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ test2.html b00a001@Ampere:~/WWW-local/ip2a% mv test2.html test3.html b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ test3.html b00a001@Ampere:~/WWW-local/ip2a%
上記の通り、 mv コマンドを用いますと、ファイル名の変更ができます。 mv コマンドで、2つのファイルのファイル名を交換する(ファイルの内容を交換するとも見なせます。)には、多少の工夫が必要です。
今、ファイル ex9a.html の内容が"Good afternoon!"であり、ex9b.thml の内容が"Good-bye!"であるとします。 この2つのファイルのファイル名を交換する場合、
としてはいけません。 なぜならば、はじめのコマンドで ex9a.html の内容が ex9b.html に上書きされ、"Good-bye!"という内容が消えてしまうからです。 正しくは、
とします。 (カレントディレクトリに temp というファイルやディレクトリはないものとします。) 実際、はじめのコマンドで、ex9a.html がなくなり、temp の内容が"Good afternoon!"となります。 次のコマンドで、ex9b.html がなくなり、ex9a.html の内容が"Good-bye!"となります。 最後のコマンドで、temp がなくなり、ex9b.html の内容が"Good afternoon!"となるわけです。
mkdirコマンド (MaKe DIRectory)は、ディレクトリのパス名を引数に取り、その名前のディレクトリを作成します。
b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ test3.html b00a001@Ampere:~/WWW-local/ip2a% mkdir trial b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ test3.html trial/ b00a001@Ampere:~/WWW-local/ip2a% ls trial b00a001@Ampere:~/WWW-local/ip2a% mv test3.html trial/test4.html b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ trial/ b00a001@Ampere:~/WWW-local/ip2a% ls trial test4.html b00a001@Ampere:~/WWW-local/ip2a%
ディレクトリの中にディレクトリがあるようなものを作成する場合、木の構造の上からディレクトリを作成しますとうまくいきます。 例えば、ディレクトリ top の中に bottom があるようしたいのでしたら、
とします。
rmdirコマンド (ReMove DIRectory)は、ディレクトリのパス名を引数に取り、そのディレクトリを削除します。 ディレクトリが削除できるのは、その中にファイルもディレクトリもなく、カレントディレクトリがそのディレクトリより上であるときに限ります。 したがって、ディレクトリの中にディレクトリがあるようなものを削除する場合、木の構造の下からディレクトリを削除することになります。
b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ trial/ b00a001@Ampere:~/WWW-local/ip2a% ls trial test4.html b00a001@Ampere:~/WWW-local/ip2a% rm trial/test4.html rm: trial/test4.html を消去しますか (yes/no)? yes b00a001@Ampere:~/WWW-local/ip2a% ls trial b00a001@Ampere:~/WWW-local/ip2a% rmdir trial b00a001@Ampere:~/WWW-local/ip2a% ls ex8.html ex8.html~ b00a001@Ampere:~/WWW-local/ip2a%
chmodコマンド (CHange MODe)は、ファイルやディレクトリのアクセス権を変更します。 形式は、
chmod mode file
です。 ここで mode は、アクセス権モードを示す3けたの数です。 この3けたの数の作り方は次の通りです。 はじめに、アクセス権r, w, xを表にしたがって数に置き換えます。 (2進数を知っていれば、この対応はすぐ理解できるでしょう。)
アクセス権 | 数 |
---|---|
--- | 0 |
--x | 1 |
-w- | 2 |
-wx | 3 |
r-- | 4 |
r-x | 5 |
rw- | 6 |
rwx | 7 |
そして、所有者に対して、所有グループのユーザに対して、その他のユーザに対してのそれぞれのアクセス権に対応する数を並べて3けたの数を構成します。
例えば、
b00a001@Ampere:~/WWW-local/ip2a% ls -l ex8.html -rw-r--r-- 1 b00a001 school 9 5月 29日 13:40 ex8.html b00a001@Ampere:~/WWW-local/ip2a% chmod 600 ex8.html b00a001@Ampere:~/WWW-local/ip2a% ls -l ex8.html -rw------- 1 b00a001 school 9 5月 29日 13:40 ex8.html b00a001@Ampere:~/WWW-local/ip2a% chmod 444 ex8.html b00a001@Ampere:~/WWW-local/ip2a% ls -l ex8.html -r--r--r-- 1 b00a001 school 9 5月 29日 13:40 ex8.html b00a001@Ampere:~/WWW-local/ip2a%
はじめの変更で、ファイル ex8.html は所有者以外の人が読めなくなります。 (他人に読まれたくないファイルもあるでしょう。) 次の変更で、このファイルは所有者が書き込めなくなります。 (間違って更新したくない場合に有効です。 更新したくなったら、アクセス権モードをもとに戻せばよいのです。)
なお、特に指定しないならば、新規のファイルやディレクトリのアクセス権モードは次のように決められます。
したがって、普通に使っているうちは、アクセス権モードにそれほど気を遣う必要はありません。
シェルとコマンドについて、以下の問いに答えなさい。 ここで、ディレクトリとフォルダは同義語とします。
問1. シェルの説明として適切なものを次から選びなさい。
問2. コマンドの引数に関する説明として適切なものを次から選びなさい。
問3. カレントディレクトリが
/home/b00a/b00a001/WWW-local
だとしますと、これを
/home/b00a/b00a001/WWW
に変更するにはどのコマンドが適切か、次から選びなさい。
問4. コマンド cp may.html june.html を実行しますと、ファイル may.html の内容がファイル june.html にコピーされます。 もし、すでに june.html がある場合は何が行われるか、次から選びなさい。
問5. コマンド rm は指定されたファイルを削除しますが、削除されたファイルは後で復元できるかどうか、次から適切な説明を選びなさい。
問6. 今、カレントディレクトリに index.html と index.html~ という2つのファイルがあるとします。 この2つのファイルの内容を交換する適切な方法を次から選びなさい。 ここで、カレントディレクトリに temp というファイルやディレクトリはないものとします。
問7. カレントディレクトリが
/home/b00a/b00a001/WWW-local
だとしまして、このディレクトリの中には kanagawa というファイルもディレクトリもないとします。 このとき、ディレクトリ
/home/b00a/b00a001/WWW-local/kanagawa/yokohama
を作成する適切な方法を次から選びなさい。
問8. コマンド rmdir の説明として適切なものを次から選びなさい。
問9. ファイル test.html のアクセス権を、自分は読み書きできるが他人は何もできないと変更したいとします。 適切なコマンドを次から選びなさい。
問10. コマンド mv ~/test.html . を実行しますと何が行われるか、次から選びなさい。
今日の演習9の解答をkonishi@twcu.ac.jpあてにメールで送ってください。 メールには、学生番号、氏名、科目名、授業の日付け(6/5)を明記してください。