第 2 回 (2006.04.21) -- タイピング,雑多なコマンド,ファイル操作,エディタ

タイピングの基本

ここで改めて,キーボードの扱い方,タイピングの基本について簡単に触れておく.

というのも,学生諸君のほとんどはキーボードの扱い方を正しく知らない. そして,間違ったタイピングは効率が悪いだけでなく,健康上の問題を引き起こす可能性がある.
キーボードをあまり使わない gui 環境ではこれは効率が悪いと言うだけの話で済むかもしれないが, タイピングが操作の中心となる unix cui 環境では健康上の問題に発展する恐れが大きいので,特にここで注意しておく.

キーボードを使ったタイピングの基本は,以下の三大原則を守ることである.

  1. 打つときにキーボードを見ない(タッチタイプ).

  2. キーを打つ指を基本に沿って決めておく.

  3. 指を「ホームポジション」に常に戻す.

    # 特に,

    ■   左手の人指し指用ホームポジション[F]
    ■   右手の人指し指用ホームポジション[J]

    にはくぼみや出っ張りがついていて,触っただけでホームポジションが分かるようになっている (一部の変態キーボード等を除いて).

    これらキーの基本とホームポジションは具体的には次のようになる (利用の手引 web 版より図式を引用後着色).

    keyboard image

警告: Typing Injury について

コンピュータを通常から長時間に渡って使用する人間は, 頭痛, 眼の痛み,腱鞘炎等の障害(Typing injury, より詳しくは反復性疲労障害(Repetitive Strain Injury)) などの障害にかなりの確率であうことが知られている.
特に Typing injury について触れると,タイピングの項目(後述)のキー配置図と指の関係を見てもわかるように, 通常の形式のキーボードは指や手への負担に関してあまり合理的な造りをしていない. そのため,通常のキーボードを長時間使用することは「危険」であることを自覚する必要がある.
これに対し,障害を起す可能性を小さくするために様々な 医学的処置や, より合理的な形状をした入力装置 が多数存在する. 革新的な技術革命でもない限り, これからしばらくはわれわれはキーボード等を通じた入力方法を主としてコンピュータに接するわけであるから, 医学的処置の知識を入手するとともに,こうしたより優れた入力装置の購入を早めに検討しておくのが良い.
# 教育用計算機システムなどでは,予算の関係上こうした入力機器に変えることができないだけであるので, その辺り誤解なきように.

参考までに,キーボードの選択にあたっての大ざっぱな目安を示しておこう. 費用の許す範囲で良いものを選択するのが基本であるが,あまりお金がない, という場合でもせめて「ランク C」の品の購入を検討するべきである.
# 好みもあるので,この基準は絶対的なものではないが,何も知らないよりはマシだろう.

■ キーボードの良し悪しの目安 ■
ランク キー間距離 全体形状 キータッチ 備考
A : 非常に良い 非常に短い Ergonomic 形状 軽いがタッチ感アリ DataHand など. 非常に高価. 使いこなすまでに非常に時間がかかる. 入手が日本では非常に難しい.
B : 良い 普通 Ergonomic 形状 軽いがタッチ感アリ Kinesis など. 高価. 大きい. 入手が日本ではやや難しい.
C : 普通 普通 普通 (軽い or しっかり) & タッチ感アリ Happy Hacking Keyboard, Realforce など. 比較的安価. 入手しやすい.
D : 改善が必要 普通 普通 タッチ感が無い,重すぎる,軽すぎる等. 通常販売されているキーボードの 99% はこれである. ほとんどが非常に安価. 健康を害する恐れアリ

実習

  1. ネットワークで適当なタイピング練習ソフトを探し出し, 少し練習してみよ.

  2. 上記ランク A, B, C のキーボードについて調べてみよ. 自宅に PC がある者は,自分が利用しているキーボードのランクがどの程度か判定せよ.



雑多なコマンド

良く使われるが分類しにくいコマンドを簡単に解説する.
# 詳しくはオンラインマニュアルで調べよ.

clear
画面クリア. ^L で代用できることも多い.
date
日付と時刻の表示、設定.
cal
カレンダー.
bc
計算言語. ごく簡単なプログラミング機能もあり,なかなか使える.

階乗 n! の計算例

    > bc -l
      bc 1.06
      Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
      This is free software with ABSOLUTELY NO WARRANTY.
      For details type `warranty'.

      define f(n) {
        z = 1;
        for ( i=1; i<=n ; i++) {
          z = (z*i);
          };
        return (z);
        }    

      f(1)
      1

      f(3)
      6

      f(10)
      3628800

      quit         ← ^d でも代用できる.
      
script
端末上に表示した全てのログ(写し)をとる.
unix 管理者の基本コマンドの一つ. 作業記録を残したいときに使うので,良く覚えておくこと.

普通のユーザにとっても便利である. 例えば宿題をやる時… とマニュアルにもある(^-^).
lpr
(ファイルを)印刷する.
a2ps
テキストファイルを Postscript ファイルに変換する. unix マシンに繋がっているプリンタは Postscipt プリンタであることが多いので, これはテキストファイルを印刷可能形式に変換する,ということを意味する.
lynx
文字端末用 web ブラウザ.
w3m
lynx と同様に,文字端末用の web browser. 表組みをきちんと理解して表示するなどの点で lynx よりも高機能.

実習

  1. 1 から 1000 までの和を求めたい. bc を使ってこの答えを求める方法を具体的に述べよ.

  2. lpr で命令した印刷があるが,プリンタが故障したためこの印刷を取り消したい. こういう時にはどのようなコマンドを用いればよいか.

  3. lynx を用いてこの web にアクセスしてみよ. さらに, w3m でも同様にアクセスしてみよ.

  4. script を使って作業記録をとる練習として, script を用いた状態で (テンポラリな)ディレクトリを作って,中を覗いてみて,そのディレクトリを消す, という一連の動作を行なえ.
    また,その際の記録を確認せよ.

ファイル操作

コンピュータ上での作業とは本質的に情報処理である. そして,情報処理とはデータを処理する作業のことであり, unix ではデータはファイルとして保存されることを考えると, ファイル操作に慣れ親しむことがまずは重要だということが理解できよう.

そこで,ファイル操作を理解し慣れ親しむために,まずはファイルそのものの仕組みを解説し,その後にファイル操作について学習する.

ファイルシステム -- その構造

unix ではデータを保存する方法として, 原則としてたった一種類の形式のファイルとディレクトリからなる階層的ファイルシステムを用いている.
さらに,ディレクトリの階層構造を完全な一本の木構造(ツリー構造)とすることで, システムの全体構造を普遍的なものにすることにも成功している.
ファイルシステム構造のこのシンプルさと統一性は unix のファイルシステムの大きな特徴である.

ファイル
unix でのデータを物理的媒体に記憶するときの単位,というかデータの塊. ユーザからは名前のついたデータそのもののように見える. unix では基本的に一種類しかない.
→ ファイルに関するコマンド群の種類が一種類で済む.

ディレクトリ
ユーザから見たとき,unix でファイルを入れておく場所,もしくは箱のような単位. 住所,と思っても良いかもしれない. ディレクトリの中にはファイルも入れられるし,ディクレトリも入れられる. MS-windows で言うフォルダ.
本当はファイル名を管理するファイルのことだが…

木構造
tree-structure sample 数学でいうグラフ理論の単語から(^-^).
といっても,別に難しい話じゃなくて, 節と枝だけからなる図形(グラフ)の一種で, ある節から他の節へ枝を通っていく行き方が必ず一通りあって, かつ,その一通りしかない,というものをグラフ理論では「木」と言い, そうした構造を木構造という.
unix のファイルシステム全体を,

ディレクトリ = 節
ファイル = 葉

として,ディレクトリ → 入ってる物(ファイル,ディレクトリ)の向きに枝をつけたグラフにすると, まさにこの構造になる.
これは偶然ではなく,これから示すようにいろいろ便利なのである.

ルートディレクトリ(root directory)
ファイルシステムを木構造で描いてみたとき,一番上に来るディレクトリをいう. これは,木構造を引っくり返してみると,そこが根(ルート)にあたることからそういう.
このディレクトリは unix 上では / という記号で表される.

下のパスの「起点」の一つとなる場所である. (木構造の原理から言えば,どこが起点になってもよい. ただ,どこが中心かといえばここだろう,ということだ.)

カレントディレクトリ(current directory)
unix ではいかなる作業をするにも,いかなるソフトウェアが動作するにも, 「動作しているその瞬間にいる場所=ディレクトリ」が存在する. われわれが cui で作業する時は,われわれの命令を待ち受けているシェルがどこで動作しているか, ということである.
この「現在作業をしているディレクトリ」をカレントディレクトリという.

パス(path)
image - graph - path ファイルシステムを木構造で描いてみると,どのファイルもどこかの 「葉 = 末端の節」になっている. よって,木構造の性質から,ルートディレクトリからそのファイルまでの道筋(path)は一通りしかないはずである.
そこで,そのファイルがどこにあるかを指定する方法として, 「どこかからの道筋」を用いることにして,それをパス名(path name)と呼ぶ.
ディレクトリとディレクトリ(ファイル)との間を区切る記号として / を用いる.

# 本当は「枝」がディレクトリやファイルにあたるんだが,慣れないとグラフの枝を実体として扱うことに混乱するのでこう描いている.
# シェルがコマンドを探すための領域を指定しておく環境変数 PATH へも繋がる話なのでよく理解すべし.

なお,パスは「ファイルの住所」と考えると分かりやすい. 簡単な例を示しておこう.

address-tree sample file-tree sample

絶対パス
パス名の起点としてルートディレクトリを用いる方法. よって,必ず先頭に / がつく.

相対パス
パス名の起点としてカレントディレクトリを用いる方法. 先頭に / がついてない場合は必ずこれという決まりになっている.
絶対パスと相対パスの違いは初心者はよく混乱するので,注意すること.

親ディレクトリ,カレントディレクトリの特別な表記
どのディレクトリでも表示される特別なディレクトリが二つある. それは

.. (ピリオド二つ) : 親ディレクトリを表す. 親ディレクトリとは,自分が含まれる一段階大きなディレクトリのこと.

. (ピリオド一つ) : カレントディレクトリを表す. 様々な技術的理由から存在する. 最も多い使われ方は,そのディレクトリにあるファイルを「確実に」 指定したい時に使うというものである. 例えば,そのディレクトリに hoge というファイルがあるとしたら, ./hoge と指定すれば,それはそのディレクトリにあるファイルが確実に指定されたことになる.

通常ファイル操作

pwd
現在いるディレクトリ(カレントディレクトリ)を示す.

cd ディレクトリ名
指定したディレクトリへ移動する.

pushd ディレクトリ名
指定したディレクトリへ移動する.
それまでのカレントディレクトリを記憶してくれるので,次の popd と組み合わせると便利である.

popd
pushd で記憶している最新のディレクトリへ戻る.

ls
ディレクトリの内容をリスト表示する. 最も良く使うコマンドの一つなので,適切なオプションを alias で指定しておくようにするのがよい.

ls の便利な設定例
bash の場合:   alias ls='ls -Fa'
tcsh の場合:   alias ls ls -Fa

touch ファイル名
ファイルを新たに作成する.
本来はファイルの「時刻属性」を変更するコマンドだが, 存在しないファイル名を指定するとそのファイルが作成される.

mv 元ファイル名 変更先
ファイル(ディレクトリ)を移動 or 改名する.

rm ファイル名
ファイル(ディレクトリ)を消去する. unix では消去したデータは元に戻らないため, 安全のためにオプション -i などを alias しておくのが望ましい.

ln
リンクを張る. ハードリンクとシンボリックリンクがあるが, 通常はシンボリックリンクしか使わない. よって,シンボリックリンクを意味する ln -s がデフォルトと言ってよい.
シンボリックリンクの意味は,
シンボリックリンク = ファイルの別名 = windows での「ショートカット」
である.

mkdir ディレクトリ名
ディレクトリを作る.

rmdir ディレクトリ名
ディレクトリを消去する.

cat ファイル名
ファイルの内容表示(本来は,ファイルを結合するコマンド).

more ファイル名
ファイルの内容表示. モニタでの表示に便利な機能がいくつかついている.

less ファイル名
ファイルの内容表示. more よりもさらに便利.
オンラインマニュアルの表示などに用いられる.

wc
ファイルのサイズ,単語数,行数を表示.

du -k ディレクトリ名
ディスク使用統計の表示.
指定したディレクトリ以下の各々のディレクトリにあるファイルの合計サイズ等を示す. 自分はどれくらいディスクを使っているのかな〜 なんていう時に便利.

nkf
漢字コード変換コマンド.
通常は windows と unix ではファイルに用いる(デフォルト)漢字コードも改行コードも異なるため, こうしたコマンドにはかなりお世話になることだろう.

nkf の便利な利用例
あるテキストファイルを windows や mac とやりとりしたいのだがという時に…

windows 用のファイルを新しく作る:   nkf --windows < 元ファイル名 > 新ファイル名
unix 用のファイルを新しく作る:   nkf --unix < 元ファイル名 > 新ファイル名
mac 用のファイルを新しく作る:   nkf --mac < 元ファイル名 > 新ファイル名

tar
(テープ)ファイルアーカイバ. 数多くのファイルをまとめて一つのファイルとして「書庫(arhive)」に入れる, という動作の為のコマンド. ただし,ファイル圧縮機能は無い.
# テープという部分は現在ではユーザにはあまり意味はないだろう.
windows/dos では似たような目的のためのツールとして, zip や lha などが知られている.
tar の使い方については,バックアップについて学習する際に詳しく解説する.

whatis
apropos の厳密版. apropos はなんだったかというと?

which コマンド名
コマンドプログラムがどこにあるか,を教える. ただし,パス変数の中からしか探さない.

whereis ファイル名
コマンドに限らず,様々な種類のファイルを探し出す. ファイルの種類はオプションで指定.

find
ディレクトリの木構造を下へ下へと下がっていきながらファイルを探して, 処理を行なう.
例えば,カレントディレクトリ(.) よりも下のディレクトリで ファイル名の終りが .txt であるファイルを探したい,というときは
find . -name '*.txt' -print
となる.
/ なんかで似たようなことをやるとひどい目にあうのでよく考えてから実行すること(^-^).

file ファイル名
ファイルの種類を判定する. ファイルの中身に触れる事なく判定できるので,安全だ(^-^).

diff ファイル名1 ファイル名2
二つのテキストファイルの違いを表示する. ちょっとだけ違うはずのファイルがどこが違うかを知るのに便利.

実習

上に示したコマンドを,オンラインマニュアルを用いて調べながら一通り試してみよ.

ファイルシステム -- ファイル保護機構

unix ではアカウントによって利用権限等が区別されるタイプのファイル保護機構が組込まれている.
これは,マルチユーザシステムとしての機能の一つとして, ファイルの持ち主や利用権限をきちんと定めるものである.

より細かくは,個々のファイルやディレクトリに, 各アカウントにたいしてどうした操作を許可するのかが設定されている,ということになる.
ファイルの様々な操作の 許可/禁止 はユーザが制御できるので, 上手に制御することで他ユーザから自らの秘密データを守ったり, データ交換を行なったりすることができる.

この許可設定のことを ファイルパーミッション とか ファイルモード などと呼ぶ.

ファイルパーミッションは,そのファイルを「誰に」「どんな操作を」許可 or 禁止するかを設定するものである.
おおまかには,

「誰に」が 「所有者」「ファイルグループに属する人」「それ以外の人」の 3種類,
「操作」が 「読み込み」「書き込み」「実行」の 3種類

あるので,計 9 つの 許可/禁止 を設定する項目がある.

以下,ファイルの「所有者」と「ファイルグループ」に関して簡単に説明しておく.

ファイル所有者 (Owner, User)
ファイルの属性の一つ. そのファイルの所有者が誰か,を表す.
ls -l コマンドで3つめに表示される要素.

ファイル(アクセス)グループ (Group)
ファイルの属性の一つ. そのファイルがどのグループに属しているかを表す. ここでいうグループとは,通常ユーザを分類するときにも用いられるグループのこと.
ls -l コマンドで4つめに表示される要素.

ファイルパーミッションの設定を「見る」

まず,ファイルパーミッションの 9つの設定項目がどうなっているかを調べる方法について触れよう.

通常は,ls -l というコマンドを実行したときに一番左に出る 10文字列からなる項目を正式な「ファイルモードの表示」とよび, この後ろ側 9文字がファイルパーミッションを表す.
# 頭の 1文字はファイルの「型」とよばれ, "d" の1文字の場合はディレクトリを, "-" の1文字の場合はファイルを意味する.

ファイルパーミッションは [3文字の塊 x 3] の構成をしており,左の塊から各々 「所有者に対する許認可」 「グループに対する許認可」 「それ以外に対する許認可」 を意味する.
文字は各々,

"r" … 読出し可能.
"w" … 書込み可能.
"x" … 実行可能(ディレクトリの場合,探索可能).

を意味しており,該当する部分が "-" のときはその操作が「禁止」されていることを意味する.

以上をまとめると,次の表のようになる.

ls -l コマンドの表示の最左端 10 文字の読み方 ■
ファイルモード
ファイルパーミッション
所有者に対して グループに属するアカウントに対して それ以外のアカウントに対して
"d" … ディレクトリ
"-" … ファイル
読み出し設定

"r" … 許可
"-" … 禁止
書き込み設定

"w" … 許可
"-" … 禁止
実行設定

"x" … 許可
"-" … 禁止
読み出し設定

"r" … 許可
"-" … 禁止
書き込み設定

"w" … 許可
"-" … 禁止
実行設定

"x" … 許可
"-" … 禁止
読み出し設定

"r" … 許可
"-" … 禁止
書き込み設定

"w" … 許可
"-" … 禁止
実行設定

"x" … 許可
"-" … 禁止
1文字目 2文字目 3文字目 4文字目 5文字目 6文字目 7文字目 8文字目 9文字目 10文字目



パーミッションに関する表示例

例えば,ls -l を実行したところ


  drwxr-xr-x  1 paoon  Labo       512   3 26 22:45 tmp
  -rw-------  1 paoon  Labo      6665   3 26 22:45 dummy1
  -rw-r-----  1 paoon  Labo     50102   4  5 22:19 dummy2
    

と表示されたとすると,

ということがわかる. 後述するコマンド chmod を使えば,この属性を書き換えられるので, 自分のファイルの保護レベルを自由に設定できることがわかるだろう.

ファイルパーミッションの設定を「変更する」

ファイルパーミッションを制御するには,主に chmod というコマンドを用いる.
詳細はオンラインマニュアル等を参照するとして, 大まかな文法は以下の通りである.

chmod 許可設定 ファイル名

許可設定は [ugoa][+-=][rwx] の形で表す. この文字の意味は各々以下の通り.

u  所有者に対する設定を意味する.
g  グループに属するアカウントに対する設定を意味する.
o  それ以外のアカウントに対する設定を意味する.
a  全アカウントに対する設定を意味する.

+  許可を意味する.
-  禁止を意味する.
=  その(許可)設定以外は禁止を意味する.

r  読み出しに関する設定を意味する.
w  書き込みに関する設定を意味する.
x  実行(ディレクトリの場合は検索)に関する設定を意味する.

また,各シェルが提供する内部コマンドとして, umask というコマンドがある(シェルによって機能や文法が異なる).
このコマンドを用いると,ファイルを作成するときに自動的に設定するパーミッションを制御できる.
bash, zsh の場合などは chmod と同じ表記で「初期値」を設定できる.
通常はパーミッションを「誰に」ごとに 8進数表記(octal notation)した 3桁の数字でマスク値を指定する方法なので,使い方はやや難しい.

パーミッションの変更・設定例

chmod u=rw, og=r ファイル名
パーミッション指定を rw-r--r-- とする.
通常のファイルはこうしておけばよいだろう.

chmod u=rw, og-rwx ファイル名
パーミッション指定を rw------- とする.
メールやその他,秘密性の高いファイルはこうしておくべきである.

umask u=rwx, go=rx   (bash, zsh の場合)
ファイルが作成される時の通常のパーミッション指定を rw-r--r-- とする.
umask 022 と等価. 通常は,このように 8進数3桁の数字でパーミッションのマスク値を指定しないといけない.

umask -S   (bash, zsh の場合)
ファイルが作成される時の通常のパーミッション指定がどうなっているかをパーミッション表示で表示する.

umask
ファイルが作成される時の通常のパーミッション指定がどうなっているかを 8進数3桁の数字で表示する.

ちなみに: 組み込みコマンドのオンラインマニュアルの引き方について

umask のようなシェルの組み込みコマンドは,オンラインマニュアルを引くのにちょっとしたコツが必要である.
以下に各シェル毎にその具体的な方法を記しておく.

bash, tcsh の組み込み系コマンドについて調べるには
(j)man bash(j)man tcsh としてオンラインマニュアルを表示させてから,その中でそのコマンドの 文字列(例えば umask など)を探せばよい.

zsh の組み込み系コマンドについて調べるには
(j)man zshbuiltins としてオンラインマニュアルを表示させてから,その中でそのコマンドの 文字列(例えば umask など)を探せばよい.

実習

  1. touch コマンドを用いて適当なファイルを作成し, chmod を使って次のようにパーミッションを変更してみよ.

    誰にでも読み書き,実行できるように.
    誰にでも読め,実行できるが,書込めないように.
    自分だけが読み書き,実行できるように.
    自分でも読めるだけのように.

  2. touch コマンドを用いて自分のディレクトリに適当なファイルを作成し, 「隣の席の人がそのファイルを読めるが,書き込みはできないように」 chmod を使って適切にパーミッションを設定せよ.
    その後,確かに隣の席の人が 「そのファイルを読めるが,書き込みはできない」 ことを確認せよ.

テキストファイルとエディタ

エディタとはファイルの中身を直接編集するためのソフトウェアのことである.

unix cui 環境を使っている時間の大半は, コマンドを用いているかファイルを編集しているかであるので, エディタを使用する時間は非常に多いことになる.
そこで,ここではエディタについて詳しく解説する.

まず,エディタで主に扱うファイルの形式であるテキスト形式について解説し,それからエディタについて解説する.

テキストファイルについて

unix 上では,ファイルはなるべくテキストファイルとして保存することが望ましいとされる.
テキストファイルとは,人間に読める文字だけでデータが記述されたファイルのことをいう. そうでないファイルを一般にバイナリファイルと呼ぶ.
# 映像,音声ファイルのように,圧縮しないと非常に大きくなるファイルなどは, 少しでもファイルを小さくできるバイナリファイルの方が適しているが, そうしたもの以外はテキストファイルが望ましい.

テキストファイルとバイナリファイルの違いは less などのファイル閲覧コマンドでファイルを見てみれば一目瞭然である.
ただし,バイナリファイル中の文字列がシェルの設定等を書き換えてしまうことも多いので,実はこれはお勧めしない(^-^). ファイルを閲覧する前に,fileなどを用いて,ファイルの正体を見るのが正しい.
また, どうしてもバイナリファイルの中身を見てみたいという場合は, cat -v vis を用いるのがよい(どちらもマニュアルで調べること).

テキスト/バイナリファイル を見てみた様子
text file looking sample
テキストファイルの中身を見るとこんな感じ.
binary file looking sample
バイナリファイルの中身をlessなどで無理やり見ようとするとこんな感じ.

テキストファイルが良いとされる理由は次のようなものである.

これらは「閉じた商用ソフト」にとっては逆に不都合である,ともとらえられるため, windows などの OS の商用ソフトは逆にデータをテキストファイルとせず, バイナリファイルと呼ばれるファイルでデータをファイル化する傾向が強い.
つまり,互換性を低くすることによって,他の会社のソフトへの移行を阻害する, 人間に読めないようにして,どういう処理をしているかを隠す, ユーザがそのソフト無しではファイル修正等が出来ないようにして, そのソフトへの依存性を高める… といった具合いである(麻薬への依存のようなものだ).
この副作用は,windows や Mac OS では長い目で見るとユーザの熟練度が上がりにくい,という傾向となって現れる.
つまり,バイナリファイルで互換性の低い形式を扱うソフトというのは, ユーザの便益を蝕んで儲けていると非難されても仕方がなく, 逆にユーザはこうしたソフトを忌避するよう自衛する必要がある.

さて,以上より推測できると思うが,unix cui 環境でファイルを編集するという場合はたいていはテキストファイルを扱うことを意味する(例外はもちろんある).

エディタについて

エディタ(Editor)とは,ファイルを編集する為のソフトウェアである. 詳しくは編集するファイルによって
テキストエディタ( = テキストファイルを編集する) バイナリエディタ( = バイナリファイルを編集する)
と呼び分けられるが,通常はエディタと言えばテキストエディタを指すことが多く, この区別はあまり気にされない. 今回の授業で扱うのももちろんテキストエディタである.
テキストエディタを用いた作業は概念図的には以下のようになる.

■ エディタを用いた作業のおおよそ ■
エディタの最も典型的な使い方は,以下の通りになる.
  1. 編集するファイルのバックアップをとる(重要!).
  2. (エディタ起動)
  3. 編集したいファイルをエディタに読み込む.
  4. エディタで編集する.
  5. 編集が済んだデータをファイルとして書込む(saveする).
  6. (エディタ終了)
という流れになる.
how to use editor -- basically

エディタは unix cui 環境では最も頻繁に用いるソフトウェアの一つである. なぜなら,人間が computer にデータを入力する際に最もよく用いる方法の一つが入力したいデータをファイルという形式で入力することだからである.
よって,unix cui 環境を使いこなすには, エディタを自由自在に使いこなせないといけない. 幸い,unix cui 環境で用いるエディタの種類はそう多くはないので, あるエディタに慣れる前に他のエディタに目移りするということはそうそうない. 以下に,代表的なエディタを示すので,これらに良く触れて習熟するのがよい.

■ unix cui 環境でよく用いられるエディタ ■
名称 特徴
vi unix と名のつく OS ならばほぼ間違いなくデフォルトで入っているエディタ.
エディタとしての機能に絞った設計になっており, 非常に素朴な環境でも動作し,動作も速い.
全ての動作が「コマンド」として体系化されており, キーボードだけで作業が効率よくできるようになっているが, これは逆にコマンドを記憶する必要があることを意味する.
# かなり使い込まないと習熟できないため, このエディタを推奨するのは少々ためらわれる (もちろん,熱狂的なファンも多いが).
unix 自身のインストールのかなり早い段階から使えるエディタであること, OS 自身の動作が危うくなっているときでも動作する可能性が高いことなどから, unix 管理者は好きと嫌いとに関わらず vi を使えるようにならないといけない(最低限のレベルで構わないが).
emacs elisp という言語で書かれたマクロファイルを使用して ほぼあらゆるカスタマイズが可能な非常に優秀かつ柔軟なエディタ. 適切に設定すれば, emacs の中から OS の操作を全て行なうことも可能で, エディタというよりも unix 環境そのものであるとも言われる.
unix で最も良く使われているエディタはおそらくこの emacs である.
このエディタもやはり習熟には時間を要するが,vi よりは難易度が低い. どちらかというと emacs をエディタとして推奨する.
vi 同様にほぼ全ての unix 環境で使えるが, vi がシステムのデフォルトで用意されているエディタであるのに対し, emacs はほぼデフォルトで用意されているアプリケーションソフト, という立場である.
# であるから,emacs が使えない状態の unix 環境というのもいくらでも存在する.

上記特徴より推測できると思うが,unix cui 環境で用いるエディタとしては以下のように推奨することになる. 自らの unix に対する取り組み方を考えて選択するのがよい.
#もちろん異なる組み合わせも可能である. 最終的には好みの問題である.

エディタ操作の習熟について

cui 環境ではマウスやメニューといったグラフィカルな要素は使えないと考えるべきである. つまり,見た目で直感的に操作はできない. そのため,どちらのエディタも操作にはかなりの習熟が必要である.
言い換えると,最初から使いこなせなくても当たり前なので, すぐ投げたりしないでじっくり使い込んでいくのがよい.

バックアップについて

忘れてはならない大前提として「人間はミスをする」というものがある. コンピュータの操作および設定はこの前提の下に行なわれないと, あとで酷い目に会うだけである.
ファイルのバックアップは, ファイル操作およびその編集作業でのミスに対する保険の一つである. これは手持ちのデータ全てをバックアップするレベルや rcs,sccs といったバージョンコントロールソフトの使用と兼ねるものなどがあるが, それらについては後の授業で解説する.
ここでは, 最も単純で OS 等に依存しない素朴な方法をとりあえず記述しておく.
例えば,dummy.txt というファイルを編集しよう, という前に行なうバックアップを例に挙げてみると…


    > ls dummy.*    ← 似たような名前のファイルが無いか事前チェック.
    dummy.txt

    > cp dummy.txt dummy.txt.bak-20020505    ← 一目でバックアップだと分かるように. 出来れば日付等も明記しておくと良いか.
  

等としてバックアップを取っておく. この方法だとバックアップファイルがだんだん増えていく, 分かりにくいので管理がしにくい, 等のデメリットが大きいが, バックアップしないよりは 100倍マシである. よりきちんとしたバックアップの方法についてはこれからの授業で学習する.

日本語入力,変換について

unix は本来英語圏で開発されたため,日本語の入力は「後から追加」 された機能を用いることになる. つまり,そうした後付けの機能に対応しているソフトでないと日本語入力はうまくできない.
阪大教育用計算機システムでは,xemacs と vi(実はvim) は日本語入力に対応しているようなので安心して使える.
阪大教育用計算機システムで日本語入力を行なうには,C-\ ([Ctrlキー]を押しながら[\キー]を押す) という動作を行なう. もう一度同じ動作で日本語入力モードが解除される.

エディタ emacs

emacs と一口にいっても, 多国語化を押し進めてきたバリエーションとしての mule, グラフィカルな要素を強化してきた xEmacs などの細かいバリエーションがある. こうした要素は emacs のバージョンが上がるにつれて統合されていくが, まずはなるべく基本的かつ共通である cui 機能だけで扱えるようになろう.
また,これ以降は emacs と書いた場合はこれら多くのバリエーションをまとめて呼んでいるものとする.

起動方法
kterm 中で emacs & もしくは emacs -nw とコマンドを入力する.
# 教育用計算機システムで日本語をきちんと使いたい場合は, emacs ではなくて xemacs を使うのが良いだろう.

emacs & … emacs をバックグラウンドジョブとして起動(詳しくはプロセス管理の説明をする授業で学習する)
emacs -nw …emacs を kterm の中に完全な cui モードで起動.
終了方法
emacs で C-x C-c と入力(C- は "[Ctrlキー] を押しながら" を意味する).
編集操作
まずは入門ガイド(Tutorial)に従って操作して学習するのがよい. 入門ガイドは emacs にはほぼ必ず用意されている.
emacs を起動し, C-h t もしくは [F1キー] t と入力すれば入門ガイドモードに入る.
emacs を起動した後,何もしないで画面を良くみると,
C-h t で XEmacs の使用方法の実習を開始できます
もしくは
Get a tutorial f1 t
もしくは
Type C-h t for a tutorial on using Emacs
などという表記がある. このように最低限の操作方法は最初に表記されるので, まずはじっくりこの画面を読むのも良いだろう.

emacs の操作で困ったら
emacs で変な操作をしてしまって,どうしたらよいか分からなくなることがある. こうしたときは,慌てずに C-g を何回か入力しよう. このキーは「動作中のコマンドを中止」するもので,変な操作中の状態から通常状態に戻してくれる.

ただし,「してしまった操作」を元に戻すものではない. 操作を取り消したい,という場合は undo コマンドを用いる. 具体的にどうしたらよいかは入門ガイドで学習しよう.

表示されたキーを入力しても動作しないが?
入門ガイド等で表示されたキー操作をしてもその通りに動作しない, ということがある. これは,貴方の個人環境では「キー操作が書き換えられている」ために起こる現象である. その為に,標準的なキー操作を想定して書かれているものと違ってくるのである.

阪大教育用計算機システムでは,~/.xemacs などにその 「キー操作書き換え設定」 が書かれているだろう(一度見てみよ.他にも便利なことが書いてある).
例えば,多くの生徒の場合, 本来ヘルプを呼び出すキー操作である C-h が一文字消去という動作をするように書き換えられている. このため,入門ガイドで C-h と書いてある部分はそのまま入力してもうまくいかない,ということになる.
こういう場合は, [F1キー] がたいていはヘルプになるようになっているので, C-h の代わりに [F1キー] を押せばよい.

emacs を早く使いこなせるようになりたい
いくつかコツがあるので書いておこう.

カーソルキーを使うな!
emacs には効率的にカーソルを移動させる方法が豊富に存在する. カーソルキーを使うとこうした効率的な方法を使わなくなってしまうため, 結果として emacs をいつまでたっても使いこなせないうえ,作業が鈍いということになる.
カーソルキーは「初心者用の麻薬」であって, 「一見気楽」ではあっても「後で泣く」ことになるのを知るべきである.
また,カーソルキーを使うためには手をホームポジションから大きくずらすことになり, 手に負担がかかる上,キー操作は遅くなる.
「カーソルキーは本来キーボードに存在しないもの」でもあることを自覚し, emacs では絶対に使わないのが cui ユーザの正しい姿である(^-^).
マウスを使うな!
これもほぼ理由は同じである. emacs を使う上でマウスを使う理由はほとんどない.
単純作業を繰り返すな!
たいがいのことは自動化できる,そうした機能がある, というのが emacs である. 同じ作業を延々手で繰り返すようなことを無反省にしているようでは emacs はいつまでたっても使いこなせない.
作業が多くなりそうだったら,作業に取り掛かる前に emacs にそういうことを自動的に行なうような機能がないかまず調べるべきである.

emacs の操作方法はある程度「覚えないといけない」. そのため,最初は適当なマニュアルを手元に用意しておくか, 自分でメモをしてそれを見ながら使うようにするとよい.
emacs はもしかするとこれから何十年も使うことになるツールであるので, ゆっくりと確実に使えるようになるのが良い.

実習

  1. emacs を起動し, tutorial (使用方法の実習)を行う.

  2. コマンドを用いて適当なファイルを作成し, emacs を用いてその中身に適当な文章を書き込んで保存した後, emacs をいったん終了する.

  3. emacs を起動して,先ほど作成して書き込んだ複数のファイルの内容を一つのファイルにまとめ直せ.

エディタ vi

vi にも emacs 同様多くのバリエーションがあるが, これもやはり最も基本的なものから学習するのがよい.
阪大教育用計算機システムでは,vi の実体は実は vim という「改良された」vi である. そのため,意識せずに vim の改良された機能(モード表示機能など)が使えてしまう(^-^).

起動方法
kterm 中で vi とコマンドを入力する.
終了方法
vi で([Escキー] を何度か入力後) ZZ (Z は大文字) もしくは :x もしくは :wq もしくは :q! と入力.

ZZ … 終了. ただし,編集中で save していないファイルがあると終了できない. :q と入力するのと同じ.
:x … 終了. 未save ファイルは save する.
:wq … ファイルを save して終了.
:q! … ファイルを save せずに強制終了.

(注) 終了方法が多くてわかりにくいが, そういう時は :wq :q! とだけを意識して使うようにするのが安全でよいだろう.

編集操作
vi を理解するには,vi の「モード」かコマンド体系をきちんと理解する必要がある(どちらかを理解すればよい).
ここでは, 通常良く使われる「モード」による説明を行なっておこう.
コマンド体系による綺麗な説明に関しては, 参照図書 "新 The Unix Super Text(改訂増補版)(上)" の 18.2 (pp.255-) を読むのが良い.

■ vi のモードの概念図 ■
vi mode vi のモードは大雑把に次のように分類される.
コマンドモード
vi の基本モード. カーソル移動,文字削除等を行なう.
挿入モード
文字を入力するモード.
exコマンドモード(コロンモード)
「: キー」を押すとこのモードになる. ファイル操作等の OS 操作や(正規表現による)置換など. vi の終了操作は OS とのやりとりということでここに分類される.

(注) [Escキー] を何回か押せば必ずコマンドモードになるので, どのモードにいるか分からないときはとにかく [Escキー] を何回か押せばよい.


以下に vi の編集操作で最低限必要なものを記そう. vi の操作は結構奥が深いので,興味あるものは参照文献などを参考にして勉強するのがよい.

■ vi の編集操作表 ■
分類 キー 機能 使えるモード
カーソル移動 h 左へカーソル移動 コマンドモード.
j 下へ.
k 上へ.
l 右へ.
0 (数字の0) 行頭へ.
$ 行末へ.
0 (数字の0) 先頭行へ. ex コマンドモード
$ 最終行へ.
挿入 i カーソルの「前」で挿入モードに移行. コマンドモード
a カーソルの「後ろ」〃
o カーソルのある行の「次の行として」〃
r ファイル名 ファイルの内容を挿入. ex コマンドモード
貼り付け
(paste)
p 削除もしくはコピーされた内容を挿入する. コマンドモード
削除
(cut)
x 一文字削除.
dd 一行削除.
D 行末まで削除.
J その行の改行文字の削除.つまり,今の行と次の行とを繋げて1行にする.
d カーソル移動 現在地から移動先までを削除.
C-h 一文字削除 挿入モード
C-u 一行削除
コピー
(copy)
yy 一行コピー. あとで p で貼り付けるために使う. コマンドモード
y カーソル移動 現在地から移動先までをコピー. あとで p で貼り付けるために使う.
検索,置換 /文字列 カーソルの「後ろ」に向かって検索.
?文字列 カーソルの「前」に向かって検索.
n 前と同じ検索,置換.
c カーソル移動 置換.
カーソルを移動してから挿入モードに移行し, 元の位置から移動位置までを挿入モードで入力した文字列に置換.
%s/元文字列/新文字列/g 置換 exコマンドモード
繰返し . 直前の編集コマンドを繰り返す コマンドモード
復元 u 直前の編集コマンドを取り消して元に戻す
ファイルへ書込み
(save)
w ファイル名 ファイルに書込む. ex コマンドモード
終了 wq ファイルに書込んでから終了.
q ! ファイルに書込まずに終了.
x save してない場合はファイルに書込んでから終了.
ZZ save してある場合のみ 終了. コマンドモード


■ vi に習熟するためのゲーム(^-^) ■
rogue sample (^o^) unix には実は vi と同じキー配置のカーソル移動等をもつゲームが多く存在する. こうしたゲームで遊ぶことで vi のキー配置を体に染み込ませる, のは 20年以上の長い歴史をもつ由緒ある「正しい学習方法」(^-^)であるので, 暇がある人にはおすすめである.

具体的には, Rogue, Hack, Nethack, Larn, Moria, Omega, Angband, ADOM などがあるので,興味あるものはネットワーク検索などで調べてみるとよい. windows や Mac に移植されたものも多いので, 自宅の PC で遊んでみるのもよいだろう. 中にはグラフィカルなものや,マルチプレイヤー対応のものなどもある.

左は阪大教育用計算機システムの kterm 上で rogue を動作させたときの様子である. (ただし,rogue はインストールされていないため,各自で用意する等の必要がある)

実習

  1. コマンドを用いて適当なファイルを作成し, vi を用いてその中身に適当な文章を書き込んで保存した後, vi をいったん終了する.

  2. コンピュータに詳しい人にお願いするなどして,rogue を体験してみよ.

レポート課題(20点満点)

「実習」と記された部分について, 能う限り賢明な調査と考察を行い,

AppliedMath-Report-02

という題名をつけて e-mail にて教官宛にレポートとして提出せよ(教官のメールアドレスは授業中に口頭で伝える).
なお,レポートを e-mail の代わりに TeX で作成した書面にて提出してもよい.




最終更新日 … $Date: 2006-04-20 21:05:01+09 $
Valid CSS! Valid XHTML 1.1!