[ プログラミング演習(Ruby) >  シェルの活用法 ]

シェルの活用法

Linuxではさまざまな作業を行うのに,主に シェルを利用します. じつはGNOME端末の画面内では「シェル」が動作していて,われわれはそれを利用しています.

ここではシェルでコマンドを実行する際に覚えておくと便利な機能を紹介します.

もくじ

  1. ヒストリ(履歴)機能
  2. コマンド行編集機能
  3. メタキャラクタによるファイル名の指定

ヒストリ(履歴)機能

tcshでは,今までに実行したコマンドを再度呼び出して,(必要なら編集してから)実行することができます. これまでに実行したコマンドの履歴をヒストリ(history)といいます. ヒストリを利用する方法はいろいろありますが,次のようなものが便利です.

^P ヒストリの1つ前のコマンドを呼び出す(↑,^Pのどちらでも可)
^N ヒストリの1つ後のコマンドを呼び出す(↓,^Nのどちらでも可)

[↑]を次々に入力すると,履歴を前に遡る順番で,これまでに実行したコマンドが表示されます. コマンドが表示されているときに[Enter]を入力することで,そのコマンドを実行できます. たとえば直前に実行したコマンドをもう一度実行するには, 次のように入力すればよいことになります.

[↑][Enter]

[↓]を入力すると, 履歴を逆に現在に向かって辿ります.

[↑]あるいは[↓]で呼び出したコマンドは,通常のように編集できます. その編集したコマンドを実行することもできます. なお,編集したコマンドを実行する際は,カーソルがどこにあっても,[Enter]を入力すればOKです. つまりわざわざ行末に移動してから[Enter]を入力する必要はありません.

コマンド行編集機能

コマンドを入力する際に,emacsに似た編集機能を使うことができます. それらの機能を使う際には,emacsと同様に[Ctrl]キーと他のキーを組み合わせて使います. ところで習慣としてシェルでは[Ctrl]を『^』で表します.例えば『^D』で[Ctrl]+[d]を意味します.

^F
^B
^A 行の先頭に移動
^E 行の末尾に移動
[Del] カーソルの直前の文字の削除
^K カーソルの位置から行末までを切り取り(kill)
^Y 貼り付け(yank)
^L 画面のクリア(消去)
[TAB] ファイル名などの補完
^D (空行でない)行末では,候補の表示
  (空行の)行頭では,EOFの発行
  それ以外では,カーソル位置の文字の削除

^DによるEOFの発行は通常,プログラムへの入力の終了などで使いますが, 使いはじめの頃は利用することはないでしょう.

メタキャラクタによるファイル名の指定

メタキャラクタと呼ばれる特別な文字を用いることで,ファイル名を簡単に指定 できます.メタキャラクタとして一番よく使われるのは『*』でしょう.『*』は 任意のパターンに適合します.

$ ls c*.html
cd.html    chmod.html    cp.html
$

lsディレクトリの内容を表示するコマンドです. ファイルを指定することもできます. ここで『*』は任意のパターンにマッチしますので,『c*.html』は, 『c』ではじまって『.html』で終わるファイル名を意味します. つまり,このコマンドは,カレントディレクトリにある『c』で始まって『.html』で終わるすべてのファイルをリストアップするという意味になります.

$ ls *.html
cd.html     cp.html     index.html  man.html    mv.html     rmdir.html
chmod.html  gcc.html    ls.html     mkdir.html  pwd.html    tcsh.html
$

この場合,『.html』で終わるすべてのファイルがリストアップされるといいたいところですが例外があります. 『*』から始まるパターンを書いた場合, 『.』から始まるファイル名(lsだけでは表示されなくて,「ls  -a」を指定してはじめて表示されるファイル)にはマッチしません. 『.』ではじまるファイル名は,『.*』のように指定します.

『*』と似たメタキャラクタに『?』があります.『?』は任意の1文字にマッチします. ただし『*』と同様に『?』から始まるパターンを書いた場合,『.』で始まるファイル名にはマッチしません. 次の例は任意の3文字につづいて『.html』で終わるファイル名を意味します (ただし最初が『.』であるファイルを除く).

$ ls ???.html
gcc.html man.html pwd.html
$

任意の文字ではなく,いくつかの文字を[  ]でくくって指定することもできます. 次の例は,『c』か『m』ではじまって,『.html』で終わるファイル名を意味します.

$ ls [cm]*.html
cd.html chmod.html cp.html man.html mkdir.html mv.html
$

[  ]では,文字の範囲を指定することも可能です.次の例は,『g』 ,『h』,...,『m』のいずれかではじまって,『.html』で終わるファイル名を意 味します.

$ ls [g-m]*.html
gcc.html index.html ls.html man.html mkdir.html mv.html
$

今までに取りあげたメタキャラクタをまとめると以下のようになります.

* 任意のパターンにマッチする.ただし先頭では『.』にはマッチしない
? 任意の1文字にマッチする.ただし先頭では『.』にはマッチしない
[  ] 文字集合の指定

メタキャラクタは大変便利ですが, 指定したパターンがどのファイルにマッチするのかよく考えて使う必要があります. 特にrmコマンドで使う場合には注意が必要です. どんなファイル名にマッチするのかよく分からない場合には, まずlsコマンドを使って,マッチの結果を確かめてみるとよいでしょう.

[ プログラミング演習(Ruby) >  シェルの活用法 ]