Linux講座にようこそ。このページは「Linuxの使い方 - 第5章 より高度なシェルの使い方」です。
ここでは「シェルの基本操作」で説明した内容をベースにして、シェルのより高度な使い方を説明します。なお、シェルスクリプトに付いては別途説明します。
コントロールキー(Ctrlキー)と別のキーを同時に押すことにより、次のような操作が行えます。この表の+
は同時に押すことを表しています。
キー操作 | stty名 | 機能 |
---|---|---|
Ctrl + C | intr | フォアグラウンドプロセスを強制終了します。 |
Ctrl + D | eof | 入力を終了(End of file)します。(実行例はこちらをご覧ください) |
Ctrl + \ | quit | フォアグラウンドプロセスを強制終了します。Ctrl+C よりも強力です。 |
Ctrl + U | kill | 入力中コマンドを削除します。 |
Ctrl + Z | susp | フォアグラウンドプロセスを一時停止します。(実行例は5.6.2 実行例をご覧ください) |
コマンドが永久ループしてしまって、プロンプトが返って来ない様な時はCtrl+C
で強制終了することが出来ます。これはよく使うと思いますので、憶えておくとよいでしょう。
コントロールキーの設定はディストリビューションによって、多少異なるかもしれませんので注意してください。キーの割当表示と変更はsttyコマンドで行います。
現在設定してあるキーの割当を全て表示します。(^はコントロールキーを表します。従って、^C
はCtrl+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をフォアグラウンドプロセスで実行します ^C ←Ctrl+C
を入力します $ $ xclock ^\Quit (コアダンプ) ←Ctrl+\
を入力します $
キーボードから入力したコマンドは自動的にファイルに保存(標準は$HOME/.bash_history)されていますので、過去に実行したコマンドを呼び出して実行することが出来ます。このとき、入力したままの状態でも実行できますし、編集して実行することも出来ます。編集はEmacsとviの2つのモードがありますが、ここでは標準のEmacsモードの編集方法を説明します。ちなみに、保存してあるコマンドは引数無しのhistoryコマンドで表示できます。
過去に実行したコマンドを呼び出すには次のキーを使用します。呼び出したコマンドをそのまま実行したいのであれば、Enterキーを押すだけです。
キー操作 | 内容 |
---|---|
↑キーまたは、Ctrl + P | 前のコマンドをコマンドラインに表示します。 |
↓キーまたは、Ctrl + N | 後ろのコマンドをコマンドラインに表示します。 |
呼び出したコマンドを編集して実行する場合は、次のキーを使用します。コマンドラインの途中に文字列を追加したい場合は、→キーや←キーでカーソルを目的の位置に移動して、追加したい文字をキーボードから入力します。
キー操作 | 内容 |
---|---|
←キーまたは、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
コマンド名やオプションの引数は憶えにくいものがありますし、よく使うコマンドは簡単に使えるようにしたいということがあります。このようなときはエイリアス機能により、コマンドラインに自分の好みの名前をつけて、登録しておくことが出来ます。エイリアス機能を使うにはaliasコマンドで登録と表示を、unaliasコマンドで取り消しを行います。
aliasコマンドで登録したものはログアウト時に自動的に取り消されてしまいます。登録したものを常に使いたい場合は、後程説明するユーザプロファイルでaliasコマンドを自動実行するように設定します。なお、ディストリビューションにより異なると思いますが、システムによりaliasコマンドで設定されているコマンドが幾つかあります。
aliasコマンドとunaliasコマンドの形式は次の通りです。
aliasコマンドのオプションには次のものがあります。なお、引数を指定しなかった(コマンド・オプション無し)場合は、現在登録されている内容を全て表示します。
オプション | 意味 |
---|---|
名前 | 名前だけを指定した場合は、その名前の登録内容のみを表示します。コマンドラインを指定した場合は、コマンドラインを登録します。この場合、= の前後に空白を入れてはいけませんし、コマンドラインは' (アポストロフィ)または、" (引用符)で括ります。 |
unaliasコマンドのオプションには次のものがあります。-aオプションを指定すると全て取り消されてしまいますので注意してください。
オプション | 意味 |
---|---|
-a | 現在登録されている内容を全て取り消します。 |
名前 | 名前に対する登録内容を取り消します。複数指定することができます。 |
設定済みのコマンドを表示します。(システムにより設定済みのもの)
$ 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 $
コマンド置換とはコマンドの実行結果をコマンドの引数に置き換えることです。これを使うと、コマンドの引数を動的に変えることが出来ます。
コマンド置換は次の形式でコマンドを指定します。コマンドリストには単体のコマンドはもちろん、連続実行やパイプラインも指定できます。
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 $