UNIX ガイド

Yutaka Yasuda
Kyoto Sangyo University

1. はじめに

ここでは cc 環境、つまり京都産業大学の情報センターが管理している UNIX 環境を例に取りながら、比較的一般的な UNIX 環境の利用方法を説明します。
ここでの説明は網羅的なものではなく、部分を取り上げて曖昧に説明しています。 これは本文の読者のコンピュータそのものについての知識のハードルを高くしすぎないためです。

読者が UNIX、つまりコンピュータの利用に慣れて行くにしたがって自分でマニュアル、書籍、ネットワークなどから情報を常に取り込んで理解を深めていくことが大切です。

1.1 Linux

情報センターが管理している共用 PC 環境で利用できる UNIX は Linux というものです。UNIX というジャンルの OS (Operating System)のなかのひとつの実例だと思えば良いでしょう。

ここでは UNIXとは何か、OS とは何か、というようなことについては説明しません。簡単にコンピュータを操作するためのソフトウェア(の集まり)だと思ってください。あなたは Linux という OS を通じて、コンピュータを操作し、目的の動作をさせるのです。

2. 基礎知識をもう一度

2.1 Login

UNIX コンピュータを利用する為にはまず初めに、誰がこれから利用するのかをコンピュータに伝える、 login [1] と呼ばれる作業をしなければなりません。

本文では既に login が済んでいるものとして説明を続けます。
また、ターミナルが起動され、コマンドを入力できる状態になっていることを前提にしています。

ところで login するのは良いのですが、ときどき logout [2] しない(もしくはセッションを終了しない)人がいます。
logout しないと他の人がそのコンピュータを使えないばかりか、逆に他人に悪用されてしまいますから、しばらくしてまた戻ってくる場合でも席を外す際は logout するべきです。


2.2 キー表記

キーボードから様々な文字列を打ち込むことを「タイピング」と呼んでいます。
「abc」と打ち込むことを「abcとタイプする」「abcと入力する」などと表現することもあります。
UNIXでは通常のアルファベットや数字以外に、様々なキーがあります。

以下のような記述で様々なタイピングを表現します。
重要な語句の説明です。覚えてください!!

<Return> リターンキーを意味します。共用 PC のキーボードでは Enter と書かれています。
<Delete> 削除キーを意味します。一般的には Delete キーに当たります。共用 PC では Back Space が多くの場合に該当するでしょう。
<Space> 空白キーを意味します。
<Tab> タブキーを意味します。一般的にはアルファベットの Q の左にあります。Tab と書いてある場合が多いですが、左右の矢印が重なった絵柄が書かれている場合もあります。
<ESC> エスケープキーを意味します。一般的には数字の1キーの左上にあります。Esc と書かれています。
<Control> X コントロールキーを押しながら X キーを押すことを意味します。コントロールキーは Ctrl と書かれています。
<ESC> X エスケープキーをいちど押し、はなしてから X キーを押すことを意味します。
C-X コントロールキーを押しながら X キーを押すことを意味します。
M-X メタキー(一般的には<ESC>キー)をいちど押し、はなしてから X キーを押すことを意味します。

2.3 カーソル

タイピングしている最中に、次にキーを押したらどこにその文字が入力されて表示されるかを判り易くするために表示する目印のことを「カーソル(cursor)」と呼んでいます。

形は状況に応じて様々で、丁度一文字分の大きさの■(黒い長方形)だったり、|(縦棒)だったりします。他の文字と見分けが付き易いように点滅している場合もあります。

カーソル

カーソルの例(一行目の黒い長方形)

2.4 マウス操作

マウスの操作についてはもう説明の必要がないほど普及しました。簡単に説明しますが、何より UNIX 関連の用語だけは覚えておくと良いでしょう。
マウスを前後左右にすべらせると、画面上に出ている ↑ のような矢印など、いまマウスがここを指していることを示す目印がそれに連れて動くのが確認できるでしょう。この目印をマウスポインタと呼びます [1]

マウス

マウス(2ボタンローラーつき)

マウスは下図のような形で軽く握ります。ボタンをよく使うので、ボタンの上に指を掛けておくと良いでしょう。

マウス

ボタンを押す(正確には押してすぐ離す)操作のことをクリックと呼びます。

UNIX では [2] 3 ボタン式のマウスを使うことを想定しています。そのため、UNIX 関連の書物やマニュアルにはマウスのボタンについて「左ボタン、中ボタン、右ボタン」と表現されている場合があります。

ただ、現在では Microsoft Windows が想定している 2 ボタンのマウスが PC の市場では主流になっています。この場合は 2 つのボタンを同時に押すと中ボタンを操作したとみなす、といった機能の割当がされていると思いますので確認してください。

また、2 つのボタンの間にローラーがあるタイプのマウスの場合、ローラーが中ボタンに対応するはずです。中ボタンをクリックする指示があった場合はローラーをボタンに見立てて押し込んで下さい [3]


2.5 キー操作

キーはとにかく押し込めば機能しますが、やはり初めの頃はより良いタイピングに努めるのが良いでしょう。手元を見ず画面表示に注視したまま高速にタイピングを続ける、いわゆるタッチタイプ [1] です。

タイプ練習ソフトを利用して練習している段階でも、普段のタイピングから指をホームポジション、つまり両手の親指以外が、「A」「S」「D」「F」キーと「J」「K」「L」「; (セミコロン)」キーに置いてタイプするよう心がけると上達が早まります。

試みにホームポジションに指を合わせて手を置いてみましょう。このとき、指や手首に無理がない位置を見つけて下さい [2]


ホームポジションを意識して置かれた手

ホームポジション

各指の配置

ほとんどのキーボードでは F と J のキーに突起がつけられており、それが人差し指に当たることで手元を見ずにホームポジションを維持できるように工夫されています。タイプの途中、指が常にこの定位置にあり、必要なキーのためだけに特定の指だけを動かしてタイプするように努めましょう。


3. コマンド

これから UNIX を利用していくわけですが、それにはコマンドのことを理解しなければいけません。

3.1 コマンドって何だ?

コンピュータというのは機能の集合体だと考える事ができます。

これからあなたが利用しようと思っているコンピュータの中には多くの機能があります。

たとえば Windows や Macintosh で何か実行したい機能があったとき、そこをマウスでクリック(またはダブルクリック)するでしょう。機能をかたちにして見せて操作させているのです。そうやってユーザはコンピュータに向かって「これを実行せよ」と指示しているわけです。
もうひとつ、機能にそれぞれ名前をつけて、その名前で呼び出す場合も考えられます。

コマンド

コマンド:機能を名前(やキーワード)で呼び出す例。

機能にはそれぞれ固有の名前(上の図では date という名前)が付けられており、利用者は機能をその名前で選ぶというわけです。
コマンドとは、この「それぞれ付けられている名前で機能を実行する」やりかたのことを言います。date という名前がついた機能を呼び出すコマンドは「date コマンド」などと表現します。

あるコマンドを入力するとは、そのコマンドに対応する機能を実行するように指示 [1] するという事です。

GUI と CUI

Windows や Macintosh は機能を形にして見せるようにしています。見えるものを操作すれば良いように作られているわけで、これを GUI [2] - グラフィカルユーザインタフェイスと呼びます。

UNIX でも GUI が幾らか用意されていますが、操作のあちこちにコマンドがでてきます。コマンドなど文字によって行なう操作系を CUI [3] - キャラクタユーザインタフェイスと呼びます。

ところで CUI の場合、機能の名前を知らなければどんなに便利な機能がコンピュータの中にあったとしても利用できません。名前を間違えて指定すれば、望みの機能とは違う機能が働き出しますので注意が必要です。
GUI では、機能はそれらしく目立つように表現され、メニューとして表示されるのでそういった問題はありません。
UNIX はこの CUI について極めてうまく作り込まれたシステムであり、UNIX を使うには今でも CUI が便利な部分が多くあります。そこでこのガイドでも CUI を中心に説明が行なわれています。


3.2 プロンプト

UNIX のような CUI システムの利用というのは実際にはこのコマンド実行の繰返しだと言えます。

コンピュータが「コマンドをどうぞ」というメッセージを表示し、利用者がコマンドを入力する。
コンピュータはコマンドの結果をメッセージとして表示し、「次のコマンドをどうぞ」と、またメッセージを表示する。
そして利用者が再びコマンドを入力する、という具合です。
見方を変えればコンピュータと利用者はメッセージとコマンドで「対話」しているようにも見えます。

このコンピュータが利用者との対話のために用いている「次のコマンドは何ですか?」という催促メッセージのことを一般に「プロンプト(prompt)」と呼んでいます。

cc環境での一般的なプロンプトは cc2000(81)% [1] などと表示されます。
cc2000で login した直後に見える ウインドウの左隅に見つけることができるでしょう。


3.3 簡単なコマンド

幾つか非常に簡単なコマンドを実行してみましょう。

dateコマンド

プロンプトに続いて date <Return>とタイプしてください。
以下のように時間が表示されるでしょう。
つまり date は日付と時間を表示するという機能のコマンドです。

以下に示す例は実際にあなたが試してみたときとは結果が違うでしょう。この例を試したときと、今とでは状況が違っているからです。
これ以降に挙げる例も、全く同じ結果が表示されるとは限らないことに注意してください。

cc2000(81)% date
2003年  9月 25日 木曜日 18:02:13 JST
cc2000(82)%

もしも以下の様に「 コマンドが見つかりません.」などというメッセージが表示されてしまった場合はコマンドの綴りの打ち間違いです。もう一度、今度は正確にコマンドをタイプしてください。

cc2004(83)% data
data: コマンドが見つかりません.
cc2004(84)% 

この正しくない操作を利用者が実行しようとしたためにコンピュータの方から「それは駄目だったよ」という意味のメッセージが返ってくる時があります。
このようなメッセージを一般に「エラーメッセージ」と呼んでいます。

cal コマンド

calコマンドでカレンダーが表示されます。

cc2000(82)% cal
      9月 2003
日 月 火 水 木 金 土 
    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
cc2000(83)%

コマンドの例

コマンドによる表示の例

3.4 オプションと引数のあるコマンド

コマンドにはオプションや引数という方法で指示を加えることにより、その動作を細かく指定することができる場合があります。

cal コマンドにオプションをつけて表示の体裁を変える

-m オプションをつけて月曜日が前に表示されるようにしてみましょう。

cc2004(93)% cal -m
      9月 2003
月 火 水 木 金 土 日 
 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
cc2004(94)% 

cal コマンドに引数をつけて表示する内容を変える

cal コマンドは引数に月、年を与えることで、表示する内容を指定することができます。

cc2004(95)% cal 1 1966
      1月 1966
日 月 火 水 木 金 土 
                   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
cc2004(96)% 

(自分の生まれた曜日を調べてみましょう。また、年だけを指定することで年間カレンダーを表示させることもできます。)

3.5 コマンドの使い方を調べる(マニュアル)

どのコマンドに、どんな機能があって、それはどんなオプションを指定すれば良いのか調べたくなった場合、Unix には man コマンドが用意されています。
コマンドをどれか一つ取ってみても、それぞれ独自のオプション、引数があり、どのコマンドにどんなオプション等があったのか、調べながら使う必要があります。

もちろんいつでも全部覚えておけるわけもなく、その為にコマンドの正確な機能、使い方を教えてくれるコマンドが用意されています。 man コマンドです。

例えば先ほど取り上げた cal コマンドのオプションなどを忘れてしまった場合にはすかさず man cal です。

CAL(1)                  System General Commands Manual                  CAL(1)

NAME
  cal - displays a calendar
SYNOPSIS
  cal [-mjy13] [ [month] year]
DESCRIPTION
  Cal displays a simple calendar.  If arguments are not specified, the cur
  rent month is displayed.  The options are as follows:
  -1   Display single month output (use if cal was built with -3 as
       default to get older traditional output)
  -3   Display prev/current/next month output (use if cal was built with
       traditional -1 as default to get newer improved output)
  -m   Display Monday as the first day of the week.  (The default is
       Sunday.)
....

英文の場合も多く、少々読み慣れないと難しいかもしれませんが、ざっと読むだけでも価値があります。例えば上の記述だけでも -3 オプションを試してみたくなりませんか?

マニュアル表示は大抵一画面では収まり切りませんから、一ページごとに一旦停止します。
<Space>で一ページ分送ります。<Return>で一行分送ります。この表示が送られて行く様子を「スクロール」と呼んでいます。「矢印キーで前後に一行ずつスクロールする」というように言います。
一旦停止している状態、または全てを表示し切って「(END)」と表示された状態で、 q キーを押すと man コマンドの表示を終了させることができます。
h キーか、 ? キーのいずれかを押せば、どのようなキーを押せば一旦停止後にどのような操作が効くかを表示してくれます。

オプション、引数の意味

SYNOPSIS項目では、コマンドの形式、つまりコマンドに適用できるオプション、引数などが列挙されています。オプションとは「コマンドの振舞い、機能を変えるような指示」を指し、引数とは「コマンドが処理するべき対象(など)」を指します [1]

SYNOPSIS
     cal [-mjy13] [ [month] year]

ここでの表記にはルールがあります。上の cal の例で説明します。

  1. [ ] に囲まれた部分は「なくてもいい」つまり省略可能だという事を意味しています。
    [ ] を書きなさい、ということではありませんので念のため。
  2. こういう場面での「- (ハイフン)」は一般にこの部分がオプションであるという目印ですが、特に上記の例のように、すぐ後に多くのオプション文字「 mjy13 」がくくられていた場合は、その中のどれでもピックアップして同時に与えていいよ、という意味です。
    -m」や「-3」と与えるだけでなく、「-m -3」と続けて書いたり、「-m3」と書いたりすることができます。
  3. [ [ month ] year ] と二重に [ [ ] ] で括られていた場合、より深い [ ] のペアから省略可能です。
    上の例では「12 2003」のように month, year を両方とも与える、「2003」 のように year だけを与える、何も与えない、という書き方ができます。逆に「12」と month だけ指定する、と言うようなことはできません。
    (その場合は month が略されたと解釈されて西暦 12 年のカレンダーが表示されるでしょう。)
  4. また、例にはありませんが、「...」という記述があれば、その直前のものを繰り返して書いてもいいよという意味です。
  5. コマンドにオプションや引数をつけてタイプする場合、man に表示された順番に注意する必要がある場合があります。

このルールによれば、たとえば以下の可能性があります。

cal -m月曜を週の最初に表示します
cal -3前月、今月、来月の三カ月分を表示します
cal -m -3月曜をはじめにして、前月、今月、来月の三カ月分を表示します
cal -m3同上
cal 12 19991999 年 12 月のカレンダーを表示します
cal 19991999 年のカレンダーを表示します
cal -m3 12 1999月曜を前に、1999 年 12 月の前後を含めて三カ月ぶんのカレンダーを表示します

man コマンドにおけるオプションの与え方の表記のクセについて一つだけ、以下に紹介しておきます。

オプションが振舞いや機能を、引数が処理対象の指示を行なっていることがわかるでしょう。


3.6 より詳しいマニュアルの読み方

このセクションは少し細かな話なので、興味のある人だけどうぞ。

man によるマニュアルの書式

man コマンドが表示する内容をよく見てみると、幾つかの項目に分けて説明してあるのが判るでしょう。
cal の場合だと NAME, SYNOPSIS, DESCRIPTION, HISTORYという具合です。
上記の項目分けは、全てのUNIXにおいて全く同じではなく、幾らか違う部分もありますが大抵は共通の形式で書かれています。以下にその項目の意味を書いておきます。

NAME, 名前

コマンドの名前とその概要。

SYNOPSIS, 形式

コマンドの形式。コマンドに適用できるオプション、引数などを列挙します。
ここでの表記にはルールがあって、例えば cal の例を以下に挙げると、
cal [-mjy13] [ [month] year]
この [ ] に囲まれた部分は「なくてもいいよ」つまり省略可能だという事を意味しています。
特に上記の例のように [ ] に多くのオプション文字がくくられていた場合は、その中のどれでもピックアップして同時に与えていいよ、という意味です。
また、例にはありませんが、 ... という記述があれば、その直前のものを繰り返して書いてもいいよという意味です。
コマンドにオプションや引数をつけてタイプする場合、ここに表示された順番に注意してください。

FLAG, OPTION, フラグ, オプション

それぞれのオプションの働きについて詳しく書いてあります。
あるオプションとは相反する指示だから、これとこのオプションは同時に指定してはいけないよ、などということも書いてあります。

DESCRIPTION, 機能説明

コマンドの詳細説明。コマンドの機能が詳しく書かれています。ここにオプションの説明を含めているUNIXもあります。

FILES, ファイル

コマンドに関係するファイルの名前が列挙されます。

SEE ALSO, RELATED INFORMATION, 関連項目

コマンドに関連する項目。深い関係のあるコマンドなどが列挙されます。

ここの項目は再び man コマンドで参照できますから、このコマンドのマニュアルだけを読んでよく判らない場合はここを追い掛けて行くのがお勧めです。

BUGS, バグ

コマンド使用上の制限事項。コマンドの動きがどうもおかしいという時は注意してみましょう。

コマンド名を調べる

コマンドの名前が判らないのだけれど、このような機能を持ったコマンドを探したい、という時にも man コマンドは有効です。キーワードでコマンドを検索するオプションとして -k オプションがあります。

man -k hostname などとすれば hostname に関係のあるコマンドなどの一覧が表示されます。
結構沢山出ますが一行で一つのコマンドを紹介してくれています。
一番目の項目がコマンド名、その次の括弧に囲まれた数字がマニュアルの分類番号で、残りがコメントです。

cc2004(116)% man -k hostname
Sys::Hostname        (3pm)  - Try every conceivable way to get hostname
dnsdomainname [hostname] (1)  - show the system's DNS domain name
domainname [hostname] (1)  - show or set the system's NIS/YP domain name
gethostname          (2)  - get/set host name
hostname             (1)  - show or set the system's host name
hostname             (7)  - host name resolution description
nisdomainname [hostname] (1)  - show or set system's NIS/YP domain name
nodename [hostname]  (1)  - show or set the system's DECnet node name
sethostname [gethostname] (2)  - get/set host name
ypdomainname [hostname] (1)  - show or set the system's NIS/YP domain name
cc2004(117)% 

このような感じですね。
上記の括弧に囲まれたマニュアルの分類番号の一覧を以下に示しておきます。
この分類のことをセクションと呼んでいます。

セクション番号 分類
1 ユーザコマンド(一般利用者の為のコマンド)
2 システムコール(プログラム言語から利用します)
3 関数(プログラム言語から利用します)
4,5 各種ファイルフォーマット
6 ゲームとデモ
8 保守用コマンド(システム管理者が利用します)

このセクション番号の割当てですが、UNIXによってちょっと違いがあります。

セクション 1, 2, 3 位まではどの機種でも同じなのですが、4, 5あたりについては上記の表は余り当てにならないことに注意してください。
さて、例に挙げた hostname キーワードでのマニュアル検索ではセクション 1 とセクション 7 と両方に passwd という項目がありましたね。
ここで単に man hostname とすると常に前の方だけ、つまりセクション 1 の方についてだけが表示されます。

このような状況でセクション 7 の hostname について知りたい場合は、 man 7 hostname のようにしてセクション番号を明示してやります。
(ときどきセクションの指定方法が異なる UNIX がありますので注意してください。もちろんその時は man man man コマンドそのもののマニュアルを見て確認、です。)

3.7 トラブルからの脱出

UNIXを操作していて、どうにもおかしな状態になってしまって困ることがあります。
もう一度始めからやり直したいんだけど、今どういう状況なのかよく判らないなあどうしようどうしよう、こんなとき…。

(C-cなどの表記に見覚えの無い人はキー表記をもう一度確認してください。)

とにかくコマンドを中断して最初からやり直したい

C-cを試してください。何度か C-cするとうまくプロンプトに戻る場合があります。

でもキー入力が全然受け付けられていないようなんですけど

C-qを試してください。
C-sでキー入力をロックしてしまう場合が時々あります。C-sの解除がC-qです。
C-qの後でならキー入力が効くのでは無いでしょうか。

正確な表現をすると C-sでロックされているのはキー入力では無く、画面表示です。
つまりキー入力は受け付けられているのだけれども、その結果の表示がロックされているので、あたかもキー入力が効いていないかのように見えるのです。
注意して見れば C-qの後に今までタイプしていた分と、その結果表示が一気に画面に表示されるはずです。

それでも C-cが効いてないようなんです

仕方がありません。C-zを試してください。
それで Suspended などと表示されてシェルのプロンプトが表示されたらしめたものです。
その状態ですぐさま kill %% とやってください。
これをしないとプロセスが残ってしまいます。
そのあとは普通にコマンドが打ち込める状態になっているのではないでしょうか。

画面表示がどうにもおかしくなっているんです

ng や Mule のようなエディタを利用中であれば C-lを試してください。<Control>と英字の L です。
それ以外のコマンドなどで画面が乱れている場合はとりあえず C-c などしてシェルのプロンプトまで戻り、そこで tset コマンドを試してください。
それでも駄目なら cls コマンドを試してください [1]

それで戻らなければ login し直すのが早いですね。

でもやっぱりどうにもならないんです

仕方がありません。情報センターメインカウンターまで連絡ください。
情報処理教室なら待機中の補助員に聞くか、備え付けの電話をお使いください。
図書館にも補助員が待機しています。
聞くは一時の恥。一度聞いておけば次からは自分で対応できますし、自分の能力アップになります。

とにかく、

どんな状況におちいってもいきなりコンピュータの電源を切ってはいけません。コンピュータは正しい方法で終了させないと故障してしまいます。
補助員にも連絡がつかないときはキーボードの上にメモを残して「動かなくなってしまいました。後の対応をお願いします。」などと書いて電源をつけたままにしておいてください。


4. シェル

今までコマンドの例を挙げてきました。

その時、コンピュータそれ自体が利用者からのコマンドを受け付けて逐一実行してくれているように書いてきましたが、じつはそれは正確な表現ではありません。

いままで「 cc2000(81)%」などのプロンプトを表示して、利用者からのコマンドを受け付けてくれていたのは「シェル」と呼ばれるプログラムだったのです。

コンピュータはいろいろなプログラムを実行できます。
逆に言うと、コンピュータが実行できるのはプログラムだけです。
利用者のキーボード入力からコマンドを受け付けてそれに対応するプログラムを実行するための仕掛けがシェルなのです。
勿論シェルもコンピュータの中ではプログラムとして実現されていますから、シェルプログラムなどとも呼ばれます。
とにかく利用者がキーボードからのコマンドでコンピュータを操作するときに、利用者とコンピュータを仲介してくれるプログラムなのだと考えてください。

シェルは一種類ではなく、何種類もあります。一般的に UNIX でシェルと言えば最近は bashがポピュラーなのですが、cc 環境では tcshと呼ばれるシェルを標準的に採用しています。tcsh は csh とよばれるものの拡張版ですので、 基本的な動作は csh と同じだと考えてください。世間一般で売られている csh のための書籍に書いてある事項は殆どそのまま tcsh にも適用できますので、参考になるとおもいます。

4.1 コマンド入力時の編集

シェルには便利な機能があって、コマンドの入力時に利用者のタイピングを手助けしてくれたりします。

今までタイピングで間違えたときには、<Delete>で一文字づつ戻って間違えたところから打ち直してくれと書いてきました。

確かにこれが確実な方法なのですが、しかし例えば col 10 2003とタイプし終ったところで
「あっ、 cal col になってる!」と気が付いた場合、最初から全て打ち直しになって悲しい思いをすることになります。

しかし安心してください。ここでカーソルキーを紹介しましょう。
カーソルキーとはリターンキーの少し右辺りに配置してある矢印キーのことです。
カーソルについては既に4.1.3で説明しましたが、このカーソルが左矢印(←)を一つ押すことによって一つ左に移動します。

上記の悲しい col の例だと、左矢印キーを十数回押して o までたどり着き、そこで<Delete>を押して o を消し、それから a を押します。
これでめでたく cal 10 2003 が完成しましたね。
ここで元気よく<Return>とすれば完成したコマンドで実行が行われます。

カーソルは右にも動きます。

右矢印(→)キーを押すことでカーソルが一つ右に移動します。
そして同じように文字を消したり挿入したりできます。
これで自由自在にカーソルを左右に移動して編集できますね。

カーソルを左右に動かしたりする編集キーには他にも幾つかあります。以下に一覧を載せておきます。

キー アクション
左矢印(←) 一文字分左へ
C-b 左矢印に同じ
右矢印(→) 一文字分右へ
C-f 右矢印に同じ
C-a コマンド行先頭(左端)へ
C-e コマンド行末尾(右端)へ
<Delete> カーソル位置の直前の一文字を消去
C-k カーソル位置から末尾までを消去
C-u コマンド行全てを消去

これでもう悲しい思いをせずに済みますね。

4.2 ヒストリ

コマンドを何度もタイプしていると、非常によく似たコマンドを何度も繰り返したり場合によっては何度も同じコマンドを繰り返している事に気が付くでしょう。
幾つか前に打ち込んだあのコマンドをもう一度!と思うこともあるでしょう。
もっと悲しい場面としては非常に苦労してタイプした長いコマンドが、実はタイプミスを含んでいてもう一度全部タイプし直さなくてはならない、という場合です。

しかし安心してください。そんな時に便利なのがヒストリ( history )機能です。

一つ前のコマンドを呼び戻すにはカーソルキーの上矢印(↑)キーを一度押します。
そこで現れた一つ前のコマンドも、左矢印キーや右矢印キーでカーソルを移動させながら編集し直して実行することができます。
二つ前のコマンドを呼び戻すには上矢印キーをもう一度(つまり二度)押します。
上矢印を押しすぎて、目標のコマンドより戻りすぎた場合は下矢印を押します。

キー アクション
上矢印(↑) 一つ前のコマンド
C-p 上矢印に同じ
下矢印(↓) 一つ次のコマンド
C-n 下矢印に同じ

ここで一度、 history コマンドを試してください。一体どれだけのコマンドを覚えているかが判ると思います。
上下の矢印キーによって、このヒストリの中を上下することができるというわけです。

cc2000(86)% history 
    7  21:20   goto label
    8  21:20   man ls
..... (中略)
    82  21:48   cal
    83  21:48   date
    84  21:48   man cal
    85  21:48   cal 12 1999
    86  21:48   history
cc2000(87)% 

これでまた一つ悲しい思いをせずに済むようになりましたね。

4.3 イベント

また、 history のリストを見ると、左に番号があるのが判ります。
この番号はプロンプトの括弧の中に出てくる数字に一致しています。この番号で、何番目をもう一度実行せよ、という指示もできます。
例えば 85 番目のコマンドを(もしくは 85 番目のイベントを)もう一度実行したいというときは !85 です。

cc2000(88)% !85
cal 12 1999
      12月 1999
日 月 火 水 木 金 土 
          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

cc2000(88)%

85番目のコマンド cal 12 1999 が念のために !85 のすぐ次の行に表示されているのが判りますね。

また番号ではなく、一番最近に実行した ○×△ で始まるコマンドをもう一度実行するという指示も可能です。
上記の例の状態で、 !d とすると83番目の date にマッチして、それが実行されます。

cc2000(89)% !d
date
1997年02月25日 (火) 18時23分31秒 JST
cc2000(90)%

83番目のコマンド date が念のために !d のすぐ次の行に表示されているのが判りますね。
コマンド名のマッチングの為に ! に続けて指定する文字は何文字でも構いません。
書いた文字数の分だけでマッチングし、一番最近のコマンドから逆にさかのぼって一番最初にヒットした(適合した)コマンドが実行されます。
もしもさかのぼってヒットするコマンドがなかった場合は「そんなイベントはない」と良う意味のエラーメッセージが表示されます。
実際「イベント」という、この機能にまつわる名前を見るのはこのときぐらいです。

これで随分幸せになりましたね。 (^_^)

5. ファイル

ファイルとは何かということを本質的に理解できるようになるにはコンピュータの構造を知るところから始めなくてはなりません。
これはファイルがコンピュータが発展する過程での歴史的経緯から発生し、現在に至っているからです。

ここではファイルとは何か、という事については余り言及せず、その仕組みを利用するとこんな事ができる、というところを説明します。

5.1 でもやっぱりファイルって何?

気になる人の為に少し中途半端なものになるのを覚悟で「ファイル」とは何か説明しましょう。気にならない人は読み飛ばしてください。

身のまわりの電化製品を見渡すと、ディスクやテープなどの「記録媒体」などと呼ばれるものを容易に見つけることができると思います。
例えば音楽を聞くのに使っているCD(コンパクトディスク)や、ビデオテープなどです。

前者はキラキラ光る面に溝を刻んで、後者は茶色の鉄粉が塗ってあるテープに磁石で印を付けながら、とにかく「なにか」を記録していきます。

UNIXコンピュータにもこれと同じように「なにか」を記録できる「ディスク」が幾つも付いています。

きっとあなたも今までにワープロ用のフロッピーや、音楽用の MiniDisk など、コンピュータ用のディスクの類似品を目にしたことがあると思います。

このディスクの中にいろんなものを記録していくわけですが、コンピュータのディスクはCDみたいに交換できない上に、UNIXコンピュータは大勢の人が使っているので、整理して「もの」を配置しないとどこに何を記録したのか判らなくなってしまいます。

CDだってアルバム一枚に幾つもの曲を入れていますね。そうしないと5曲目だけ取り出すなんていう事ができなくて不便です。

コンピュータのディスクの中にものを記録する場合、記録はそれぞれ他の記録と混同しないように分割して残され、他の記録と区別するためにそれぞれ名前が付けられています。

このそれぞれ名前を付けられたひとかたまりの情報の集まりを「ファイル」と呼んでいます。

つまりコンピュータのディスクの中にはそれぞれ名前を付けられたファイルが幾つも記録されているということです。

5.2 ファイルの一覧を見る

UNIXに限らず現在市場に出ている殆どのコンピュータはファイルという形でデータを格納しています。

丁度様々な記録を紙に書いて、ファイル(file , 書類差し)に入れて保存するようなものです。

あなたの机に文書整理用のファイルがいくつも置いてあるように、コンピュータの中のあなたの記録場所にも幾つもファイルを置くことができます。
幾つも作ることができるので、それぞれを区別するために名前が付けられています。「ファイル名」などと表現します。

ファイル名には実際には殆ど全ての文字が利用できます。

しかし様々な理由から、ファイル名として利用する文字としては、アルファベット大文字、小文字、数字、_(アンダースコア)、-(ハイフン)、.(ピリオド)程度にするべきです。
(ピリオドは sample.txt のように途中で使い、.sample.txt のようにファイル名の先頭につけることは避けてください。- も同じく先頭はやめましょう。)

これら以外の記号文字、漢字などはファイル名としては利用しない方が無難です。

また、ファイル名の長さは 255 文字が最大です。

ls コマンド [1] で、今あるファイルの名前の一覧をチェックすることができます。

cc2000(82)% ls
Mail  Wnn6  public_html
cc2000(83)% 

つまり「Mail」「Wnn6」「public_html」という名前の3つのファイルがあるということです。


5.3 試しにファイルを作ってみましょう

試しにひとつファイルを作ってみましょう。
ng というコマンドを使って、ひとつファイルを作り、そこに何か書き込む例をあげます。
ng に続けてファイル名を指定して <Return> です。ファイル名は既存のものでなければ何でも結構です。すでのどのような名前のファイルがそこにあるかは、ファイルの一覧を見るで説明した ls コマンドで確認できますね。

cc2000(82)% ls
Mail  Wnn6  public_html
cc2000(83)% ng sample.txt

画面表示が切り替わって、下の図のようになったとおもいます。

ng 起動画面

ng コマンド起動後の画面表示

ここで適当にメッセージを数行入力してください。
カーソルキーや <Delete> キーが入力している文章の編集に使えます。
(漢字の入力については かな漢字変換 で説明していますが、いまはアルファベットだけで良いでしょう。)

入力が済んだら C-z で保存してください。画面いちばん下の行に、以下のように表示されるとおもいます。

ng 終了画面

ng 終了(保存)時の画面表示

ここで y と入力してください。
これでファイルがひとつ(例では sample.txt という名前で)できたはずです。
ls コマンドで確認してください。

cc2000(84)% ng sample.txt
cc2000(85)% ls
Mail  Wnn6  public_html  sample.txt
cc2000(86)% 

ng コマンドについては、Ng エディタの使い方を参照してください。

5.4 ファイルの内容を見る

cat ファイル名 <Return>で、できたファイルの内容を表示する事ができます。

cc2000(86)% cat sample.txt
 Hi, my name is Yuichiro Enokida.
 My hobby is riding a motorcycle, listening a music, watching movie etc. etc..
cc2000(87)%

一般的には、ファイルは明らかに消すという操作をしない限り消えることはありません。
logout して、再び login しても、コンピュータの電源を切っても残っています。

ファイルの内容が長い場合

cat コマンドでファイルの内容を表示させた場合、その内容が長いと一画面に入り切らずにどんどんスクロールして行ってしまいます。

そのような場合には more コマンドで一画面ごとに表示を一旦停止させる事ができます。 more ファイル名 です。
一旦停止している時に、以下のキーで様々なアクションを指示できます。

キー アクション
<Space> 一画面分スクロール
<Return> 一行分スクロール
f 一画面分スキップして一画面分スクロール
b 二画面分戻って一画面分スクロール
h どのキーを押せばどんなアクションをするかを教えてくれる

5.5 ファイルの操作

ファイル名を変える

一般的にファイルはその名前を後から変更することができます。

UNIXにおいてファイル名を変更するという作業は、実はファイルを別のところへ移動するということを意味します。
つまり前のファイルは消えてなくなって、新しい名前で生まれ変わるという事です。
コマンドは mv です。

引数が最低二つ必要で、最初の引数が元のファイル名、最後の引数が移動先のファイルです。
例えば以下の例ではとりあえず sample.txt と付けたファイル名を message.txt という名前に変えています。

これはつまり sample.txt というファイルを message.txt というファイルへ移動する、という事です。

cc2000(86)% mv sample.txt message.txt

sample.txt という名前のファイルがなくなって message.txt という名前のファイルができた事を ls コマンドで確認しましょう。

cc2000(86)% ls
Mail  Wnn6  public_html  message.txt
cc2000(87)% 

ファイルの複写

ファイルはその内容をそっくりそのままに複写することができます。
コマンドは cp です。引数が最低二つ必要で、最初の引数が元のファイル名、最後の引数が複写先のファイルです。

例えば以下の例では message.txt ファイルを hello.txt という名前で新しく作り、内容はそっくり hello.txt ファイルから引き写しています。

先の mv との違いは、元のファイルがそのまま残る( cp )か、それとも消える( mv )かです。

cc2000(87)% cp message.txt hello.txt
cc2000(88)%

hello.txt という名前のファイルが増えた事を ls コマンドで確認しましょう。内容が同一であることも cat コマンドなどで確認しておきましょう。

cc2000(88)% ls        
Mail  Wnn6  public_html  message.txt hello.txt
cc2000(89)% 

ファイルの消去

ファイルは消去することができます。逆に消去しない限りいつまでもそこに残っています。
ファイルの置き場所は容量的には限りがあり、しかも複数の人で同じ置き場所を使っている場合が多いので、不要なファイルは削除するように心がけましょう。
コマンドは rm です。引数としてファイル名を与えます。

例えば以下の例では hello.txt ファイルを削除しています。

cc2000(89)% rm hello.txt
cc2000(90)%

hello.txt という名前のファイルが消えた事を ls コマンドで確認しましょう。

6. プリント

6.1 出力するプリンタを確認する

初めてプリンタを利用するときは、まずそのプリンタのある場所まで行って、実際どのプリンタに出力されるのか確認し、そのプリンタに貼り付けてあるプリンタ名をメモして自分の席まで戻ってください。

cc 環境では自由利用中の印刷はA4用紙を自分で用意してプリンタにセットすることになっています。ひと文字違うと違うプリンタに出て人の紙を使ってしまってトラブルになりますから、このあたり確実にやらなければなりません。

紙の準備や印刷の手順はトラブル防止のためにも重要ですので、覚えていない人は再度「インターネットガイド」などを読みなおしてください。

cc環境から利用できるプリンタは以下のとおりです。
プリンタは複数あるので、それぞれ名前が付けてあります。

プリンタ名 設置場所
apr2101〜apr2107 10号館2階10201情報処理教室
apr2201〜apr2208 10号館2階10202情報処理教室
apr2301〜apr2304 10号館2階10203情報処理教室
apr2401〜apr2404 10号館2階10204情報処理教室
apr2501〜apr2504 10号館2階10205情報処理教室
apr2601〜apr2604 10号館2階10206情報処理教室
apr3101〜apr3105 10号館3階10301情報処理教室
apr3201〜apr3207 10号館3階10302情報処理教室
apr3301〜apr3302 10号館3階10303情報処理教室
apr4501 10号館4階10405情報処理教室
apr4601 10号館4階10406情報処理教室
cspr01、cspr02 2号館4階21情報処理教室
clpr11〜clpr15 3号館1階32情報処理教室
cepr01 5号館1階51情報処理教室
c1kpr01 第1研究室棟2階共同研究室
c2kpr01 第2研究室棟1階共同研究室
c3kpr01 第3研究室棟1階共同研究室
cgpr1101〜cgpr1104 1号館2階11情報処理教室
c9pr01 9号館

上の表は恒久的なものではなく、様々な要因でプリンタは配置換えをしたり名前を変更したりされる可能性があります。

6.2 ファイルの印刷

lpr -Pプリンタ名 ファイル名 <Return>とすれば指定のプリンタに指定のファイルの内容を印刷する事ができます。

cc2000(81)% lpr -Pcgpr1101 message.txt

-P オプションに続くプリンタ名の指定は、上記の例のようにくっつけて書いてください。

例えば -P cgpr1101 などとしてはいけません。

逆に第二の引数となるファイル名とプリンタ名の間には一つ以上の空白を入れてください。

注意

上記の方法でファイルを印刷する場合、どんなファイルでも印刷できるとは限りません。
cat コマンドなどで内容が確認できるような文字ばかりのファイルに限ります。
それ以外の、 cat したら画面に変な文字がいっぱい表示されるようなファイルは印刷しないでください。
プリンタが止まってしまったり無駄に数百ページ印刷されたりします。

6.3 印刷状況をチェックする

lpq -Pプリンタ名 <Return>で指定のプリンタの現在の状況の確認ができます。
プリンタの状態を表すメッセージが何行か返ってきます。

プリンタがすいている状態

以下はプリンタに何も出力待ちのものが無い場合の例です。

cc2000(82)% lpq -Pcgpr1101
Printer: cgpr1101@cc2004
 Queue: no printable jobs in queue
cc2000(83)%

上記のようではなく、単に no entries メッセージだけが返ってくる場合もあります。

プリンタがなにかを印刷している状態

以下のようなメッセージが返ってきたら、それはプリンタが何か印刷している最中か、もしくは印刷のための準備中だという事です。

cc2000(90)% lpq -Pcgpr1101
Printer: cgpr1101@cc2004
 Queue: 2 printable job
 Server: no server active
 Status: job 'cfA592cc2004' removed at 14:15:01.842
 Rank   Owner/ID                  Class Job Files                 Size Time
1      tanaka                       A   172 +report1.ps          12843 16:10:18
2      enokida                      A   178 +sample.txt           8824 16:14:39
cc2004(91)% 

上記の例では tanaka さんの report1.ps というファイルが現在印刷中(1)で、その次(2)の enokida さんの sample.txt というファイルが印刷待ちだという事です。

ユーザIDの右に出ている 172 や 178 の数字は印刷要求それぞれに割り当てられた番号で、ジョブ番号と呼ばれています。

6.4 印刷の取消し

一旦 lpr コマンドでプリンタに流し込んだ出力要求を取り消して、印刷しないようにできます。

lprm -Pプリンタ名 ジョブ番号 <Return>です。

上の例の、enokida さんは慌て者で、間違って別のファイルを印刷するようにコマンドを実行してしまいました。
この enokida さんの印刷要求に付けられたジョブ番号は 178 です。これを取り消す例を示します。

(自分以外の印刷要求は決して取り消すことはできません。)

cc2000(99)% lprm -Pcgpr1101 178
Printer cgpr1101@cc2004:
  checking perms 'enokida@cc2004+178'
  dequeued 'enokida@cc2004+178'
cc2000(100)%

実際この例とはかなり違ったメッセージが表示されるかもしれません。

重要なのは dequeued で、このメッセージが表示されればまず間違いなく印刷要求は取り消されています。

念のためにもういちど lpq -Pcgpr1101<Return>などして印刷要求が消えていることを確認するのがいいでしょう。

7. 画面の Copy & Paste

UNIX 環境での GUI 環境でも限定的ですが Copy & Paste ができます。ここでは Kterm どうしでの操作の例を示します。たとえば Kterm 画面に表示されている文字を Copy して、別のファイルに取り入れる場合です。

7.1 Kterm での操作例

コピーする元の Kterm が画面上にあったとします。そこにもうひとつ Kterm を起動して、画面上に二つ Kterm のウィンドウが並ぶようにして下さい。


図では左側が元のウィンドウ、右側が新しいウィンドウ

ここで新しい Kterm ウィンドウ側で ng コマンドを使って log というファイルを作ります [1]
この状態で、古い Kterm ウィンドウ側に表示されている文字を新しいターミナルの ng エディタ画面に貼り付けます。
具体的には、古いターミナルをクリックして active にして、コピーする範囲をマウスで選択すると、文字が白黒反転して表示されます。この時点で Windows で言うコピーの操作がされています。

今度は新しいターミナルをクリックして active にし、マウスの中ボタンをクリックします。
これで選択していた部分が新しいウィンドウのカーソルのあった位置以降に Paste されます。

Paste できたらそのまま ng を終了して保存してください。log というファイルができたことを ls コマンドで確認して、中身を cat コマンドで確認すると良いでしょう。

7.2 他のアプリケーションでの操作例

他のアプリケーションで表示されている文字も、同様に Copy & Paste できます。方法は少しずつ異なりますが、基本的には Copy する対象をマウスで選択して、Paste するところでマウスの中ボタンをクリックします。

一つの例が 単語登録、環境設定 にありますので、参照すると良いでしょう。


8. ファイルの階層構造

これまでで一般的なファイルの操作について説明してきました。

ところでUNIXではファイルは階層化されています。
ここでは階層化されたファイルの概念と扱い方を説明します。

8.1 ディレクトリ

コンピュータをしばらく使っていると結構ファイルが増えて来て、そのうちどのファイルが何のためのものだったのか判らなくなるものです。
ls コマンドで一覧を見たら一画面では収まり切らなくなったりして大変な状況の人も出てくるでしょう。

そうならないために例えばファイルの名前を長くして、その名前を見ればファイルの内容の想像が付くようにするなど利用者は色々な対策を取ったりします。
しかしそういう手法で全てが解決するわけでもありませんね。

ファイルの一覧を見るで、UNIXが扱うファイルはあなたの机の上に並ぶファイルのようなものだと言いました。
もしもあなたの机の上にファイルが非常にたくさん並びはじめ、ファイルの背表紙にちょっと長めの名前を書いておくくらいでは目的のファイルがどこにあるのかすぐに探せなくなってしまったとしましょう。

あなたはどうしますか?

多くの人は「整理が必要だ」と感じるでしょう。
ファイルを分類し、分類ごとに大きな区分を作ってファイルを束にして置いておけば良いというわけです。

分類とは物事を階層化して整理するということです。
まず大分類があって、それから中分類、更に必要なら小分類、という感じですね。

以下に日常的な机の上の分類の例を示します。
四角で分類、丸でファイルを表しています。

階層化された分類の例(1)

階層化された分類の例(1)

UNIXでもファイルを階層化して整理することが可能です。
以下に先の例に合うような階層化を行ったファイルの配置の例を示します。

階層化された分類の例(2)

階層化された分類の例(2)

しかし実はUNIXコンピュータは yasuda さん一人のものではなくて、数多くの人が同時に使っているということを忘れてはいけません。
コンピュータにとっては、「 yasuda のファイル」という分類がまず最初に既に存在しているのです。

階層化された分類の例(3)

階層化された分類の例(3)

そして「yasuda のファイル」は以下のようにもっと大きな分類の下に配置されているのです。

階層化された分類の例(4)

階層化された分類の例(4)

上の例での「yasuda のファイル」より一つ大きい分類の名前は「g840」です。
これは「ある年度に入学してきた学生のファイル」という意味の分類です。

これよりもう少し上の存在として「全ての利用者のファイル」というものが有り、更にたどって行くと最終的に「全てのファイル」という最大の分類に到達します。
先ほどからの例では四角で表してきた、ファイルの分類なるものの存在をUNIXでは「ディレクトリ」と呼んでいます。
そして、先ほどの「全てのファイル」という最大の分類、つまり分類の根本(もしくは頂上)なるものの存在を「ルートディレクトリ」もしくは「トップディレクトリ」などと呼んでいます。

「yasuda のファイル」は実は yasuda という名前が付いたディレクトリなのです。
この、利用者ごとに割り当てられた利用者自身のためのディレクトリを「ホームディレクトリ」と呼んでいます。
ホームディレクトリは常に利用者のユーザIDが付けられて、利用者登録の際にシステム管理者の手によって作成されます。
利用者は自分のホームディレクトリ以下に自分のファイルもしくはディレクトリを作り、保存することができます。

いくつかのディレクトリを挙げましたが、いずれにしてもディレクトリには違い有りません。

UNIXのディレクトリとファイルの構造を見ると、それが木の根の構造のように見えると思います。
また上下をひっくり返せばルートディレクトリを根にしてディレクトリの分類過程が枝のように、そしてファイルが葉のように見えるかもしれません。
このようなイメージで表せる構造のことをコンピュータの世界では「木構造」「ツリー構造」と呼んでいます。
ディレクトリの木構造をディレクトリ・ツリーなどと呼んだりします。

ところでUNIXではディレクトリはファイルの一種として扱われます。(扱われる、のです。普通のファイルとディレクトリはその意味に違いがあります。)
そのため「ディレクトリファイル」などと表現されるときもあります。

ディレクトリもファイルと同じ様に名前を付けてそれを他のものと区別して扱います。名前のルール(名前に利用できる文字、文字数の制限など)は普通のファイルと同じです。

8.2 ツリー構造におけるファイル名の表記

ファイルにはファイル名が有ることは説明しました。

しかしUNIXのディレクトリ・ツリーの中で名前によってそのファイルを指定するにはツリー構造を含めて表現できる方法が必要ですね。

絶対パスによるファイル名の表記

例えばユーザID yasuda さんのホームディレクトリの名前は yasuda です。
このディレクトリファイルを、UNIXコンピュータ全体のツリー構造の中では「 /NF/home/g840/yasuda 」などと表現します。
これが正にディレクトリ・ツリーの中で絶対的な位置と名前を表す表記法です。

先頭の「 / 」はルートディレクトリを表しています。

それ以降の「 / 」はディレクトリ構造の区切り、つまりディレクトリでのディレクトリとディレクトリ、もしくはディレクトリとファイルを結ぶ「線」に相当します。

/ 」にはさまれた名前は全て途中に存在するディレクトリの名前であり、最後の名前はディレクトリ、もしくはファイルの名前です。

こうして表現することによってディレクトリ・ツリーの中で、名前によって完全にファイルが指示できるようになります。
これを「絶対パスによるファイル名の表記」などと呼んでいます。

絶対パスによる表記の場合、その表記はルートディレクトリを起点にして、たどって行くディレクトリの道のり(path : パス)を表現しているとみなせます。

相対パスによるファイル名の表記

でも絶対パスによってしかファイルの名前が表現できないとしたらこれは非常に不便なことです。
例えば yasuda さんが自分のホームディレクトリの直下にある log というファイルを old-log という名前に変えたいと思ったときに、こんな風にコマンドを書かなくてはいけません。

cc2000(82)% mv /NF/home/g840/yasuda/log /NF/home/g840/yasuda/old-log

いやこれはたまりません。これでは単に長い名前をファイルに付けているようなもので、何のためにディレクトリという概念を導入したのか判りません。
そこでファイルを表現するのに、ディレクトリ・ツリーの前半部分をタイプしなくても済むように覚えておいて、ツリーの残りの部分だけ表現すればいいような表記方法があります。
そのために UNIX のシェルは、常にディレクトリ・ツリーのどれか一つのディレクトリに注目しています。
そのディレクトリまでのツリーの記述は省略可能となるわけです。

例えば先の例の mv において、今注目しているディレクトリがホームディレクトリだったとすると、以下のようにコマンドを短く書くことができます。

cc2000(82)% mv log old-log

この「今注目しているディレクトリ」もしくは「今省略可能であるディレクトリ」を「カレントディレクトリ」もしくは「ワーキングディレクトリ」と呼んでいます。

カレントディレクトリ

カレントディレクトリはコマンドによって変更することができます。(後述)

pwd コマンドでカレントディレクトリを確認する事ができます。

cc2000(81)% pwd
/NF/home/g840/yasuda
cc2000(82)%

先の例の、省略された mv コマンドのファイルに関する表記では、この /NF/home/g840/yasuda が省略されていたというわけです。

ところで、login 直後のカレントディレクトリは常にホームディレクトリです。
つまり今までのファイルの操作などで試してきたファイルは、この省略された表記法によって表現された、あなたのホームディレクトリ直下にあったファイルだったのですね。
ls コマンドなどでその一覧が表示されていたのも、あなたのホームディレクトリ以下の内容だったというわけです。

こうして表現することによってディレクトリ・ツリーの中で、簡単な表記によってファイルが指示できるようになります。これを「相対パスによるファイル名の表記」などと呼んでいます。
相対パスによる表記の場合、その表記はカレントディレクトリを起点にして、たどって行くディレクトリの道のり(path : パス)を表現しているとみなせます。

パスによる表記でもう少し

言い遅れましたが「絶対的な表記」と「相対的な表記」の区別は、その表記の先頭が「 / 」であるか否かで判断されます。
また、パス中には以下の記号が利用できます。

記号 意味
. カレントディレクトリを意味します
例えば ./sample と書けば、カレントディレクトリにある sample というファイルを意味します。
つまり単に sample と書いたのと同義です。
(しかしそう書いたのでは駄目な場合もあるのです。)
.. 一つ上のディレクトリを意味します。
例えば ../sample と書けば、カレントディレクトリの一つ上のディレクトリにある sample というファイルを意味します。
例えば ../../sample と書けば、カレントディレクトリの二つ上のディレクトリにある sample というファイルを意味します。

また、シェルからコマンドの引数としてファイルを記述するとき、パスの先頭であれば以下のような書き方もできます。

記号 意味
~ 自分のホームディレクトリを意味します
~username ユーザID username のホームディレクトリを意味します

8.3 ディレクトリの扱い

ディレクトリの作成

ディレクトリを作成するには mkdir コマンドを利用します。書式は以下のとおりです。

mkdir ディレクトリ名...

ディレクトリの消去

ディレクトリを消去するには rmdir コマンドを利用します。書式は以下のとおりです。

rmdir ディレクトリ名...

ディレクトリの消去は、そのディレクトリより下にディレクトリまたはファイルが含まれていてはできません。

消去したいディレクトリ以下のファイルまたはディレクトリを rm または rmdir コマンドで予め消しておいてください。

カレントディレクトリの表示

カレントディレクトリを表示するには pwd コマンドを利用します。書式は以下のとおりです。

pwd

カレントディレクトリの変更(移動)

カレントディレクトリを変更するには cd コマンドを利用します。書式は以下のとおりです。

cd [ディレクトリ名]

loginした直後はカレントディレクトリは常にホームディレクトリです。
それからcd コマンドでどこのディレクトリに移動しても、単に cd (つまり引数であるディレクトリ名を省略)とすると、常にホームディレクトリに移動します。

8.4 ディレクトリを意識したコマンドの書き方

今まで紹介してきたファイルを扱うコマンドは、そのほとんどがディレクトリに対しても適用できます。

これ以降は以下の図の状況を例に説明します。

ディレクトリの例

ディレクトリの例

まずは練習材料を作る

まず初めに練習のために上の図の状況を作るのがおすすめです。以下にその手順を示します。
今のカレントディレクトリはホームディレクトリではないかもしれませんから念のために最初に cd してホームディレクトリに移動しておきましょう。

cc2000(84)% cd
cc2000(85)% ng log
cc2000(86)% mkdir memo Unix
cc2000(84)% ls
Mail  Wnn6  Unix  public_html log   memo
cc2000(84)% 

ファイルのコピー

cp コマンドには以下の3通りの書き方があります。

1. cp [-i] file1 file2
2. cp [-i] file... dir
3. cp -r dir1 dir2

-i オプションを与えると、コピーする際に同名のファイルが既に存在し、コピーすることによって上書きされて元の内容がなくなってしまうような場合に実行してよいかどうか問い合わせを行います。

これに y と答えると実行し、それ以外の入力であれば実行しません。

1. の書き方では、 file1 file2 に単にコピーされます。

2. の書き方では、(もし複数書けば複数の) file は、 dir のすぐ下に元のファイル名でコピーされます。

3. の書き方では、 dir1 以下のファイルを全て含めてディレクトリごと dir2 のすぐ下に元のファイル名、ディレクトリ名でコピーされます。

dir2 が存在しないとそれを作成して、 dir1 以下のファイルを全て dir2 のすぐ下に元のファイル名、ディレクトリ名でコピーされます。

例えば log ファイルを memo ディレクトリ以下に同じく log という名前でコピーする場合、以下のようなさまざまな表現ができます。

カレントディレクトリ 書き方 コマンド記述
yasuda 1. cp log memo/log
yasuda 2. cp log memo
memo 1. cp ../log log
memo 1. cp ../log ./log
memo 2. cp ../log .

例えば sample ファイルを Unix ディレクトリ以下に同じく sample という名前でコピーする場合、以下のようなさまざまな表現ができます。

カレントディレクトリ 書き方 コマンド記述
yasuda 1. cp memo/sample Unix/log
yasuda 2. cp memo/sample Unix
memo 1. cp sample ../Unix/sample
memo 2. cp sample ../Unix

例えば memo ディレクトリをツリーごと Unix ディレクトリ以下にコピーする場合、以下のようになります。
(今度は書き方は 3. しかありません。)

カレントディレクトリ コマンド記述
yasuda cp -r memo Unix
memo cp -r ../memo ../Unix
(どういうわけか cp -r . ../Unix は駄目なのです)
Unix cp -r ../memo .

この結果、ディレクトリ・ツリーは以下のようになります。

コピー後のディレクトリ・ツリー

コピー後のディレクトリ・ツリー

ファイルの移動

mv コマンドには以下の3通りの書き方があります。

1. mv [-if] file1 file2
2. mv [-if] file... dir
3. mv dir1 dir2

-i オプションを与えると、移動する際に同名のファイルが既に存在し、移動することによって上書きされて元の内容がなくなってしまうような場合に実行してよいかどうか問い合わせを行います。
これに y と答えると実行し、それ以外の入力であれば実行しません。

-f オプションを与えると上書きされて元の内容がなくなってしまうような場合でも問い合わせせず実行します。

1. の書き方では、 file1 file2 に単に移動されます。

2. の書き方では、(もし複数書けば複数の) file は、 dir のすぐ下に元のファイル名で移動されます。

3. の書き方では、 dir1 以下のファイルを全て含めてディレクトリごと dir2 のすぐ下に元のファイル名、ディレクトリ名で移動されます。

dir2 が存在しないとそれを作成して、 dir1 以下のファイルを全て dir2 のすぐ下に元のファイル名、ディレクトリ名で移動されます。

mv コマンドはすぐ判るように cp コマンドとほとんど同じ記述方法ができます。
働きもほとんど同じで、単に元のファイルが残る(cp)か残らない(mv)かだけです。
cp コマンドと同じですので、ここでは例を挙げません。

最後の 3. の書き方で memo ディレクトリを Unix ディレクトリにディレクトリ・ツリーごと移動した場合は、図に挙げた例の左側の元の memo ディレクトリと、それ以下の sample と Comand ファイルがなくなった状態になります。

ファイルの名前を変える

ファイルの名前の変更も mv コマンドで行います。
つまり sample というファイルの名前を otamesi に変えるという作業は sample ファイルを otamesi に移動するという事と考えるのです。
具体的には単純に mv sample otamesi です。

ファイルの消去

rm コマンドは以下の書き方をします。

rm [-ifr] file...

-i オプションを与えると、消去する際に場合に実行してよいかどうか問い合わせを行います。
これに y と答えると実行し、それ以外の入力であれば実行しません。

-f オプションを与えると問い合わせせず実行します。

-r オプションを与えて file の部分がディレクトリだった場合は file 以下のファイルを全て含めてディレクトリ・ツリーごと消去します。

特に rm コマンドに -r を指定してディレクトリ・ツリーごと消去するという例は非常に有用です。
なにしろディレクトリの消去である rmdir コマンドは、そのディレクトリ以下の内容が空になっていなければいけないのです。
そのような場合は rm -r で一発消去ができます。

9. シェルよもう一度

もう少しシェルの使い方にうまくなりましょう。操作がずいぶん楽になるはずです。

9.1 ファイル名の補完

今までファイルを指定するときにはファイル名を全てタイピングしていたと思います。でも、ファイル名を全部タイプしなくてももっと簡単にファイルを指定することができる場合があります。
その為にファイル名を記述する部分に用いる文字として * と ? があります。これらの文字を UNIX ではメタキャラクタと呼んでいます。以下にそれぞれ詳しく説明します。

説明はカレントディレクトリ以下のファイルの状況が以下のようだと仮定して行います。

cc2000(88)% ls
bb      cc      log     log2    sample
cc2000(89)%

* 」任意の文字列に適合するメタキャラクタ

ここで「 * 」文字を紹介しましょう。

例えば上記の例で log と log2 の両方のファイルの中身を見たい場合は、以下のようにすれば良いのです。

cc2000(92)% more l*

つまり l* とは「 l で始まり、それ以降はどんな文字列でも構わないファイル」を列挙することを意味しています。
その結果 more l* more log log2 と解釈されて実行されます。

* が適用可能なのは何もファイル名の最後に限りません。

例えば上記の例で more *2 とすればそれは「どんな文字列で始まっても構わないから、最後が 2 で終わるファイル」と解釈され、 log2 ファイルを指します。

*o* とすれば、それは「どんな文字列で始まっても構わないから、途中に o を含み、またどんな文字列で終わっても構わないファイル」と解釈され、 log log2 の二つのファイルを指します。

* とすれば、それは「どんな文字列でも構わないファイル」と解釈され、 bb cc log log2 sample の五つのファイルを指します。
* 文字はファイル名の記述のどこに幾つ現れても構いません。

また、適合する文字が無くても適合したとみなします。

例えば log* とすれば「 log で始まり、それ以降はどんな文字列でも構わないファイル」と解釈され、 log log2 の二つのファイルを指します。

? 」任意の一文字に適合するメタキャラクタ

今度は「 ? 」文字を紹介しましょう。
例えば上記の例で bb と cc の両方のファイルの中身を見たい場合は、以下のようにすれば良いのです。

cc2000(92)% more ??

つまり ?? とは「どんな文字でも構わないから、二つからなるファイル」を列挙することを意味しています。
その結果 more ?? more bb cc と解釈されて実行されます。

? が適用可能なのは何もファイル名の最後に限りません。

例えば上記の例で more ?b とすればそれは「どんな文字でも構わないから一文字あって、次が b で終わるファイル」と解釈され、 bb ファイルを指します。

? 文字はファイル名の記述のどこに幾つ現れても構いません。

ディレクトリに対してのメタキャラクタ

* と ? 文字はディレクトリに対しても適用可能です。

例えば、 ls */*2 などとすれば「カレントディレクトリ以下の全てのディレクトリの下にある、どのような文字列で始まっても構わないから最後は 2 で終わる名前を持つファイル」を見つけてその一覧を表示します。

9.2 対話的なファイル名の補完

シェルからファイル名を記述しているとき、シェルが提供している対話的なファイル名の補完機能が幾つか利用できます。

再び説明はカレントディレクトリ以下のファイルの状況が以下のようだと仮定して行います。

cc2000(88)% ls
bb      cc      log     log2    sample
cc2000(89)%

「<Tab>」でファイルの名前を途中から補完する

例えば more sample とタイプしたくて、 more s までタイプしたとします。
この状況で <Tab> キーを一度押せば more sample と、シェルの方で勝手にタイプしてくれて、 sample から一つ離れた位置にカーソルが移動します。
そこで <Return> を押せば良いというわけです。

つまりシェルは more s とタイプされた段階で、 s に続くファイル名としてはこの状況では sample しか無いよ、と気を利かせてくれているのです。

今度は more log2 とタイプしたくて、 more l までタイプしたとします。
この状況で <Tab> キーを一度押せば more log と、シェルの方で勝手にタイプしてくれて、 log に続く位置にカーソルが移動します。(ベルが一度鳴るかもしれません。)

今度はシェルは more l とタイプされた段階で、 l に続くファイル名としてはこの状況では log と log2 しか無い事が判ります。
だからとにかく一致している途中までタイプしてくれているのです。
そこで残り不足している 2 をタイプして、 <Return> を押せば良いというわけです。

「C-d」でファイル名の一覧を表示する

<Tab> による補完を行って、カーソルがファイル名の記述のすぐとなりに来て(ベルが鳴る)時は、まだ残りがあるかもしれないよ、という意味でした。
この段階で、では一体どのような名前のファイルが可能性として残っているのかを確認するには C-d キーを押します。
そうすれば以下のように、まだ可能性のあるファイル名の一覧を挙げてくれます。

cc2000(86)% more log   ...ここで空白などあけずに<Control>-d
log   log2
cc2000(86)% more log

こうしてファイル名が長ったらしい場合でも、 <Tab> キーと C-d を組み合わせて行けば、少ないタイピングで間違いなくそのファイルを指定することができるというわけです。

9.3 リダイレクション

UNIXの標準的なコマンドには、標準入力と標準出力と呼ばれる入出力を処理対象としているものが数多くあります。
普通にシェルを使っているときは、標準入力はキーボード入力、標準出力はディスプレイ表示に割り当てられています。

この例として bc コマンドを挙げておきます。
bc コマンドを実行して四則演算をキーボードからタイプすると、画面上に計算結果を表示します。
これはつまり bc コマンドは標準入力から四則演算を受け付けて、計算結果を標準出力に流しているということの結果です。

さて、標準入力、標準出力はそれぞれ他のファイルに割り当てることができます。この標準入出力のファイルへの割り当て直しを「リダイレクション」と呼んでいます。

標準入力のリダイレクション

標準入力のリダイレクションは「 < 」記号で表現します。

コマンド [オプション] [引数...] < ファイル名 と書いて、コマンドの標準入力を指定のファイルに割り当て直します。

例えば bc コマンドの標準入力をキーボードではなくファイルに割り当てて見ましょう。
bc < ファイル名 <Return> です。

まず bc.in というファイル名で、四則演算を並べたファイルを用意します。EmacsやNg などのエディタで新規に作成、編集してください。
以下に出来上りを cat した例を示します。簡単な四則演算を3行用意しました。

cc2000(85)% cat bc.in
1 + 2
2 * 3 
4 / 2
cc2000(86)%

bc コマンドの標準入力に対するリダイレクションによってファイルの内容を四則演算の式の列として実行され、画面すなわち標準出力に結果が表示されます。

cc2000(86)% bc < bc.in
3
6
2
cc2000(87)%

標準出力のリダイレクション

標準出力のリダイレクションは「 >」記号で表現します。

コマンド [オプション] [引数...] > ファイル名 と書いて、コマンドの標準出力を指定のファイルに割り当て直します。

例えば bc コマンドの標準出力をディスプレイではなくファイルに割り当てて見ましょう。
bc > ファイル名 <Return> です。

cc2000(88)% bc > bc.out
1 + 2
2 * 3
quit
cc2000(89)% 

cat コマンドでリダイレクションによってファイルに結果が残っていることを確認しましょう。

cc2000(89)% cat bc.out
3
6
cc2000(90)%

標準出力のリダイレクションで追加書き

標準出力のリダイレクションを既存のファイルに対して指定すると、単純に上書きしてしまい、そのファイルの元の内容は失われてしまいます。

しかし追加書きするようなリダイレクションもあります。
標準出力の追加リダイレクションは「 >> 」記号で表現します。

コマンド [オプション] [引数...] >> ファイル名 と書いて、コマンドの標準出力を指定のファイルに追加するように割り当て直します。

例えば bc コマンドの標準出力をファイル追加するように割り当てて見ましょう。
bc >> ファイル名 <Return> です。

cc2000(90)% bc >> bc.out
5 * 2
quit
cc2000(91)% 

cat コマンドでリダイレクションによってファイルにもとの結果に加えて新しい結果が追加されているのを確認しましょう。

cc2000(91)% cat bc.out
3
6
10
cc2000(92)%

標準入力、出力の両方のリダイレクション

先ほどの bc.in ファイルを利用して標準入力をそこから、標準出力をこれまた先ほどの bc.out ファイルに割り当てて見ましょう。

以下にその例を挙げます。例では cat コマンドでファイルの中身を確認しています。

cc2000(92)% bc < bc.in > bc.out
cc2000(93)% cat bc.out
3
6
2
cc2000(94)%

9.4 パイプ

bc などのように、標準入力から何かを受取り、標準出力にその結果を返すようなコマンドをフィルタコマンド [1] と呼んでいます。

先ほどの例で、 bc.out というファイルが結果として出来上がっていると思いますが、例えばこのファイルの中身を数字の小さいもの順に並べ替える [2] 為に、 sort コマンドの利用を考えます。
sort もフィルタコマンドですから、実行は以下のようにする事になるでしょう。 -n オプションはソートの順番を数値の小さいもの順にするためのオプションです。

cc2000(94)% bc < bc.in > bc.out
cc2000(95)% sort -n < bc.out 
2
3
6
cc2000(96)%

単純なコマンドでも、それを組み合わせて実行すると、なかなか便利な [3] ものです。
ところで上記のコマンド2つの組み合わせを、少し簡単に表現できるような仕掛けが UNIX には用意されています。以下の例を見てください。

cc2000(97)% bc < bc.in | sort -n
2
3
6
cc2000(98)% 

2つのコマンドを一行で書いています。
リダイレクションを使わないために中間的に発生していた bc.out ファイルも必要ありません。

このような、コマンドとコマンドをつなぐ「 | 」記号を「パイプ」と呼んでいます。パイプがあれば、パイプの左のフィルタコマンドは標準出力をパイプの右のコマンドの標準入力につなぎ合わせて実行くれます。

例えば cat コマンドもフィルタコマンドですから、上の例は以下のようにも書き換えられます。

cc2000(98)% cat bc.in | bc | sort -n
2
3
6
cc2000(99)% 

パイプは幾つでも重ねて使うことができます。

あまり実用的な例ではありありませんが、 echo コマンドを使えば簡単な計算を標準入力からキーボード入力しないで処理するような組み合わせもできます。

cc2000(99)% echo '3 * 4' | bc
12
cc2000(100)% 

UNIXではパイプとリダイレクションを応用することによって、各種のコマンドを柔軟に組み合わせて実行することができます。


9.5 その他の雑多なテクニック

以下に少しだけシェルをより使い込むためのヒントをあげておきます。

キーボードからの標準入力の終了

今回用意した bc.in ファイルなどは Ng などのエディタを使わなくても以下のようなやり方で作成できます。

cc2000(100)% cat > bc.in

cat コマンドは引数としてファイル名が与えられていない時は、入力を標準入力から行いますから、それをキーボードから入力して出力先を画面ではなくファイルにするというわけです。

上のコマンドを実行して、タイプする内容は 1 + 2<Return>2 * 3<Return>4 / 2<Return>C-d です。最後の C-d はファイルの終了 [1] を意味します。
キーボードからファイルの終了を入力するのは、大抵の場合この C-d です。

今まで黙っていましたが、 bc コマンドは、サブコマンド quit ばかりでなく、このファイルの終了を受けとっても終了します。だからこそ cat bc.in | bc で文句も言わずにちゃんと処理を終了したのです。

複数のコマンドを一行に書く

「;」を利用して、複数のコマンドを一行に書くことができます。例えば次のような感じです。

cc2004(82)% date ; hostname ; whoami ; id
2003年 10月  3日 金曜日 18:53:08 JST
cc2004
yasuda
uid=473088(enokida) gid=100(student)
cc2004(83)% 

ところで上の4つのコマンドの結果をぜんぶ一つのファイルにリダイレクションしたい場合は、以下のようにします。

cc2000(102)% ( date ; hostname ; whoami ; id ) > hostinfo.txt

このような書き方で、別々に処理することももちろんできます。

cc2000(103)% ( date ; hostname ) > hostinfo1.txt ; ( whoami ; id ) > hostinfo2.txt

一連のコマンドをファイルに書いておく

シェル自身もまたフィルタコマンドです。
ですからファイルにコマンド列を書いておいて、それをシェルの標準入力に与えて処理させることができます。cc環境標準のシェルは tcsh ですから、シェルのコマンド名は tcsh です。以下に例を挙げておきます。

cc2000(104)% cat batch
echo 'Here is my session information.'
date
hostname
whoami
id
cc2000(82)% tcsh < batch

対話形式ではないので警告のメッセージが表示される時がありますが、とりあえず結果は表示されると思います。単純な一連の手続きであればこれで十分ですね。

例のように短いものであれば問題ないのですが、長い複雑なものを作ったりしたときには何らかの覚え書きを入れておきたい時があります。
そのような時には # を利用します。 # より右に書いたものは覚え書き [2] とみなされて、その部分を一連の実行するべき手続きとして扱わず、無視されます。
以下に覚え書きを含めて書いた例を挙げておきます。

 cc2000(84)% cat batch 
 #
 #    Sample shell program. '03.2 Yasu.
 #
 echo 'Here is my session information.'
 date
 hostname
 whoami
 id      # show my username and etc.
 cc2000(85)% 


9.6 シェル変数と環境変数

シェルにはシェル変数と環境変数と呼ばれる、コマンドなどの動作に影響を与えるものがあります。
これを設定し直すことによって、もう少しあなたにとって都合の良い UNIX 環境が得られるかもしれません。
ここではシェル変数や環境変数の本質については触れずに、その設定例やヒントを紹介します。本質的なことについては附録の参考文献などからシェルに関する記述を参照してください。

シェル変数の表示、設定

現在設定されているシェル変数に何が有るかを調べるには set コマンドを利用します。
また、シェル変数の内容を変更するにも set コマンドを利用します。 set コマンドには以下の2通りの書き方があります。

set

現在設定されている全てのシェル変数を表示します。

set var = string

シェル変数 var の内容を string に設定します。

また、 echo コマンドを使って特定のシェル変数の内容を表示することもできます。
echo $var <Return> とすると、 var という名前のシェル変数の内容を表示します。
シェル変数は慣例として英小文字と数字で構成されています。

例えば tcsh ではしばらく使わないでほうっておいた場合、自動的にそのシェルを終了する機能があります。

これを制御しているのはシェル変数 autologout です。
echo $autologout <Return> とする事によって、現在設定されている放置時間が分単位で確認できると思います。
これは不用意に切り忘れてしまったような不要なシェルを放置しないための処置なのですが、この時間が短すぎて困る環境の人もいるでしょう。

そのような人は、以下のようにして放置時間を延長できます。

cc2000(81)% set autologout=300
cc2000(82)%

また、例えばカレントディレクトリの情報はシェル変数 $cwd [*2]に格納されていますので、 echo $cwd などとして表示させることができます。
それからホームディレクトリの情報はシェル変数 $home に格納されています。これまた echo $home などとして表示させる事ができます。

echo コマンドなど、一般のコマンドでシェル変数を扱うときは常に $ 記号をシェル変数の名前の前に付けます。

set コマンドでシェル変数の名前を指定するときは $ 記号を付けないことに注意してください。

環境変数の表示、設定

現在設定されている環境変数に何が有るかを調べるには env コマンド [1] を利用します。

また、シェル変数の内容を変更するには setenv コマンドを利用します。

env

現在設定されている全ての環境変数を表示します。

setenv VAR string

環境変数 VAR の内容を string に設定します。

また、 echo コマンドを使って特定の環境変数の内容を表示することもできます。
echo $VAR <Return>とすると、 VAR という名前の環境変数の内容を表示します。
環境変数は慣例として英大文字と数字で構成されています。

例えばプリンタの操作をするときは lpr -Pcspr01 sample.tex などして常にプリンタ名を指定するようにしていました。
環境変数 PRINTER が設定されている場合は、プリンタに関する各種コマンドは( -P オプションを省略した場合)環境変数 PRINTER に指定されたプリンタに対して処理を実行しようとします [2]

cc2000(81)% setenv PRINTER cspr01
cc2000(82)% lpr sample.tex
cc2000(83)% 

echo コマンドなど、一般のコマンドで環境変数を扱うときは常に $ 記号が環境変数の名前の前に付けます。
setenv コマンドで環境変数の名前を指定するときは $ 記号を付けないことに注意してください。


10. かな漢字変換

共用PCの Linux 環境で漢字を入力するためには、Wnn [1] と呼ばれるツールを使います。具体的な使い方を以下に例示しますので、そのとおりやってみて覚えてください。

10.1 Wnn の使い方

まず <Shift>キーを押しながら <Space> キーを押して、かな漢字入力モードにはいります。するとカーソルの表示が以下のように変わります。

かな漢字入力モード

このとき、マウスカーソルが目的のウィンドウの上にあることが必要です。
なお、かな漢字入力モードから戻るのも同じく <Shift> + <Space> です。

ここで「わたしのなまえはなかのです」と入力してみましょう。文字はローマ字入力です。

かな漢字入力モード

変換は空白(<Space>) キーです。
恐らくこれは以下のように一発で正しく変換されると思います。

かな漢字入力モード

<Return>キーを押して確定します。

次候補、文節の選択と伸縮

続いて「へんかんがうまくいかないときは」と入力して変換キーを押した状態を以下に示します。

かな漢字入力モード

ここで「いかない」ではなく「行かない」にしたい(次の候補を出したい) [2] とします。
方法としては「うまくいかない」となっている文節を「うまく」まで短くし、その後に「いかない」となった文節の上で変換キー(空白キー)を押せば良いでしょう。

まず操作の対象を、目的の文節(「いかない」)まで、左右の矢印キーを押して移動します。白黒反転しているのが現在の操作対象となっている文節です。「→」キーを一度押せば、文節が移動するのがわかるでしょう。
C-f, C-b ( <Control> キーを押しながら f または b キーを押す)でも同様に文節の指定ができます。

かな漢字入力モード

続いて C-i ( <Control> キーを押しながら i キーを押す)で文節を短くしていきます。逆に文節を伸ばすのは C-o ( <Control> キーを押しながら o (オー))です。
<Shift> キーを押しながら左右の矢印キー(「←」「→」)を押しても同様に文節の調整ができます。

かな漢字入力モード

「うまく」まで短くなったら、再び「→」キーを押して操作対象の文節を「いかないときは」に移し、変換キー(空白キー)を押せば次候補が現れます。

かな漢字入力モード

一つ前の候補を表示させるのは C-p (<Control> キーを押しながら p キー)または↑キーです。

漢字の入力が終われば、再び <Shift>キーを押して、かな漢字入力モードから戻りましょう。


キー割り当て一覧

Wnn における主要なキー割り当て一覧です。

かな漢字変換モードの on/off<Shift> キーを押しながら<Space>
次の候補<Space> または C-n 、↓
前の候補C-n または ↑
次の文節C-f または →
前の文節C-b または ←
文節を伸ばすC-o または <Shift> キーを押しながら →
文節を縮めるC-i または <Shift> キーを押しながら ←

10.2 ローマ字入力のヒント

「たんい」(もしくは「んお?」など)のように「ん」の次に母音が来る場合

「ん」を単独でタイプするために N(大文字), n', nn が用意されていますのでいずれかを利用してください。
「taNi」もしくは「tan'i」、「tanni」とタイプすれば「たんい」とローマ字変換されます。
「たんに」と入力するには「tannni」とnを3回入力する必要があります。

「あっ」(もしくは「んぁ?」など)のような小さい「っ」「ぁ」を入力したい場合

小さい「ぁぃぅぇぉ」などは、x を前に付けてタイプします。
「xa」とタイプすれば「ぁ」とローマ字変換されます。「xtu」で「っ」、「xyu」で「ゅ」です。

「○△×」など、記号や特殊文字の入力

C-^ で記号入力モードにします [1] 。下のような標示になりますので、記号を矢印キーで選択して <Enter> キーで確定するか、マウスでクリックしてください。何も記号を入力せず終るためにはもう一度 C-^ です。

記号入力モード

また、記号の入力は、例えば「○」なら z1 のように z と何かのキーという形でいくつか登録されています。
以下に一覧を示しておきます。

入力記号 入力記号 入力記号 入力記号 入力記号 入力記号 入力記号 
z1 z2 z3 z4 z5 z6    
z! z@ z$ z$ z% z^    
z< z> z= z+± z*× zV÷ z_ 
z7 zv z&£ z8¢ z9 z0 z- 
zh zj zk zl          
z; z: zr zt zp zf zd 
z( z) z[ z]          
z{ z} zq zw          
z/ z, z. z' zn z" zm 

かな漢字変換から抜けられない

<Caps Lock> キーが押された状態になっていないか確認して下さい。アルファベットの Q あたりを入力すれば、それが q と表示されるか Q と表示されるかで <Caps Lock> キーが押されているかどうかが確認できます。

<Shift> キーを押しながら <Caps Lock> キーを一度押せば、<Caps Lock> の状態が変わるはずですので、その後で <Shift> を押しながら <Space> キーを押してかな漢字変換モードから抜けられたかどうか見てください。

うまくいかない場合は <Shift> キーを押しながら、<\> キー(バックスラッシュ、または円記号が刻印されています)を試して下さい。


10.3 単語登録、環境設定など

単語登録

Wnn7 は一度変換した文字は極力覚えるようになっていますが、もとから辞書に載っていないような固有名詞などは変換できません。その場合は単語登録をすることで次回から簡単に変換候補にあがるようにします。
単語登録は wnndictutil コマンドです。wnndictutil コマンドを実行すると、新しいウィンドウが一つ開き、単語登録処理ができるようになります。

% wnndictutil

単語登録ユーティリティ

「詳細表示」ボタンをクリックすると、品詞の設定などができます。
ツールを終了するにはウィンドウ右上端の×マーク をクリックします [1]

単語登録ユーティリティへの漢字と読みの入力について

困ったことに cc 環境の UNIX 環境では、単語登録ユーティリティには漢字や読みがなが入力できない状態になっています。通常なら「語句」や「読み」のフィールドに Wnn を使ったかな漢字変換ができるはずなのですが、この原稿を書いている時点(2003.10)ではできません。

しばらくは Kterm のウィンドウなどに登録する単語や読みがなを入力して表示させ、それを Copy & Paste で「語句」「読み」フィールドに記入するようにしてください。
Copy & Paste の方法は画面の Copy & Pasteを参照すると良いでしょう。

環境設定

wnnenvutil コマンドでさまざまな環境設定ができます。
ツールを終了するにはウィンドウ右上端の×マーク をクリックします [2]

% wnnenvutil

単語登録ユーティリティ


11. Ng エディタの使い方

非常に簡単に使えるエディタとして Ng を紹介します。Ng は 1990 年代から開発が継続されているエディタで、あまり標準的ではありませんが簡単に使えるエディタのひとつです。

11.1 エディタを使ったファイル編集の流れ

まず Ng に限らない、エディタを使ったファイル編集の流れについて説明します。

  1. ファイルを指定してエディタを起動
  2. 文書を入力・編集する
  3. エディタを終了し、保存する

Step 1. ファイルを指定してエディタを起動

まずエディタを起動し、ファイルの中身を読み込みます。

エディタに読み込み

既存のファイル指定した場合は、そのファイルの中身を読み込み、表示します。そうでないファイル名を指定した場合は、あとで新規にその名前のファイルを作成するつもりで、空白の状態ではじまります。
ディスクにあるファイルの中身を、エディタが用意したメモリに読み込んだと考えても良いでしょう。

Step 2. 文書を入力・編集する

キー操作によって文書を入力したり、体裁を整えたりします。

文書の修正

この操作はエディタに読み込まれたファイルの内容に対して行なわれており、元のファイルにその結果は反映されていません。
ファイルはディスクの中にあり、エディタはメモりの中だけを変更していると考えても良いでしょう。

Step 3. エディタを終了し、ファイルに保存する

エディタを終了し、編集していた内容をファイルに書き込みます。

エディタを終了、ファイルに保存

ここで保存処理をすることによって、エディタで書き込んでいた内容がようやくファイルに反映されます。
エディタが保持していたメモリの中身がファイルに記入されると考えても良いでしょう。

11.2 Ng エディタの操作

実際の Ng エディタの操作について説明します。

Ng エディタの起動

以下に sample.txt というファイル名を指定して、Ng エディタを起動する例を示します。

cc2000(83)% ng sample.txt

画面表示が切り替わって、下の図のようになったとおもいます。sample.txt が既存のファイルの名前なら、エディタ画面には sample.txt の中身が読み込まれて表示されているでしょう。

ng 起動画面

ng コマンド起動後の画面表示

文章の入力・編集

基本的にはタイプした文字がそのまま入ります。編集にはカーソルキーや <Delete> キーが使えます。漢字の入力については かな漢字変換 を参照してください。

矢印キー以外に、さまざまなキーに機能が割り当てられています。

<Escape>-v一ページ分上へ移動
<Control>-v一ページ分下へ移動
<Control>-a行頭へカーソルを移動
<Control>-e行末へカーソルを移動
<Escape>-<文頭へ移動
<Escape>->文末へ移動
<Control>-kその行のカーソル位置から後ろをカット
<Control>-y最後にカットしたものをカーソル位置に貼りつけ

繰り返し

「<Escape>-数字」とすることで、指定した回数だけ処理を繰り返させることができます。たとえば <Escape>-13 <Control>-k とすると、13 行まとめてカットします。

検索

「<Escape>-s」とすると、画面の一番下の行に「Search:」と表示されます。ここで検索したい文字列をタイプし、<Return>すると、カーソル位置から下に向けてはじめて見つかった場所にカーソルが移動します。
ひとつ見つかった場合、その次を検索するのは再び「<Escape>-s」です。今度は「Search: (default XXX)」などと前回検索した文字列を覚えていますので単に<Return>するだけで同じ文字を現在のカーソル位置から再検索してくれます。

「<Escape>-r」でカーソル位置から上に向けて検索します。画面表示も「Search backward:」になります。再検索も同じく「<Escape>-r」をもう一度やってください。

置換

「<Escape>-%」で文字列の置換ができます。「Query replace:」と表示されるので、置換もとの文字列(たとえば "実施")を入力します。「Query replace 実施 with:」と表示されますので、置換後の文字列(たとえば "実行")を入力します。
置換すべき文字列が見つかった場合、カーソルが移動して「Query replacing 実施 with 実験:」と画面一番下の行に表示されます。ここで <Space> キーを押せば "実施" を "実験" に置換して次の置換すべき文字列を検索します。「. (ピリオド)」を押せば一つだけ置換して終了、<Delete> キーでそこは置換せず次の文字列を検索、「!」でそれを含めてすべて置換します。置換処理を中断したいときは <Escape> キーです。

Ng の終了・保存

入力・編集が済んだら C-z で保存してください。画面いちばん下の行に、以下のように表示されるとおもいます。

ng 終了画面

ng 終了(保存)時の画面表示

ここで y と入力してください。これで Ng が終了するとともにファイル(例では sample.txt という名前)に編集した内容が書き込まれます。
n と入力すれば、編集した内容を放棄して Ng を終了します。(保存せず終了することになるがそれで良いか?と一度念押しされます。)

12. 謝辞

このドキュメントは京都産業大学の情報センターが発行した 2001 年版の「インターネットガイド」を元にしています。このドキュメントはそのなかでも特に UNIX 関連の部分を抜き出したものですが、その多くは 1994 年に書き起こされた「UNIX ガイド」から引き継がれてきたものです。その長い歴史のなかで手を加え続けられ、今に至っているというわけです。

このドキュメントに関わられたすべての方の努力に感謝します。
特に今回このドキュメントを HTML 化する動機を与えてくれた私の受講生たちに。

2003.3

今度は理学部の受講生のために 2 年ぶりに手を加えました。特にマウスの絵は 10 年前に描いたものが延々使われているのが少々辛くなりはじめたところもあり、2 ボタンでローラー付きのものに描き直しました。こうした資料を作る人間が極端に少ない環境なのだなとつくづく思います。作り直すまでもないと思っているにしても 10 年使うのなら手を掛けても全く損はないはずなのに。

2005.4

もう記録や記憶が失われてしまいそうなので経緯を記しておきます。

このドキュメントは「UNIX ガイド」からの抜粋を元に修正・加筆したものです。これは 1994 年に学内に導入した UNIX システムの利用者、特に授業などで利用教育を受ける機会のない学生のための自学自習教材として当時のシステム管理者であった私が起こしたものです。特にこのドキュメントのために利用した部分の殆どは当時私が書いた部分にあたります。
それ以降、私の退職後も2001年までこのドキュメントは多くの人によって書き加えられ、メンテナンスされてきました。しかし2001年以降は特にUNIXシステムのオペレーションに関するものはアップデート、配布されなくなり、結果的に私が再びこの大学に戻ってきた時には皆 2001 年版のものを残して使い続けている状態でした。
これでは実際の教育には間に合わないため、当時のデータを引き取り TeX ドキュメントであったものを再編集し、図版を起こし直して HTML 形式で再公開したのがこれです。
1994年当時、UNIX自習書がほとんどなかったために作成し、他にも需要があるかもしれないと思い非営利であれば自由に利用して良いとしてネットワークに公開していたものでですが、まさか10年後に自分がそれに助けられるとは思いもしませんでした。

2007.3

京都産業大学 理学部
安田豊