ver. 2013.6 UNIXコマンド帳(2) - Waseda Universityver. 2013.6 UNIXコマンド帳(2)...

16
ver. 2013.6 UNIXコマンド帳(2) (a)パイプ UNIXでは、特に指定しない場合の入出力先をそれぞれ標準入力 (standard input)準出力 (standard output) という。通常、標準入力としてはキーボードが、標準出力とし ては端末の画面(ディスプレイ装置)が割り当てられている。あるコマンドの標準出力を、 次に実行するコマンドの標準入力として引き継ぐことをパイプ (pipe) といい、それらの コマンドの間に | を書いて示す。例えば、 % cat -n < file1.cpp | lpr によって、file1.cpp に入っている C のソースプログラムに行番号を付けて、それをプリ ンタに出力することができる(14号館504コンピュータ教室では、 lpr コマンドは使えない)。 すでに述べたようにファイルがたくさんあるときに % ls -l | less のように使ったり、プログラムの実行結果をソートして出力するために % ./a.out | sort > output のように使ったりする。 (b)バックグラウンドジョブとフォアグラウンドジョブ すでに述べたように、UNIXではあるコマンドの実行結果を次のコマンドに渡して次々と 実行させることができる(パイプ)。また、実行結果を次のコマンドに渡すことはしないが、 複数のコマンドを並べておいて順に実行することもできる。そのためには、 % コマンド1 ; コマンド2 ; ・・・ ; コマンドn のように、コマンドとコマンドの間に ; を入れる。コマンド i+1 コマンド i の実行 が終わるのを待って実行される。 一方、このように前のコマンドの実行終了を待たずに次の仕事をしたいことがままある。 UNIX はマルチユーザマルチプロセスの OS であるから、いくつもの仕事(コマンド)を同 時に並行して走らせることが可能である。コマンド行の最後に & を付けると、そのコマン 1

Transcript of ver. 2013.6 UNIXコマンド帳(2) - Waseda Universityver. 2013.6 UNIXコマンド帳(2)...

  • ver. 2013.6

    UNIXコマンド帳(2)

    (a)パイプ

    UNIXでは、特に指定しない場合の入出力先をそれぞれ標準入力 (standard input)、標準出力 (standard output) という。通常、標準入力としてはキーボードが、標準出力とし

    ては端末の画面(ディスプレイ装置)が割り当てられている。あるコマンドの標準出力を、

    次に実行するコマンドの標準入力として引き継ぐことをパイプ (pipe) といい、それらのコマンドの間に | を書いて示す。例えば、

    % cat -n < file1.cpp | lpr

    によって、file1.cpp に入っている C のソースプログラムに行番号を付けて、それをプリ

    ンタに出力することができる(14号館504コンピュータ教室では、lpr コマンドは使えない)。

    すでに述べたようにファイルがたくさんあるときに

    % ls -l | less

    のように使ったり、プログラムの実行結果をソートして出力するために

    % ./a.out | sort > output

    のように使ったりする。

    (b)バックグラウンドジョブとフォアグラウンドジョブ

    すでに述べたように、UNIXではあるコマンドの実行結果を次のコマンドに渡して次々と

    実行させることができる(パイプ)。また、実行結果を次のコマンドに渡すことはしないが、

    複数のコマンドを並べておいて順に実行することもできる。そのためには、

    % コマンド1 ; コマンド2 ; ・・・ ; コマンドn

    のように、コマンドとコマンドの間に ; を入れる。コマンド i+1 は コマンド i の実行

    が終わるのを待って実行される。

    一方、このように前のコマンドの実行終了を待たずに次の仕事をしたいことがままある。 UNIX はマルチユーザマルチプロセスの OS であるから、いくつもの仕事(コマンド)を同

    時に並行して走らせることが可能である。コマンド行の最後に & を付けると、そのコマン

    1

  • ドを(裏で)走らせたままで、別のコマンドの投入ができる。裏で行われている仕事をバ

    ックグラウンドジョブ(background job)という。バックグラウンドジョブはキーボード

    からデータを入力したり、キーボードに結果を出力するようなものであってはならない(表

    で行なっている仕事とごちゃ混ぜとなって混乱するから)。 バックグラウンドジョブに対し、コマンドの実行が開始されたらその終了を待って次の

    プロンプトが表示されるようなものをフォアグラウンドジョブ(foreground job)という。 バックグラウンドジョブを開始すると、画面に

    [1] 1234

    のような表示([1] はジョブ番号である)が出て、終了すると

    [ジョブ番号] Done 投入したコマンド名

    という表示が出る(ただし、終了直後ではなく、フォアグラウンドジョブが終わった時点

    で)。

    実行中のフォアグラウンドジョブを一時停止させるには、^Z を入力する(コントロールキーを押しながら Z を押す)。画面に

    Stopped

    と表示される(注意:X-Window システムを使っている場合、xterm や kterm のウインド

    ウ内で ^Z すると、その xterm / kterm ウインドウがアイコン化するだけである)。バッ

    クグラウンドジョブを一時停止させるには

    % stop ジョブ番号

    とする。停止中のジョブをフォアグラウンドジョブとして再開するには

    % fg または % fg ジョブ番号

    と入力し、バックグラウンドジョブとして再開するには

    % bg または % bg ジョブ番号

    と入力すればよい(ジョブ番号を指定しないときは、直前に停止したジョブが再開される)。

    バックグラウンドジョブはいくつでも走らせることができるが、それらの実行状況を見

    るには jobs コマンドを使う:

    2

  • % jobs

    [1] Running lpr -Peach typescript

    [2] +Stopped make

    [3] -Stopped emacs example.c

    このように、ジョブ番号、ジョブの状態、コマンドの内容が表示される(Stopped は「一

    時停止」であって、終了しているわけではない)。

    バックグラウンドジョブにせよ、フォアグラウンドジョブにせよ、ジョブの実行を強制

    的に終了させるには kill コマンドを用いる。

    % kill ジョブ番号

    と入力すると、

    [ジョブ番号] Terminated コマンドの内容

    と表示される。これによって終了しないジョブもあるが、その場合には

    % kill -KILL ジョブ番号

    と入力すればどんなジョブでも終了させることができる(-KILL の代わりに -9 でもよい)。

    フォアグラウンドジョブを強制終了するには、

    % ^Z

    Stopped

    % kill -KILL または % kill %%

    とすればよい。

    プロセスを強制終了するために上記のいずれも駄目の場合には、他の端末からログイン

    して

    % ps -u ユーザ名

    と入力する(ps ココマンド:process status)と、次のように動作中のプロセスが表示さ

    れる:

    PID TTYT TIME CMD

    aaa pts/2 0:00 csh

    bbb pts/1 0:00 mule

    3

  • (c)標準入力・標準出力

    UNIXにはファイルディスクリプタというものがあり、プロセスとそれが利用するファイ

    ルとを結び付けている。プログラムがファイルを作成してそこに書き込みを行うときには、

    プロセスはファイルディスクリプタを使ってそのファイルへのアクセス方法を知ることが

    できる。UNIXのファイルディスクリプタのうち、プロセスが起動されると必ず利用可能に

    なるのが標準入力(Standard Input)、標準出力(Standard Output)、標準エラー(Standard

    Error)。これらの標準入出力・エラーには以下のようなデバイス(装置:device)が割り

    当てられている。

    標準入力: キーボード

    標準出力: ディスプレイ

    標準エラー: ディスプレイ

    (d)リダイレクション

    UNIXのシェルはコマンドの入力や出力を切り替えることができるリダイレクション機能

    (redirection)を持っている。入力はキーボードから行われ、出力はディスプレイに書か

    れるのが普通であるが、リダイレクションにより、入力元や出力先を変更することができ

    る。リダイレクション機能を使うと、ファイルから(コマンドに)データを入力したり、

    処理結果をファイルに書き出したりすることができる。

    入出力のリダイレクションを行う際には、

    < または >

    を使ってリダイレクションの方向を指定する。

    % コマンド名 >出力先ファイル名

    % コマンド名 の代わりに >! を使うと、既存のファイ

    ルの内容がクリアされて上書きされる。ファイルの内容をクリアせずに中身を追記したい

    場合には記号 >> を使う。

    4

  • UNIXコマンド帳(3)

    1.シェルとプロセス

    UNIX というオペレーティングシステムの心臓部はカーネル(核、kernel)と呼ばれる。

    カーネルは、周辺装置からの入出力を制御したり、ディスク上に記録・保存さているファ

    イルを管理したり(ファイルシステム)、同時に実行されているタスクを管理したり(マル

    チタスク機能)、仮想記憶、入出力など、 OS にとって重要な機能を司っている部分であり、

    ハードウェアを制御し有効利用するための基本的な働キーをする部分である。

    一方、ユーザが入力したコマンドはそのままカーネルが実行するわけではなく、シェル

    (shell)と呼ばれるプログラムが、入力されたコマンドの内容を解釈し必要な前処理をし

    てからカーネルに渡して実行を依頼する。カーネルがコマンド実行要求を処理し終わると、

    その旨を受けたシェルはユーザの端末上にプロンプトを表示する。このように、シェルは

    ユーザとカーネルとの間の橋渡しをするプログラム(interface, インターフェース)であ

    り、コマンドインタプリタ(command interpreter)とも呼ばれる。

    シェルは、各ユーザがログインする度に起動され(これを login シェルという)、ログ

    アウトするときに終了する。

    シェル(殻)という名称は、OSの機能を実装している中心核部分(カーネル)の外層と

    して動作することに由来する。

    一般に、シェルは以下の機能を装備している。

    1. ユーザインターフェース(コマンドインタプリタとしてのシェル)

    プロンプトの表示、コマンドの読み込み・解釈・実行、フォアグラウンド・バック

    グラウンドを切り替え(ジョブコントロール機能)、あるプログラムの出力をファイル

    に出力したり(リダイレクト機能)や他のプログラムへ入力したりする(パイプ機能)、

    入力時のファイル名などを補完する機能など。

    2. 環境設定の道具

    プログラムの動作環境を設定するための環境変数やシェル変数の設定・参照など。

    3. プログラミング言語(スクリプトの解釈実行)

    一連のコマンドを指定した順序で実行したり、繰り返し実行したり、条件に応じて

    実行したりするためのプログラム(このようなプログラムをシェルスクリプト shell

    script と呼ぶ)を入力して解釈して実行する。

    5

  • シェルには Bourneシェル(ブーンシェル、略して Bシェルという)、Bash、Cシェル、tcsh

    (TC シェル)、Kornシェル(K シェル)、zch(Zシェル)などがある。数あるシェルの

    中でも Bシェルは最も古いもので、AT&T のベル研究所で開発され、 開発者の1人である

    Steven Bourne に因んで名付けられた。ほとんど全ての UNIX で利用できる標準的なシェ

    ルである。

    Bash は、MIT(マサチューセッツ工科大学)の Brian Fox が開発した。B シェルでは貧

    弱であったユーザインナーフェースの機能を強化したもので、K シェルや C シェルから多

    くの影響を受けている。B シェルの生まれ変わり(born again)に因んで命名されている。

    GNU ソフトウェアの一部として配布されており、いろんなシェルがある中で、最もよく使

    われている。Linux では標準シェルとなっている。

    Cシェルはカリフォルニア大学バークレイ校の William Joy が中心になって BSD UNIX シ

    ステム上で開発したシェルで、 C 言語に似た構文を持つことが命名の由来である。Bシェ

    ルの機能を包含した上で、ヒストリー(history)機能やエイリアス(alias、別名機能)

    などの機能が付加されており、対話形式で使用する場合に便利なシェルである。

    TCシェルは BSD 系 UNIX のために開発されたシェルである。

    シェルのシェア 某サイトが行なった UNIXシェルの人気アンケート(2007年)によると、

    908 件中、Bash 449、zsh 100、ksh 70、tcsh 59、csh 53、その他 177であった。教育学部

    の EDUシステムでは Cシェルがデフォールトになっている 1。

    自分の使っているシェルが何であるかは

    % set

    一部略

    home /home/student/taro ←ユーザのホームディレクトリ

    hostname ホストマシン名

    path (/home/student/taro usr/bin /bin usr/ucb .) ← パスの設定内容

    prompt % ← プロンプト

    shell /bin/csh ← ここ(シェルの設定)

    以下略

    %

    によって調べることができる。

    UNIX では複数のユーザそれぞれが複数の処理を同時に行うことができる。UNIX におけ

    る実行処理の単位をプロセス(process)という。シェルもプロセスの一つであり、ユーザ

    1 Bash / Cシェル / TCシェルに変更するには「bash」「csh」「tcsh」と入力すればよい。実行中のシェ

    6

  • がログインしたとキーに自動的に立ち上がり、ログアウトすると終了する。また、各コマ

    ンドもプロセスであり、一つのコマンドの実行は一つのプロセスを立ちあげることである。

    各コマンドは一つのプログラムであり、/bin というディレクトリ等に置かれているのが普

    通である。

    2.シェル変数と環境変数

    シェルが動作する際の環境を設定する変数をシェル変数という。たとえば、cdpath, filec,

    history, home, prompt, shell, term などがシェル変数であり、これらは次のような意味

    を持っている:

    filec ファイル名の補完機能を有効にする

    history ヒストリー機能を有効にする

    home ユーザのホームディレクトリ

    path コマンドを検索するディレクトリのリスト

    prompt ユーザの端末に表示するプロンプト

    shell ログインしたとキーに立ち上がるシェルのパス名

    term ユーザが利用している端末の種類

    シェル変数を設定するには set コマンドを使う。例えば、

    % set filec ← ファイル名の補完機能を有効にする

    % set history=100 ← ヒストリーリストの大キーさを100に設定する

    % set prompt=“‘whoami’@’hostname’% ”

    プロンプトを ユーザ名@ホストマシン名% に設定する

    シェル変数の設定を解除するには unset コマンドを使う。なお、引数なしで setコマン

    ドを使うと、シェル変数の設定状況を見ることができる。

    一方、コマンドの動作環境を設定する変数を環境変数という。環境変数の設定内容は、

    引数なしで setenv コマンドを使うと見ることができる。ここでは、これ以上立ち入らな

    い。

    シェル変数、環境変数、後述するエイリアスの設定などは、ログアウトすると無効にな

    る。だからといって、ログインのたびに設定し直すのは大変である。このため、Cシェルで

    は .cshrc と .login という名前のファイルを利用できるようになっている。これらのフ

    ルを終了するには「exit」と入力する。

    7

  • ァイルには set, setenv, alias などのコマンドを列挙して書き込んでおき、ユーザのホ

    ームディレクトリに置いておく。C シェルはログイン時に、これらのファイルに記述され

    ているコマンドをすべて実行する。

    自分の .cshrc ファイルや .login ファイルに何が書いてあるかは

    % more .cshrc (または % more .login)

    で見ることができる。ただし、;で始まる行は注釈である。また、vi や Emacs といったエ

    ディタを使って内容を修正することもできる。

    3.ヒストリ機能

    UNIX では、一度入力したコマンドを後から簡単に再実行することができる(この機能は

    B シェルでは使えない)。この機能が使えるためには、シェル変数 history を設定してお

    く必要がある(たいていは、.cshrc にすでに書いてあるので、あらためて入力する必要は

    ない):

    % set history=100

    これによって、100行分のコマンドを記録しておくためのヒストリーリスト(history list)

    が準備される。

    以下の記述で n は具体的な整数値とする。まず、

    % !!

    によって直前のコマンドが再実行され、

    % !-n

    によって、n 回前のコマンドが再実行される。また、

    % !コマンド名

    によって、指定した名前のコマンドで最も最近実行されたものが再実行される。

    8

  • % history 6

    18 cd source/c

    19 ls -l

    20 emacs example.c

    21 cc example.c

    22 a.out

    23 history -r 10

    %

    のように、history コマンドに整数引数 n を付けて入力すると、最近入力した n 行分の

    コマンドが表示される。表示された操作歴には頭にヒストリー番号が付いている。オプシ

    ョン -r を付けると新しい方から逆に表示される。

    これによって、コマンドを確認してから再実行することができる。例えば、上例におい

    て、a.out を実行した結果エラーがあったのでファイル example.c を修正したいので再度

    Emacs を立ち上げたいという場合には、

    % !-4

    とすればよい。または、

    % !n

    によって、ヒストリー番号 n のコマンドが再実行されるので、

    % !20

    と入力してもよい。

    4.エイリアス機能

    alias コマンドを使って、コマンドに自分で使い易い別名を付けることができる:

    % alias 新コマンド名 ‘旧コマンド名 オプション’

    旧コマンドにオプションがない場合には、’ ’ は付けなくてもよい。例えば、

    % alias la ‘ls -a’

    9

  • によって、これ以後、% ls -a と入力する代わりに % la と入力するだけでよいし、

    % alias dir ls

    によって、これ以後、% ls と入力する代わりに % dir と入力してもよい。

    別名を付けたコマンドに引数を持たせたい場合には、

    % alias 新コマンド名 ‘旧コマンド名 前オプション \!* 後オプション’

    とする。例えば、

    % alias cclm ‘cc \!* -lm’

    としておけば、% cclm example.c は % cc example.c -lm と同じことになる。

    また、

    % alias swap ‘mv $1 temp ; mv $2 $1 ; mv temp $2‘

    のように、一連の操作に名前を付けることもできる。; で区切って並べた複数のコマンド

    は、並べられた順に(自分の手前のコマンドが終わるのを待って)実行される。

    例えば、

    % swap afile bfile

    とすると、$1 の位置に afile が、$2 の位置に bfile が代入され、

    % mv afile temp ; mv bfile afile ; mv temp bfile

    と同じことになる。もちろん、’ ‘ の中にパイプを含んでいてもよい。

    alias の設定を解除するには unalias コマンドを用いる:

    % unalias aliasで設定したコマンド名

    普段用いる alias の設定は、.cshrc ファイルに書き込んでおくとよい。

    5.シェルスクリプト

    一連のコマンドを書き込んだファイルのことをシェルスクリプト(shell script)とか

    コマンドファイルという。それを呼び出すと、そこに書き込まれている一連の操作が実行

    される。例えば、

    10

  • # 最初の行は必ず#で始まること(#で始まる行は注釈である)

    mv $1 temp

    mv $2 $1

    mv temp $2

    という内容のファイルを作ってファイル名を swap としておくと、

    % swap filea fileb

    によって、ファイル filea とファイル fileb の内容を入れ替えることができる。ただし、

    このファイルには

    % chmod +x swap

    のようにして、「実行許可」を与えておく必要がある。

    6.その他のUNIXコマンド

    (a) キーの設定

    UNIX では、1文字削除するためのキーを erase 文字といい、1行削除するためのキー

    を kill 文字と呼ぶ。これらの文字の設定はシステムによってまちまちである。それを知

    るには、

    % stty all

    とすれば、例えば

    erase kill werase rprnt flush lnext susp intr quit stop eof

    ^H ^U -W ^R ^O ^V ^Z/^Y ^? ^\ ^S/^Q ^D

    のように現在の設定状態が表示される。設定を変更するには

    % stty erase キー あるいは % tset -e キー

    % stty kill キー あるいは % tset -k キー

    のように stty コマンドあるいは tset コマンドを使う。

    11

  • (b) Cのプログラムの整形

    C のソースプログラムに適当なインデントを施し、読み易い形に整形するためには、cb

    コマンドまたは indent コマンドを使うとよい:

    % cb Cソースファイル >出力ファイル

    または

    % indent Cソースファイル 出力ファイル

    によって、C の「ソースファイル」が整形され「出力ファイル」に書き出される。

    (c) 使用中のユーザとマシンの混雑度を知る

    自分と同じマシン上で誰が使っているか(ユーザ名、端末名、ログイン時刻、ログイン

    してきた端末名)は who コマンドで知ることができる。

    % who

    % who am i

    とすると、自分についての情報だけが表示される。wコマンドでは、who コマンドで得ら

    れる情報以外に、実行プロセス名やCPU時間なども知ることができる。また、finger コマ

    ンドは、ユーザに関する情報を得るためのものである。自分の情報を設定するためには

    % chfn

    によって名前や電話番号を設定し、ホームディレクトリにある .project ファイルや .plan

    ファイルを書き換えることによってプロジェクト内容や計画内容を記述できる2。

    同じネットワーク上の他のマシンを誰が使っているかは

    % rusers

    で知ることができる(System V系では rwho コマンド)。また、どのマシンがどの程度使わ

    れているかという稼働率は

    % ruptime

    2 教育学部 EDUシステムでは、rusers, ruptime, chfn, talkコマンドは使えない。

    12

  • で知ることができる。各マシンのアップタイム(立ち上がってからの経過時間)、現在時刻、

    マシン負荷(最近の1, 5, 15分それぞれの平均ジョブ数)が表示される。以上のコマンド

    は、できるだけ空いているマシンを探したり、talk や phone をかけたい相手がどこにい

    るか(いないか)を知ったりしたいとき等に使える。

    (d) お話しましょう

    talk コマンドや phone コマンドを使うと、ネットワークにログインしているユーザと

    会話することができる。talk コマンドと phone コマンドはほとんど同じ使用法であるの

    で、ここでは phone コマンドについて述べる。話し掛けたい相手がログインしているかど

    うか(および、そのマシン名)を who コマンドあるいは rusers コマンドで確かめたら

    %phone ユーザ名@マシン名

    と入力する(自分と同じマシンの場合には @マシン名 は不要)と、自分と相手の画面が上下

    2つのウインドウに分割され、相手に応答するよう求める。画面に指示された通りに相手

    phone 呼び出したユーザ名@マシン名

    で応答すると、両者の間のコネクションが確立し、上下それぞれのウインドウに二人のメ

    ッセージが表示される:

    [Connection established] 自分のメッセージ用ウインドウ

    Hello! How are you?

    Yeah, I feel good, too.

    Do you meet Mr. Sato’s class this afternoon?

    Ok. We will meet there. Good bye!

    -----------------------------------------------------------------------

    I am fine. And you? 相手のメッセージ用ウインドウ

    Yes, I do.

    See you.

    phone の終了は C-c を入力すると、本当に終了してもよいか聞いてくるので、y と答え

    て終了する。

    13

  • (e) 居ながらにして遠くのマシンを使う3

    telnetコマンドや rlogin コマンドを使うと、ネットワークでつながっている遠く離れ

    たマシンにログインして使うことができる(そこにユーザとしてのアカウントがあれば):

    % telnet 相手マシン名またはIPアドレス

    % rlogin 相手マシン名

    ftp コマンド(file transfer protocol)によって、ネットワーク上の遠くのマシン上

    のファイルを取ってキーたり、逆にファイルを送ることができる。相手マシンにアカウン

    トが必要な場合と必要でない場合とがある。

    % ftp 相手マシン名またはIPアドレス または単に % ftp

    ftp コマンドが受け付けられると、

    >

    というプロンプトが表示され、ftp 用のコマンドを入力できる:

    (ftpコマンド)

    open ftp 先のマシン名を指定する

    put 相手マシンにファイルを転送する

    mput ワイルドカードを使って指定した複数のファイルを相手マシンに転送する

    get 相手マシンからファイルを取ってくる

    mget ワイルドカードを使って指定した複数のファイルを相手マシンから取ってくる

    cd ディレクトリのチェンジ

    ? ftp コマンド一覧を表示する

    (f) vi

    UNIX 標準装備されているエディタには ed, ex, vi 等がある(Emacs はフリーソフトで

    ある)。このうち、ed と ex は行単位で処理を行なうラインエディタ(行エディタ)であ

    る使い勝手は良くない。それに対し、vi は画面のどこにでもカーソルを移動させて処理が

    3 telnet, rloginコマンドや ftpコマンドではパスワードが暗号化されずにネット上を流れるので、現在

    では多くの UNIXシステムが使用を禁止している(教育学部の EDUシステムでも使用禁止)。

    14

  • 行えるスクリーンエディタである。Emacs が使える環境下では vi は不要であるが、Emacs

    を使えない場合のために vi を知っておくのもよい。ここでは、vi の基本だけを述べる。

    (1) vi の起動、コマンドモードとテキスト入力モード

    vi を起動するには、

    % vi ファイル名

    と入力すると、新規作成ファイルの場合には次のような画面になる(既存のファイルの場

    合には、その内容が表示される):

    ~

    ~ ~ はこの行が空であることを表わす

    ~

    “ファイル名” [New file] 画面最下行はメッセージ行として使われる

    vi にはコマンドモードとテキスト入力モードの2つのモード(mode)があり、コマン

    ドモードでは vi に対する編集コマンドを入力する(例えば、”a” というキーを押すと、

    これは「これ以降 ESC キーが押されるまでの間入力される文字列をカーソルの直後に貼り

    つけよ」というコマンドと解釈される)。それに対し、テキスト入力モードでは編集したい

    テキストの文字を入力する(例えば、”a” を押すと、文字 a が入力される)。vi を立ち

    上げたときにはコマンドモードになっており、コマンドモードとテキスト入力モードの切

    り換えは ESC キーを押すことによって行なう。どちらのモードにいるかはどこにも表示さ

    れないが、ESC キーを押したときにベルが鳴った場合にはコマンドモードである(これは、

    コマンドモードにいるときに誤った入力を行なうとベルが鳴ることを利用した判定法であ

    る)。

    (2) vi の終了、ファイルのセーブ

    vi を終了するには、コマンドモードで

    ZZ

    と入力する。編集中のテキストが vi を立ち上げたときに指定したファイルに書き込まれ

    て終了する。あるいは、コマンドモードで

    :w ファイル名 ... 編集中のテキストを指定したファイルに書き込む

    (ファイル名を省略すると、vi 立ち上げ時に指定したファイル)

    :q ... viを終了する

    15

  • をこの順に実行する。ただし、ファイルの内容を少しでも変えた場合には、:w してからで

    ないと :q は受け付けられない。また、すでに存在しているファイルに上書きするには :w

    ではなく、

    :w! ファイル名

    とする。編集したファイルをセーブせずに終了するには

    :q!

    とする。

    (3) テキスト入力モードでの編集作業

    vi のコマンドの入力は

    繰り返し回数 コマンド

    の形が基本形である。繰り返し回数が1の場合には書かなくてよい。例えば、dd は現在カ

    ーソルがある行を削除するコマンドであるが、10dd によってカーソルのある行から10行が

    消去される。

    (viのコマンド表)

    h カーソルを左に1文字移動する(b キーのこともある)

    j カーソルを次の行に移動する(C-n でもよい)

    k カーソルを前行に移動する(C-p でもよい)

    l カーソルを1文字右に移動する(スペースキーでもよい)

    i カーソルの左側にテキストを挿入する

    a カーソルの右側にテキストを挿入する

    o 現在行(カーソルがある行)の下に新しい行を作る

    O 現在行の上に新しい行を作る

    x カーソルの置かれている1文字を削除する

    D カーソル位置から行末までを削除する

    dd 現在行を削除する

    r カーソル位置の1文字を置換する(rを入力してから新しい文字を入力する)

    u 直前のコマンドを取り消す

    16