電 子 計 算 機 基 礎 論 実 習 計 算 機 基 礎 論 3 B 金沢大学理学部数学教室 1996年05月22日(水)  44.はじめに このプリントは5月29日分のつもりですが,5月22日にやっても構いません。 前々回まではパソコンで MS-DOS を使い,前回は数学教室の WS で電子メールの練習な どをしました。今回は,unix におけるファイル・ディレクトリ操作と,パソコンと WS との間でのファイル転送について学びます。 その前に訂正と補足です。 その1.sieve.c では「int a[10000+1];」を main() の前に書きましたが,それ以外の プログラムでは変数の宣言は main や他の関数の第一行目にありました。その点を説明 するのを忘れていましたので,次のひな型で説明します。 int a[10000+1]; /* この変数は main でも f でも使える */ int main() { int i; /* この変数は main の中でのみ使える */ .... } int f(int n) { int i, p; /* この変数は f の中でのみ使える */ .... } この点からすれば sieve.c の「int a[10000+1];」は main の中に置いてもよかったの ですが,非常に大量の変数を関数の中で宣言するとスタックオーバーフローという現象 が起きてプログラムが正しく動かない場合があるのです。 いまのところは,大量の変数のみ main の外側で宣言する,と理解しておけばいいでし ょう。 その2.前回のプリントで「ユーザ ID」と書いたのは全て「ユーザ名」の間違いでし た。「ユーザ ID」というものは別にあります。 その3.プリント 33 ページの最後に    「.kanazawa-u.ac.jp」を取り除いたものを「~t」のあとに書くようにしないとメ    ールが着かない。これはバグである。 と書いたのは    「.s.kanazawa-u.ac.jp」を取り除いたものを「~t」のあとに書くようにしないと    メールが着かない。これはバグである。 の誤りでした。すみません。訂正しておいてください。 - 34 -  45.unix の階層ディレクトリ構造 WS ではディスクの中に大量のファイルが置かれますので,ディスクを小部屋のように区 切って使っています。その一つ一つが「ディレクトリ」です。ディレクトリはツリー状 につながっています。 数学教室の WS のディレクトリ構造の一部を示します。 / -+- etc | +- home -+- member -+- iwase | +- student | +- ugrad -+- zzh00000 --- mail | +- zzj95... --- mail | 一番左の「/」は「ルート」あるいは「ルートディレクトリ」と呼ばれ,根にあたりま す。そのすぐ下に etc や home があり,home の下には member, student, ugrad があ る,という具合です。  ※ なぜかルートの方向を上,その反対方向を下という習慣になっている。:-) ルート以外のディレクトリを「サブディレクトリ」と呼ぶことがあります。 WS を使っているときには常にどこか一つのディレクトリが「カレントディレクトリ」に なっています。 ugrad の下にはみなさんのユーザ名を名前にもつディレクトリがあり,ログインした直 後にはそこがカレントディレクトリになるよう設定してあります。そこを「ホームディ レクトリ」といいます。そこにはみなさんのアカウントのための初期設定ファイル,前 回の課題で作ってもらった profile というファイルなどが置かれています。 ディレクトリやファイルの指定のしかたには「絶対パス指定」と「相対パス指定」の二 つがあります。 「/」で始まれば絶対パス指定です。/home/ugrad/zzh00000 は上の図に出ているディレ クトリの例,/home/ugrad/zzh00000/profile はそのディレクトリに置かれたファイルの 例です。(後者は上の図には書かれてはいません。) 「/」で始まっていなければカレントディレクトリからの相対パス指定です。例えばカレ ントディレクトリが /home/ugrad のとき,zzh00000/profile はいま上で説明したファ イルを指します。 いくつかのディレクトリ名は特別な意味をもっています。   . カレントディレクトリ   .. 親ディレクトリ(一つ上のディレクトリ)   ~ 自分のホームディレクトリ   ~username そのユーザのホームディレクトリ 例えばみなさんのホームディレクトリがカレントディレクトリのとき,「..」は /home/ugrad を表わし,「../zzh00000」は /home/ugrad/zzh00000 を表わします。 また,「~/mail」は自分のホームディレクトリの下の mail というディレクトリ, 「~zzh00000/profile」はユーザ zzh00000 のホームディレクトリにある profile とい うファイルを表わします。 - 35 -  46.unix のディレクトリ操作のコマンド 「pwd」はカレントディレクトリを表示させるコマンドです。 「cd」はディレクトリを移るときのコマンドです。下の例で一般の場合を推測して理解 してください。   「cd /home/ugrad」 そのディレクトリに移る(絶対パス指定)   「cd mail」 そのディレクトリに移る(相対パス指定)   「cd ..」 親ディレクトリに移る   「cd」 自分のホームディレクトリに帰る   「cd ~」 自分のホームディレクトリに帰る   「cd ~username」 そのユーザのホームディレクトリに移る 「mkdir dirname」で,カレントディレクトリのすぐ下に dirname というサブディレク トリを新しく作ります。  ※ カレントディレクトリに書き込みパーミッション(後述)がないと作れない。さ    しあたってはホームディレクトリで実験するとよい。 「rmdir dirname」で,カレントディレクトリのすぐ下のサブディレクトリ dirname を 削除します。  ※ もしもディレクトリが空でないと警告が出て削除は行なわれない。 「mv olddirname newdirname」で,カレントディレクトリのすぐ下のサブディレクトリ olddirname を newdirname という名前に改名します。  47.unix のファイル操作コマンド(ls, cp, mv, rm, cat, more) 「ls」は,カレントディレクトリのファイル一覧を見るコマンドです。 total 13 drwxr-xr-x 3 zzj88023 ugrad 512 May 11 16:00 ./ drwxr-xr-x 86 root daemon 2048 May 15 12:39 ../ -rw-r--r-- 1 zzj88023 ugrad 2999 May 11 16:00 .cshrc -rw-r--r-- 1 zzj88023 ugrad 29 May 11 16:00 .emacs -rw-r--r-- 1 zzj88023 ugrad 2574 May 11 16:00 .login -rw-r--r-- 1 zzj88023 ugrad 645 May 11 16:00 .logout -rw-r--r-- 1 zzj88023 ugrad 350 May 11 16:00 .mailrc -rwxr-xr-x 1 zzj88023 ugrad 24576 May 15 11:16 a.out* drwx------ 2 zzj88023 ugrad 512 May 11 16:00 mail/ -rw-r--r-- 1 zzj88023 ugrad 115 May 15 11:00 profile -rw-r--r-- 1 zzj88023 ugrad 63 May 15 11:15 test.c ↑ ↑ ↑ ↑ ↑ ↑ ↑ パーミッション 所有者 グループ バイト数 日付 時刻 ファイル名 上に示したのは架空のユーザ zzj88023 がホームディレクトリで ls を実行した例で す。MS-DOS の dir と異なり,出力は必ずファイル名のアルファベット順になります。 「パーミッション」についてはすぐ後で説明します。「所有者」はファイル・ディレク トリの所有者です。WS のディスクは全員で一つのものを使いますが,個々のファイル・ ディレクトリは所有者がはっきり決まっています。「グループ」はそのファイル・ディ レクトリにアクセスできるグループを示しますが,あまり有効には使われていないそう です。なお,みなさんは ugrad グループに属しています。 「バイト数」「日付」「時刻」については MS-DOS の場合と同じですから説明の必要は ないでしょう。 「ファイル名」の欄で,「./」はそのディレクトリ自身,「../」は親ディレクトリを表 - 36 - わしています。その次の5つは「.」で始まっていますが,MS-DOS と違って拡張子とい うものがないのでこういう名前も許されます。これらは私が作っておいた初期設定用の ファイルです。さしあたっては気にしなくて構いません。「a.out*」のように「*」がつ いているのは実行ファイルです。この「*」はファイル名には含まれません。「mail/」 のように「/」がついているのはこのすぐ下にあるサブディレクトリです。この「/」も ファイル名には含まれません。「profile」は前回の課題で作った,普通のファイルで す。 MS-DOS と違って8文字より長い名前も許されますが,MS-DOS で使っていた“普通の名 前”は OK のようなので,さしあたってはそういう名前だけをつけるようにすればよい でしょう。 ファイルが多すぎて画面が流れるときは「ls | more」としてください。「--More--」が 出て止まったらスペースで次の画面,「q」で中止です。 「ls file1」とすればそのファイルについてだけ見ることができます。 「cp file1 file2」でファイルの複写を行ないます。 「mv file1 file2」でファイル名の変更を行ないます。「mv file1 dirname」でファイ ル file1 をディレクトリ dirname に移動します。 「rm file1」でファイルの削除を行ないます。  ※ 以上のコマンドで,file1 はファイル名だけでもよいし,相対パス指定つきでも    よいし,絶対パス指定されていてもよい。dirname も同じ。  ※ 本来の ls はファイル名のみを出力するので,あまり使いやすくない。また,本    来の cp, mv はファイルを上書きする場合の警告を出さないし,本来の rm は確    認メッセージを出さないので危険である。そこで,諸君のアカウントでは alias    という機能を使い,ls, cp, mv, rm と打つと ls -algF, cp -i, mv -i, rm -i    が実行されるようにしてある。よその WS を使うときは注意されたい。 「cat file1」で file1 の内容を画面に出力します。「more file1」だと一画面ずつ見 ることができます。「--More--」が出て止まったらスペースで次の画面,「q」で中止で す。 いろいろなディレクトリを動き回わって,いろいろなファイルを見てみましょう。 前回メールを送るときに使ったファイル mail/a は,実はディレクトリ ~/mail 内の a というファイルだったということがわかったと思います。新着でないメールはこのサブ ディレクトリ内の mbox という名前のファイルにたまっています。  ※ 新着メールは /var/spool/mail というディレクトリの,自分のユーザ名と同じ名    前のファイルにたまっている。このファイルにはいつ新着メールが付加されるか    わからないので,emacs に読み込んだ場合,絶対にセーブしてはならない。その    ようなことをすると読み込んでからセーブするまでの間に着いたメールが失われ    るからである。more で見るか,mail コマンドで自分のディレクトリに移してか    ら emacs で読めば安心である。  48.unix におけるファイル・ディレクトリのパーミッション 「パーミッション」というのは,ファイルやディレクトリに対する読み書きの許可のこ とです。 ls コマンドの説明のところの出力例のパーミッションと書かれた部分を見てください。 最初の1文字(「d」や「-」)は抜かすことにして,次の9文字は   最初の3つの rwx ……所有者 zzj88023 自身に対して    次の3つの rwx ……グループ ugrad のメンバーに対して   最後の3つの rwx ……すべての人に対して - 37 - のパーミッションを示しています。rwx は   r ... 読み取り許可   w ... 書き込み許可   x ... 実行許可 の意味です。例えばファイルが「-rw-r--r--」だった場合,所有者は読み書き可,グル ープのメンバーと他人は読み取りのみ可,となります。ディレクトリの場合は少々違っ た意味になります。 それらの正確な意味を知るよりは,具体例を通してどのようなファイル・ディレクトリ にどのようなパーミッションを与えるべきかを理解するほうが実用的だと思います。 パーミッションを数で表現することもあります。その場合は左から順に r ... 400 w ... 200 x ... 100 r ... 40 w ... 20 x ... 10 r ... 4 w ... 2 x ... 1 と対応させ,「-」でない部分だけ足し合わせます。くり上がりはないから簡単です。上 の例は「644」になります。 パーミッションを変えるには chmod コマンドを使います。例えば「chmod 600 tegami」 とすればファイルまたはディレクトリ tegami のパーミッションが 600 になります。 よく見かけるパーミッションの例をあげます。 ファイルの場合:   644 ... 所有者は読み書き可。他の人は読むだけ。普通のファイル。   600 ... 所有者だけ読み書き可。秘密のファイル。   755 ... 所有者は読み書き実行可。他の人は読むと実行だけ。実行ファイル。 ディレクトリの場合:   755 ... 誰でもはいれる。所有者は書き込める。普通のディレクトリ。   700 ... 所有者だけがはいれて書き込める。秘密のディレクトリ。  ※ たいていの場合,グループに対するパーミッションとすべての人に対するパーミ    ッションは同じにする。つまり,2ケタ目と3ケタ目は同じ数字になる。 自分のホームディレクトリを見て,“秘密”のファイルが他人に見えてないかチェック しましょう。:-) メールを送るときに作ったファイル mail/a そのもののパーミッションは 644 ですが, ディレクトリ mail が 700 なので他の人には見えません。mail/mbox も同じです。  49.unix のCコンパイラ,実行ファイル 「CC test.c」で C のソースファイル test.c のコンパイルができます。  ※ 「CC」が大文字であることに注意。 できた実行ファイルは常に a.out となります。それを動かすときは「a.out」です。 - 38 -  ※ ホームディレクトリではなくその下のサブディレクトリに a.out を作った場合は    「./a.out」としないと動かないかも知れない。これは「カレントディレクトリの    a.out」という意味である。 MS-DOS では拡張子を .exe 以外にすると動きませんでしたが,unix ではどんな名前に 改名しても動きます。  ※ プログラムが動いている途中,CTRL+C で中止させることができる場合がある。ま    た,一時停止させるときは CTRL+S を押す。停止中に CTRL+Q を押せばまた動き    出す。MS-DOS と違って CTRL+Q でなければ動き出さないので注意。  ※ いままでプリントに書いておいたプログラムはどれもそのまま unix でも動くは    ずである。できた実行ファイルは MS-DOS と unix とで全く違うのだが,同じソ    ースファイルが使えるのは便利である。これはC言語の規格化がしっかりしてい    るためである。  50.MS-DOS の階層ディレクトリ構造 MS-DOS も階層ディレクトリ構造をもっています。unix との違いだけを説明します。  ・「/」の代わりに「\」(半角の「¥」)を使う。  ・dir コマンドで見たとき, . そのディレクトリ自身 .. 親ディレクトリ ファイルではなくディレクトリであることのしるし  ・ディレクトリ・ファイルの指名の際,「~」は使えない。ホームディレクトリという 概念がないから当然である。  ・ディレクトリ移動のコマンド cd がカレントディレクトリの表示も兼ねている。す なわち「cd」とだけ打つとカレントディレクトリを表示する。  ・カレントディレクトリのすぐ下のディレクトリを改名するには 「rendir olddirname newdirname」とする。  ・ディレクトリ間のファイル移動はできない。  51.漢字コードの変換 MS-DOS で使われている日本語コードが「shift JIS」であるのに対し unix の日本語コ ードは「EUC」なので,パソコンと WS の間で日本語のファイルをやりとりするにはコ ード変換が必要になります。ここでは,この変換は WS 側ですることにしましょう。 「nkf file1 > file2」で shift JIS から EUC へ,「nkf -s file1 > file2」で EUC から shift JIS へ変換されます。  ※ 諸君のアカウントでは noclobber というしかけを使って,file2 が存在した場合    に上書きされないようにしてある。よその WS はそうなっていない場合があるか    ら注意されたい。  ※ nkf のソースファイル nkf.c は /home/ugrad/zzh00000 に置いてある。nkf はパ    ソコン上でも動かせるので,試してみたい人は次で説明する ftp でもっていき    LSI C-86 でコンパイルするとよい。コンパイル時に三つほど warning が出るか    も知れないが気にしないこと。また,実習で取りあげているプログラムよりも大    きいためコンパイルには少々時間がかかる。MS-DOS 上での使い方は上と同じだ    が,file2 が存在したら上書きされる点だけが違う。「>」の意味・使い方につい    ては別の機会に説明する。 - 39 -  52.ftp WFTP は,パソコンと WS の間でファイルのやりとりをする,MS-Windows 上のプログラ ムです。このようなプログラムを総称して FTP と呼ぶようです。  ※ FTP とは File Transfer Protocol の略。 FTP を利用すれば,MS-DOS でメールの原稿を書いてから WS に転送して送る,といった ことができます。 TELNET の隣りにある,WFTP のアイコンをダブルクリックします。 「セッション(S)」,「オープン(O)」を順にクリックします。「ホスト名」という枠の 中にアクセスしたい WS の IP アドレスを書き,「オープン(O)」をクリックするかリタ ーンを押します。 数学教室の WS のユーザ名を打ち込みますが,リターンは押さないこと!  ※ もしも押してしまった人は一たん WFTP を終了するか,いったん「キャンセル」    して「セッション(S)」「クローズ(C)」してやり直し。 パスワードと書いてある枠の中をクリックするかまたは TAB キーを一度押すかするとカ ーソルはパスワードと書いてある枠の中に移りますから,そこにパスワードを打ち込み ます。パスワードは # になってエコーバックされます。アカウントと書かれた枠には何 も打たずに OK をクリックすると WS につながります。 左側がローカルファイル(パソコン)側,右側がリモートファイル(WS)側です。 パソコンから WS にファイルを送る場合,ローカルファイル側のディレクトリリストの 中の,あなたのフロッピーをいれたドライブ名(Bドライブなら [-b-])をダブルクリ ックします。必要なら,ディレクトリも選んでください。 必要ならリモートファイル側のディレクトリリストで受け側ディレクトリを選びます。 ローカルファイル側のファイルリストで送りたいファイルを選んでクリックします。  ※ 次々とクリックすれば複数の指定もできる。間違えて選んでしまった場合はもう    一度クリックすれば取り消される。また,もしもファイルが多すぎて送りたいフ    ァイル名が画面に表示されていない場合は枠の右の「↑」や「↓」のついたバー    のあたりをクリックしてみること。 選択できたら,「>> 転送(T)>>」をクリックすれば転送が始まります。(まだいろいろ 聞かれますが,自分で考えて答えてください。:-)) WS からパソコンにファイルを送る場合も,左と右が逆になるだけで,全く同じです。ク リックするボタンは「<< 転送(T)<<」に変わります。 同名のファイルがあると上書きされるようですから注意して転送してください。 WFTP を終了するには,まず「セッション(S)」,「クローズ(C)」,「OK」を順にクリッ クして WS との接続を切ります。 それからウィンドウ左上の「一」のようなところをクリックし,「閉じる(C)」をクリッ クしてください。  ※ WS にファイルを転送した場合,そのファイルのパーミッションは 666 になるの    で,他人に内容を見られたり変更されたりする恐れがある。心配な人は,パーミ    ッション 700 のサブディレクトリを作っておき,そこを転送専用に使うとよい。    転送後は chmod でパーミッションを変え,mv コマンドでしかるべきディレクト    リに移動する。こうすれば,同名のファイルを上書きしてしまうことも防げるだ    ろう。 - 40 -  53.メールについてもう少し メールを読む方法は前回説明しました。新着メールとそうでないメールとで読み方が違 いましたが,以下で説明する原理を理解すると実はそれらは同じであることがわかりま す。 メールが新しく着くと,サブディレクトリ /var/spool/mail にある,自分のユーザ名と 同じ名前のファイルに追加されます。 「mail」とだけ打ってメールコマンドを実行すると,その新着メールを読むことができ るようになります。 「mail -f +mbox」のようにすると,~/mail 内のファイル mbox 内のメールを読むこと ができるようになります。  ※ ~/mail は ~/.mailrc の中でメールを置くディレクトリとして指定されている。 「mail -f mbox」とすればカレントディレクトリのファイル mbox 内のメールを読むこ とができるようになります。 番号 ... その番号のメールを読む x ... 変更を記録せずに mail を終了 q ... 変更を記録して mail を終了 h ... メール一覧(の一部)を表示させる z ... メール一覧の,次のページを表示させる z- ... メール一覧の,前のページを表示させる d 番号 ... その番号のメールを削除 h 番号 ... その番号のメールの削除を取り消す s 番号 ファイル名 ... その番号のメールをファイルにセーブ(最後に追加) これら3つのコマンドでは「番号」に「1-3」(1 から 3 まで)「*」(すべて)といっ た指定が可能です。s コマンドの「ファイル名」の部分には,普通のファイル名の他に 「+file1」のように「+」をつけたファイル名も書けます。この場合,~/mail/file1 と 指定したのと同じことになります。 x で mail を終了すると,新着メールを読んでいた場合,新着メールはそのままです。 ファイルにためたメールを読んでいた場合,そのファイルはそのままです。ただし,s でメールをファイルにセーブした場合には,そのセーブした結果は取り消されず残りま す。 q で mail を終了すると,削除したメールは本当に消えます。 新着メールを読んでいた場合は,s でファイルにセーブして q で終わればそれらのメー ルは新着メールからは消えます。ファイルにたまっていたメールを読んでいた場合は, s でファイルにセーブして q で終わってもそれらのメールは消えません。消したければ d を実行する必要があります。 これで,前回習った mail コマンドの使い方の意味がわかったと思います。差出人ごと にメールを別々のファイルにしまったり,不要なメールだけを削除したりすることもで きるようになったでしょう。  ※ 練習は ~/mail/mbox のコピーを作ってから行なうとよい。そうすれば間違っても    メールを失う心配がない。 また,返事を書こうとしているメールだけを適当な名前のファイルにセーブし,そのフ ァイルを emacs に読み込んで不要部分を削り,必要な事項を書き足してそれをメールで 送ることもできます。手で書く手紙と違って引用が簡単なので,相手が送ってきた文章 を引用して返事を書くこともあります。その場合,引用部分には行頭に「>」をつけるの が習慣です。 - 41 -  54.emacs についてもう少し emacs を MS-DOS 上で使った edias と比較した場合,複数のファイルを複数のウィンド ウで同時に編集できることがさしあたっての一番の大きな特長です。 emacs では,ファイル名をつけた文書以外も編集対象となるので,編集中の文書を「バ ッファ(buffer)」と呼んでいます。ファイルの編集をするときはファイルをバッファ に読み込んで編集し最後にファイルに書き戻す。ウィンドウにはどれかのバッファが表 示されるという関係です。 emacs は shift JIS のままエディットができてしまいます。便利ですが,そのままメー ルとして送ると相手は文字が読めない場合がありますから注意してください。 次に,emacs のコマンドのうち私がよく使うものをあげておきます。emacs の習慣に従 って,C-x で CTRL+X を,M-x で ESC に続いて x を押すことを表わすことにします。 後者にはごくまれに M-X と M-x のような大文字小文字の区別がありますから注意して ください。  ※ M-x という書き方は,メタキーというキーがあるキーボードを想定しているから    らしい。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% %% unix の参考書としては,技術評論社の「The UNIX Super Text (上)(下)」 %% %% が便利です。 %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% %% fortran を使ってみたい人は,「f77 test.f」のようにしてください。test.f %% %% はソースファイル名です。できた実行ファイルは a.out になります。 %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% %% 20 ページで「計算機基礎論2」と書いたのは「計算機基礎論1」の間違いでし %% %% た。 %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% %% WS では,「man コマンド名」でいろいろなコマンドのマニュアルが見られま %% %% す。「--More--」が出て止まったらスペースで次の画面,「q」で中止です。 %% %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - 42 -  ※ 複数のキーからなるコマンドを中断するには C-g を用いる。  ◎移動系   ・カーソルを移動 ←→↑↓ または C-b, C-f, C-p, C-n (backward, forward, previous, next)   ・カーソルを行頭・行末へ移動 C-a, C-e   ・画面を大きく上下にスクロール C-v, M-v   ・ファイルの先頭・末尾へジャンプ M-<, M->   ・行番号を表示させる M-x what-line (←本当にこう打つ)   ・行番号を指定してジャンプ M-x goto-line (←本当にこう打つ)  ◎挿入系   ・文字を挿入 その文字のキー   ・改行を挿入 リターンキー   ・コントロール文字を挿入 C-q に続いてその文字を入力  ◎削除系   ・カーソル手前の一文字を削除 削除   ・カーソル下の一文字を削除 C-d   ・カーソルのある行を削除 C-a C-k C-k   ・カーソルから行末まで削除 C-k   ・行頭からカーソルまで削除  ◎行操作系   ・二つの行を連結 前の行の行末の改行を削除せよ  ◎複写移動系(バッファ間でも可能)   ・複写(copy) 複写したいブロックの始点で C-@, 終点で M-w, 複写先で C-y   ・移動(move) 移動したいブロックの始点で C-@, 終点で C-w, 移動先で C-y  ◎検索置換系   ・文字列の検索(search) C-s(前方),C-r(後方)   ・文字列を別の文字列で置換(replace) M-%  ◎ファイル・バッファ・ウィンドウ操作系   ・カーソル位置に他のファイルを挿入 C-x i   ・テキストの一部をファイルへ書き出す   ・ファイルを新バッファに読み込む C-x C-f   ・バッファをファイルに書き込む C-x C-s   ・編集中のバッファ一覧を出す C-x C-b   ・バッファをなくす C-x k   ・ウィンドウ内で編集するバッファを変更 C-x b   ・ウィンドウを二つに分割 C-x 2   ・ウィンドウを一つにする C-x 1   ・もう一つのウィンドウへカーソルを移動 C-x o  ◎アンドゥー系   ・操作の取り消し C-_(「_」はシフトしながら打つ)  ◎ヘルプ系   ・ヘルプ開始コマンド C-h   ・英文チュートリアル C-h t   ・日本語チュートリアル C-h T  ※ C-x b と C-x C-b を混同しないように。前者で b を打つときには CTRL キーを    離していなければならない。 岩瀬順一 - 43 -