【Linux】bashのTab補完(complete)
Linux環境の操作で日頃気をつけていることをまとめておこうと思います。今日はTab補完。
Tab補完術
ディレクトリや、PATHの通っているファイル、コマンドは、途中まで入力し、[Tab]キーを押すことで該当する文字列が自動入力されます。これはbashの機能です。
例:
# cat /var/log/mess[Tab]
↓
# cat /var/log/messages ← ”ages”まで自動入力される。
深い階層のディレクトリに移動する場合など、Tab補完でパスを入力することで高速に移動することができます。障害調査においては、様々なログファイル名などを入力することになりますが、コピー&ペーストで長いパスを貼り付けるよりもある程度のディレクトリ構成を暗記した上でTab補完で入力した方が早いです。
選択肢がひとつしかない場合にのみ、上記のような動きとなります。複数の選択肢がある場合にも、[Tab]を2回入力すると候補が表示されます。
例:
# ls /work/kana/
test_1.log test2.log test.sh
※上記のように”test“という文字列から始まるファイルが3つあるとします。途中まで入力しTabを押してみます。
#ls /work/kana/test[Tab][Tab]
test_1.log test2.log test.sh
#ls /work/kana/test
このように、候補だけ出力し、元の入力したプロンプトが再表示される、という仕組みになっています。そのディレクトリ配下に存在するファイルを候補を絞って表示できるため、そのディレクトリにまでわざわざ移動してlsなどで確認するよりも、断然早く確認することができます。
PATHが通っているコマンドを簡易的に確認する際にも便利です。mkから始まるコマンドを一覧で表示したいなら、以下のように実行します。
$ mk[Tab][Tab]
mkdict mke2fs mkfs.cramfs mkfs.ext4 mkinitrd mksock
mkdir mkfifo mkfs.ext2 mkfs.ext4dev mklost+found mkswap
mkdumprd mkfs mkfs.ext3 mkhomedir_helper mknod mktemp
$ mk
このようにあまり使わないコマンドも含めてざっと表示してくれます。「あれ、あのコマンドなんだっけ、たしかmkから始まるんだけど・・・」みたいな忘れん坊さんはこれを覚えておくと便利かもしれません。(#私だ)
表示する候補が多い場合は、以下のように表示され、いったん止まってくれます。うっかり1万ファイルとか置いてあるディレクトリで打ってしまった場合は、「n」を入力し表示を取りやめることができます。(このメッセージの出力すら時間がかかる場合もあります)
$ ls /u01/pdb001/audit/log/[Tab][Tab]
Display all 125 possibilities?(y or n)
それでも表示したいという場合は「y」を入力します。
TeraTermでの操作は、作業ログを保存することが原則ですが、Tab補完した場合は、表示された通りにログに出力されません。(#今もそうだよね?)そのため、なんでもかんでもTab補完でコマンドを実行していると、調査用のログやテスト結果などが見にくくなるので、本番作業などでは利用シーンをよく見極めましょう。
一時的な参照系のコマンドなどではばんばん使って良いものと思われます。(lsとか。)
ここまではよくある使い方ですが、もう一つ、入力したコマンドの確認のために使うこともできます。
例えば、以下のような複雑なコマンドを打つ際に、最後に[Tab]を押すと、プロンプトの行末に自動的にスペースが入ります。ディレクトリの場合は、「/」が入ります。
例:ファイル・コマンドの場合
# /usr/openv/netbackup/bin/bperror[Tab]
↓
# /usr/openv/netbackup/bin/bperror ←スペースが最後に入る。
例:ディレクトリの場合
# /usr/openv/netbackup/bin/admincmd[Tab]
↓
# /usr/openv/netbackup/bin/admincmd/ ←「/」が最後に入る。
これによって、パスが正しいかどうか、ファイルやコマンドが存在しているかどうかを簡易的に確認することができます。テキストメモなどで準備していた長いコマンドなどを、初めて打つ時などに使えます。TeraTermにコピー&ペーストした後に、[Tab]を一発打ってスペースが入ることを確認して、正しいことを簡易的に確認して安心して実行する、なんていうことを私はよくやります。
このTab補完は、実はbashに組み込まれている(ビルトイン)コマンドのひとつ、completeコマンドによって規則が設定されています。デフォルトの候補で問題ないかとは思いますが、completeコマンドで設定変更して柔軟に変換を出したいといったカスタマイズをすることも可能のようです。
デフォルト以外の使われ方は見たことがありませんが、例えば上述の補完候補の後ろに表示されるスペースを表示しない、といったことも指定可能のようです。
創作意欲の支えになります!