[目次] [前回] [次回] [重要語索引]

第4週: ファイルとコマンド(2)

4. 1 リージョン
4. 2 補完
4. 3 検索と置換
4. 4 練習問題
4. 5 ファイルの保護
4. 6 練習問題
4. 7 プリンタに関するコマンド
4. 8 その他のコマンド
4. 9 宿題
4.10 おまけ

注意: emacs の標準的な表記に従い,SpaceキーSPCReturnキーRETBackSpaceキーまたは DeleteキーDEL と書くことにします.

4.1 リージョン

153ページ

emacs でファイルを編集している時,ある文字から別の文字までの連続したひとかたまりを,リージョン(region)と呼び,その部分に対していろいろな処理が行なえます.

リージョンの指定には2通りの方法があります.

リージョンを使用する機能には次のようなものがあります.

M-x を押すと,カーソルがミニバッファに移動し,そこで emacs の機能の名前を入力することができます.すべての機能には名前がついていて,M-x を使って実行することができます.たとえば,ひらがな文字列をかな漢字変換するには,C-x SPC の代わりに M-x henkan-region RET としてもできます.

4.2 補完

emacs やシェルには,ファイル名などを入力するとき,最初の何文字かを入れると,それに当てはまる名前を探してくれる機能があります.これを補完(completion)と呼びます.

emacs での補完

ミニバッファでファイル名や機能名を入力している途中で次のキーを押すと,補完が起きます.

例えば, /pub/sfc/ipl/1a/exercise/islands/island_b/port_b/treasure を 編集したいとします.

  1. [Files]→[Open File...] C-x C-f で,ファイル名を指定する状態にします.
  2. /pub/sfc/ipl/1a/ex SPC と入力します.すると,補完が起きて,次のようになります.
    Find file: /pub/sfc/ipl/1a/exercise/
    
  3. 続いて i SPC と押します.すると,次のようになります.
    Find file: /pub/sfc/ipl/1a/exercise/islands/
    
  4. 再び i SPC と押します.すると,次のようになります.
    Find file: /pub/sfc/ipl/1a/exercise/islands/island-
    
    このディレクトリには island-aisland-bisland-c があるので,一意的に決まる部分だけが補完されます.
  5. もう一度 SPC を押します.すると,新しいバッファに island- で始まるファイル名の一覧が表示されます.
  6. b を入力するか,あるいは一覧の中の island-b のところをマウスの中ボタンでクリックします.
  7. 同様にして先に進みます.

シェルでの補完

コマンド名やファイル名を入力している途中で次のキーを押すと,補完が起きます.

4.3 検索と置換

emacs での単純な検索

注意: ミニバッファで文字列を入力する時は英字入力モードになっているので, C-\ で日本語入力モードにします.

注意: 文字列の途中で改行されていると,見つけることができません.これはこの後に出てくる他の検索・置換方法でも同じです.

emacs でのインクリメンタルサーチ

156ページ

C-sC-r を押すと,インクリメンタルサーチ(incremental search)モードになります.単純な検索では文字列を指定してから検索が始まるので,文字列がたくさんあり過ぎたり,一つも無かったりした時は最初からやり直さなくてはいけません.インクリメンタルサーチは一文字入れるごとに検索を行った結果 を表示するので,結果を見ながら検索文字列を修正することができます.

注意: 日本語の場合はかな漢字変換があるので,一文字ごとではなく変換が確定するごとに検索を行います.

emacs での文字列を含む行の抽出

emacs での置換

157ページ

[Search]→[Query Replace...] M-%クエリーリプレース(query replace)モードになります.検索する文字列と置き換える文字列をミニバッファで入力すると,検索文字列が見つかるたびに,それを置き換えるか聞いてきます.

grep による複数ファイルからの抽出

emacs では,検索は一つのバッファの中で行われます.複数のファイルから文字列を探すには,grep コマンドを使います. 引数は探したい文字列と,探す対象のファイル名です.例えば,hamlet というファイルの中で happy という文字列を探すには,端末ウィンドウで

% grep happy hamlet
   Guild. Happy, in that we are not ouer-happy: on Fortunes
That your good Beauties be the happy cause
%

とします.ファイル名のところは,空白で区切って複数のファイル名を書くことができます.複数のファイル名を指定した場合は,結果 の各行の先頭に,どのファイルで見つかったかが表示されます.

注意: 記号は特別な意味を持ちますので,今のところは検索文字列に含めないで下さい.

注意: 日本語文字列を検索するには,ファイルと端末入出力の文字コードを EUC にする必要があります.

端末ウィンドウで grep を実行すると,見つかった行が表示されるだけなので,その部分を編集したい時は不便です.続けて編集したい時は,grep の結果を emacs に取り込みます.

  1. emacs で [Tools]→[Search Files ...] M-x grep RET とします.
  2. ミニバッファに
    Run grep (like this): grep -n
    と表示されるので,続けて引数を入力し,RET を押します.なお,-n は行番号を表示するオプションです.
  3. grep の結果が新しいバッファに表示されます.
  4. M-x occur の時と同様に,見つかった行でマウスの中ボタンをクリック,または C-c C-c とすることで,その行の位置にカーソルが移動します.

4.4 練習問題

  1. emacs で /pub/sfc/ipl/1a/exercise/etext/romeo-and-juliet を表示し(ファイル名はうまく補完を使っていれましょう),インクリメンタルサーチモードで juriet を検索しなさい.次に DEL で修正して正しく juliet と検索してみましょう.
  2. emacs で /pub/sfc/ipl/1a/exercise/etext/hana.txt を表示し,その中に「鼻」を含む行が何行あるか調べなさい.3個目に出てくる行の次の行を見たい時はどうすればいいでしょうか.
  3. 端末ウィンドウでカレントディレクトリを /pub/sfc/ipl/1a/exercise/etext にし(3.10 ファイルとディレクトリを扱うコマンド),grep コマンドで sad という単語を hamletromeo-and-juliet の中から探しなさい.sad という単語を含まない行も表示されるのはなぜでしょうか.
  4. 端末ウィンドウで /pub/sfc/ipl/1a/exercise/replace/f.crypt というファイルを自分のホームディレクトリにコピーしなさい(3.10 ファイルとディレクトリを扱うコマンド).これを emacs で表示すると暗号化した文章になっていますので,次のようにして解読しなさい.
  5. /pub/sfc/ipl/1a/exercise/replace/g.crypt も暗号化された文章です.次のようにして解読しなさい.

    「L」を「R」に,「R」を「L」に置き換えるのですが,最初に単純に「L」を「R」に置き換えてしまうと,元からあった 「R」と区別がつかないので,次に「R」を「L」に置き換えるときに困ります.

4.5 ファイルの保護

91ページ

CNS には,学部生,大学院生,卒業生,教職員など6,000人以上のユーザがいます.共同作業ではお互いのファイルが参照できると便利なのですが,もし全く自由に他人のファイルの内容を見たり,変更できたりすると,いろいろな問題が起きる可能性があります.そこで,ファイルやディレクトリごとに,他のユーザからのアクセスを許可したり,禁止したりする機能があります.

アクセス権(access right)とは「誰が」,「何を」,「どうする」という組み合わせに対して, 許可か禁止かを決めたものです.「誰が」は,次の3通りがあります.

グループは CNS の管理者によって決められていて,勝手に変更できません. 学生はすべて同じグループのメンバになっています.「どうする」にも3通りがあります. 実行とは,通常ファイルの場合はコマンドとして使う,ディレクトリの場合は cd コマンドでそこへ移動する,ということです. 「誰が」と「どうする」の組合わせは3×3=9通りあります.「何を」に相当するファイルとディレクトリごとに,この9通 りのそれぞれを許可するか,禁止するかが決まっています.現在のアクセス権の状態を調べるには,ls コマンドに -l オプションを付けます.
% ls -l
total 10615
drwx------   4 hattori       512 Apr 15 17:50 Mail
drwxrwxrwx   4 hattori       512 May  6 16:01 Wnn
-rw-r--r--   1 hattori        76 Apr 19 15:10 test
%
ファイルに関するいろいろな情報が表示されますが,一番左側にあるのが,種別とアクセス権です.最初の文字は種別 で,普通のファイルは「-」,ディレ クトリは「d」です.次の9文字は3文字ずつ組になっていて,それぞれ u, g, o の r, w, x が許可されているかを示します.「r」,「w」,「x」は許可, 「-」は禁止を示します.

標準設定では,新しく作ったファイルは rw-r--r--,ディレクトリは rwxr-xr-x になりますので,他のユーザは変更はできませんが,内容を見ることはできます.Mail (メールを保存するディレクトリ)は,プライバシーの問題がありますので,rwx------ になっています.

アクセス権は chmod コマンドで変更することが できます.
% ls -l
total 10615
drwx------   4 hattori       512 Apr 15 17:50 open-minded
-rw-r--r--   1 hattori       512 May  6 16:01 secret
-rw-r--r--   1 hattori        76 Apr 19 15:10 shared
% chmod go+rwx open-minded
% chmod go-r secret
% chmod g+w shared
% ls -l
total 10615
drwxrwxrwx   4 hattori       512 Apr 15 17:50 open-minded
-rw-------   1 hattori       512 May  6 16:01 secret
-rw-rw-r--   1 hattori        76 Apr 19 15:10 shared

注意: ホームディ レクトリそのものを他人から読めないようにすると,設定ファイルが読めなく て動かなくなるソフトがあります.

4.6 練習問題

隣の人と組になり,次のことを調べてみなさい.
  1. 隣の人の rw------- のテキストファイルの内容を more コマンドで見てみなさい.
  2. 隣の人の rw-r--r-- のテキストファイルの内容を emacs で編集してみなさい.
  3. 隣の人の rwx------ のディレクトリの内容を ls コマンドで表示してみなさい.

4.7 プリンタに関するコマンド

335ページ

SFC にはプリンタがたくさんあり,それぞれに名前がついています.プリンタ に貼ってある「nps1」とか,「nps2」というのが名前です.印刷するときには, どのプリンタで印刷するかを指定しなければなりません.もし,名前を間違えると,遠く離れた部屋のプリンタで印刷されてしまいますので,気を付けてください.以下の例では「nps15」を指定していますが,これを近くのプリンタの名前に置き換えて実行してください.

プリンタが印刷するデータ形式には何種類かありますが,CNS のプリンタは, すべてポストスクリプト(PostScript)形式のデータを印刷するようになっています.ですから,テキストファイルを印刷するときは,テキストをポストスクリプトに変換しなければなりません.

4.8 その他のコマンド

4.9 宿題

  1. finger で自分の姓を指定し,SFC に同じ読み方の姓を持つ人が何人いるか調べなさい.名前についても同じようにしなさい. (一画面に収まらないときは,パイプを使って finger Hanako | more としなさい.)
  2. man を使って,ls コマンドのオプションが何種類あるか調べなさい.

4.10 おまけ

文字列を検索する時に,特定の文字列ではなく「s または t で始まって,その後に5個の数字と2個のアルファベットがあるもの」といったパターンを指定することができます.このようなパターンは,正規表現(regular expression)という書き方で指定します. emacs では,メニューの regexp を含む項目は正規表現を受け付けます.

正規表現の説明はインフォの中にあります.日本語訳はこちらを見て下さい.


[目次] [前回] [次回] [重要語索引]

慶應義塾大学の授業以外での無断利用、複製はご遠慮下さい。
Copyright (c) 2000 慶應義塾大学