Linux において一際大きな役割を果たすアプリケーションである「テキストエディタ」について学びます. Windows のメモ帳に近いイメージですが, Linux では Windows よりも多くの場面でテキスト ファイルを扱う必要が出てくるため, テキストエディタはより重要なアプリケーションと言えます. 本節では, テキストファイルの編集を必要とする場面をいくつか例示した上で, 伝統的なテキストエディタ「vi」の操作を学びます.
Windows では, ほとんどのファイルが拡張子に応じた専用のアプリケーションでファイルを 扱うように設計されており, なおかつ各アプリケーションの設定ファイルなどはアプリケーション内で 操作する仕様になっている場合が多いため, テキストエディタは単なる「文書作成ソフトウェア」に 過ぎないというイメージがあります. しかし Linux においては, 各種の設定ファイルやソースファイルもテキストファイルとして 扱われているため, 文書作成以上に「管理/メンテナンス用ソフトウェア」としてテキストエディタを 用いる場面が多々あります. そんなテキストファイルの具体例を見てみましょう.
ブートローダーである grub の設定ファイルを覗いてみましょう. grub とは、計算機を起動したときに OS を選ぶためのソフトウェアです.
$ lv /etc/grub.d/00_header . . . transform="s,x,x," prefix=/usr exec_prefix=${prefix} libdir=${exec_prefix}/lib locale_dir=`echo ${GRUB_PREFIX}/locale | sed ${transform}` grub_lang=`echo $LANG | cut -d _ -f 1` . ${libdir}/grub/grub-mkconfig_lib # Do this as early as possible, since other commands might depend on it. # (e.g. the `loadfont' command might need lvm or raid modules) for i in ${GRUB_PRELOAD_MODULES} ; do echo "insmod $i" done if [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi if [ "x${GRUB_DEFAULT}" = "xsaved" ] ; then GRUB_DEFAULT='${saved_entry}' ; fi if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=640x480 ; fi if [ "x${GRUB_DEFAULT_BUTTON}" = "x" ] ; then GRUB_DEFAULT_BUTTON="$GRUB_DEFAULT" ; fi if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_entry}' ; fi if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi . . . |
パッと見ただけでは何が何だか分からず「読めない」ファイルのようにも思えますが、 読み方さえ学べば書いてある内容を理解できるようになれます。 真の「読めない」ファイル(バイナリファイル)とは、画像ファイルの jpg をはじめとする 「テキストエディタ」で開けない(開いても文字化けしたわけのわからない内容)ファイルを 指しています。
以上のように各アプリケーション等の設定ファイルはテキストファイルとして 作られており、これを書き変えることで任意の設定のもとでアプリケーションが動作します. よって、これらのテキストファイルを編集するためのアプリケーションは 計算機(アプリケーション)を利用する上で必須であるといえます.
テキストファイルを実際に操作するのに用いるのがテキストエディタです. 種類は色々ありますが, 本実習ではそのひとつである vi について取り上げます.
vi (VIsual extended editor) は多くのUNIX系OSの標準エディタです. つまり大抵の UNIX マシンではじめから vi は用意されています. システムアカウントの変更を vi を元としたツール, vipw や vigr 等でおこなうのは, 確実に使えるエディタが vi であるためです. 「もしも」のトラブル時に利用できる可能性がもっとも高いエディタは vi であり, 特に管理者となる人は必ず習得すべきツールといえます.
一方で vi の操作体系は, 直感的ではありません. そのため UNIX でファイルを編集するためのツールが, 他に数多く用意されています. vi の独特な操作方法を嫌う初心者ユーザーも少なくありません.
vi の特長は次の通りです.
vi の根本思想は「ひたすら速く」です. vi には親切なメニュー画面はありません. しかし, それは vi がユーザーインターフェイスを軽視しているという意味ではありません. 実際, vi ほどインターフェイスに神経を使っているエディターは他にないでしょう. 最少の労力で最大の成果をもたらすよう計算し尽くされています. そのことは vi を使い込むほど実感できるはずです.
ここでは, そんな vi の使用法を学習していきましょう.
vi はどんなテキストファイルを編集したいときにも使えます.
他のエディタ同様, 編集するファイルをバッファ(メモリ内の一時的な領域)
にコピーし, そのバッファの内容を編集することになります.
ファイルに変更を反映させるには
バッファの編集内容をファイルにセーブしなくてはなりません.
※以下, 本ドキュメントでは特別な場合を除き
このバッファへの編集作業を"ファイルの編集"と記述しています.
vi を使うには, 次のように入力します.
$ vi [ファイル名]
引数のファイル名は既に存在するファイル名, あるいはこれから作りたい新規のファイル名を入力します. ファイル名を省略した場合, バッファのみが準備され, 保存時にそのファイル名を決定することになります.
ファイルの編集内容を保存し作業を終了するには, コマンドモード (次節を参照) であることを確認し(ESC キーを押せばよい), 以下の文字を入力します.
:wq
ファイルの編集作業を保存したり, 終了してコマンドプロンプトに戻るには 幾つかの方法があります.
:q
| vi を終了する |
:q!
| バッファでの編集内容を放棄し vi を強制的に終了する |
:w |
バッファの内容をファイルに保存 |
:w (ファイル名) |
バッファの内容を指定したファイル名で保存 |
:w! |
バッファの内容を強制的にファイルに保存 |
:wq |
バッファの内容をファイルに保存し, vi を終了する. |
ZZ |
バッファの内容をファイルに保存し, vi を終了する. |
vi の起動, 終了を覚えたので, 最低限のファイル編集の方法を見ていくことにします.
vi では, キーボードのキーは2つの役割をはたします. 例えば「a」というキーは, 「a」という文字をテキスト画面に表示するために 押されますが, 別の場合には, もっと違った意味を持つ命令(コマンド)と解釈されます.
キーがどちらの働きをするかは, vi の「モード」(状態)が決定します. これらの vi の「モード」は, 「挿入モード」と「コマンドモード」と呼ばれます. vi を使う時に最も大切なことは, この2つのモードをきちんと区別することです.
vi を起動させた直後は「コマンドモード」になっています. 「コマンドモード」では vi の終了, 編集中のファイルの更新, 文字の削除, 検索と置換, 行番号の表示設定や, 他のプログラムの実行などを行うことができます.
文字を入力する場合は「挿入モード」へ切り替えなければなりません.
「挿入モード」へ切り替えるには, a, A, i, I, o, O
のいずれかを押します(それぞれ切り替わった後の動作が異なります).
「挿入モード」では, 純粋に文字を入力します. それ以外の動作を行うためには
ESC キー(エスケープ・キー)を押して,
「コマンドモード」へ切り替えなければなりません.
(※1.2 で覚えたviの終了やファイルの保存は「コマンドモード」での操作でしたね.)
vi で初心者ユーザーが陥る混乱の原因は, この状態遷移を把握しきれてないことが殆どです. 「わけわかんなくなったら ESC キー!」 と覚えておきましょう. vi の状態が「コマンドモード」であることが保証されます.
それでは実際に vi を使ってみましょう. 以下の [練習1], [練習2] を やってみてください. ここで必要となるコマンドモード, 挿入モードのコマンドは vi の基礎 - コマンドモード, vi の基礎 - 挿入モード を参照してください.
適当な文章を書き込んだファイルを vi をつかって実際に作り, rensyu.txt というファイル名で保存してみましょう.
$ vi rensyu.txt i : : |
<-- rensyu.txt という名前の新規ファイルを viで開く <-- 挿入モードへ移る(現在いるカーソルの左側に挿入) <-- 編集 |
以下のコマンドで書き込んだ内容が表示されましたか? 表示されれば OK です.
$ cat rensyu.txt
先ほど編集したファイルを vi で開いて, 文字の削除, 行の挿入・削除などを行い, 別名(rensyu2.txt)で保存してみましょう. 一文字削除や一行削除は コマンドモードからできます。(以下はその例)
$ vi rensyu.txt : : |
<-- [練習1] で作成した rensyu.txt を viで開く <-- 適宜, 操作・編集してみましょう |
以下のコマンドで変更した内容が表示されましたか? 表示されれば OK です.
$ cat rensyu2.txt
どうですか? うまく作成できましたか?
初歩的な vi の使い方はなんとなく理解できたでしょうか? 実際にはもっといろいろな使い方があるのですが 一度に覚える必要はありません. 実際にファイルの編集をしながら, "かゆい"ところがあったら その都度新しい命令, 機能を調べてゆけば良いです. 最低限, ファイルのオープンクローズ, 挿入モードとコマンドモード間の移り方("a,i,o"コマンドと ESC キー), 1文字削除("x"), コマンドモードでのカーソルの動かし方が わかっていれば, なんとかなります. もう少し高度な使い方をしたい人は A参考 [vi の応用] を参照してみてください.
では, 次はエディタを用いてシェルスクリプトを作成してみましょう.
「コマンドモード」で実行する基本的なコマンドは次の通りです.
h
j
k
l
a
A
i
I
o
O
x
dd
u
/文字
?文字
n
N
:r ファイル名
「挿入モード」で実行する基本的なコマンドは次の通りです.
ESC キー
DEL キー
上で紹介したのは, vi を使用する上での基本的な事項だけです. 以下の内容は授業では説明しませんが, より便利に vi を使う参考として時間と興味のある方は御一読を.
※以下は断りのない限り「コマンドモード」で使用するコマンドです.
※いきなりですが, これは「コマンドモード」とは関係ありません.
$ vi +18
[ファイル名] |
ファイルをオープンし, 行18に位置づける |
$ vi +/"mustard greens"
[ファイル名] |
ファイルをオープンし, 最初の"mustard greens"にカーソルを移動 |
$ vi -r
[ファイル名] |
クラッシュしたファイルを回復し読み込む |
$ view [ファイル名]
|
読むだけのためにファイルを読み込む |
w
W
b
B
Enter キー
Backspace キー
スペース キー
H
M
L
Ctrl-F
Ctrl-D
Ctrl-B
Ctrl-U
G
21G
D
:5,10 d
yy |
行の取り込みまたはコピー |
Y |
行の取り込みまたはコピー |
dd |
行の削除 |
P |
取り込みまたは削除された行を現在行の上に挿入 |
p |
取り込みまたは削除された行を現在行の下に挿入 |
:1,2 co 3 |
行1から行2までを行3の下へコピー |
:4,5 m 6 |
行4から行5までを行6の下へ移動 |
:set nu |
行番号の表示 |
:set nonu |
行番号の非表示 |
:set ruler |
ルーラーの表示 |
:set noruler |
ルーラーの非表示 |
:set showmode |
入力モードの表示 |
:set noshowmode |
入力モードの非表示 |
Ctrl-G |
ファイル名, 行数, 位置の表示 |
Ctrl-L |
画面の再描画 |
vi 以外にもテキストエディタは数多く存在します. たとえば, vi と並ぶ代表的なエディタとして emacs があります. emacs は vi とは対照的に, 動作が多少重いながらも使いやすく なおかつ多機能であることを特徴としています. ちなみに vi 信者と emacs 信者の対立は計算機関係者の間では 有名であり, いずれも自らが最高のエディタであると主張して 譲りません. 興味を持った方は「エディタ戦争」について調べてみるとよいでしょう. (ただしもちろん実習後に!)
実習では最低限知っておくべきエディタとして vi を取り上げましたが, 好みに応じて他のエディタを使ってもけっこうです.
最終更新日: 2012/04/19(高橋康人) 全面改稿 |