Linux講座にようこそ。このページは「Linuxの使い方 - 第5章 より高度なシェルの使い方」です。

Linuxの使い方

5. より高度なシェルの使い方(1/2)

ここでは「シェルの基本操作」で説明した内容をベースにして、シェルのより高度な使い方を説明します。なお、シェルスクリプトに付いては別途説明します。

5.1 コントロールキーの使い方

コントロールキー(Ctrlキー)と別のキーを同時に押すことにより、次のような操作が行えます。この表の+は同時に押すことを表しています。

【表5-1】 コントロールキー操作一覧
キー操作stty名機能
Ctrl + Cintrフォアグラウンドプロセスを強制終了します。
Ctrl + Deof入力を終了(End of file)します。(実行例はこちらをご覧ください)
Ctrl + \quitフォアグラウンドプロセスを強制終了します。Ctrl+Cよりも強力です。
Ctrl + Ukill入力中コマンドを削除します。
Ctrl + Zsuspフォアグラウンドプロセスを一時停止します。(実行例は5.6.2 実行例をご覧ください)

コマンドが永久ループしてしまって、プロンプトが返って来ない様な時はCtrl+Cで強制終了することが出来ます。これはよく使うと思いますので、憶えておくとよいでしょう。

コントロールキーの設定はディストリビューションによって、多少異なるかもしれませんので注意してください。キーの割当表示と変更はsttyコマンドで行います。

5.1.1 実行例

現在設定してあるキーの割当を全て表示します。(^はコントロールキーを表します。従って、^CCtrl+Cです)

$ stty -a
speed 38400 baud; rows 49; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
$

xclockをフォアグラウンドプロセスで実行して強制終了します。

$ xclock ← xclockをフォアグラウンドプロセスで実行します
^CCtrl+Cを入力します
$ 
$ xclock
^\Quit (コアダンプ)Ctrl+\を入力します
$ 

5.2 ヒストリ機能(コマンドライン編集)の使い方

キーボードから入力したコマンドは自動的にファイルに保存(標準は$HOME/.bash_history)されていますので、過去に実行したコマンドを呼び出して実行することが出来ます。このとき、入力したままの状態でも実行できますし、編集して実行することも出来ます。編集はEmacsとviの2つのモードがありますが、ここでは標準のEmacsモードの編集方法を説明します。ちなみに、保存してあるコマンドは引数無しのhistoryコマンドで表示できます。

5.2.1 操作方法

過去に実行したコマンドを呼び出すには次のキーを使用します。呼び出したコマンドをそのまま実行したいのであれば、Enterキーを押すだけです。

【表5-2】 コマンド呼び出し操作一覧
キー操作内容
↑キーまたは、Ctrl + P前のコマンドをコマンドラインに表示します。
↓キーまたは、Ctrl + N 後ろのコマンドをコマンドラインに表示します。

呼び出したコマンドを編集して実行する場合は、次のキーを使用します。コマンドラインの途中に文字列を追加したい場合は、→キーや←キーでカーソルを目的の位置に移動して、追加したい文字をキーボードから入力します。

【表5-3】 コマンド編集操作一覧
キー操作内容
←キーまたは、Ctrl + Bカーソルを左に1文字分移動します。
→キーまたは、Ctrl + Fカーソルを右に1文字分移動します。
BackSpaceカーソルの左の1文字を削除します。
Deleteまたは、Ctrl + Dカーソルの1文字を削除します。
Ctrl + Aカーソルを行頭に移動します。
Ctrl + Eカーソルを行末に移動します。
Ctrl + Kカーソルの位置から行末までを削除します。

さらに、文字の補完機能が有ります。これはコマンド名やファイル名の途中まで入力すると、残りの部分を補完してくれる機能です。この機能はTabキーを押すことにより使うことが出来ます。

$ ls
comment1.gif    moji.jpg      renge1.jpg    rengegenga.jpg
comment1.xcf    renge.xcf     renge1.xcf
$ ls -l m ← ここまで入力して、Tabキーを押すとmoji.jpgが補完されます
-rw-r--r--   1  merry   users    2308  4月 23 22:53 moji.jpg
$
$ ls -l c ← ここまで入力して、Tabキーを押すとcomment1.が補完されます
 ← さらに、Tabを2回押すと補完候補を表示します
comment1.gif     comment1.xcf ← 補完候補です
$ ls -l comment1. ← 再度コマンドラインを表示して来るのでgまたはxを入力してTabを押すと、コマンドラインが完成します
-rw-r--r--   1  merry   users   77740  4月 23 22:53 comment1.xcf

5.3 コマンドラインに名前をつけるエイリアス機能の使い方

コマンド名やオプションの引数は憶えにくいものがありますし、よく使うコマンドは簡単に使えるようにしたいということがあります。このようなときはエイリアス機能により、コマンドラインに自分の好みの名前をつけて、登録しておくことが出来ます。エイリアス機能を使うにはaliasコマンドで登録と表示を、unaliasコマンドで取り消しを行います。

aliasコマンドで登録したものはログアウト時に自動的に取り消されてしまいます。登録したものを常に使いたい場合は、後程説明するユーザプロファイルでaliasコマンドを自動実行するように設定します。なお、ディストリビューションにより異なると思いますが、システムによりaliasコマンドで設定されているコマンドが幾つかあります。

5.3.1 一般形式

aliasコマンドとunaliasコマンドの形式は次の通りです。

$ alias 名前='コマンドライン'
$ unalias -a 名前 …

aliasコマンドのオプションには次のものがあります。なお、引数を指定しなかった(コマンド・オプション無し)場合は、現在登録されている内容を全て表示します。

【表5-4】 aliasコマンド・オプション
オプション意味
名前名前だけを指定した場合は、その名前の登録内容のみを表示します。コマンドラインを指定した場合は、コマンドラインを登録します。この場合、=の前後に空白を入れてはいけませんし、コマンドラインは'(アポストロフィ)または、"(引用符)で括ります。

unaliasコマンドのオプションには次のものがあります。-aオプションを指定すると全て取り消されてしまいますので注意してください。

【表5-5】 unaliasコマンド・オプション
オプション意味
-a現在登録されている内容を全て取り消します。
名前名前に対する登録内容を取り消します。複数指定することができます。

5.3.2 実行例

設定済みのコマンドを表示します。(システムにより設定済みのもの)

$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
$
$ ll ← llコマンドを実行します
-rw-r--r--    1  merry    users    4084  4月 20 22:05  comment1.gif
-rw-r--r--    1  merry    users    7740  2月 20 23:50  comment1.xcf
-rw-r--r--    1  merry    users    2308  4月 18 23:11  moji.jpg
$

'cd; pwd'の連続実行をmyhomeコマンドとして登録します。

$ alias myhome='cd ; pwd'
$ myhome ← myhomeコマンドを実行します
/home/merry ← ホームディレクトリを表示しました
$

登録したものを取り消します。

$ alias myhome ← myhomeコマンドの登録内容を表示します
alias myhome='cd; pwd'
$
$ unalias myhome ← myhomeだけを取り消します
$ alias myhome ← 取り消しを確認します
bash: alias: myhome: not found
$

5.4 コマンド置換機能の使い方

コマンド置換とはコマンドの実行結果をコマンドの引数に置き換えることです。これを使うと、コマンドの引数を動的に変えることが出来ます。

5.4.1 一般形式

コマンド置換は次の形式でコマンドを指定します。コマンドリストには単体のコマンドはもちろん、連続実行やパイプラインも指定できます。

$(コマンドリスト)

5.4.2 実行例

ex60.confファイルに記述されているディレクトリパスのディレクトリが存在しているか否かを確認します。

$ cat ex60.conf ← ex60.confファイルの内容を表示します
/home/merry/TMP/WORK
/home/merry/TMP/DUMMY
/home/merry/TMP/EUC
/home/ken/TMP/PHOTO
$
$ ls -ld $(cat ex60.conf) ← catコマンドでex60.confの内容を標準出力に出力して、それをlsコマンドの引数に置き換えます
ls: /home/merry/TMP/DUMMY にアクセスできません: そのようなファイルやディレクトリはありません
ls: /home/ken/TMP/PHOTO にアクセスできません: そのようなファイルやディレクトリはありません
drwxr-xr-x 2 merry merry 4096 10月 26 09:30 /home/merry/TMP/EUC
drwxr-xr-x 7 merry merry 4096 11月 10 08:51 /home/merry/TMP/WORK
$

ユーザー登録簿(/etc/passwd)に記述されているホームディレクトリのパス名により、ユーザー名「merry」のホームディレクトリの詳細情報を表示します。

$ grep "^merry" /etc/passwd ← 行の先頭がmerryの行を検索します
merry:x:1000:1000:Merry:/home/merry:/bin/bash
$ grep "^merry" /etc/passwd | cut -f 6 -d : ← 検索結果の6フィールド目(ホームディレクトリ)を表示します
/home/merry
$ ls -ld /home/merry ← merryユーザーのホームディレクトリの詳細情報を表示します
drwxr-xr-x 40 merry merry 4096 2010-09-15 08:58 /home/merry
$
$ ls -ld $(grep "^merry" /etc/passwd | cut -f 6 -d :) ← コマンド置換機能を使います
drwxr-xr-x 40 merry merry 4096 2010-09-15 08:58 /home/merry
$